2009-05-15 4 views
5

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

-1, plutôt sarcastique. – cgp

Répondre

1

Fondamentalement, tous les moteurs de modèles qui utilisent XML comme format de fichier (pour définir des modèles). En utilisant XML, ils font valoir que le fichier doit être bien formé. [EDIT] Les exemples sont: Genshi (Python) ou JSP 2.0 (Java).

+0

Eh bien, lesquels connaissez-vous spécifiquement? – alamar

1

TAL (à l'origine partie de Zope mais maintenant implemented in a variety of languages) est basé sur XML. C'est très logique et révélateur de travailler avec - au lieu de bousculer dans un tas de texte, vous dites au modèle quelque chose comme "définir l'attribut href de ce lien à http://google.com/ et définir son contenu textuel à" Recherche Google ". Ne devez pas gérer les chaînes qui doivent être échappées - généralement si vous voulez interpréter quelque chose comme un balisage, vous le mettez dans un modèle, et si vous ne voulez pas qu'il soit interprété comme un balisage, vous le placez en tant qu'attribut la valeur ou le contenu du texte et TAL échappera correctement.

+0

Distal est une implémentation TAL en Javascript: http://code.google.com/p/distal –

1

avec le framework web Nagare, le views sont toujours un arbre de nœuds XML, construit directement en Python. l'arbre peut alors être manipulé en Python, transformé avec XSL, sérialisé en HTML ou XHTML ...

(le paquet «nagare.namespaces de vient avec le projet Nagare, mais peut être utilisé dans toutes les applications Python)

Exemple:

>>> from nagare.namespaces import xhtml_base 
>>> h = xhtml_base.Renderer() # The XHTML tree builder 
>>> 
>>> # Building the tree of nodes 
>>> with h.html: 
>>> with h.body: 
>>>  h << h.h1('Hello world') 
>>> tree = h.root # The tree root element 
>>> 
>>> print tree.write_xmlstring() # Tree serialized in XML 

<html><body><h1>Hello world</h1></body></html> 
1

Je maintiens une liste des systèmes de matriçage push-style ici: http://perlmonks.org/?node_id=674273

Et je suis en train d'évaluer divers Perl systèmes structurants pour leur indice de séparation: http://bit.ly/bXaYt7

Mais celui arborescente est écrit par moi, HTML :: Couturière - http://search.cpan.org/dist/HTML-Seamstress/

le terme "Push style" vient du papier de Terence Parr "Strict Model-Application View séparation dans les moteurs de modèles" - http://www.cs.usfca.edu/~parrt/papers/mvc.templates.pdf

0

TAL n'est absolument pas un style push. Il peut être basé sur XML, mais il est de style pull (la forme la plus dégénérée de style push).

2

Il est un moyen standard de XML représentant (ou un sous-ensemble de celui-ci tel que XHTML) dans le schéma connu sous le nom SXML. C'est l'une des choses qui, selon moi, font de Scheme un good language for web development. Il est possible de créer le contenu d'un document en tant que liste Scheme native, puis de le rendre (correct) XHTML dans un appel de fonction.

Voici un exemple qui prend une chaîne de texte simple, et l'enveloppe comme le contenu d'une page HTML d'un paragraphe. Ainsi, la fonction as-page agit comme un modèle; sa sortie est une liste de schémas qui peut être facilement traduite en son équivalent HTML. Les balises non équilibrées ou mal formées ne sont pas possibles avec cette approche.

(use-modules (sxml simple)) 

(define (as-page txt) 
    `(html 
    (head (title "A web page")) 
    (body (p ,txt)))) 

(as-page "It works!!!!!") 
;; $2 = (html (head (title "A web page")) (body (p "It works!!!!"))) 

(sxml->xml (as-page "It works!!!!")) 
;; $3 = <html><head><title>A web page</title></head><body><p>It works!!!!</p></body></html> 
Questions connexes