Documentos de Académico
Documentos de Profesional
Documentos de Cultura
Tema 3. DTD
3. DTD
Cabe hacer hincapi en que cuando un documento XML no contiene un DTD, cualquier etiqueta
que aparezca en el mismo se considerar vlida. De manera que el parser solo podr comprobar que
el documento est bien formado. La existencia del DTD permite asegurar que los documentos
siguen las reglas del lenguaje.
Cuando se pretende usar XML en un entorno profesional, es imprescindible la especificacin de un
DTD que defina formalmente el lenguaje de etiquetado requerido. Este debe ser el primer paso
antes de escribir ningn documento XML. Se puede observar una cierta similitud con la forma de
trabajo con una base de datos. Donde el primer paso es la definicin del esquema y posteriormente
el resto de usuarios ya pueden trabajar contra este esquema.
En el captulo anterior hemos visto cmo crear documentos XML bien formados. En este captulo
vamos a conseguir crear documentos bien formados y vlidos. Por ejemplo, el primer ejercicio del
captulo anterior versaba sobre un documento XML que una empresa mandaba a un sitio web para
ofertar ciertos artculos (coches). Imaginemos que muchas empresas mandan informacin a este
sitio web y cada una de ellas implementa su propia versin de documento XML. El sitio web debe
ser capaz de entender todos los documentos que le llegan y tratar la informacin que contienen.
Esto es inviable. La solucin ptima es que la empresa web anunciante cree un DTD donde define
cmo deben ser exactamente los documentos que va a recibir. Todas las empresas que quieran
anunciar productos enviaran documentos XML validados por esta DTD (ya veremos cmo ms
adelante). De esta forma nos aseguramos que el sitio web va a recibir documentos XML vlidos.
Objetivos.
Conocer los elementos principales que contiene un DTD. Saber crear DTD para definir gramticas
sencillas. Saber crear documentos XML bien formados y vlidos. Saber validar un XML contra su
DTD asociado.
Contenido.
3.1.
3.2.
3.3.
3.4.
3.5.
3.6.
1 De 9
Tema 3. DTD
<?xml versin=1.0?>
<[DOCTYPE elemento_raiz [
Las declaraciones internas van aqu
]>
<elemento_raiz></elemento_raiz>
Normalmente un DTD se utiliza para validar un gran nmero de documentos XML. La mayora de
las veces tiene poco sentido que el DTD est incluido dentro del documento XML ya que se tendra
que repetir en todos los documentos XML pertenecientes a un mismo lenguaje (DTD). Teniendo
esto en cuenta se puede distinguir entre dos tipos de referencias externas:
En caso de utilizar un DTD que ha sido publicado utilizaremos la palabra PUBLIC seguida
por el identificador pblico asociado a este DTD. Sigue siendo necesario incluir la URL al
fichero DTD que solo ser utilizado en caso de fallar la localizacin del fichero. Usando el
identificador pblico: <!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01//EN"
"http://www.w3.org/TR/html4/strict.dtd">. Que es la DTD pblica utilizada para validar
documentos XHTML estrictos. (Al fin y al cabo los documentos XHTML no son ms que
documentos HTML que utilizan DTD's para asegurar que el documento HTML es vlido).
Tema 3. DTD
Alternativos: Cuando el elemento contiene uno y solo uno de los elementos hijos
especificados. Por ejemplo: <!ELEMENT persona (fsica | jurdica)>
Ejemplo:
<!ELEMENT elem (a, (b|c)*, d+, e?>
De acuerdo a este declaracin podemos encontrarnos con los siguientes documentos vlidos:
<elem><a></a><d></d><elem>
<elem><a></a><d></d><d></d><e></e><elem>
<elem><a></a><b></b><d></d><elem>
<elem><a></a><c></c><b></b><c></c><d></d><elem>
3 De 9
Tema 3. DTD
Puede haber mltiples definiciones de listas de atributos para un mismo elemento. Pero si se declara
varias veces el mismo atributo solo prevalece el primero.
4 De 9
Tema 3. DTD
Tema 3. DTD
6 De 9
Tema 3. DTD
Una vez abierto el documento si pulsamos sobre el botn sealado con la flecha nos debe aparecer
en la parte inferior (barra de estado) el texto the XML document is valid. Esto significa que el
documento XML es vlido. En caso contrario, imaginemos que por error introducimos dos etiquetas
<de> en el documento:
<?xml version="1.0" encoding="ISO-8859-1" ?>
<!DOCTYPE mensaje [
<!ELEMENT mensaje (para,de,titulo,cuerpo)>
<!ATTLIST mensaje prioridad (urgente | normal | baja) #REQUIRED>
<!ELEMENT para (#PCDATA)>
<!ELEMENT de (#PCDATA)>
<!ELEMENT titulo (#PCDATA)>
<!ELEMENT cuerpo (#PCDATA)>
]>
<mensaje prioridad="normal">
<para>Jose</para>
<de>Maria</de>
<de>Maria</de>
<titulo>Recordatorio</titulo>
<cuerpo>Recuerda que el sbado iremos al cine</cuerpo>
</mensaje>
Si ahora procedemos a comprobar la validez del documento:
CookTop nos mostrar el siguiente error, ya que en el DTD tenemos definido solo un elemento
<de>. El texto de la barra de estado cambiar a the XML Document is not valid.
La segunda manera de declarar el DTD con el que hay que validar un fichero XML, y la ms
utilizada, es separar el documento XML del DTD. Por tanto la declaracin DTD ir en un fichero y
el XML en otro fichero. Esto es muy habitual porque si hay que generar muchos documentos XML
que se validan con un mismo DTD no es prctico incluir en todos los documentos XML la
declaracin DTD. Imaginemos el ejemplo del tema anterior. Donde debemos mandar un
documento XML con informacin sobre los coches que tenemos en oferta. Adems de mandarlo
nosotros es fcil imaginar que muchos concesionarios mandan peridicamente esta informacin al
portal para que se actualice. Por tanto es lgico pensar dos cosas. La primera que no tiene sentido
mandar el DTD junto con todos los ficheros porque estamos repitiendo la misma informacin
muchas veces. La segunda el DTD deber ser comn para todos los concesionarios de forma que el
portal de ofertas entienda perfectamente cualquier XML que le mandan los concesionarios. Por
tanto lo lgico es que sea el portal quien disee el DTD con la informacin que necesita y cmo la
necesita. Los concesionarios crean los documentos XML con la estructura dada y los mandan al
portal, el cual, los valida antes de tratarlos.
7 De 9
Tema 3. DTD
Podemos comprobar igual que con el DTD externo a introducir algn error (como la duplicacin del
elemento <de>) y ver como Cooktop nos informa del error.
8 De 9
Tema 3. DTD
3.6. Ejercicios
3.6.1. Libros y CD
Escribir un DTD para cada una de las soluciones dadas por el profesor a los ejercicios del tema
anterior. El de la bsqueda de libros y el del CD. Realizar las modificaciones necesarias en los
documentos XML para que se validen contra los DTD's creados.
Queda como ejercicio voluntario crear tambin los DTD de las soluciones que cada uno entreg.
3.6.2. Recetas
El fichero recetas.txt al que tenis acceso en la plataforma del curso tiene definidas una serie de
recetas de un conocido chef. Se debe crear un DTD para modelar esta informacin y crear un
documento XML con las recetas que se valide con este DTD.
9 De 9