Definición de tipo de documento

Una definición de tipo de documento o DTD («documento tipo definicion») es una descripción de estructura y sintaxis de un documento XML o SGML. Su función básica es la descripción de la estructura de datos, para usar una estructura común y mantener la consistencia entre todos los documentos que utilicen la misma DTD. De esta forma, dichos documentos pueden ser validados, conocen la estructura de los elementos y la descripción de los datos que trae consigo cada documento.

Definición 
La DTD es una definición, en un documento SGML o XML, que especifica restricciones en la estructura y sintaxis del mismo. La DTD se puede incluir dentro del archivo del documento, pero normalmente se almacena en un fichero ASCII de texto separado. La sintaxis de las DTD para SGML y XML es similar pero no idéntica.

La definición de una DTD especifica la sintaxis de una aplicación de SGML o XML, que puede ser un estándar ampliamente utilizado como XHTML o una aplicación local.

¿Qué describe una DTD? 
Las DTD se emplean generalmente para determinar la estructura de un documento mediante etiquetas (tags en inglés) XML o SGML. Una DTD describe: 

 Elementos: indican qué etiquetas son permitidas y el contenido de dichas etiquetas. 
 Estructura: indica el orden en que van las etiquetas en el documento. 
 Anidamiento: indica qué etiquetas van dentro de otras.

Ejemplos 
 Un ejemplo de una DTD XML muy simple, para describir una lista de personas: 

<!ELEMENT lista_de_personas (persona*)>
<!ELEMENT persona (nombre, fechanacimiento?, sexo?, numeroseguridadsocial?)>
<!ELEMENT nombre (#PCDATA) >
<!ELEMENT fechanacimiento (#PCDATA) >
<!ELEMENT sexo (#PCDATA) >
<!ELEMENT numeroseguridadsocial (#PCDATA)>

Observándolo línea a línea nos dice:
 <lista_de_personas> es un nombre de elemento válido. El * indica que puede haber 0 o más elementos de persona. 
 <persona> es un nombre de elemento válido. Este contiene obligatoriamente el elemento nombre mientras que el resto son opcionales. Y lo son porque nos lo indica el símbolo "?". 
 <nombre> es un nombre de elemento válido. Contiene caracteres. 
 <fechanacimiento> es un nombre de elemento válido. 
 <sexo> es un nombre de elemento válido. Contiene caracteres.
 <numeroseguridadsocial> es un nombre de elemento válido.

Un ejemplo de un fichero XML que hace uso de esta DTD:

<?xml version="1.0" encoding="ISO-8859-1"?>
<!DOCTYPE lista_de_personas SYSTEM "ejemplo.dtd">
<lista_de_personas>
  <persona>
    <nombre>José García</nombre>
    <fechanacimiento>25/04/1984</fechanacimiento>
    <sexo>Varón</sexo>
    <numeroseguridadsocial>0221</numeroseguridadsocial>
  </persona>
</lista_de_personas>

La DTD mostrada más arriba requiere un elemento "nombre" dentro de cada elemento "persona"; el elemento "lista_de_personas" es también obligatorio, pero el resto son opcionales.

Es posible renderizar este documento en un navegador habilitado para XML (como IE5 o Mozilla) pegando y guardando la DTD de más arriba en un archivo de texto llamado ejemplo.dtd y el fichero.xml a un fichero de texto denominado de forma diferente, y abriendo el archivo.xml con el navegador. Ambos ficheros deben estar guardados en el mismo directorio (o carpeta). No obstante, algunos navegadores no comprueban que un documento XML sigue las reglas de la DTD; solamente se requieren para comprobar que la DTD es sintácticamente correcta.

Limitaciones de la DTD 
Un esquema basado en una DTD tiene bastantes limitaciones. Una DTD no permite definir elementos locales que solo sean válidos dentro de otros elementos. Por ejemplo, si queremos tener un elemento <Manager> que describa al gestor de una compañía o al de una delegación, y la definición de Mánager es diferente en cada caso, con una DTD tendríamos que crear los elementos «CompanyManager» y «DelegationManager» para evitar el conflicto de nombres. Es decir, la falta de jerarquía en una DTD obliga a introducir una jerarquía a base de guiones o puntos en el espacio de nombres (Namespace). En una DTD es poco flexible la definición de elementos con contenido mixto, es decir, que incluyan otros elementos además de texto. Además no es posible indicar a qué tipo de dato (número, fecha, moneda) ha de corresponder un atributo o el texto de un elemento.

La necesidad de superar estas limitaciones propicia la aparición de otros lenguajes de esquema como XML Schema, herramientas más completas de descripción que son una alternativa a las DTD.

Véase también 
 RSS
 Web semántica
 Validación XML
 XML Schema
 CDATA

Enlaces externos 
 DTD Tutorial
 Diferentes tipos de documentos para HTML 
 Tutorial de DTD — Teoría, ejemplos y ejercicios resueltos con Licencia Creative Commons.

Lenguajes de marcado
Siglas de informática