Documentos de Académico
Documentos de Profesional
Documentos de Cultura
El lenguaje XML
(continúa)
<ASIGNATURA>
<NOMBRE>Introducción a la programación</NOMBRE>
<CREDITOS>9</CREDITOS>
<PROFESOR>Luis Hernández</PROFESOR>
<PERIODO>Anual</PERIODO>
<HORARIO>LMX 16-17</HORARIO>
</ASIGNATURA>
<ASIGNATURA>
<NOMBRE>Laboratorio de programación</NOMBRE>
<CREDITOS>4,5</CREDITOS>
<PROFESOR>Luis Hernández</PROFESOR>
<PERIODO>2º Cuatrimestre</PERIODO>
<HORARIO>LMX 15-16</HORARIO>
</ASIGNATURA>
</CURSO>
Como se puede ver, se ha usado XML para describir una base de datos
pequeña (como lenguaje de descripción de bases de datos
XML tiene la ventaja de ser texto simple).
XML no define los elementos (etiquetas) que se pueden usar en los
documentos, sino que define la forma que pueden tener las marcas
de los elementos, dejando al usuario que los elija.
En el documento anterior, hemos usado los siguientes elementos:
CURSO ASIGNATURA
NOMBRE CREDITOS
PROFESOR PERIODO
HORARIO
No son etiquetas predefinidas como las de HTML: son exactamente
las que hemos querido usar.
Además, todos los elementos llevan pares de marcas: tanto la de inicio
como la de cierre (algunos elementos HTML no se cierran).
ASIGNATURA
<CURSO>
<ASIGNATURA>
<NOMBRE>Lógica</NOMBRE>
<CREDITOS>4,5</CREDITOS>
<PROFESOR>Javier Leach</PROFESOR>
<PERIODO>1º Cuatrimestre</PERIODO>
<HORARIO>LMX 15-16</HORARIO>
</ASIGNATURA>
(continúa)
<ASIGNATURA>
<NOMBRE>Introducción a la programación</NOMBRE>
<CREDITOS>9</CREDITOS>
<PROFESOR>Luis Hernández</PROFESOR>
<PERIODO>Anual</PERIODO>
<HORARIO>LMX 16-17</HORARIO>
</ASIGNATURA>
<ASIGNATURA>
<NOMBRE>Laboratorio de programación</NOMBRE>
<CREDITOS>4,5</CREDITOS>
<PROFESOR>Luis Hernández</PROFESOR>
<PERIODO>2º Cuatrimestre</PERIODO>
<HORARIO>LMX 15-16</HORARIO>
</ASIGNATURA>
</CURSO>
El prólogo
El prólogo del documento anterior contiene información general
sobre el documento: versión de XML usada, definición de tipo de
documento, instrucciones de procesamiento.
En el ejemplo el prólogo consiste tan sólo en la declaración XML,
que informa de la versión de XML –1.0 en este caso– y de la
codificación usada, así como un comentario (que toma la misma
forma que en HTML).
Además, como se ve se pueden colocar líneas en blanco para
mejorar la legibilidad.
Los comentarios, por supuesto, son opcionales, pero se anima a que
se incluyan para aclarar aspectos que puedan resultar confusos.
Y aunque la especificación XML dice que se debe incluir la
declaración XML, en realidad también es opcional.
Los elementos
El elemento documento en XML es similar al documento BODY de
HTML, a excepción de que nosotros elegimos su nombre de etiqueta.
En este caso es CURSO y contiene elementos de tipo ASIGNATURA.
Igualmente, cada elemento ASIGNATURA contiene una serie
de elementos anidados:
Tipo (etiqueta)
Tipo (etiqueta)
<PROFESOR>Javier Leach</PROFESOR>
Pulsando
el + se
vuelve a
desplegar
el contenido
Error en
la etiqueta
de cierre
<CURSO>
<ASIGNATURA>
<NOMBRE>Lógica</NOMBRE>
<CREDITOS>4,5</CREDITOS>
<PROFESOR>Javier Leach</PROFESOR>
...
Tienda
Equipo Equipo
Nombre
Características:
CPU velocidad,
memoria disco
Opciones
Atributo
Un documento XML sin DTD tan sólo puede ser considerado "bien
formado"; para que sea considerado válido debe llevar la DTD.
La Definición de tipo de documento (DTD) es un bloque de marcado
XML que se debe incluir en el prólogo, a continuación de la
declaración XML.
La DTD define la estructura del documento: si se abre un documento
XML sin DTD, simplemente se comprueba si el documento está bien
formado, pero si lleva DTD también se comprobará su validez (que
no se usen atributos no especificados o que el orden sea correcto).
Forma general de una DTD:
<!DOCTYPE Nombre DTD>
donde Nombre es el elemento raíz (documento) y DTD es la
definición de tipo de documento, que está delimitada por [ ] y
contiene la descripción de los elementos, atributos, etcétera.
Por ejemplo:
<!ATTLIST Nombre TIPO (uno|dos|tres)>
<CURSO>
<ASIGNATURA>
<NOMBRE>Lógica</NOMBRE>
<CREDITOS>4,5</CREDITOS>
<PROFESOR CATEGORIA="Catedratico"
EMAIL="jla@sip.ucm.es" TELEFONO="912345679">
Javier Leach</PROFESOR>
<PERIODO>1º Cuatrimestre</PERIODO>
<HORARIO>LMX 15-16</HORARIO>
</ASIGNATURA>
(continúa)
<ASIGNATURA>
<NOMBRE>Introducción a la programación</NOMBRE>
<CREDITOS>9</CREDITOS>
<PROFESOR CATEGORIA="Titular"
EMAIL="lhy@sip.ucm.es" TELEFONO="912345678">
Luis Hernández</PROFESOR>
<PERIODO>Anual</PERIODO>
<HORARIO>LMX 16-17</HORARIO>
</ASIGNATURA>
<ASIGNATURA>
<NOMBRE>Laboratorio de programación</NOMBRE>
<CREDITOS>4,5</CREDITOS>
<PROFESOR CATEGORIA="Titular">
Luis Hernández</PROFESOR>
<PERIODO>2º Cuatrimestre</PERIODO>
<HORARIO>LMX 15-16</HORARIO>
</ASIGNATURA>
</CURSO>
Una hoja de estilo XSL, más que incluir reglas de estilo, lo que incluye
es una o más plantillas, cada una de las cuales contiene instrucciones
para la visualización de una determinada rama de elementos del
documento XML.
Veamos un ejemplo de plantilla XSL; la aplicaremos al siguiente
documento XML (Asignatura.xml):
<?xml version="1.0" encoding="UTF-7"?>
<!-- File name: Asignatura.xml -->
<?xml-stylesheet type="text/xsl" href="Asignatura.xsl"?>
<ASIGNATURA>
<NOMBRE>Introducción a la programación</NOMBRE>
<CREDITOS>9</CREDITOS>
<PROFESOR>Luis Hernández</PROFESOR>
<PERIODO>Anual</PERIODO>
<HORARIO>LMX 16-17</HORARIO>
</ASIGNATURA>
Una hoja de estilo XSL con una plantilla para visualizar todo el
documento sería como la siguiente:
<?xml version="1.0" encoding="UTF-7"?>
<!-- File name: Asignatura.xsl -->
<xsl:stylesheet xmlns:xsl="http://www.w3.org/TR/WD-xsl">
<xsl:template match="/">
<H2>Descripción de asignatura</H2>
<SPAN STYLE="font-style:italic">Profesor: </SPAN>
<xsl:value-of select="ASIGNATURA/PROFESOR"/><BR/>
<SPAN STYLE="font-style:italic">Asignatura: </SPAN>
<xsl:value-of select="ASIGNATURA/NOMBRE"/><BR/>
<SPAN STYLE="font-style:italic">Créditos: </SPAN>
<xsl:value-of select="ASIGNATURA/CREDITOS"/><BR/>
<SPAN STYLE="font-style:italic">Horario: </SPAN>
<xsl:value-of select="ASIGNATURA/HORARIO"/><BR/>
(continúa)
<ASIGNATURA>
<NOMBRE>Introducción a la programación</NOMBRE>
<CREDITOS>9</CREDITOS>
<PROFESOR>
<PILA>Luis</PILA>
<APELLIDOS>Hernández Yáñez</APELLIDOS>
</PROFESOR>
<PERIODO>Anual</PERIODO>
<HORARIO>LMX 16-17</HORARIO>
</ASIGNATURA>
Ahora el resultado
es el deseado:
<xsl:stylesheet xmlns:xsl="http://www.w3.org/TR/WD-xsl">
<xsl:template match="/">
<H2>Descripción de curso</H2>
<xsl:apply-templates select="CURSO/ASIGNATURA"/>
</xsl:template>
<xsl:template match="ASIGNATURA">
<SPAN STYLE="font-style:italic">Profesor: </SPAN>
<xsl:value-of select="PROFESOR"/><BR/>
<SPAN STYLE="font-style:italic">Asignatura: </SPAN>
<xsl:value-of select="NOMBRE"/><BR/>
(continúa)
Manipulación de datos
Se pueden filtrar u ordenar los datos del documento XML antes de
producir la visualización.
Para filtrar datos, se puede colocar la condición de filtrado detrás del
patrón de plantilla (valor de match) entre corchetes..
Por ejemplo, si se quiere mostrar sólo aquellas asignaturas que
tengan un determinado valor en un elemento hijo, se puede escribir
algo como lo siguiente:
<xsl:template match="ASIGNATURA[CREDITOS='4,5']">
Sólo se verán las asignaturas de 4,5 créditos.
Para ordenar los datos se puede hacer uso del atributo order-by:
<xsl:apply-templates select="CURSO/ASIGNATURA"
order-by="NOMBRE"/>
<INVENTORY>
<BOOK InStock="yes">
<TITLE>The Adventures of Huckleberry Finn</TITLE>
<AUTHOR Born="1835">Mark Twain</AUTHOR>
<BINDING>mass market paperback</BINDING>
<PAGES>298</PAGES>
<PRICE>$5.49</PRICE>
</BOOK>
<BOOK InStock="no">
<TITLE>Leaves of Grass</TITLE>
<AUTHOR Born="1819">Walt Whitman</AUTHOR>
<BINDING>hardcover</BINDING>
<PAGES>462</PAGES>
(continúa)
<PRICE>$7.75</PRICE>
</BOOK>
<BOOK InStock="yes">
<TITLE>The Marble Faun</TITLE>
<AUTHOR Born="1804">Nathaniel Hawthorne</AUTHOR>
<BINDING>trade paperback</BINDING>
<PAGES>473</PAGES>
<PRICE>$10.95</PRICE>
</BOOK>
<BOOK InStock="yes">
<TITLE>Moby-Dick</TITLE>
<AUTHOR Born="1819">Herman Melville</AUTHOR>
<BINDING>hardcover</BINDING>
<PAGES>724</PAGES>
<PRICE>$9.95</PRICE>
</BOOK>
</INVENTORY>
<xsl:stylesheet xmlns:xsl="http://www.w3.org/TR/WD-xsl">
<xsl:template match="/">
<H2>Books In Stock</H2>
<TABLE BORDER="1" CELLPADDING="5">
<THEAD>
<TH>Title</TH>
<TH>Author</TH>
<TH>Binding Type</TH>
<TH>Number of Pages</TH>
<TH>Price</TH>
</THEAD>
<xsl:for-each
select="INVENTORY/BOOK[@InStock='yes']">
<TR ALIGN="CENTER">
(continúa)
<TD><xsl:value-of select="TITLE"/></TD>
<TD>
<xsl:value-of select="AUTHOR"/> <BR/>
(born <xsl:value-of
select="AUTHOR/@Born"/>)
</TD>
<TD><xsl:value-of select="BINDING"/></TD>
<TD><xsl:value-of select="PAGES"/></TD>
<TD><xsl:value-of select="PRICE"/></TD>
</TR>
</xsl:for-each>
</TABLE>
</xsl:template>
</xsl:stylesheet>
El resultado
es el siguiente: