2010-11-09 4 views
5

Je ne peux évidemment pas déterminer si un fragment de HTML est valide sans savoir à quoi ressemble le reste du document (au minimum, j'aurais besoin d'un doctype pour savoir par quelles règles je valide). Mais étant donné le fragment HTML5 suivant:Existe-t-il un fragment HTML5 valide?

<article><header></article>My header</header><p>My text</p></article> 

Je peux certainement déterminons qu'il est invalide sans voir le reste du document. Donc, existe-t-il un code HTML "provisoirement valide", ou "valable pourvu qu'il s'insère dans un certain endroit dans un document valide"?

Y a-t-il plus que le pseudo-code suivant?

def is_valid_fragment(fragment): 
tmp = "<!doctype html><html><head><title></title></head><body>" + fragment + "</body></html>" 
return my_HTML5_validator.is_valid_html5_document(tmp) 
+1

Votre pseudocode ne fonctionne pas avec '

  • article
  • ' car cela ne peut pas apparaître directement dans le corps. Vous pouvez également être intéressé par la définition de DocumentFragment dans la spécification DOM. Il représente une partie d'un arbre de document et doit être bien formé, donc 'abc' et'

    'sont des fragments valides mais' <'ne l'est pas. Je ne trouve pas de définition de fragment dans les spécifications XML ou HTML –

    Répondre

    3

    Vous pouvez certainement parler d'un document XML weing well-formed, et vous pouvez construire un document à partir de n'importe quel élément et ses enfants. Vous pourriez ainsi parler de fragments XHTML5 à racine unique bien formés. Vous pouvez traiter un fragment à racines multiples (comme <img/><img/>) en traitant cette séquence comme une séquence de documents, ou en l'enveloppant dans un élément de conteneur synthétique - puisque nous parlons seulement de bonne forme, ce serait bien. Cependant, HTML5 permet toujours les balises SGML à fermeture automatique, comme <hr> et ainsi de suite, dont l'auto-fermeture ne peut être déterminée qu'en faisant appel au doctype. Par exemple, <div><hr></div> est correct, mais <div><tr></div> ne l'est pas. Si vous utilisiez des nœuds DOM plutôt que du texte en entrée, ce serait un non-problème, mais si vous avez du texte, vous aurez besoin d'un analyseur qui en sait assez sur le langage HTML pour pouvoir traiter ces éléments. Au-delà de cela, cependant, quelques règles très simples, levées directement à partir de XML, suffiraient à gérer la forme.

    Si vous voulez aller au-delà de la forme et regarder quelques aspects de validity, je pense que vous pouvez toujours faire cela au niveau du fragment à racine unique avec XML. Comme le dit la spécification:

    Un document XML est valide s'il a une déclaration de type de document associé et si le document respecte les contraintes qui y sont exprimées.

    Une DTD peut nommer tout élément comme la racine et la mécanique puis prendre soin de vérifier la relation entre cet élément et ses enfants, et leurs enfants, et ainsi de suite, et les diverses autres contraintes qui composent la validité.

    Encore une fois, vous pouvez transférer cette idée directement au format HTML. Cependant, je ne sais pas comment vous traitez des fragments à racines multiples. Et gardez à l'esprit que certaines contraintes de document entier (comme les identifiants étant uniques) peuvent rester à l'intérieur du fragment, mais pas dans un document autrement valide une fois que le fragment a été inséré dans le fragment.

    -3

    Vous pouvez vérifier s'il est bien formé.

    +1

    Vous pourriez améliorer cette réponse en expliquant comment procéder. –

    Questions connexes