Un DTD (Definición de Tipo de Documento ) es una descripción de una estructura de documento XML. El DTD determina qué elementos deben aparecer, en qué orden, que son opcionales, que son obligatorios, qué elementos de los atributos, etc. Hay un mecanismo para validar los documentos antes de la aparición de XML. Los documentos SGML (Standard Generalizad Markup Language - Standard General Markup Language, pionero de todos los lenguajes de marcado actuales) fueron validados. Cuando XML apareció, entró en su especificación, como un modelo de validación gramatical. La validación de DTD se utilizó técnicamente en los años 90 y principios de 2000, pero ahora se ha vuelto obsoleto.
Hoy en día, se utilizan más técnicas; Entre otras cosas, esquemas XML. También se les llama XSD (XML Schema Document - XML Schema Document). Sin embargo, muchos documentos sólo validan DTD.
Ejemplo:
Fuerte DTD y DTD Transitorio para HTML 4.01
Se utiliza para definir las reglas con el fin de establecer ciertas restricciones en la estructura de un documento XML, pero no es necesario.Si un documento XML completo está asociado con un documento de instrucción de tipo y contiene las restricciones indicadas en él, es válido. Además, este mecanismo para validar documentos XML y otros se discutirán en mayor profundidad.
Debería aparecer en la segunda línea del documento XML, entre la instrucción de proceso inicial y el elemento raíz.
Ejemplo:
<?xml version="1.0" encoding="UTF-8" standalone="no"?>❶
<!DOCTYPE document system "elementos.dtd">❷
<!-- Aqui un comentario -->❸
<?xml-stylesheet type="text/css" href="elementos.css"?>❹
<elementos>❺
<elemento>❻
<nombre>Agua</nombre>
<color>Azul</color>
</elemento>
<elemento>❻
<nombre>Fuego</nombre>
<color>Rojo</color>
</elemento>
</elementos>❼
❶ Declaración de procesamiento, el documento indica que está en formato XML.❷ Inserción de una DTD externa; exactamente lo que está en el archivo elements.dtd.
❸ Un comentario.
❹ La sentencia de proceso instala la hoja de estilo de archivo elementos.css en un documento XML.
❺ El elemento raíz (también llamado elemento de documento) se abre en este punto.
❻ Elementos que se derivan del elemento raíz y varios elementos que vienen después de ellos.
❼ Cierre del elemento
<!DOCTYPE etiqueta [
<!ELEMENT etiqueta (datos,calle,poblacion,codigo)>
<!ELEMENT datos (nombre,apellido,apodo)>
<!ELEMENT nombre (#PCDATA)>
<!ELEMENT apellido (#PCDATA)>
<!ELEMENT apodo (#PCDATA)>
<!ELEMENT calle (#PCDATA)>
<!ELEMENT poblacion (#PCDATA)>
<!ELEMENT codigo (#PCDATA)>
]>
<etiqueta>
<datos>
<nombre> Aitor</nombre>
<apellido> Martin</apellido>
<apodo>Txolo</apodo>
</datos>
<calle>Zintzarri kalea, 23</calle>
<poblacion>Durango</poblacion>
<codigo>12345</codigo>
</etiqueta>
La declaración de tipo de documento comienza! <! DOCTYPE comienza en la primera línea y ">> termina con la cadena. Las sentencias DTD son las líneas que comienzan con la cadena <! ELEMENT ", que se llaman declaraciones de elementos. También se pueden declarar atributos, entidades y declaraciones DTD.
En el ejemplo anterior, todas las declaraciones DTD están dentro del documento, pero es posible definir una DTD en una diferente (total o parcialmente). Anuncio
DTD está en otro archivo
<?xml version="1.0"?>
<!DOCTYPE auto SYSTEM "http://www.autos.com/dtd/auto.dtd">
<auto>
<modelo>...</modelo>
...
</auto>
Si se declara el DTD dentro del archivo XML, la sintaxis de definición de DOCTYPE será:
<!DOCTYPE elemento-base [declaracion-elemento]>
Ejemplo:
<?xml version="1.0"?>
<!DOCTYPE aviso [
<!ELEMENT aviso (para,quien,cabecera,cuerpo)>
<!ELEMENT para (#PCDATA)>
<!ELEMENT quien (#PCDATA)>
<!ELEMENT cabecera (#PCDATA)>
<!ELEMENT cuerpo (#PCDATA)>
]>
<aviso>
<para>Jone</para>
<quien>Dani</quien>
<cabecera>Aviso</cabecera>
<cuerpo>No olvideis de mi para el fin de semana</cuerpo>
</aviso>
El ejemplo anterior será interpretada por el navegador de la siguiente manera:
<!DOCTYPE documento-raiz SYSTEM "nombre-definicion">
Ejemplo
<?xml version="1.0"?>
<!DOCTYPE aviso SYSTEM "aviso.dtd">
<aviso>
<para>Jone</para>
<quien>Dani</quien>
<cabecera>Aviso</cabecera>
<cuerpo>No olvideis de mi para el fin de semana</cuerpo>
</aviso>
"Aviso.dtd"
<!ELEMENT aviso (para,quien,cabecera,cuerpo)>
<!ELEMENT para (#PCDATA)>
<!ELEMENT quien (#PCDATA)>
<!ELEMENT cabecera (#PCDATA)>
<!ELEMENT cuerpo (#PCDATA)>