En la elaboraci�n de una DTD podemos diferenciar tres pasos:
- El proceso de abstracci�n de los elementos que forman un tipo de documento y las relaciones que existen entre ellos.
- Plasmaci�n de este proceso de abstracci�n en una DTD.
- Validaci�n de la DTD y verificaci�n pr�ctica de que se ajusta a nuestras necesidades.
Estructura l�gica del tipo de documento art�culo
La primera parte es sin duda alguna la m�s complicada y posiblemente la m�s importante. Es el momento en el cual vamos a estructurar la informaci�n que luego representaremos mediante una DTD. No es un problema de conocer el XML o de saber las DTD. Es sobretodo una cuesti�n de tener clara la informaci�n con la que vamos a trabajar, qu� elementos la componen,qu� caracter�sticas tienen y c�mo vamos a organizarla.
Un art�culo a un nivel general est� formado por dos partes bien diferenciadas: el contenido del art�culo y la metainformaci�n sobre el art�culo.

La metainformaci�n no es m�s que la informaci�n relativa al contenido del documento, como su t�tulo, autor, tama�o del archivo, fecha de creaci�n, historial de los cambios, palabras clave, y dem�s informaci�n asociada.
En nuestro caso vamos a utilizar:
- t�tulo
- autor
- palabras clave
- resumen

En esta parte podr�amos poner mucha m�s informaci�n, toda la que creamos que nos puede hacer falta. Toda esta informaci�n nos puede resultar �til, por ejemplo,para la b�squeda y gesti�n de estos documentos.
En la parte de contenido tendremos que identificar los elementos que nos permitan representar esos contenidos. Si tomamos como ejemplo este tutorial, que puede considerarse como una generalizaci�n de nuestro documento art�culo, observamos que la informaci�n est� organizada en bloques de texto (p�rrafos, listas, tablas) e im�genes. Y que adem�s estos bloques est�n organizados estructuralmente en cap�tulos y subcap�tulos Esta estructura para nuestros art�culos ser� igual: representaremos la informaci�n mediante elementos p�rrafos, listas, im�genes, etc. y la organizaremos en subcapitulo1es y subsubcapitulo1es.
En nuestro caso utilizaremos exactamente los siguientes elementos:
- p�rrafos
- listas, tanto ordenadas como desordenadas
- im�genes
- c�digo, ya que nuestros art�culos (al menos en el ejemplo que desarrollamos) ser�n sobre temas inform�ticos.

Y estructuralmente toda la informaci�n anterior podr� estar organizada en subcapitulo1es.

Tambi�n debemos tener en cuenta qu� elementos pueden existir dentro de esos bloques de texto. Podr�amos querer destacar parte del contenido del texto, porque es el nombre de una funci�n o el nombre de un autor; podr�amos querer poner referencias a otro documentos u otros direcciones, etc.
En nuestro caso, utilizaremos exactamente los siguientes:
- Un elemento mediante el cual destacaremos parte del contenido
- Enlaces

