7
votes

Existe-t-il une telle chose comme un fragment HTML5 valide?

Je ne peux évidemment pas déterminer si un fragment de HTML est valide sans savoir ce que ressemble au reste du document (au minimum, j'aurais besoin d'un DOCTYPE afin de savoir quelles règles je validez). Mais étant donné le fragment HTML5 suivant: xxx pré>

Je peux certainement déterminer que c'est invalide em> sans voir le reste du document. Donc, existe-t-il une telle chose que "Valide provisoirement" HTML ou "Valable à condition qu'il convient à un certain endroit dans un document valide"? P>

y a-t-il de plus que le pseudocode suivant? P >

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 commentaires

Votre pseudocode ne fonctionne pas avec

  • élément car cela ne peut pas apparaître directement dans le corps. De plus, vous pouvez ê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ée, donc ABC et

    sont des fragments valides mais << / code > n'est pas. Je ne trouve pas de définition de fragment dans la spécification XML ou HTML


  • 4 Réponses :


    -3
    votes

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


    1 commentaires

    Vous pourriez améliorer cette réponse en expliquant comment le faire.



    5
    votes

    Vous pouvez certainement parler d'un document xml weing Bien formé , et vous pouvez construire un document de n'importe quel élément et ses enfants. Vous pouvez donc parler de fragments XHTML5 à racine seuls étant bien formés. Vous pouvez gérer un fragment multiplié (comme ) en traitant de cela comme une séquence de documents ou en l'enveloppant dans un élément de conteneur synthétique - puisque nous sommes seulement parler de bien-être, ce serait bien.

    Cependant, HTML5 permet toujours aux étiquettes de fermeture automatique SGML, telles que


    etc., dont la fermeture de soi ne peut être déterminée que par appel au Doctype. Par exemple,

    est correct, mais
    n'est pas. Si vous avez affaire à des nœuds DOM plutôt que de texte comme entrée, ce serait une non -issant, mais si vous avez du texte, vous auriez besoin d'un analyseur qui connaît suffisamment de HTML pour pouvoir gérer ces éléments. Au-delà de cela, cependant, des règles très simples, soulevées directement de XML, seraient suffisantes pour gérer la formation de bien-être.

    Si vous vouliez aller au-delà de bien-être et examinez certains aspects de Validité , je pense que vous pouvez toujours le faire au niveau de fragment sans racines avec XML. Comme la spécification dit:

    Un document XML est valide s'il possède une déclaration de type de document associée et si le document est conforme aux contraintes exprimées en elle.

    Un DTD peut nommer n'importe quel élément comme la racine, et la mécanique s'occupe ensuite de vérifier la relation entre cet élément et ses enfants, ainsi que leurs enfants, ainsi que les différentes autres contraintes qui composent la validité.

    Encore une fois, vous pouvez transférer cette idée directement sur HTML. Je ne sais pas comment vous traitez avec des fragments de multiplié, cependant. Et gardez à l'esprit que certaines contraintes de documents entiers (IDS similaires étant unique) peuvent contenir à l'intérieur du fragment, mais pas dans un document autrement valide une fois que le fragment a été inséré dans celui-ci.


    0 commentaires

    0
    votes

    Une méthode brute serait de vérifier si le passage du fragment via l'INTERHTML d'un autre élément change le texte en faisant quelque chose comme le code ci-dessous.

    <html>
    <head>
    </head>
    <script>
    function validateHTML(htmlFragment) {
       var testDiv = document.getElementById('testDiv')
       testDiv.innerHTML = htmlFragment
       var res = htmlFragment==testDiv.innerHTML
       testDiv.innerHTML = ""
       return res
    }
    </script>
    <body>
    <div id=testDiv style='display:none'></div>
    
    <textarea id=txtElem onKeyUp="this.style.backgroundColor = validateHTML(this.value) ? '' : '#f00'"></textarea>
    
    </body>
    </html>
    


    0 commentaires

    0
    votes

    Selon ce que vous avez l'intention de faire avec cette vérification, je pense que vous devriez garder à l'esprit que les navigateurs sont extrêmement em> pardonnant de HTML malformé!

    La chaîne HTML non valide que vous donnez dans votre exemple fonctionnerait parfaitement bien dans (la plupart du tout) Browers: P>

    p>

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


    0 commentaires