sintaxis - xml validator
¿Hay alguna diferencia entre ''xml válido'' y ''xml bien formado''? (14)
XML bien formado vs válido
Bien formado significa que un objeto textual cumple con los requisitos W3C para ser XML .
Válido significa que el XML bien formado cumple los requisitos adicionales dados por un esquema específico.
Definiciones oficiales
Según la Recomendación W3C para XML :
[Definición: un objeto de datos es un documento XML si está well-formed , como se define en esta especificación. Además, el documento XML es w3.org/TR/REC-xml/#dt-valid si cumple con ciertas restricciones adicionales.]
Observaciones:
- Un documento que no está bien formado no es XML. ( El XML bien formado se usa comúnmente pero es técnicamente redundante).
- Ser válido implica estar bien formado.
- Estar bien formado no implica ser válido.
- Aunque la Recomendación W3C para XML define la validity para estar en contra de una DTD, el uso convencional permite que el término se aplique para la conformidad con esquemas XML especificados a través de XSD , RELAX NG , Schematron u otros métodos.
Ejemplos de lo que hace que un documento sea ...
No bien formado :
- Un elemento carece de una etiqueta de cierre (y no se cierra automáticamente).
- Los elementos se superponen sin una anidación adecuada:
<a><b></a></b>
- Al valor de un atributo le falta una cita de cierre que coincida con la cita de apertura.
-
<
o&
se utilizan en contenido en lugar de<
o&
. - Existen varios elementos raíz.
- Existen varias declaraciones XML o aparece una declaración XML que no sea en la parte superior del documento.
Inválido :
- Falta un elemento o atributo pero el esquema XML lo requiere.
- Un elemento o atributo se usa pero no está definido por el esquema XML.
- El contenido de un elemento no coincide con el contenido especificado por el esquema XML.
- El valor de un atributo no coincide con el tipo especificado por el esquema XML.
Namespace-Well-Formed
Técnicamente, los caracteres de dos puntos están permitidos en los nombres de los componentes en XML. Sin embargo, los dos puntos solo deben usarse en nombres para propósitos de espacio de nombres:
Nota:
La Recomendación sobre nombres de espacios en XML [ Nombres XML ] asigna un significado a los nombres que contienen caracteres de dos puntos. Por lo tanto, los autores no deben usar los dos puntos en los nombres XML, excepto para el espacio de nombres, pero los procesadores XML deben aceptar los dos puntos como un carácter de nombre.
Por lo tanto, otro término, namespace-well-formed , se define en los espacios de nombres en la Recomendación XML 1.0 W3C que implica todas las reglas XML para la buena formación más aquellos que rigen espacios de nombres y prefijos de espacio de nombres.
Coloquialmente, el término bien formado se usa a menudo donde el espacio de nombres, bien formado , sería más preciso. Sin embargo, esta es una forma técnica menor de consecuencia menos práctica que la distinción entre XML bien formado vs válido descrito en esta respuesta.
No estaba al tanto de la diferencia, pero un compañero de trabajo dice que sí, aunque no puede respaldarlo. ¿Cuál es la diferencia si alguno?
Añadiré que XML válido también implica que está bien formado, pero XML bien formado no es necesariamente válido.
Bueno, XML que no está bien formado, por definición, no es XML. Poeple suele referirse a XML válido como XML que se adhiere a un esquema determinado (XSD o DTD).
Como han dicho otros, el XML bien formado se ajusta a la especificación XML y el XML válido se ajusta a un esquema dado.
Otra forma de decirlo es que el XML bien formado es léxicamente correcto (puede analizarse), mientras que el XML válido es gramaticalmente correcto (puede combinarse con un vocabulario y una gramática conocidos).
Un documento XML no puede ser válido hasta que esté bien formado. Todos los documentos XML se mantienen con el mismo estándar de buena formación (un RFC publicado por el W3). Un documento XML puede ser válido contra algunos esquemas y no válido contra otros. Hay varios lenguajes de esquema, muchos de los cuales están basados en XML.
DTD es el acrónimo de Document Type Definition. Esta es una descripción del contenido para una familia de archivos XML. Esto forma parte de la especificación de XML 1.0 y permite describir y verificar que una instancia de documento determinada se ajusta al conjunto de reglas que detalla su estructura y contenido.
La validación es el proceso de verificar un documento contra un DTD (más generalmente contra un conjunto de reglas de construcción).
El proceso de validación y la construcción de DTD son las dos partes más difíciles del ciclo de vida XML. Brevemente, una DTD define todos los elementos posibles que se encuentran en su documento, cuál es la forma formal de su árbol de documentos (definiendo el contenido permitido de un elemento, ya sea texto, una expresión regular para la lista permitida de niños o contenido mixto) es decir, tanto texto como niños). La DTD también define los atributos válidos para todos los elementos y los tipos de esos atributos.
El XML válido es XML que tiene éxito la validación contra un DTD.
El XML bien formado es XML que tiene todas las etiquetas cerradas en el orden correcto y, si tiene una declaración, lo tiene primero en el archivo con los atributos adecuados.
En otras palabras, la validez se refiere a la semántica, la buena formación se refiere a la sintaxis.
Entonces puedes tener un XML inválido y bien formado.
Hay una diferencia, sí.
El XML que se adhiere al estándar XML se considera bien formado, mientras que el XML que se adhiere a un DTD se considera válido.
Si XML confirma las reglas DTD, entonces es un XML válido. Si un documento XML se ajusta a las reglas XML (todas las etiquetas iniciadas están cerradas, hay un elemento raíz, etc.), entonces es un XML bien formado.
Tomado de Extensible Markup Language (XML) 1.0 (Quinta Edición) - W3C Recomendación 26 de noviembre de 2008 :
[Definición: un objeto de datos es un documento XML si está bien formado, como se define en esta especificación. Además, el documento XML es válido si cumple con ciertas restricciones adicionales.]
Para aquellos que prefieren el código psuedo a párrafos y párrafos de texto ... :)
IF is_well_formed(<XML_doc>) THEN
# It is well-formed, and can be parsed
IF is_valid(<XML_doc>) THEN
# Well-formed and ALSO valid. Hurray!
# **A valid XML doc, is a well-formed doc!**
ELSE
# Only well-formed, NOT valid
END IF
ELSE
# Not well-formed, or valid!
END IF
FUNCTION is_well_formed
IF <does_not_contain_syntax,_spelling,_punctuation,_grammar_errors,_etc._errors> THEN
RETURN TRUE
ELSE
RETURN FALSE
END IF
END FUNCTION
FUNCTION is_valid
IF <markup_of_the_XML_document_matches_"some"_defined_standard> THEN
# Standards used to validate XML could be a DTDs or XML Schemas, referenced within the XML document
RETURN TRUE
ELSE
RETURN FALSE
END IF
END FUNCTION
Basado en la teoría: "Bien formado" vs. Válido
Ver DTD :
Un documento XML con la sintaxis correcta se denomina "Bien formado".
Un documento XML validado contra una DTD es "Bien formado" y "Válido".
W3C, en la especificación XML, ha definido ciertas reglas que deben seguirse al crear documentos XML. Los ejemplos de tales reglas incluyen tener exactamente un elemento raíz, tener una etiqueta final para cada etiqueta de inicio, usar comillas simples / dobles para los valores de los atributos, y así sucesivamente. Si un documento XML sigue todas estas reglas, se dice que es un documento bien formado y los analizadores XML se pueden usar para analizar y procesar dichos documentos.
Las definiciones de tipo de documento (DTD) o los esquemas XML se pueden usar para definir la estructura y el contenido de una clase específica de documentos XML. Esto incluye los detalles de la relación padre-hijo, listas de atributos, información del tipo de datos, restricciones de valor, etc. Además de las reglas de buena formación, si un documento XML también sigue las reglas especificadas en el DTD / Schema asociado, se dice que ser un documento XML válido.
Todos los documentos XML válidos están bien formados, pero lo contrario no siempre es cierto. Los documentos XML bien formados no necesariamente tienen que ser válidos.
Well-Formed XML es XML que cumple con los requisitos sintácticos del lenguaje. No faltan las etiquetas de cierre, ya que todas sus etiquetas singleton usan <whatever />
lugar de solo <whatever>
, y tienen sus etiquetas de cierre en el orden correcto.
Valid XML es XML que usa una DTD y cumple con todos sus requisitos. Entonces, si usa un atributo incorrectamente, viola la DTD y no es válido.
Todo el XML válido está bien formado, pero no todos los XML bien formados son válidos.
XML está bien formado si cumple los requisitos para todos los documentos XML establecidos por los estándares, por lo que es necesario tener un único nodo raíz, tener nodos anidados correctamente, todos los nodos que tienen una etiqueta de cierre (o usar el nodo vacío como taquigrafía) el corchete angular de cierre), los atributos que se citan, etc. Estar bien formado solo significa que se adhiere a las reglas de XML y, por lo tanto, se puede analizar correctamente.
XML es válido si se valida con un DTD o esquema. Obviamente, esto difiere de un caso a caso: XML que es válido contra un esquema no será válido contra otro esquema, aunque todavía esté bien formado.
Si XML no está bien formado, no se puede analizar correctamente: los analizadores solo lanzarán una excepción o informarán un error. Esto es genérico y no importa lo que contenga su XML. Solo una vez que se analiza, se puede verificar su validez. Este dominio o contexto depende y requiere una DTD o esquema para validar en contra. Para documentos XML simples, es posible que no tenga un DTD o esquema, en cuyo caso no puede saber si el XML es válido; el concepto o validez simplemente no se aplica en este caso. Por supuesto, esto no significa que no pueda usarlo, solo significa que no puede determinar si es válido o no.