Documentos de Académico
Documentos de Profesional
Documentos de Cultura
ÍNDICE
INTRODUCCIÓN....................................................................................................................................................... 222
5.1. Transformación de documentos XSL................................................................................................................. 225
5.2. Elementos básicos.............................................................................................................................................. 230
5.2.1. XSL:FOR-EACH................................................................................................................................................. 230
5.2.2. XSL:VALUE-OF.................................................................................................................................................. 230
5.2.3. XSL:SORT........................................................................................................................................................ 231
5.3. Operadores en XSL............................................................................................................................................. 237
5.3.1. Elemento XSL:IF................................................................................................................................................ 237
5.3.2. Elemento XSL:CHOOSE...................................................................................................................................... 239
5.4. Las plantillas........................................................................................................................................................ 242
221
Lenguajes de marcas y sistemas de gestión de información
INTRODUCCIÓN
tecnología XML permite separar de manera efectiva <?xml version=”1.0” encoding=” ISO-8859-1”?>
<?xml-stylesheet type=”text/xsl” href=”LMSGI_
los datos que hay que almacenar, la estructura o
UD05_01.xsl”?>
semántica en la que se organizan y la presentación de
<libreria>
los mismos.
<libro>
Aunque podemos visualizar un fichero XML con un <titulo>Physics-based animation</titulo>
simple editor de texto, no es la manera más amigable <autor>Kenny Erleben</autor>
ni profesional para presentar los datos que están <editor>Charles River Media</editor>
almacenados en su interior. Es ahí donde debemos <isbn>978-1584503804</isbn>
utilizar alguna herramienta que nos permita convertir <precio> 50.06 </precio>
</libro>
y transformar los datos en el formato que deseemos.
<libro>
Esa herramienta se llama XSL (eXtensible Stylesheet
<titulo>Principios de seguridad
Language).
informatica para usuarios</titulo>
XSL es a XML, lo que las hojas de estilo en cascada <autor>Carlos Garre</autor>
(CSS) a HTML. XSL permite tomar pleno control sobre <editor>Dykinson</editor>
los datos, pudiendo establecerse criterios como qué <isbn>978-84-9849-998-8</isbn>
datos ver, en qué orden visualizarlos, estableciendo <precio>13.00</precio>
filtros y definiendo formatos de salida para su </libro>
222
5. Conversión y adaptación de documentos XML
223
5. Conversión y adaptación de documentos XML
El fichero que almacena la hoja de estilo XSL, como fichero XML que es, debe estar
bien formado. Usando el ejemplo anterior de los libros, se puede ver que el fichero XSL
posee una declaración inicial que determina su contenido como XML y su codificación:
<xsl:stylesheet version=”1.0”
xmlns:xsl=”http://www.w3.org/1999/XSL/Transform”>
<xsl:transform version=”1.0”
xmlns:xsl=”http://www.w3.org/1999/XSL/Transform”>
<xsl:template match=”/”>
</xsl:temp!ate>
será lo que permitirá generar la salida formateada. Cabe destacar que con esta etiqueta
se puede indicar sobre qué parte del documento XML se quiere actuar, utilizando el
atributo match para ello. En este caso se ha querido actuar sobre la raíz del propio
documento XML.
LMSGI_UD05_02.xml
225
Lenguajes de marcas y sistemas de gestión de información
LMSGI_UD05_02.xsl
Que conténdra las transformaciones que vayamos a realizar con el primer fichero:
XML Source
<em>Hello, world</em>
</source>
XSLT stylesheet
<xsl:stylesheet version = ‘1.0’
xmlns:xsl=’http://www.w3.org/1999/XSL/Transform’>
</xsl:stylesheet>
Output
Hello, world
HTML view
XML Source
<?xml version=”1.0” encoding=”ISO-8859-1”?>
<?xml-stylesheet type=”text/xsl” href=”LMSGI_UD05_02.
xsl”?>
<source>
<title>XSL</title>
<author>John Smith</author>
</source>
226
5. Conversión y adaptación de documentos XML
XSLT stylesheet
<xsl:stylesheet version = ‘1.0’
xmlns:xsl=’http://www.w3.org/1999/XSL/Transform’>
<xsl:template match=”/”>
<h1>
<xsl:value-of select=”//title”/>
</h1>
<h2>
<xsl:value-of select=”//author”/>
</h2>
</xsl:template>
</xsl:stylesheet>
Output
<h1>XSL</h1>
<h2>John Smith</h2>
HTML view
XML Source
<?xml version=”1.0” encoding=”ISO-8859-1”?>
<?xml-stylesheet type=”text/xsl” href=”LMSGI_UD05_02.
xsl”?>
<source>
<title>XSL</title>
<author>John Smith</author>
</source>
XSLT stylesheet
227
Lenguajes de marcas y sistemas de gestión de información
<xsl:template match=”/”>
<h2>
<xsl:value-of select=”source/author”/>
</h2>
<h1>
<xsl:value-of select=”source/title”/>
</h1>
</xsl:template>
</xsl:stylesheet>
Output
<h2>John Smith</h2>
<h1>XSL</h1>
HTML view
Todas las etiquetas y parámetros de los ficheros XSL y XML pueden variar en la
sintaxis, pero el resultado es el mismo.
<xsl:value-of select=”source/author”/>
<xsl:value-of select=”//title”/>
228
5. Conversión y adaptación de documentos XML
229
Lenguajes de marcas y sistemas de gestión de información
<xsl:for-each select=”libreria/libro”>
<tr>
<td>
<xsl:value-of select=”titulo”/>
</td>
<td>
<xsl:value-of select=”autor”/>
</td>
</tr>
</xsl:for-each>
5.2.2. XSL:VALUE-OF
Finalmente queda extraer el contenido del libro. Para ello la etiqueta que extrae la
información de ese elemento XML seleccionado es la siguiente:
<xsl:for-each select=”libreria/libro”>
<tr>
<td>
<xsl:value-of select=”titulo”/>
</td>
<td>
<xsl:value-of select=”autor”/>
</td>
</tr>
</xsl:for-each>
230
5. Conversión y adaptación de documentos XML
5.2.3. XSL:SORT
En este momento el lector podría indicar que tiene tantos libros almacenados que
resultaría muy interesante mostrarlos de manera ordenada (y no tal y como se salvaron
en el fichero XML). Si lo que interesa es ordenarlos por el título del libro, tras la etiqueta
for-each, incluimos esta:
231
Lenguajes de marcas y sistemas de gestión de información
Si por el contrario, el orden adecuado es por autor, entonces se debería incluir la siguiente:
232
5. Conversión y adaptación de documentos XML
233
Lenguajes de marcas y sistemas de gestión de información
Si, por el contrario, lo que interesa es realizar una búsqueda con otro operador, como
por ejemplo, todos los libros en los queste:
234
5. Conversión y adaptación de documentos XML
XML Source
<?xml version=”1.0” encoding=”ISO-8859-1”?>
<?xml-stylesheet type=”text/xsl” href=”LMSGI_UD05_02.xsl”?>
<source>
<name>John</name>
<name>Josua</name>
<name>Charles</name>
<name>Alice</name>
<name>Martha</name>
<name>George</name>
</source>
XSLT stylesheet
<xsl:stylesheet version = ‘1.0’
xmlns:xsl=’http://www.w3.org/1999/XSL/Transform’>
<xsl:template match=”/”>
<TABLE>
<xsl:for-each select=”source/name”>
<xsl:sort order=”ascending” select=”.”/>
<TR>
<TH>
<xsl:value-of select=”.”/>
</TH>
</TR>
</xsl:for-each>
</TABLE>
</xsl:template>
</xsl:stylesheet>
Output
<TABLE>
<TR>
<TH>Alice</TH>
</TR>
<TR>
<TH>Charles</TH>
</TR>
<TR>
<TH>George</TH>
</TR>
<TR>
<TH>John</TH>
</TR>
<TR>
<TH>Josua</TH>
</TR>
<TR>
<TH>Martha</TH>
</TR>
</TABLE>
235
Lenguajes de marcas y sistemas de gestión de información
HTML view
236
5. Conversión y adaptación de documentos XML
237
Lenguajes de marcas y sistemas de gestión de información
El resultado sería:
238
5. Conversión y adaptación de documentos XML
Si se quiere establecer una condición por defecto, el elemento que habría que utilizar
sería “<xsl:otherwise>”.
<xsl:choose>
<xsl:when test=”expression”>
</xsl:when>
….
<xsl:when test=”expression”>
</xsl:when>
……
<xsI:otherwise>
…..
</xsl:otherwise>
</xsl:choose>
239
Lenguajes de marcas y sistemas de gestión de información
240
5. Conversión y adaptación de documentos XML
241
Lenguajes de marcas y sistemas de gestión de información
<xsl:template match=”/”>
<html> <body>
<h1>Ejemplo Plantillas</h1>
<xsl:apply-templates/>
</body> </html>
</xsl:template>
<xsl:template match=”libreria”>
<h2>Mi biblioteca</h2>
<table>
<tr bgcolor=”#887788”>
<th></th><th>Título</th><th></th> <th>Autor</th>
</tr>
<xsl:apply-templates select=”libro”/>
</table>
</xsl:template>
<xsl:template match=”libro”>
<tr>
<td><xsl:apply-templates select=”titulo”/></td>
<td><xsl:apply-templates select=”autor”/></td>
</tr>
</xsl:template>
<xsl:template match=”titulo”>
<td bgcolor=”#DDEEDD”><xsl:value-of select=”.”/></td>
</xsl:template>
<xsl:template match=”autor”>
<td bgcolor=”#AABBAA”><xsl:value-of select=”.”/></td>
</xsl:template>
</xsl:stylesheet>
242
5. Conversión y adaptación de documentos XML
■■ <xsl:value-of select “.”>: en el nodo XML actual de la plantilla actual, indica que
se copie el valor que contenga ese nodo. Por ejemplo, si el nodo actual es de
tipo “titulo”, insertará como resultado el título del libro actual.
243
Lenguajes de marcas y sistemas de gestión de información
Podemos ver, por tanto, el recorrido del documento XML como un conjunto de
llamadas a “procedimientos” (plantillas) que, según el caso, integrarán datos de salida
en el documento final.
XML Source
<?xml version=”1.0” encoding=”ISO-8859-1”?>
<?xml-stylesheet type=”text/xsl” href=”LMSGI_UD05_02.xsl”?>
<source>
<bold>Hello, world.</bold>
<red>I am </red>
<italic>fine.</italic>
</source>
XSLT stylesheet
<xsl:stylesheet version = ‘1.0’
xmlns:xsl=’http://www.w3.org/1999/XSL/Transform’>
<xsl:template match=”bold”>
<p>
<b>
<xsl:value-of select=”.”/>
</b>
</p>
</xsl:template>
<xsl:template match=”red”>
<p style=”color:red”>
<xsl:value-of select=”.”/>
</p>
</xsl:template>
<xsl:template match=”italic”>
<p>
<i>
<xsl:value-of select=”.”/>
</i>
</p>
</xsl:template>
</xsl:stylesheet>
Output
<p>
<b>Hello, world.</b>
</p>
<p>
<i>fine.</i>
</p>
244
5. Conversión y adaptación de documentos XML
HTML view
245
Lenguajes de marcas y sistemas de gestión de información
Archivo LMSGI_UD05_Clientes.xlm
<?xml version=”1.0” ?>
<?xml-stylesheet type=”text/xsl” href=”LMSGI_UD05_clientes.
xsl”?>
<customers>
<customer>
<name>John Smith</name>
<address>123 Oak St.</address>
<state>WA</state>
<phone>(206) 123-4567</phone>
</customer>
<customer>
<name>Zack Zwyker</name>
<address>368 Elm St.</address>
<state>WA</state>
<phone>(206) 423-4537</phone>
</customer>
<customer>
<name>Albert Aikens</name>
<address>368 Elm St.</address>
<state>WA</state>
<phone>(206) 423-4537</phone>
</customer>
<customer>
<name>Albert Gandy</name>
<address>6984 4th St.</address>
<state>WA</state>
<phone>(206) 433-4547</phone>
</customer>
<customer>
<name>Peter Furst</name>
<address>456 Pine Av.</address>
<state>CA</state>
<phone>(209) 765-4321</phone>
</customer>
<customer>
<name>Dan Russell</name>
<address>9876 Main St.</address>
<state>PA</state>
<phone>(323) 321-7654</phone>
</customer>
</customers>
246
5. Conversión y adaptación de documentos XML
Archivo LMSGI_UD05_clientes.xls
<?xml version=”1.0”?>
<xsl:stylesheet version=”1.0”
xmlns:xsl=”http://www.w3.org/1999/XSL/Transform” >
<xsl:template match=”/”>
<HTML>
<BODY>
<TABLE border=”1” cellspacing=”0” cellpadding=”2”>
<xsl:apply-templates select=”customers/customer”>
<xsl:sort select=”state”/>
<xsl:sort select=”name”/>
</xsl:apply-templates>
</TABLE>
</BODY>
</HTML>
</xsl:template>
<xsl:template match=”customer”>
<TR>
<xsl:apply-templates select=”name” />
<xsl:apply-templates select=”address” />
<xsl:apply-templates select=”state” />
<xsl:apply-templates select=”phone” />
<xsl:apply-templates select=”phone”
mode=”accountNumber”/>
</TR>
</xsl:template>
<xsl:template match=”name”>
<TD STYLE=”font-size:14pt font-family:serif”>
<xsl:apply-templates />
</TD>
</xsl:template>
<xsl:template match=”address”>
<TD> <xsl:apply-templates /> </TD>
</xsl:template>
<xsl:template match=”state”>
<TD> <xsl:apply-templates /> </TD>
</xsl:template>
<xsl:template match=”phone”>
<TD> <xsl:apply-templates /> </TD>
</xsl:template>
247
Lenguajes de marcas y sistemas de gestión de información
Output
<HTML>
<BODY>
<TABLE border=”1” cellspacing=”0” cellpadding=”2”>
<TR>
<TD STYLE=”font-size:14pt font-family:serif”>Peter Furst</TD>
<TD>456 Pine Av.</TD>
<TD>CA</TD>
<TD>(209) 765-4321</TD>
<TD STYLE=”font-style:italic”>
1-(209) 765-4321-001
</TD>
</TR>
<TR>
<TD STYLE=”font-size:14pt font-family:serif”>Dan Russell</TD>
<TD>9876 Main St.</TD>
...
</TR>
</TABLE>
</BODY>
</HTML>
HTML view
248