HTML est un arbre de nœuds, avant tout. Ce n'est pas juste un texte. Cependant, la plupart des moteurs de gabarit gèrent leur entrée et leur sortie car il ne s'agissait que d'un texte; ils se fichent de ce qui se passe autour de leurs tags, leurs {$foo}
et <% bar() %>
; aussi ils ne se soucient pas de ce qu'ils produisent. Parfois, ils produisent un code html correct, mais c'est juste une coïncidence; ils ne visaient pas cela, tout ce qu'ils voulaient, c'était de remplacer certaines marques amusantes dans le flux de texte par leur évaluation.Quels langages de modèle génèrent du HTML * comme arbre de nœuds *?
Il existe quelques moteurs de modèle qui traitent leur sortie comme un ensemble de nœuds; XSLT et Haml viennent à l'esprit. Pour certaines tâches, cela présente des avantages: par exemple, vous pouvez automatiquement reformater (comme, supprimer tous les nœuds de texte vides, auto-indent, word-wrap). Le résultat est garanti pour être un xml/sgml correct, sauf si vous utilisez un sous-ensemble strict d'opérations qui peuvent le casser. En outre, un tel moteur de modèle cite automatiquement les chaînes, différemment dans les nœuds de texte et dans les attributs, car il sait strictement si vous écrivez un attribut ou un nœud de texte. En outre, il peut retirer conditionnellement un noeud de la sortie car il sait où il commence et se termine, ce qui est utile, et effectue d'autres opérations de noeud non triviales.
Vous pourriez ne pas aimer XSLT pour son verbosité ou fonctionnalité, mais c'est sacrément utile que votre modèle est XML xmllint-able, et votre sortie est un bon sgml/xml.
Donc la question est: Quels moteurs de gabarit savez-vous qui traitent leur sortie comme un ensemble de noeuds corrects, pas seulement un texte non structuré? Je connais XSLT, Haml et un autre basé sur python. Moar!
-1, plutôt sarcastique. – cgp