Sei sulla pagina 1di 17

XML

TRANSFORMACIONES: XSL-T
TRANSFORMACIONES: XSL-T
• XSL (Extensible Stylesheet Language – lenguaje de hojas de estilo extensible)

• Es un lenguaje XML para expresar hojas de estilo  cómo debe representarse


un lenguaje XML concreto).

• Consiste en tres componentes principales:


• XSLT, un lenguaje de transformación de documentos.
• Xpath, un lenguaje para referenciar a partes de
documentos XML.
• XSL-FO, un lenguaje de formato de documentos XML
TRANSFORMACIONES: XSL-T
• XSL (Extensible Stylesheet Language – lenguaje de hojas de estilo extensible)

• Con esos tres componentes XSL es capaz de:

• Transformar XML en XML, como por ejemplo XHTML o WML.


• Filtrar y/u ordenar datos XML.
• Definir partes de un documento XML.
• Formatear un documento XML sobre la base de los valores de los datos
almacenados.
• Extraer los datos XML a XSL-FO que podemos usar para generar ficheros como PDF.
TRANSFORMACIONES: XSL-T
• XSLT

• Es la parte del estándar XML que sirve para transformar documentos XML en
otros documentos XML (como por ejemplo, XHTML, WML, etc.)
• Normalmente XSLT lo hace transformando cada elemento XML en otro
elemento XML. También puede añadir otros elementos XML a la salida, o bien
puede eliminar elementos. Asimismo puede reordenar o recolocar elementos y
hacer comprobaciones y tomar decisiones sobre qué elementos mostrar.
• Durante la transformación, XSLT utiliza XPath para especificar o referenciar a
partes del documento que cumplen uno o más patrones definidos. Cuando
encuentra una coincidencia de patrones, XSLT transformará la parte
coincidente del documento origen en el documento destino. Las partes no
coincidentes no se transformarán, quedan en el documento destino sin cambio.
TRANSFORMACIONES: XSL-T
• Una transformación simple.

Como XSLT es en sí mismo un lenguaje XML, debe empezar con un elemento


raíz, que será del tipo xsl:stylesheet o xsl:transform (ambas etiquetas
son totalmente equivalentes), quedando la declaración:

<xsl:stylesheet versión=“1.0”
xmlns:xsl=http://www.w3.org/1993/XSL/Transform”>

Esta declaración identifica el espacio de nombres recomendado por el W3C.


Si usamos este espacio de nombres, debemos incluir también el atributo
version con el valor 1.0.
<?xml version="1.0"?> <pelicula> Brazil <director>Terry Gilliam</director> <actores> <actor>Jonathan Pryce</actor> </actores> </pelicula>
<?xml version="1.0"?> <pelicula> Brazil <director>Terry Gilliam</director> <actores> <actor>Jonathan Pryce</actor> </actores> </pelicula>

TRANSFORMACIONES: XSL-T
• Una transformación simple.
El fichero XML de ejemplo que transformaremos es el siguiente:
<?xml version="1.0" encoding="ISO-8859-1"?>
<?xml-stylesheet type="text/xsl" href="expediente.xsl"?>
<expediente alumno="Linus Torvalds">
<asignatura id="1">
<nombre>
Programación básica
</nombre>
<nota>
Notable
</nota>
</asignatura>
<asignatura id="2">
<nombre>
Sistemas operativos
</nombre>
<nota>
Excelente
</nota>
</asignatura>
</expediente>
TRANSFORMACIONES: XSL-T
<?xml version="1.0" encoding="ISO-8859-1"?>
• Una transformación simple. <xsl:stylesheet
xmlns:xsl="http://www.w3.org/1999/XSL/Transform"
El documento XSL para version="1.0">
<xsl:template match="/">
convertir este documento XML <html>
en otro XHTML es: <body>
<h2>Expediente académico</h2>
<table border="1">
<tr bgcolor="#9acd32">
Si disponemos de un <th align="left">Asignatura</th>
<th align="left">Nota</th>
navegador con soporte XSL </tr>
(como Mozilla en versiones <xsl:for-each select="expediente/asignatura">
<tr>
superiores a la 1.2) para abrir <td><xsl:value-of select="nombre"/></td>
el documento XML, el <td><xsl:value-of select="nota"/></td>
</tr>
navegador utilizará el </xsl:for-each>
documento XSL para </table>
</body>
transformarlo en XHTML. </html>
</xsl:template>
</xsl:stylesheet>
TRANSFORMACIONES: XSL-T
• El elemento xsl: template

