DTD de bookmarks
En este apartado vamos a escribir una DTD que nos permitirá estructurar y mantener en formato XML nuestras direcciones preferidas.
Para hacernos una idea de los elementos que nos permiten definir una dirección podemos dar una vuelta por algunos de los buscadores más conocidos y observar qué información suelen presentar sobre una dirección.
Si por ejemplo visitamos Altavista, observaremos que al presentarnos una dirección nos ofrece la siguiente información:
Por tanto, una dirección la podríamos representar mediante los siguientes elementos:
- Título de la dirección
- URL de la dirección
- Descripción
- Idioma del contenido de la dirección.
A los cuales nosotros añadiremos también un elemento valoración, que nos permitirá indicar nuestro criterio sobre una dirección.
Un borrador de documento XML, mediante el cual representamos una dirección, podría ser:
<direccion>
<titulo>....</titulo>
<url>...</url>
<descripcion>...</descripcion>
<idioma>...</idioma>
<valoracion>...</valoracion>
</direccion>
Y ordenándolo un poco:
<direccion idioma="" valoracion="">
<titulo>....</titulo>
<url>...</url>
<descripcion>...</descripcion>
</direccion>
Ejercicio: Escribir DTD para el elemento direccion.
Escribir una pequeña DTD que se ajuste al XML anterior. Teniendo en cuenta que:
- El contenido de los elementos titulo, url y descripcion:
- Sólo pueden ser texto.
- Tienen que aparecer en ese orden.
- Y el único elemento no obligatorio es la descripción.
- Los atributo idioma son obligatorios.
- El atributo valoracion sólo puede tener valores entre 1 y 5 y por defecto su valor es 1.
- El atributo idioma sólo puede tener los valores esp y ing.
Solución:
La solución es:
<!ELEMENT direccion (titulo, url, descripcion?)>
<!ATTLIST direccion
valoracion (1|2|3|4|5) "1"
idioma (esp|ing) #REQUIRED>
<!ELEMENT titulo (#PCDATA)>
<!ELEMENT url (#PCDATA)>
<!ELEMENT descripcion (#PCDATA)>
Ahora lo que nos falta es crear unos elementos que nos permitan agrupar las direcciones en grupos (al estilo de las carpetas de Windows), de manera que las podamos tener ordenadas en conjuntos y subconjuntos.
Es decir, de una forma similar a ésta:
<bookmark>
<titulo>Mis direcciones favoritas</titulo>
<descripcion>Direcciones favoritas.</descripicion>
....direcciones....
<grupo id="deporte">
<titulo>Deportes</titulo>
....direcciones...
<grupo id="futbol">
<titulo>Futbol</titulo>
.....direcciones...
</grupo>
</grupo>
...direcciones
<bookmark>
Ejercicio: Escribir la DTD de bookmarks
Ampliar la mini DTD que hemos escrito para una dirección, de manera que nos permita agrupar las direcciones en grupos y subgrupos al estilo del Explorador de Windows.
- El elemento raíz se llamara bookmark y está formado por los siguiente elementos:
- Un elemento metainfo al estilo de la DTD de artículos.
- Por un elemento titulo.
- Por un elemento descripcion optativo que sólo puede aparecer una vez.
- Y a continuación aparecerán direcciones o grupos de direcciones.
- Las carpetas se llamarán grupo y podran contener otros elementos grupo y por supuesto direcciones.
- Cada grupo tendrá un atributo id que lo identifique de forma unívoca.
- Su primer elemento es el elemento titulo.
- Luego puede estar formado indistamente por direcciones o grupos de direcciones.
- Como mínimo, en el caso de que no tenga otro grupo, deberá tener al menos una dirección.
Solución:
Ésta sería la DTD:
<!ELEMENT bookmark (metainfo,titulo,descripcion?,(direccion | grupo)+)>
<!-- ...Aqui va desarrollado el elemento metainfo ... -->
<!ELEMENT descripcion (#PCDATA)>
<!ELEMENT grupo (titulo,(direccion | grupo)+)>
<!ATTLIST grupo
id ID #REQUIRED>
<!ELEMENT direccion (titulo, url, descripcion?)>
<!ATTLIST direccion
valoracion (1|2|3|4|5) "1"
idioma (esp|ing) #REQUIRED>
<!ELEMENT url (#PCDATA)>
DTD completa
Mínimo XML para la DTD de bookmarks
Escribir el documento XML mínimo que se ajuste a la DTD para "bookmarks".
Solución:
Sólo tenemos que fijarnos en los elementos de la DTD que sean obligatorios.
<?xml version="1.0" encoding="ISO-8859-1"?>
<!DOCTYPE bookmark SYSTEM "bookmark.dtd">
<bookmark>
<metainfo>
<titulo>Mis direcciones favoritas</titulo>
<autor>
<nombre>Joaquin Bravo Montero</nombre>
</autor>
</metainfo>
<titulo>Mis direcciones favoritas</titulo>
<direccion idioma="esp">
<titulo>Programacion en castellano</titulo>
<url>http://www.programacion.net</url>
</direccion>
</bookmark>
NOTA: Visualizar el documento XML, por ejemplo en el IE5 y observar qué pasa con el atributo valoracion.
minimobookmark.xml
Bookmark en XML sobre el tema seleccionado.
Escribir en XML un documento bookmark sobre el tema seleccionado.
Solución:
En el
bookmark se recogen interesantes direcciones sobre WML y WAP.