2009-09-29 25 views
30

¿Cuáles son los pros/contras en 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?Esquema DTD o XML. ¿Cuál es mejor?

Edición: He encontrado 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 W3C no es el único lenguaje de esquema. De hecho, la especificación XML describe el tipo de documento definiciones (DTD) como el camino a expresar un esquema. Además, versiones preliminares de JAXB Implementación de referencia funcionó solo con DTD, es decir, no con los esquemas escritos en el lenguaje de esquema XML. Sin embargo, el lenguaje de esquema XML es mucho más rico que las DTD. Por ejemplo, los esquemas escritos en el Esquema XML El lenguaje puede describir las relaciones estructurales y los tipos de datos que no se pueden expresar (o no pueden expresarse fácilmente ) en los DTD. Existen herramientas disponibles para convertir DTD al W3C esquema XML El lenguaje, por lo que si usted tiene esquemas basados ​​en DTD que utilizó con una versión anterior de la implementación de referencia JAXB , puede utilizar estas herramientas para convertir los esquemas a XML Schema Language. http://java.sun.com/developer/technicalArticles/WebServices/jaxb/#binsch

Supongo que me gustaría tener ejemplos que ilustren por qué XML-Schema es mejor (si es que lo es).

Respuesta

22

De http://weblogs.asp.net/rchartier/archive/2006/03/21/440782.aspx

  • DTD no están al tanto de espacio de nombres.

  • DTD a echar #define, #include, y #ifdef - o, menos C-orientado, la capacidad de definir las abreviaturas taquigrafía, contenido externo , y algunos análisis condicional.

  • Una DTD describe todo el documento XML (incluso si deja "huecos"); un esquema puede definir porciones.

  • XSD tiene un sistema de tipos.

  • XSD tiene un lenguaje mucho más rico para describir cómo se ve el elemento o el contenido ". Esto está relacionado con el sistema tipo .

  • Puede poner un 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 el
    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 el esquema válido, que no es lo mismo.

Por mi parte, es bastante sencillo para escribir un validador de XML para algunos si tiene un XSD. No he visto esto con una DTD, aunque estoy seguro de que existe.

+2

Puede poner XSD en línea con XML. Solo use el espacio de nombres correcto y anide el esquema dentro del documento. Los archivos WSDL hacen esto comúnmente. Las DTD están sujetas a ataques DoS. Consulte http://en.wikipedia.org/wiki/Billion_laughs – lavinio

+0

@lavinio, creo que tiene razón al incluir XSD; He visto archivos antes que hacen esto. Interesante artículo sobre el ataque de Billion Laughs. –

+4

¿Hay alguna función de DTD que no se puede hacer en XSD? –

4

También hay Relax NG, otro lenguaje potente 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.

+0

¡Sí! EditiX proporciona una forma de escribir en Relax NG y convertirlo en DTD o XSD. Yo pro el Relax NG. XSD a veces es un poco complicado para algunos de mis ingenieros junior. –

10

Hace algunos años, habría razones para usar DTD sobre XML Schema (era más común o mejor respaldado por 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, XML Schema está lejos de ser perfecto (solo intente leer la especificación o un libro sobre XML Schema ...) y se han desarrollado muchas alternativas desde entonces (Schematron, Examplotron, RelaxNG). Estos pueden tener ventajas técnicas sobre XML Schema, pero XML Schema es mucho más generalizado hoy en día y veo muy pocos casos en los que una alternativa tendría sentido.

5

XML Schema puede realizar validaciones más complejas. Por ejemplo, si DTD puede verificar si el tipo de datos de un elemento XML es entero o cadena. Considerando 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 positve. Finalmente, el esquema XML usa la sintaxis XML y es una elección natural para el desarrollo de servicios web.

Cuestiones relacionadas