Una hoja de estilo de XSL consiste en una serie de plantillas (templates) de


transformación. Cada elemento xsl:template contiene las transformaciones
que XSL debe aplicar si el patrón especificado en el elemento coincide con lo
encontrado en el documento XML.

Para especificar el elemento XML al que debemos aplicar el template


utilizaremos el atributo match (también podemos aplicar la plantilla a todo el
documento XML, para lo cual podemos especificar match=“/”). Los valores
que podemos asignar al atributo match son los especificados por el estándar
XPath.
TRANSFORMACIONES: XSL-T
• El elemento xsl: template <?xml version=“1.0” encoding=“ISO-8859-1”?>
<xsl:stylesheet version=“1.0”
Por ejemplo, la siguiente transformación xmlns:xsl=“http://www.w3.org/1999/XSL/Transform”>
XSL devuelve un código XHTML concreto <xsl:template match=“/”>
al procesar el documento con el <html>
expediente del alumno. <body>
Como podemos ver, si probamos este <h2>Expediente académico</h2>
<table border=“1”>
documento XSL, el resultado es tan sólo <tr bgcolor=“#9acd32”>
una cabecera de página. Si analizamos <th align=“left”>Asignatura</th>
el documento XSL, veremos que dispone <th align=“left”>Nota</th>
de una plantilla que se aplica </tr>
cuando coincide con el elemento raíz </table>
del documento (match=“/”) y </body>
que imprime al resultado lo que está </html>
contenido en la etiqueta. </xsl:template>
</xsl:stylesheet>
TRANSFORMACIONES: XSL-T
<?xml version=“1.0” encoding=“ISO-8859-1”?>
<xsl:stylesheet version=“1.0”
xmlns:xsl=“http://www.w3.org/1999/XSL/Transform”>
• El elemento value-of <xsl:template match=“/”>
<html>
El elemento value-of se usa para <body>
seleccionar y añadir a la salida el <h2>Expediente académico</h2>
<table border=“1”>
valor del elemento XML seleccionado. <tr bgcolor=“#9acd32”>
<th align=“left”>Asignatura</th>
Por ejemplo, si añadimos el siguiente <th align=“left”>Nota</th>
código a nuestro ejemplo anterior, </tr>
veremos en el resultado que aparece <tr>
<td><xsl:value-of
la primera nota del expediente. Esto select=“expediente/asignatura/nombre”/></td>
se debe a que las etiquetas value-of <td><xsl:value-of
seleccionan el valor del primer select=“expediente/asignatura/nota”/></td>
elemento que cumple con el patrón </tr>
</table>
especificado. </body>
</html>
</xsl:template>
</xsl:stylesheet>
TRANSFORMACIONES: XSL-T
<?xml version="1.0" encoding="ISO-8859-1"?>
<xsl:stylesheet version="1.0"
xmlns:xsl="http://www.w3.org/1999/XSL/Transform">
• El elemento xsl: for-each <xsl:template match="/">
<html>
<body>
<h2>Expediente Académico</h2>
El elemento xsl:for-each de XSL puede <table border="1">
utilizarse para seleccionar cada uno de <tr bgcolor="#9acd32">
los elementos del documento XML que <th align="left">Asignatura</th>
pertenezcan a un conjunto determinado. <th align="left">Nota</th>
</tr>
<xsl:for-each select="expediente/asignatura">
<tr>
Si al ejemplo anterior, donde sólo <td><xsl:value-of select="nombre"/></td>
aparecía la primera nota del <td><xsl:value-of select="nota"/></td>
</tr>
expediente, le añadimos un xsl:for- </xsl:for-each>
each que realice el recorrido por todo el </table>
expediente, obtendremos ahora un </body>
</html>
listado de todas las notas de las </xsl:template>
asignaturas. </xsl:stylesheet>
TRANSFORMACIONES: XSL-T
<?xml version="1.0" encoding="ISO-8859-1"?>
<xsl:stylesheet version="1.0"
xmlns:xsl="http://www.w3.org/1999/XSL/Transform">
• Ordenación de la información: <xsl:template match="/">
xsl: sort <html>
<body>
<h2>Expediente Académico</h2>
<table border="1">
Para obtener una salida ordenada, <tr bgcolor="#9acd32">
<th align="left">Asignatura</th>
simplemente debemos añadir <th align="left">Nota</th>
un elemento xsl:sort al elemento </tr>
xsl:for-each en nuestro fichero XSL. <xsl:for-each select="expediente/asignatura">
<xsl:sort select="nombre"/>
<tr>
<td><xsl:value-of select="nombre"/></td>
El atributo select nos permite indicar el <td><xsl:value-of select="nota"/></td>
</tr>
elemento por el que vamos a realizar </xsl:for-each>
la ordenación, en este caso por </table>
</body>
nombre de asignatura. </html>
</xsl:template>
</xsl:stylesheet>
TRANSFORMACIONES: XSL-T
• Condiciones en XSL

