xsd - tutorial - DTD o esquema XML. ¿Cuál es mejor?
xml schema file (4)
De http://weblogs.asp.net/rchartier/archive/2006/03/21/440782.aspx
Las DTD no son conscientes del espacio de nombres.
Los DTD tienen
#define
,#include
y#ifdef
, o, menos orientados a C, la capacidad de definir abreviaturas abreviadas, contenido externo y algunos análisis condicionales.Una DTD describe todo el documento XML (incluso si deja "agujeros"); Un esquema puede definir porciones.
XSD tiene un sistema de tipos.
XSD tiene un lenguaje mucho más rico para describir a qué elemento o atributo se refiere el contenido. Esto está relacionado con el sistema de tipos.
Puede colocar una DTD en línea en un documento XML, no puede hacer esto con XSD. Esto significa que los DTD son más seguros (solo tiene que proteger un bytestream, el xml / dtd, y no
múltiple).La definición oficial de "XML válido" requiere una DTD. Dado que esto puede ser poco práctico, si no imposible, a menudo tiene que conformarse con un esquema válido, que no es exactamente lo mismo.
Por mi parte, es bastante sencillo escribir un validador para algunos XML si tienes un XSD. No he visto esto con un DTD, aunque estoy seguro de que existe.
¿Cuáles son las ventajas y desventajas de los esquemas DTD y XML (ni siquiera estoy seguro de cuál es el nombre oficial de este último)? ¿Cual es mejor? ¿Por qué necesitamos dos formas de hacer lo mismo?
Editar: Encontré esto en un artículo que estaba leyendo, que es lo que me impulsó a hacer la pregunta:
¿Por qué W3C XML Schema Language?
El lenguaje de esquema XML del W3C no es el único lenguaje de esquema. De hecho, la especificación XML describe definiciones de tipo de documento (DTD) como la forma de expresar un esquema. Además, las versiones preliminares de la Implementación de referencia de JAXB solo funcionaban con DTD, es decir, no con esquemas escritos en el Lenguaje de esquema XML. Sin embargo, el lenguaje de esquema XML es mucho más rico que los DTD. Por ejemplo, los esquemas escritos en el lenguaje de esquema XML pueden describir relaciones estructurales y tipos de datos que no se pueden expresar (o no se pueden expresar fácilmente) en las DTD. Hay herramientas disponibles para convertir DTD al Lenguaje de esquema XML W3C, por lo que si tiene esquemas basados en DTD que utilizó con una versión anterior de la Implementación de referencia JAXB, puede usar estas herramientas para convertir los esquemas en Lenguaje de esquema XML. http://java.sun.com/developer/technicalArticles/WebServices/jaxb/#binsch
Supongo que me gustaría ejemplos que ilustren por qué XML-Schema es mejor (si es que lo es).
El esquema XML puede realizar validaciones más complejas. Por ejemplo, si DTD puede verificar si el tipo de datos de un elemento XML es un entero o una cadena. Mientras que el esquema XML puede realizar validaciones más complicadas, como si el elemento xml es una cadena que comienza con una letra mayúscula o un entero positivo. Finalmente, el esquema XML utiliza la sintaxis XML y es una opción natural para el desarrollo de servicios web.
Hace unos años, habría motivos para utilizar DTD sobre esquema XML (era más común o mejor soportado por las herramientas XML). Hoy, sin embargo, no veo ninguna razón para no usar XML Schema en lugar de DTD: XML Schema es mucho más poderoso.
Sin embargo, el Esquema XML está lejos de ser perfecto (solo intente leer la especificación o un libro sobre Esquema XML ...) y se han desarrollado muchas alternativas desde entonces (Schematron, Examplotron, RelaxNG). Estos pueden tener ventajas técnicas sobre el esquema XML, pero el esquema XML es mucho más generalizado hoy en día que veo muy pocos casos en los que una alternativa tendría sentido.
También está Relax NG, otro lenguaje poderoso para validar documentos XML, junto con Schematron y otras tecnologías de DSDL . Relax NG es muy simple y tiene una forma legible por humanos: Relax NG Compact que permite la escritura de esquemas similar a los esquemas BNF.