Anda di halaman 1dari 16

A P U N T E S X ML

- 28 -




Antonio Prez-Aradros Herrero

X S L
A P U N T E S X ML


- 29 -




Antonio Prez-Aradros Herrero
Definicin

XSL es el acrnimo de EXtensible Stylesheet Language

Es un lenguaje que nos permite definir un conjunto de reglas que, aplicadas sobre un documen-
to XML, permite transformarlo en un resultado formateado ms adecuado a nuestros intereses.
El fichero que almacena esas reglas recibe el nombre de Hoja de Estilo XSL.

Cada regla se compone de un patrn (pattern) y una accin o plantilla (template)







Para crear un archivo de este tipo
















Y el editor se encarga de insertar el cdigo necesario que lo identifica como un fichero XSL






XSL es a XML, lo que CSS a HTML

<?xml version="1.0" encoding="ISO-8859-1"?>
<xsl:stylesheet version="1.0" xmlns:xsl="http://www.w3.org/1999/XSL/Transform"
xmlns:fo="http://www.w3.org/1999/XSL/Format">



</xsl:stylesheet>

Conjunto de reglas
A P U N T E S X ML


- 30 -




Antonio Prez-Aradros Herrero

Para asignar el fichero XSL al XML...













Se elige el fichero XSL que se desea asociar










Y el editor se encarga de insertar el cdigo necesario





<?xml-stylesheet type="text/xsl" href="motogp.xsl"?>

A P U N T E S X ML


- 31 -




Antonio Prez-Aradros Herrero
Ejemplo

Sea el siguiente fichero XML conteniendo una serie de libros



































<?xml version="1.0" encoding="ISO-8859-1"?>
<biblioteca>
<libro>
<titulo>Arde Pars</titulo>
<autor>Dominique Lapierre</autor>
<publicacion>1975</publicacion>
<editorial>Alfaguara</editorial>
<isbn>97884010101</isbn>
<fecha_compra>15-04-2014</fecha_compra>
</libro>
<libro>
<titulo>El corazn helado</titulo>
<autor>Almudena Grandes</autor>
<publicacion>2010</publicacion>
<editorial>Planeta</editorial>
<isbn>9781234567</isbn>
<fecha_compra>25-03-2014</fecha_compra>
</libro>
<libro>
<titulo>Astrix el Galo</titulo>
<autor>Albert Uderzo</autor>
<publicacion>1970</publicacion>
<editorial>La Galia</editorial>
<isbn>978987654</isbn>
<fecha_compra>18-06-2014</fecha_compra>
</libro>
</biblioteca>

Ejemplo1.xml
A P U N T E S X ML


- 32 -




Antonio Prez-Aradros Herrero
Sea el siguiente fichero XSL





























Vamos a comentar los aspectos ms importantes del ejemplo y ver qu significan algunas par-
tes de su cdigo.

Es un fichero XML bien formado
Aparecen etiquetas HTML ya conocidas (html, body, h1, tr, td, ). Lo que se pretende
es transformar el fichero XML con los datos en un fichero HTML que pueda ser presen-
tado por el navegador.
Al asociar el XML con el XSL, la visualizacin que se consigue del mismo con un na-
vegador es, en este caso, la siguiente:










<?xml version="1.0" encoding="ISO-8859-1"?>
<xsl:stylesheet version="1.0" xmlns:xsl="http://www.w3.org/1999/XSL/Transform"
xmlns:fo="http://www.w3.org/1999/XSL/Format">
<xsl:template match="/">
<html>
<body>
<h1>Mi biblioteca</h1>
<table>
<tr bgcolor="LightBlue">
<th>Ttulo</th>
<th>Autor</th>
</tr>
<xsl:for-each select="biblioteca/libro">
<tr>
<td><xsl:value-of select="titulo"/></td>
<td><xsl:value-of select="autor"/></td>
</tr>
</xsl:for-each>
</table>
</body>
</html>
</xsl:template>
</xsl:stylesheet>
Ejemplo1.xsl
A P U N T E S X ML


- 33 -




Antonio Prez-Aradros Herrero





Recuerda que para asociarlos, hay que ir al XML y














Para ver el resultado, se puede abrir desde el explorador de archivos el fichero XML o
tambin desde dentro del propio editor























Por eso hemos dicho antes que.


