DTD (Document Type Definition) es la definición de cómo se construye un documento XML para que se ajuste a las necesidades previamente analizadas. Es decir, establece qué elementos son aceptados y en qué posiciones deben estar dentro de un documento XML.
Cuando se define una DTD y se referencia dentro de un documento XML, se establece una relación de:
- Qué léxico es el que se espera.
- Qué reglas sintácticas debe cumplir nuestro lenguaje.
El significado semántico se proporciona en el uso del DTD y del documento XML al generar las aplicaciones que lo utilizan.
Por tanto, antes de crear un documento XML se deberá analizar qué elementos y etiquetas se van a necesitar para la aplicación que se quiere crear. Para esto sirve una DTD.
¿Por qué resulta importante la creación de DTD? Principalmente, cuando se analiza un almacenamiento de información en XML es porque esa información es importante compartirla. Pero aunque la compartición de la información pueda resultar interesante, que la información esté sujeta a una serie de reglas para que todos los que lo utilicen (en consultas, inserciones, modificaciones, borrados, etc.); se asegure que esté bien formado y resulte válido para el uso por terceras aplicaciones. Si en el proceso de acceso y modificación del documento XML se incumple su estructura, nos encontraremos con un documento no válido y con un futuro problema en su futura utilización. Por tanto una DTD permitirá asegurar que la información que contiene es válida y cumple los requisitos de intercambio de información entre terceras (personas con la misma DTD).
La creación de una DTD resulta muy simple y se verá más adelante pero resulta interesante como ubicar estas declaraciones:
- La DTD se puede ubicar dentro del propio documento XML.
- La DTD se ubica fuera del documento XML (en un fichero externo).
Ambas realizan la misma función pero resulta más cómoda utilizar un fichero externo para almacenar la DTD y realizar un enlace en el documento XML para que la use. Además de la comodidad, existe otra ventaja fundamental: no se almacena en cada documento XML la DTD. Si tuviéramos muchos ficheros XML que se basan en la misma especificación DTD, se tendría que cambiar en todos los fichero la declaración de la DTD, cosa que si estuviera enlazado en un fichero externo, se cambiaría una única vez y todos los documentos XML lo aprovecharían. Además se estaría almacenando la misma información en todos los documentos, lo que aumentaría el tamaño del documento XML.
Para continuar, establezcamos un ejemplo en el que utilizar una DTD. Se quiere almacenar los mensajes de móviles que se envían a un servidor. Los datos que se guardarán son los siguientes:
- Número de teléfono del usuario.
- Fecha de envío.
- Hora de envío.
- Contenido del mensaje.
Un ejemplo de documento XML que guarde estos mensajes SMS podría ser el siguiente:
<?xml version="1.0" encoding="ISO-8859-1"?>
<!DOCTYPE BDsms SYSTEM "BDsms.dtd">
<BDsms>
<sms>
<telefono>955 55 66 55</telefono>
<fecha>1/7/2011</fecha>
<hora>23:55</hora>
<mensaje>Juego1: Tetris</mensaje>
</sms>
<sms>
<telefono>745 15 56 11</telefono>
<fecha>22/9/2011</fecha>
<hora>15:05</hora>
<mensaje>Juego2: Arkanoid</mensaje>
</sms>
<sms>
<telefono>842 35 22 00</telefono>
<fecha>10/11/2011</fecha>
<hora>09:22</bora>
<mensaje>Juego3: Comecocos</mensaje>
</sms>
</BDsms>