DTD (Document Type Definition) es un lenguaje utilizado en XML (Extensible Markup Language) para definir la estructura y las reglas de validación de un documento XML. En otras palabras, un DTD especifica cómo debe organizarse un documento XML y qué elementos y atributos son permitidos, así como sus relaciones y restricciones.
Describir la estructura del un documento
Mantener la consistencia de un documento
Permite la validación
Facilita la compartición
Un DTD define:
Elementos que son permitidos y el contenido de dichos elementos
Atributos y sus valores válidos.
Estructura válida, indicando el orden en el que se pueden escribir los elementos de un documento
Un ejemplo (wikipedia) 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>
Declaraciones: <! .... >
Existen 4 tipos de declaraciones:
Elemento (ELEMENT)
Atributo (ATTLIST)
Entidad (ENTITY)
Notación (NOTATTION)
Define un elemento (etiqueta) nuevo: <!ELEMENT nombre contenido>
Contenido:
EMPTY (Nada) indica que el elemento no incluye contenido.
ANY indica que puede contener cualquier contenido: elementos o texto
#PCDATA indica que solo puede contener texto.
Modelo de grupo: determina las reglas para la secuencia y la elección de elementos hijos en un documento XML.
Lista:
secuencia: " , " Especifica que los elementos deben aparecer en un orden específico.
elección: " | " Indica que sólo uno de los elementos listados puede aparecer. Por ejemplo, <!ELEMENT A (B | C)> significa que el elemento A puede contener o bien B o bien C, pero no ambos.
ocurrencias:
?: El elemento es opcional (0 o 1 vez).
*: El elemento puede ocurrir cero o más veces.
+: El elemento debe aparecer una o más veces.
Modelo mixto