Construye ambos ficheros con los datos anteriores,
ascialos y comprueba que el resultado es el indi-
cado ms arriba
Compara el aspecto del fichero en formato
Text y en formato Browser
XSL es a XML, lo que CSS a HTML

A P U N T E S X ML


- 34 -




Antonio Prez-Aradros Herrero

Las partes de cdigo que no conocemos son las siguientes:







Indica la parte del fichero que se va a transformar con el formato (la plantilla) que se in-
dique en el interior. En este caso es todo el fichero match="/"









Para cada uno de los elementos libro que encuentra en la biblioteca realiza las instruc-
ciones indicadas.

Es la forma en la que XSL crea un bucle.







Devuelve el valor del elemento seleccionado, en este caso el ttulo de cada uno de los li-
bros.

<xsl:template match="/">
::::::::::
</xsl:template>

<xsl:for-each select="biblioteca/libro">
::::::::::
</xsl:for-each>

<xsl:value-of select="titulo"/>


A P U N T E S X ML


- 35 -




Antonio Prez-Aradros Herrero
OTROS ELEMENTOS






Permite ordenar la salida

Debe usarse siempre dentro de un <xsl:for-each> o <xsl:apply-templates>


Siguiendo con el ejemplo anterior, si ponemos en el XSL











La salida que se produce es la siguiente











<xsl:for-each select="biblioteca/libro">
<xsl:sort select="titulo"/>
<tr>
<td><xsl:value-of select="titulo"/></td>
<td><xsl:value-of select="autor"/></td>
</tr>
</xsl:for-each>

xsl:sort

AYUDA
Tiene algunos atributos interesantes.
Bscalos en w3schools.com

A P U N T E S X ML


- 36 -




Antonio Prez-Aradros Herrero





Permite establecer una condicin.

Su sintaxis es:

<xsl:if test="expression">
::::::
</xsl:if>


Por ejemplo, para mostrar solo los libros cuyo ao de publicacin sea inferior al 2000, se
pondra












Y la salida que se produce es









La misma salida se producira de la siguiente forma:










xsl:if

<xsl:for-each select="biblioteca/libro">
<xsl:if test="publicacion &lt; 2000">
<tr>
<td><xsl:value-of select="titulo"/></td>
<td><xsl:value-of select="autor"/></td>
</tr>
</xsl:if>
</xsl:for-each>

Ha mirado todos los libros de la biblioteca y si su
ao de publicacin ha sido menor que 2000 ha
construido una fila de la tabla y ha mostrado el
ttulo y el autor.

<xsl:for-each select="biblioteca/libro[publicacion &lt; 2000]">
<tr>
<td><xsl:value-of select="titulo"/></td>
<td><xsl:value-of select="autor"/></td>
</tr>
</xsl:for-each>

Filtros

Observa el uso de
la entidad &lt;
A P U N T E S X ML


- 37 -




Antonio Prez-Aradros Herrero
En este caso es el propio for-each el que proporciona un filtro y solo a los nodos que
cumplen la condicin se les aplica el formato indicado.


Los operadores lgicos que se pueden utilizar para cambiar el patrn de bsqueda o el fil-
trado son los siguientes:

Igual a = Distinto a !=
Menor que &lt; Mayor que &gt;


A P U N T E S X ML


- 38 -




Antonio Prez-Aradros Herrero




Permite expresar condiciones mltiples. Su sintaxis es:

<xsl:choose>
<xsl:when test="expression1">
:::::
</xsl:when>
<xsl:when test="expression2">
:::::
</xsl:when>
:::::
<xsl:otherwise>
:::::
</xsl:otherwise>
</xsl:choose>

En caso de cumplirse la condicin indicada realiza el cdigo correspondiente y salta a la
siguiente lnea al </xsl:choose>. Si no se cumple ninguna condicin y existe la clusula
otherwise realiza lo indicado en ella.


Ejemplo

Se quiere que si el ao de publicacin es anterior al 2000 saque la informacin en gris
claro y si es posterior en gris oscuro.














El cdigo necesario sera el siguiente.

xsl:choose

Se ha aadido la informa-
cin de la publicacin pa-
ra verlo mejor
A P U N T E S X ML


- 39 -




Antonio Prez-Aradros Herrero


