Hasta el momento ya hemos visto qu� elementos pueden formar nuestro documento art�culo y c�mo est�n organizados. Pero nos falta por ver un detalle muy importante: que propiedades tienen.
Por ejemplo, tenemos el elemento imagen mediante el cual nos ser� posible incluir im�genes en nuestro art�culo. Algunas propiedades posibles son: el fichero en el que se encuentra la imagen, qu� dimensiones tendr�, cu�l ser� su tama�o, etc.
Nuestro ejemplo ser� sencillo, y los �nicos elementos que tendr�n propiedades ser�n los elementos enlace e imagen.
- El enlace tendr� una propiedad mediante la cual indicaremos la ubicaci�n del recurso destino y otra mediante la cual describiremos el recurso.
- La imagen tendr� una propiedad mediante la cual indicaremos la ubicaci�n del fichero que la contiene y otra mediante la cual describiremos el recurso.
�Representaci�n en una DTD de esta estructura l�gica
Ya tenemos una representaci�n abstracta de la estructura de un tipo de documento art�culo y ,por tanto,ya estamos en condiciones de escribir una DTD que represente dicha estructura.
Lo primero es elegir el nombre del elemento ra�z, que denominaremos articulo. Por tanto, el documento XML tendr� el siguiente aspecto:
<articulo> ....... </articulo>
y en nuestra DTD:
<!ELEMENT articulo (metainfo, cuerpo)>
donde indicaremos que est� formado por los elementos metainfo y cuerpo obligatorios y en ese orden.
El elemento metainfo estar� formado por los elementos titulo, autor, pclave, y resumen.
<!ELEMENT metainfo (titulo, autor, pclaves?, resumen?)>
Donde indicaremos que los elementos pclaves y resumen son optativos.
El contenido del elemento titulo s�lo puede ser texto:
<!ELEMENT titulo (#PCDATA)>
El contenido del elemento autor ser�n los elementos nombre, email, url. De esta manera permitimos incluir m�s informaci�n sobre el autor del art�culo,
<!ELEMENT autor (nombre, email?, url?)>
aunque solo es obligatorio el elemento nombre. El contenido de estos tres elementos es simplemente texto:
<!ELEMENT nombre (#PCDATA)> <!ELEMENT email (#PCDATA)> <!ELEMENT url (#PCDATA)>
El elemento pclaves, que no es obligatorio, tiene como contenido s�lo texto:
<!ELEMENT pclaves (#PCDATA)>
Y el elemento resumen, que tampoco es obligatorio, est� formado s�lo por texto:
<!ELEMENT resumen (#PCDATA)>
A continuaci�n pasamos a describir los elementos del elemento contenido, que identificaremos mediante la etiqueta cuerpo.
El elemento cuerpo empezar� por un elemento titulo seguido de subcapitulo1es, aunque puede ser que el autor comience el art�culo por alguno de los elementos que hemos englobado como bloques de texto e im�genes.
<!ELEMENT cuerpo (titulo, (para | imagen | lds | lo | codigo)* ,subcapitulo1*)>
Mediante el elemento para representaremos los p�rrafos.
<!ELEMENT para (#PCDATA|destacar|enlace)*>
Su contenido, adem�s de texto, es el elemento destacar y enlace.
Y el elemento imagen:
<!ELEMENT imagen EMPTY> <!ATTLIST imagen direccion CDATA #REQUIRED> descripcion CDATA #REQUIRED>
Ser� un elemento vacio. Sus caracter�sticas est�n determinadas en el valor de sus atributos:
- direccion, donde indicaremos la localizaci�n del fichero que contiene la imagen. Es obligatorio.
- descripcion, donde escribiremos una descripci�n de la imagen. Es obligatorio.
Mediante el elemento lds indicamos las listas desordenadas las cuales pueden estar formadas por los elementos de entrada de lista o por otras listas:
<!ELEMENT lds (il, (il | lds | lo)*)>
Y el elemento lo indicar� listas ordenadas:
<!ELMENT lo (il, (il | lds |lo)*)>
Mediante el elemento il indicamos los elementos que forman la lista, y cuyo contenido es el siguiente:
<!ELEMENT il (#PCDATA|destacar|enlace)*>
Mediante el elemento codigo indicamos que lo que vamos a escribir es c�digo.
<!ELEMENT codigo (#PCDATA)>
Su contenido s�lo es texto.
El art�culo podr� estar dividido en subcapitulo1es. Vamos a limitar las subcapitulo1es posibles a dos niveles. Las de primer nivel las identificaremos mediante el elemento subcapitulo1 y las de segundo nivel mediante el elemento subcapitulo11. Aunque esta estructuraci�n no es obligatoria.
<!ELEMENT cuerpo (titulo, (para | imagen | lds | lo | codigo)* ,subcapitulo1*)>
<!ELEMENT subcapitulo1
(titulo, (para | imagen | lds | lo | codigo)*, subcapitulo11*)>
<!ELEMENT subcapitulo11 (titulo, (para | imagen | lds | lo | codigo)*)>
Las subcapitulo1es deben comenzar por el elemento titulo y van a estar identificadas de forma un�voca por un atributo id.
<!ATTLIST subcapitulo1 id ID #REQUIRED> <!ELEMENT subcapitulo11 (titulo, (para | imagen | lds | lo | codigo)*)> <!ATTLIST subcapitulo11 id ID #REQUIRED
Hay que tener claro que cuanto m�s identificados tengamos los elementos y m�s informaci�n tengamos sobre cada uno ,mejor;.m�s acciones podremos realizar posteriormente sobre el documento. En nuestro caso,por sencillez, s�lo identificaremos mediante un atributo de tipo ID las subcapitulo1es. Pero en los pr�ximos cap�tulos, que veremos la DTD para escribirlas FAQS, o la DTD del WML,comprobaremos quw como todos los elementos est�n identificados mediante el atributo de ID.
Y, por �ltimo, s�lo nos faltan definir los elementos en l�nea que como ya hemos visto aparecen en los elementos para y il.
Mediante el elemento destacar, resaltaremos texto.
<!ELEMENT destacar (#PCDATA)>
Su contenido s�lo puede ser texto.
Mediante el elemento enlace podremos hacer referencia a un recurso externo.
<!ELEMENT enlace (#PCDATA)>
Su contenido s�lo puede ser texto y ser� precisamente el ancla del enlace.
Sus atributos coinciden con las del elemento imagen, teniendo la misma funcionalidad.
<!ATTLIST imagen direccion CDATA #REQUIRED> descripcion CDATA #REQUIRED>
La DTD completa la pod�is encontrar en el archivo
articulo.dtd
�Ejercicio: Ejemplo m�nimo de XML para la DTD art�culo.
Escribir el m�nimo XML v�lido que se ajuste a la DTD que nos define la estructura de la DTD para escribir art�culos.
Soluci�n:
Simplemente tenemos que fijarnos en los elementos que hemos indicando que son obligatorios.
<?xml version="1.0" encoding="ISO-8859-1"?> <!DOCTYPE articulo SYSTEM "articulo.dtd"> <articulo> <metainfo> <titulo>Documento XML m�nimo para la DTD de art�culos</titulo> <autor> <nombre>Joaquin Bravo Montero</nombre> </autor> </metainfo> <cuerpo> <titulo>Documento XML m�nimo para la DTD de art�culos</titulo> </cuerpo> </articulo>
Y para verificarlo, suponiendo que a dicho fichero lo hemos llamado minimoarticulo.xml y que el archivo articulo.dtd se encuentra en el mismo directorio:
pxml minimoarticulo.xml
�Ejercicio: Art�culo en XML
Escribir en XML un art�culo sobre un tema que te interese.
Soluci�n:
En el
art�culo se describe c�mo generar WML desde un Servlet.