1. ¿Qué es un DTD? (DOCUMENT TYPE DEFINITIONS)
Un DTD es un conjunto de reglas sintácticas para definir etiquetas. Nos indica qué etiquetas se pueden usar en un documento, en qué orden deben aparecer, cuáles pueden aparecer dentro de otras, cuáles tienen atributos, etc.
Crear una definición del tipo de documento (DTD) es como crear nuestro propio lenguaje de marcado, para una aplicación específica. Por ejemplo, podríamos crear un DTD que defina una tarjeta de visita. A partir de ese DTD, tendríamos una serie de elementos XML que nos permitirían definir tarjetas de visita.
Originalmente los DTDs se desarrollaron para ser utilizados con SGML. Pueden ser parte del documento XML, pero se suele colocar aparte para utilizarlo en una serie de documentos.
Puesto que XML es un sistema para definir lenguajes, no puede tener un solo DTD (al contrario que HTML). En lugar de eso, quien necesite usar XML para intercambio de datos debe definir su propio DTD. Por ejemplo, el Wall Street Journal Interactive Edition tiene un DTD para especificar cada edición, con información sobre páginas, sumarios, etc.
Un problema que presentan los DTDs es que no siguen una sintaxis XML, sino una propia. Un grupo de desarrolladores han propuesto una alternativa a los DTDs, llamada esquemas ("schemas").
Básicamente, un esquema establece las reglas de un documento e indica qué etiquetas se pueden usar, sus atributos, las relaciones entre etiquetas, etc.
Un esquema, al contrario que un DTD, puede definir tipos de datos, lo cual es claramente beneficioso en el intercambio de datos, objetos o bases de datos.
2. Documentos XML "sin DTD", "válido" y "bien formado"
SGML utiliza Definiciones de Tipo de Documentos(DTD) para describir los elementos (etiquetas) disponibles en un tipo de documento específico. Sin embargo, el diseño y construcción de una DTD puede ser una tarea compleja y no trivial, por lo que XML ha sido diseñado para ser usado con o sin una DTD. Sin-DTD significa que puedes inventar etiquetas sin tener que definirlas formalmente.
Para que esto funcione, un fichero sin-DTD 'define' sus propias etiquetas, informalmente, por la existencia y la localización de elementos cuando son creados. Pero cuando una aplicación XML, como un visualizador encuentra un fichero sin DTD, necesita ser capaz de entender la estructura del documento que está leyendo, y dado que no tiene DTD que le informe al respecto, se han hecho algunas modificaciones en las reglas.
Por ejemplo, el elemento <IMG> de HTML se define como 'VACÍO': no tiene etiqueta de fin. Sin una DTD, una aplicación XML no tendría manera de conocer si debe esperar una etiqueta de fin para un determinado elemento, luego ha tenido que introducirse el concepto de 'bien-formado'. Esto hace el comienzo y fin de todos los elementos, y la presencia de elementos VACÍO completamente no ambigua.
nos vemos en la parte 2