understanding ejemplo crear xml xsd dtd

ejemplo - xs xml schema



Cómo elegir entre DTD y XSD (7)

Quiero usar un DTD o un XSD para describir mi documento XML. He leído que los XSD son mejores que los DTD ya que admiten espacios de nombres y tipos de datos, y que los DTD son más antiguos.

¿Esto significa que solo debería usar XSD para todas las necesidades futuras e ignorar por completo DTD como una opción? ¿Debería incluso molestarme en aprender la estructura de las DTD?

¿Qué factores debería considerar al elegir entre XSD y DTD?


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


No estaría de más entender la estructura de una DTD (te ayudará a comprender mejor una XSD a largo plazo) ... pero deberías usar XSDs en el futuro.


Realmente depende de qué tan complicada es la estructura que necesita configurar.

Si necesita cosas como espacios de nombres y tipos de datos, definitivamente vaya con XSD. Si solo necesita un esquema pequeño y rápido para verificar, DTD le dará un rendimiento más rápido ya que no hay análisis XML involucrado.

Según tengo entendido, XSD se deriva de DTD, por lo que entender DTD proporcionará una base sólida para aprender XSD, además de señalar algunas de las deficiencias de DTD.


No hay daño en aprender DTD, pero asegúrese de usar XSD, porque XSD tiene más fuerza,

Con XSD no solo puede validar la estructura / jerarquía de las etiquetas XML sino también

  1. Puede definir el tipo de datos de los valores de los nodos. [fecha, número, cadena, etc.]
  2. También puede definir tipos_de_datos personalizados, [ejemplo, para nodo, los datos posibles pueden ser uno de los 12 meses ... por lo que debe definir todos los 12 meses en un nuevo tipo de datos escribiendo todos los nombres de 12 meses como valores de enumeración. la validación muestra un error si el XML de entrada contiene cualquier otro valor que estos 12 valores ..]
  3. Puede poner la restricción sobre la aparición de los elementos, usando minOccurs y maxOccurs, los valores predeterminados son 1 y 1.

.. y muchos más ...

Hay algunas restricciones: como,

  1. Un elemento (nombre) definido en el archivo XSD se debe definir con un solo tipo de datos.
  2. No puede validar un nodo / atributo usando el valor de otro nodo / atributo.

Probablemente sea importante aprender las DTD como un ejercicio separado, solo por el conocimiento de cómo funcionan en caso de que las encuentres en otro lugar, y para que puedas apreciar algunas de las cosas que XSD estaba tratando de resolver.

Sin embargo, para su propósito actual de describir un documento XML, de hecho se adhieren a los XSD.

Además de tener un conjunto de funciones mucho más rico (como usted menciona, incluidos los tipos de datos y espacios de nombres), también son documentos XML en sí mismos, que pueden ser realmente útiles. Debido a que son XML, puede comprobar su buena formación y validez mucho más fácilmente, y puede escribir código que funcione con ellos como archivos XML normales (por ejemplo, si desea autogenerar clases de código desde un esquema)


Esta es una cadena antigua, PERO en caso de que alguien más se entere ... de lo que puedo decir DTD todavía tiene dos beneficios que XSD no tiene, es decir, la inclusión de la función ENTIDAD que no existe en XSD. Esta es una característica bastante impresionante que le dice al compilador cómo procesar tipos de archivos potencialmente desconocidos al identificar qué programas abrir para procesarlos.

Además, las DTD se escriben en la especificación XML para que puedan escribirse directamente en documentos XML, mientras que XSD tiene que existir como un archivo externo y estar conectado. No es un gran problema, especialmente cuando se usa en documentos más grandes de todos modos.

Creo que XSD aún es mucho mejor y más natural, ya que usa la sintaxis XML, solo quería hacer de abogado del diablo :)


Hay un tema muy importante en mi humilde opinión para usar una DTD (tal vez junto con una XSD si necesita una validación profunda):

En DTD puede definir sus propias entidades, por ejemplo:

<!ENTITY MyName "DrDr.Hannibal Xerxes Utah,MBA and CEO">

En su documento puede necesitar simplemente el código y MyName; en lugar de escribir todo esto.

Además suponga que tiene un archivo similar al XML (tal vez producido por alguna otra aplicación) que consta de muchas etiquetas similares pero no etiqueta raíz, por ejemplo:

<?xml version="1.0" encoding="ISO-8859-1"?> <!-- you need this when using foreign characters like ''ü'' --> <Book Author="Author1"> <Titel>Erstes Buch</Titel> </Book> ... <Book Author="Author5"> <Titel>Fünftes Buch</Titel> </Book>

Supongamos que este archivo se llama "Booklist.TXT",

Ahora puedes codificar tu master-xml:

<?xml version="1.0" encoding="ISO-8859-1"?> <!-- you need this when using foreign characters like ''ü'' --> <DOCTYPE MyRoot [ <ENTITY AllBooks SYSTEM "Booklist.TXT"> ] <MyRoot> ... some prefix-stuff as needed ... &AllBooks; <!-- here are all the Books --> ... some post stuff es needed ... </MyBook>

y cada vez que necesite los libros en otro contexto, solo debe codificar el xml circundante y no tocar o copiar la lista de libros, además puede mantenerlo en un solo lugar y tener todos los cambios en cualquier documento.