2010-11-09 11 views
5

Obviamente no puedo determinar si un fragmento de HTML es válido sin saber qué aspecto tiene el resto del documento (como mínimo, necesitaría un doctype para saber con qué reglas estoy validando). Pero teniendo en cuenta el siguiente fragmento de HTML 5:¿Existe algo así como un fragmento de HTML5 válido?

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

ciertamente puedo determinar que es inválida sin ver el resto del documento. Entonces, ¿hay algo así como HTML "provisionalmente válido" o "válido siempre que se ajuste a un lugar determinado en un documento válido"?

¿Hay algo más que el siguiente pseudocódigo?

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

Su pseudocódigo no funciona con '

  • elemento
  • ' dado que no puede aparecer directamente en el cuerpo. También puede interesarle la definición de DocumentFragment en la especificación DOM. Representa una parte de un árbol de documentos y necesita estar bien formado para que 'abc' y'

    'sean fragmentos válidos, pero' <'no lo es. No puedo encontrar una definición de fragmento en la especificación XML o HTML –

    Respuesta

    3

    Sin duda puede hablar de un documento XML weing well-formed, y puede construir un documento desde cualquier elemento individual y sus elementos secundarios. Por lo tanto, podría hablarse de que los fragmentos XHTML5 de raíz única están bien formados. Podría tratar con un fragmento de raíz múltiple (como <img/><img/>) al tratarlo como una secuencia de documentos, o envolverlo en algún elemento contenedor sintético, ya que solo estamos hablando de una buena formación, eso estaría bien.

    Sin embargo, HTML5 aún permite las etiquetas de cierre automático SGML, como <hr> y demás, cuyo cierre automático solo puede determinarse apelando al doctype. Por ejemplo, <div><hr></div> está bien, pero <div><tr></div> no. Si estuviera tratando con nodos DOM en lugar de texto como entrada, esto no sería un problema, pero si tiene texto, necesitaría un analizador que sepa lo suficiente sobre HTML para poder tratar con esos elementos. Más allá de eso, sin embargo, algunas reglas muy simples, levantadas directamente de XML, serían suficientes para manejar la buena formación.

    Si desea ir más allá de la buena formación y ver algunos aspectos de validity, creo que todavía puede hacerlo en el nivel de fragmento de raíz única con XML. Como dice la especificación:

    Un documento XML es válido si tiene una declaración de tipo de documento asociado y si el documento cumple con las restricciones expresadas en él.

    Una DTD puede nombrar cualquier elemento como la raíz, y la mecánica luego tomar el cuidado de verificar la relación entre ese elemento y sus hijos, y sus hijos y así sucesivamente, y los demás limitaciones que componen validez.

    Nuevamente, puede transferir esa idea directamente a HTML. Sin embargo, no sé cómo lidiar con fragmentos de raíz múltiple. Y tenga en cuenta que ciertas restricciones de documentos enteros (como las identificaciones que son únicas) pueden mantenerse dentro del fragmento, pero no en un documento válido de otra manera una vez que el fragmento se ha insertado en él.

    -3

    Puede comprobar si está bien formado.

    +1

    Puede mejorar esta respuesta explicando cómo hacerlo. –

    Cuestiones relacionadas