El ejemplo es con una cartelera de cine, con un listado de las películas e información relativa a ella.
XML facilita la estructuración de los documentos HTML, y las DTD "obligan" a seguir unas normas en dicha estructuración.
El diseño y la forma en que se muestre esa información al usuario sigue quedando en manos de las hojas de estilo CSS, o en este caso, de las XSL (que incorporaré más adelante).
Empezamos primero con las películas:
- Archivo mispeliculas.xml
?xml version="1.0"?>
<!DOCTYPE mispeliculas SYSTEM "peliculas.dtd">
<mispeliculas>
<pelicula>
<titulo>Cadena perpetua</titulo>
<director>
<nombre>Frank</nombre>
<apellido>Darabont</apellido>
</director>
<anio_pro>1994</anio_pro>
<genero><drama/></genero>
<actor>
<nombre>Tim</nombre>
<apellido>Robbins</apellido>
</actor>
<actor>
<nombre>Morgan</nombre>
<apellido>Freeman</apellido>
</actor>
<sinopsis>Andy Dufresne is a young and successful banker whose life changes drastically when he is convicted and sentenced to life imprisonment for the murder of his wife and her lover. Set in the 1940's, the film shows how Andy, with the help of his friend Red, the prison entrepreneur, turns out to be a most unconventional prisoner.</sinopsis>
</pelicula>
<pelicula>
<titulo>En tierra hostil</titulo>
<director>
<nombre>Kathryn</nombre>
<apellido>Bigelow</apellido>
</director>
<anio_pro>2008</anio_pro>
<genero><accion/></genero>
<actor>
<nombre>Jeremy</nombre>
<apellido>Renner</apellido>
</actor>
<actor>
<nombre>Anthony</nombre>
<apellido>Mackie</apellido>
</actor>
<premio nombre_premio="Oscar" categoria="Mejor pelicula"/>
<premio nombre_premio="Oscar" categoria="Mejor director"/>
<premio nombre_premio="Oscar" categoria="Mejor guion"/>
<premio nombre_premio="Globo de oro" categoria="Mejor pelicula"/>
<premio nombre_premio="Globo de oro" categoria="Mejor director"/>
</pelicula>
¿Semejanzas entre las dos películas?
- Ambas tienen atributos en común (titulo, director, año, genero y actores). Por lo tanto esos atributos deberían de ser obligatorios.
¿Diferencias entre las dos películas?
- La primera tiene un atributo que la otra no tiene (sinopsis) y viceversa (premios). Por lo tanto, deberían de ser opcionales.
Tenemos atributos obligatorios, donde pueden ser únicos (titulo) o múltiples (actor). También tenemos atributos opcionales, donde pueden ser únicos (sinopsis) o múltiples (premio).
Con esta informacíon podemos trabajar ya en la DTD.
- Archivo
peliculas.dtd
<!ELEMENT mispeliculas (pelicula*)>
<!ELEMENT pelicula (titulo, director, anio_pro, genero, actor+, sinopsis?, premio*)>
<!ELEMENT titulo (#PCDATA)>
<!ELEMENT director (nombre, apellido)>
<!ELEMENT anio_pro (#PCDATA)>
<!ELEMENT genero (accion|drama|comedia|animacion)>
<!ELEMENT actor (nombre, apellido)>
<!ELEMENT sinopsis (#PCDATA)>
<!ELEMENT premio EMPTY>
<!ATTLIST premio
nombre_premio CDATA #REQUIRED
categoria CDATA #REQUIRED>
<!ELEMENT nombre (#PCDATA)>
<!ELEMENT apellido (#PCDATA)>
<!ELEMENT accion EMPTY>
<!ELEMENT drama EMPTY>
<!ELEMENT comedia EMPTY>
<!ELEMENT animacion EMPTY>
Lo importante de este código es ver como marcamos las propiedades antes descritas en el código de la DTD. Fijarse como el simbolo ? indica opcional y único; el simbolo + indica obligatorio y múltiple; el simbolo * opcional y múltiple; y como los atributos obligatorios y únicos no llevan níngun signo.
Con mini ejemplos de este tipo resulta muy fácil desarrollar documentos mucho más amplios y apenas sin necesidad de consultar documentación específica de XML.
- ¿Cómo saber si nuestro código es correcto?
Pues existen herramientas para ello:
http://www.xmlvalidation.com/
En esa sencilla web podremos cargar nuestros archivos y validarlos, incluso con estructura asociada como DTD.
No hay comentarios:
Publicar un comentario