Disponemos de dos elementos XSL que nos permiten implementar condiciones en


nuestras transformaciones. Se trata de xsl:if y xsl:choose.

Elemento xsl:if
El elemento xsl:if nos permite aplicar una plantilla sólo en el caso de que la
condición especificada se cumpla (sea cierta).
Un ejemplo de formato de xsl:if es el siguiente:
<xsl:if test=“nota &lt; 5”>
..... sólo aparecerá con nota menor a 5 .....
</xsl:if>
TRANSFORMACIONES: XSL-T
<?xml version="1.0" encoding="ISO-8859-1"?>
<xsl:stylesheet version="1.0"
xmlns:xsl="http://www.w3.org/1999/XSL/Transform">
<xsl:template match="/">
<html>
<body>
<h2>Expediente Académico</h2>
<table border="1">
Por ejemplo, podemos modificar el <tr bgcolor="#9acd32">
código anterior para que <th align="left">Asignatura</th>
<th align="left">Nota</th>
sólo muestre las notas superiores a 5. </tr>
<xsl:for-each select="expediente/asignatura">
<xsl:if test="nota &gt; 5">
<tr>
<td><xsl:value-of select="nombre"/></td>
<td><xsl:value-of select="nota"/></td>
</tr>
</xsl:if>
</xsl:for-each>
</table>
</body>
</html>
</xsl:template>
</xsl:stylesheet>
TRANSFORMACIONES: XSL-T
El elemento xsl:choose
El elemento xsl:choose (junto con xsl:when y xsl:otherwise), nos permite
modelar tests condicionales múltiples. Esto es, podemos, en función de una
condición múltiple (con múltiples valores posibles), obtener resultados diversos.

Un ejemplo de formato de xsl:choose es el siguiente: <xsl:choose>


<xsl:when test=“nota &lt; 5”>
... código (suspendido) ....
</xsl:when>
<xsl:when test=“nota &lt; 9”>
... código (normal) ....
</xsl:when>
<xsl:otherwise>
... código (excelente) ....
</xsl:otherwise>
</xsl:choose>
TRANSFORMACIONES: XSL-T
<?xml version="1.0" encoding="ISO-8859-1"?>
.
.
.
<xsl:for-each select="expediente/asignatura">
<tr>
<td><xsl:value-of select="nombre"/></td>
<td>
Modificamos el ejemplo anterior para <xsl:choose>
<xsl:when test="nota &lt; 5">
que las notas inferiores a cinco <font color="#FF0000">
aparezcan en color rojo. <xsl:value-of select="nota"/>
</font>
</xsl:when>
<xsl:otherwise>
<xsl:value-of select="nota"/>
</xsl:otherwise>
</xsl:choose>
</td>
</tr>
</xsl:for-each>
</table>
</body>
</html>
</xsl:template>
</xsl:stylesheet>
TRANSFORMACIONES: XSL-T
El elemento xsl: apply-templates
apply-templates aplica una plantilla al elemento actual o a los elementos hijos
del elemento actual. Con el atributo select podemos procesar solo aquellos
elementos hijos que especifiquemos y el orden en que deben procesarse.
<xsl:template match=“asignatura”>
<?xml version=“1.0” encoding=“ISO-8859-1”?> <p>
<xsl:stylesheet version=“1.0” <xsl:apply-templates select=“nombre”/>
xmlns:xsl=“http://www.w3.org/1999/XSL/Transform”> <xsl:apply-templates select=“nota”/>
</p>
<xsl:template match=“/”> </xsl:template>
<html>
<body> <xsl:template match=“nombre”>
<h2>Expediente académico</h2> Nombre: <xsl:value-of select=“.”/></span>
<xsl:apply-templates /> <br />
</body> </xsl:template>
</html>
</xsl:template> <xsl:template match=“nota”>
Nota: <xsl:value-of select=“.”/></span>
<xsl:template match=“expediente”> <br />
<xsl:apply-templates select=“asignatura”/> </xsl:template>
</xsl:template>
</xsl:stylesheet>

Potrebbero piacerti anche