<xsl:for-each select="biblioteca/libro">
<xsl:choose>
<xsl:when test="publicacion &lt; 2000">
<tr bgcolor="gray">
<td><xsl:value-of select="titulo"/></td>
<td><xsl:value-of select="autor"/></td>
<td><xsl:value-of select="publicacion"/></td>
</tr>
</xsl:when>
<xsl:otherwise>
<tr bgcolor="darkgrey">
<td><xsl:value-of select="titulo"/></td>
<td><xsl:value-of select="autor"/></td>
<td><xsl:value-of select="publicacion"/></td>
</tr>
</xsl:otherwise>
</xsl:choose>
</xsl:for-each>

A P U N T E S X ML


- 40 -




Antonio Prez-Aradros Herrero
PLANTILLAS


En todos los ejemplos anteriores se ha usado una nica plantilla que afecta a todo el do-
cumento:







Ahora lo que se va a hacer es definir distintas plantillas, y aplicar cada una de ellas a un
elemento o a otro. Es decir, vamos a poder definir cmo se quiere mostrar el ttulo del libro o el
autor y luego cuando se analice el fichero y se encuentre con un elemento libro (o autor) se
mostrar tal y como se le ha indicado previamente.

Podemos ver, por tanto, el recorrido del documento XML como un conjunto de llamadas
a procedimientos (plantillas), que irn formando el documento final.

Vamos a ver el mismo ejemplo del inicio, ahora con plantillas.


<xsl:template match="/">
:::::
</xsl:template>

A P U N T E S X ML


- 41 -




Antonio Prez-Aradros Herrero














































<?xml version="1.0" encoding="ISO-8859-1"?>
<xsl:stylesheet version="1.0" xmlns:xsl="http://www.w3.org/1999/XSL/Transform"
xmlns:fo="http://www.w3.org/1999/XSL/Format">

<!-- Defino una plantilla para todo el documento -->
<xsl:template match="/">
<html>
<body>
<h1>Mi biblioteca</h1>
<xsl:apply-templates/>
</body>
</html>
</xsl:template>

<!-- Defino una plantilla para el elemento biblioteca -->
<xsl:template match="biblioteca">
<table>
<tr bgcolor="LightBlue">
<th>Titulo</th>
<th>Autor</th>
</tr>
<xsl:apply-templates select="libro"/>
</table>
</xsl:template>

<!-- Defino una plantilla para el elemento libro -->
<xsl:template match="libro">
<tr >
<td><xsl:value-of select="titulo"/></td>
<td><xsl:value-of select="autor"/></td>
</tr>
</xsl:template>

</xsl:stylesheet>

Ejemplo2.xsl
A P U N T E S X ML


- 42 -




Antonio Prez-Aradros Herrero
Las partes de cdigo que no conocemos son las siguientes:





Indica que se apliquen el resto de las plantillas definidas en cuanto se cumplan el
patrn (match) de cada una.
















Cuando encuentre un elemento biblioteca, aplica esta plantilla, es decir crea una tabla,
con una fila de cabecera y aplica la plantilla correspondiente cada vez que encuentra un
elemento libro









Ejemplo

Supongamos que queremos que el ttulo del libro aparezca en azul y el nombre del autor,
en rojo.









<xsl:template match="biblioteca">
<table>
<tr bgcolor="LightBlue">
<th>Titulo</th>
<th>Autor</th>
<th>Publicacin</th>
</tr>
<xsl:apply-templates select="libro"/>
</table>
</xsl:template>

<xsl:apply-templates/>
OBSERVA que desaparece el for-each que hab-
a en el primer diseo del XSL (sin plantillas)

A P U N T E S X ML


- 43 -




Antonio Prez-Aradros Herrero





















El punto indica el valor del nodo actual. Cuando estamos dentro del nodo autor, es el va-
lor del autor. Si se est dentro de titulo, es el ttulo

<!-- Defino una plantilla para el elemento libro -->
<xsl:template match="libro">
<tr >
<xsl:apply-templates select="titulo"/>
<xsl:apply-templates select="autor"/>
</tr>
</xsl:template>
<!-- Defino una plantilla para el elemento autor -->
<xsl:template match="autor">
<td style="color: red"><xsl:value-of select="."/></td>
</xsl:template>
<!-- Defino una plantilla para el elemento titulo -->
<xsl:template match="titulo">
<td style="color: blue"><xsl:value-of select="."/></td>
</xsl:template>