5.1 introducción a xsl -...

34
© 2002 Borja Sotomayor 1 5.1 Introducción a XSL Añadir Forma al Contenido (I) ! Un documento XML que cumple las normas del dialecto ListaML: <listas> <lista nombre=“ESIDE-TIM” desc=“Lista de TiM”> <subs mail=“[email protected]” /> <subs mail=“[email protected]” /> </lista> <lista nombre=“AMIGOS” desc=“Lista de amigos”> <subs mail=“[email protected]” /> <subs mail=“[email protected]” /> <subs mail=“[email protected]” /> </lista> </listas>

Upload: haxuyen

Post on 01-Oct-2018

220 views

Category:

Documents


0 download

TRANSCRIPT

Page 1: 5.1 Introducción a XSL - paginaspersonales.deusto.espaginaspersonales.deusto.es/abaitua/konzeptu/sgml/apuntes_XML/... · XML (orientado al contenido o a la presentación) en un documento

© 2002 Borja Sotomayor 1

5.1 Introducción a XSL

Añadir Forma al Contenido (I)! Un documento XML que cumple las

normas del dialecto ListaML:<listas>

<lista nombre=“ESIDE-TIM” desc=“Lista de TiM”><subs mail=“[email protected]” /><subs mail=“[email protected]” />

</lista><lista nombre=“AMIGOS” desc=“Lista de amigos”>

<subs mail=“[email protected]” /><subs mail=“[email protected]” /><subs mail=“[email protected]” />

</lista></listas>

Page 2: 5.1 Introducción a XSL - paginaspersonales.deusto.espaginaspersonales.deusto.es/abaitua/konzeptu/sgml/apuntes_XML/... · XML (orientado al contenido o a la presentación) en un documento

© 2002 Borja Sotomayor 2

Añadir Forma al Contenido (II)! Es un documento XML bien formado y

válido. . . ¡Genial!! Sin embargo, si intentamos visualizar

este documento en Internet Explorer, en Mozilla, etc. lo único que veremos será. . . ¡el documento XML!! Según el navegador, a veces veremos el

contenido de las etiquetas del documento.! ¿Por qué?

Añadir Forma al Contenido (III)! El navegador web reconoce HTML y XHTML.

! P.ej.: Sabe que cuando se encuentra con una etiqueta <table> tiene que empezar a dibujar una tabla.

! El navegador web no reconoce las etiquetas de nuestro lenguaje (<lista> <subs> le suenan a Chino y las ignora)

! ¿Cómo podemos conseguir que el navegador web ‘reconozca’ nuestro dialecto y lo visualice de una cierta manera? (p.ej. en una tabla)

Page 3: 5.1 Introducción a XSL - paginaspersonales.deusto.espaginaspersonales.deusto.es/abaitua/konzeptu/sgml/apuntes_XML/... · XML (orientado al contenido o a la presentación) en un documento

© 2002 Borja Sotomayor 3

Añadir Forma al Contenido (IV)! Una posible solución " Cada vez que

se crea un nuevo dialecto XML, se notifica a los fabricantes de navegadores web para que incluyan en su producto un ‘motor de visualización’.

! Esto, obviamente, es una locura. El numero de dialectos XML existentes es demasiado grande y no se puede estar al tanto de todos ellos.

Añadir Forma al Contenido (V)! Solución: encargarnos nosotros mismos

de aplicar una forma al contenido. Es decir, indicar de alguna manera al navegador web cómo debe presentarsevisualmente la información contenida en el documento XML (por pantalla, la impresora, etc.).

Page 4: 5.1 Introducción a XSL - paginaspersonales.deusto.espaginaspersonales.deusto.es/abaitua/konzeptu/sgml/apuntes_XML/... · XML (orientado al contenido o a la presentación) en un documento

© 2002 Borja Sotomayor 4

Añadir Forma al Contenido (VI)! Sin embargo, hay que tener en cuenta

una cosa: la mayoría de los dialectos XML son dialectos orientados al contenido. Es decir, almacenan únicamente datos y ninguna información sobre la presentación de los datos.

Añadir Forma al Contenido (VII)! Entonces...¿cómo añadimos esta

información sobre presentación (la forma) sin ‘contaminar’ el documento XML?! ¡¡El documento XML sólo debe almacenar

el contenido!!

! Solución " XSL(eXtensible Stylesheet Language)

Page 5: 5.1 Introducción a XSL - paginaspersonales.deusto.espaginaspersonales.deusto.es/abaitua/konzeptu/sgml/apuntes_XML/... · XML (orientado al contenido o a la presentación) en un documento

© 2002 Borja Sotomayor 5

XSL (I)! XSL es una tecnología XML que se

compone de dos dialectos XML:! XSLT! XSL-FO

! ¿Cómo nos ayuda cada una a añadir forma a nuestro contenido?

XSL (II)! XSLT " Es un lenguaje que nos

permite transformar un documento XML de un dialecto a otro.! Podemos transformar un dialecto XML

orientado al contenido (ListaML) a un dialecto orientado a la presentación (XHTML, por ejemplo, para presentación en la web)

Page 6: 5.1 Introducción a XSL - paginaspersonales.deusto.espaginaspersonales.deusto.es/abaitua/konzeptu/sgml/apuntes_XML/... · XML (orientado al contenido o a la presentación) en un documento

© 2002 Borja Sotomayor 6

XML(ListaML) Hoja de

Transformación

XML(XHTML)

XML(XSLT)

El navegador webno sabe visualizarlo

El navegador websabe visualizarlo

! La Hoja de Transformación es un documento XML en el que se especifican unas transformaciones utilizando el lenguaje XSLT.

! Podemos especificar unas transformaciones que convierten un documento ListaML en un documento XHTML.

! Para llevar a cabo dicha ‘conversión’ aplicamos la hoja de transformación al documento ListaML.

XSL (III)! ¡Ojo! Se ha hablado mucho de que el

navegador web sabe o no sabe visualizar un documento. Los navegadores web no son los únicos programas capaces de visualizar dialectos XML (de hecho, los últimos navegadores web sólo visualizan dialectos XML orientados a web, como XHTML).

! El termino correcto es agente de usuario(User Agent) o agente de visualización.

Page 7: 5.1 Introducción a XSL - paginaspersonales.deusto.espaginaspersonales.deusto.es/abaitua/konzeptu/sgml/apuntes_XML/... · XML (orientado al contenido o a la presentación) en un documento

© 2002 Borja Sotomayor 7

XSL (IV)! Por ejemplo, hay agentes que visualizan

CML (Chemical Markup Language) o MathML (formulas matemáticas). Igual que el navegador web, estos agentes no entenderían nuestro lenguaje ListaML (¡pero tampoco entenderían XHTML!)

XSL (V)! XSL-FO " Es un lenguaje que nos

permite especificar directamente el formato de un documento:! Páginas, tablas, cabeceras, etc.! Obviamente, es un dialecto XML orientado

a la presentación.

Page 8: 5.1 Introducción a XSL - paginaspersonales.deusto.espaginaspersonales.deusto.es/abaitua/konzeptu/sgml/apuntes_XML/... · XML (orientado al contenido o a la presentación) en un documento

© 2002 Borja Sotomayor 1

5.2 XSLT: Introducción

Introducción (I)! Ejemplo. Partimos del siguiente

documento ListaML:<listas>

<lista nombre=“ESIDE-TIM”><subs mail=“[email protected]” /><subs mail=“[email protected]” />

</lista><lista nombre=“AMIGOS”>

<subs mail=“[email protected]” /><subs mail=“[email protected]” /><subs mail=“[email protected]” />

</lista></listas>

Page 9: 5.1 Introducción a XSL - paginaspersonales.deusto.espaginaspersonales.deusto.es/abaitua/konzeptu/sgml/apuntes_XML/... · XML (orientado al contenido o a la presentación) en un documento

© 2002 Borja Sotomayor 2

Introducción (II)! Ya hemos dicho antes que este

documento no puede ser visualizado en un navegador web (en general: “en cualquier User Agent que no ‘entienda’ el dialecto ListaML”)

! Si lo transformamos a XHTML, sípodríamos visualizarlo en un navegador web.

Introducción (III)! ¿Cómo hacemos esta transformación?

Especificando reglas de transformación.! Regla de transformación: Especifica los

cambios que han de realizarse a una entidad A para que se convierta en una entidad B.

! Para transformar nuestro documento ListaML a XHTML podríamos especificar 3 reglas de transformación.

Page 10: 5.1 Introducción a XSL - paginaspersonales.deusto.espaginaspersonales.deusto.es/abaitua/konzeptu/sgml/apuntes_XML/... · XML (orientado al contenido o a la presentación) en un documento

© 2002 Borja Sotomayor 3

Queremos que el resultado de toda la transformación sea un documento XHTML. Por lo tanto, habrá que transformar el elemento raíz <listas> en algo que se parezca a un documento XHTML:

<listas>

...

</listas>

<html><head><title>Listas de Distribucion</title></head><body>

...

</body></html>

1ª Regla de Transformación: El elemento <listas> pasa a convertirse en el ‘esqueleto’ de un documento XHTML.

<html><head><title>Listas de Distribucion</title></head><body>

<lista nombre=“ESIDE-TIM”><subs mail=“[email protected]” /><subs mail=“[email protected]” />

</lista><lista nombre=“AMIGOS”>

<subs mail=“[email protected]” /><subs mail=“[email protected]” /><subs mail=“[email protected]” />

</lista></body></html>

¡Ojo! Si sólo aplicamos la 1ª regla obtenemos esto:

¡Sólo hemos transformado el elemento <listas>! El resto del documento no ha sido modificado (se ha introducido tal cual en el ‘esqueleto HTML’). Obviamente, esto todavía no es un documento XHTML. Hay que aplicar más reglas de transformación.

Page 11: 5.1 Introducción a XSL - paginaspersonales.deusto.espaginaspersonales.deusto.es/abaitua/konzeptu/sgml/apuntes_XML/... · XML (orientado al contenido o a la presentación) en un documento

© 2002 Borja Sotomayor 4

Si queremos que las listas se presenten en una tabla XHTML, podemos transformar el elemento <lista> en una tabla cuya primera fila contiene el nombre de la lista.

<lista nombre=“nombre_lista”>

...

</lista>

<table border="1"><tr><th>Lista nombre_lista</th></tr>

...

</table>

2ª Regla de Transformación: El elemento <lista> pasa a convertirse en el ‘esqueleto’ de una tabla XHTML.

<html><head><title>Listas de Distribucion</title></head><body>

<table border="1"><tr><td>Lista ESIDE-TIM</td></tr><subs mail=“[email protected]” /><subs mail=“[email protected]” />

</table><table border="1">

<tr><td>Lista AMIGOS</td></tr><subs mail=“[email protected]” /><subs mail=“[email protected]” /><subs mail=“[email protected]” />

</table></body></html>

Si aplicamos la 1ª y 2ª regla tenemos lo siguiente:

Page 12: 5.1 Introducción a XSL - paginaspersonales.deusto.espaginaspersonales.deusto.es/abaitua/konzeptu/sgml/apuntes_XML/... · XML (orientado al contenido o a la presentación) en un documento

© 2002 Borja Sotomayor 5

Si hemos transformado el elemento <lista> en el ‘esqueleto’ de una tabla XHTML, entonces tiene sentido que el elemento <subs> sea transformado en filas para esa tabla.

<subs mail=“dir_mail” />

<tr><td>dir_mail</td>

</tr>

3ª Regla de Transformación: El elemento <subs> pasa a convertirse en una fila de una tabla XHTML.

<html><head><title>Listas de Distribucion</title></head><body>

<table border="1"><tr><td>Lista ESIDE-TIM</td></tr><tr><td>[email protected]</td></tr><tr><td>[email protected]</td></tr>

</table><table border="1">

<tr><td>Lista AMIGOS</td></tr><tr><td>[email protected]</td></tr><tr><td>[email protected]</td></tr><tr><td>[email protected]</td></tr>

</table></body></html>

Finalmente, si aplicamos todas las reglas:

¡Un documento XHTML válido y bien formado!

Page 13: 5.1 Introducción a XSL - paginaspersonales.deusto.espaginaspersonales.deusto.es/abaitua/konzeptu/sgml/apuntes_XML/... · XML (orientado al contenido o a la presentación) en un documento

© 2002 Borja Sotomayor 6

Introducción (III)! La transformación que hemos hecho

paso a paso en este ejemplo la podemos hacer con XSLT.

! XSLT nos permite especificar formalmente las reglas de transformación.

! Las reglas de transformación estarán en un documento llamado hoja de transformación.

Introducción (IV)

XML(ListaML) Hoja de

Transformación

XML(XHTML)

Regla 1Regla 2Regla 3

El navegador webno sabe visualizarlo

El navegador websabe visualizarlo

! La hoja de transformación es un documento XML (¡no olvidemos que XSLT también es un dialecto XML!)

Page 14: 5.1 Introducción a XSL - paginaspersonales.deusto.espaginaspersonales.deusto.es/abaitua/konzeptu/sgml/apuntes_XML/... · XML (orientado al contenido o a la presentación) en un documento

© 2002 Borja Sotomayor 7

Introducción (V)! Para vincular una hoja de

transformación a un documento XML tenemos que añadir la siguiente instrucción de procesamiento en el documento XML:

<?xml-stylesheet type=“text/xml” href=“URL”?>

Introducción (VI)! En la Web, la transformación la puede

realizar:! El servidor web! El cliente (el navegador web)

! Es preferible que se encargue el servidor web, ya que no todos los navegadores web están totalmente preparados para realizar transformaciones XSLT.

Page 15: 5.1 Introducción a XSL - paginaspersonales.deusto.espaginaspersonales.deusto.es/abaitua/konzeptu/sgml/apuntes_XML/... · XML (orientado al contenido o a la presentación) en un documento

© 2002 Borja Sotomayor 8

Aplicaciones de XSLT (I)! XSLT es un lenguaje muy potente.

! Curiosidad: Se ha demostrado que XSLT es un lenguaje Turing-Completo .

! Pueden especificarse transformaciones muy complejas.

! Las transformaciones que hemos hecho en el ejemplo no son más que la punta del iceberg.

Aplicaciones de XSLT (II)! XSLT tiene principalmente tres

aplicaciones:! XMLcontenido " XMLpresentación

Convertir de un dialecto XML orientado al contenido a otro orientado a la presentación. Lo que conseguimos es ‘añadir forma al contenido’. Es lo que hemos hecho en el ejemplo. De cara a la Web, es la principal aplicación de XSLT.

Page 16: 5.1 Introducción a XSL - paginaspersonales.deusto.espaginaspersonales.deusto.es/abaitua/konzeptu/sgml/apuntes_XML/... · XML (orientado al contenido o a la presentación) en un documento

© 2002 Borja Sotomayor 9

Aplicaciones de XSLT (III)! XMLcontenido " XMLcontenido

XML se utiliza mucho como soporte para almacenar datos (sin que necesariamente luego tengan que ser presentados visualmente). Es una aplicación inesperada de XML, pero que está cobrando mucha importancia y protagonismo. Por eso mismo, resulta interesante poder convertir un dialecto orientado al contenido a otro dialecto también orientado al contenido.

Aplicaciones de XSLT (IV)Ejemplo: Supongamos que una compañía con la que trabajamos almacena la información sobre sus listas de distribución utilizando un dialecto XML llamado DistroListML. Con XSLT podemos crear una hoja de transformación que convierta nuestros documentos ListaML a DistroListML. De esta manera, las dos compañías consiguen compartir datos fácilmente.

Page 17: 5.1 Introducción a XSL - paginaspersonales.deusto.espaginaspersonales.deusto.es/abaitua/konzeptu/sgml/apuntes_XML/... · XML (orientado al contenido o a la presentación) en un documento

© 2002 Borja Sotomayor 10

Aplicaciones de XSLT (V)! XML " No XML

Podemos utilizar XSLT para convertir un documento XML (orientado al contenido o a la presentación) en un documento no-XML. Por ejemplo, utilizando XSLT podemos convertir XML a:

! Imágenes 2D y 3D! Documentos PDF! Código fuente de un programa! Formatos ad hoc

Estas hojas de transformación (sobre todo las que convierten un documento XML en una imagen) son bastante complicadas y difíciles de programar.

Page 18: 5.1 Introducción a XSL - paginaspersonales.deusto.espaginaspersonales.deusto.es/abaitua/konzeptu/sgml/apuntes_XML/... · XML (orientado al contenido o a la presentación) en un documento

© 2002 Borja Sotomayor 1

5.3 XSLT: Estructura Básica

Elemento Raíz (I)! XSLT es un dialecto XML.! Hoja de Transformación " Un

documento XML que cumple las normas del dialecto XSLT.

! El elemento raíz de este documento XML es:<xsl:stylesheet>

...

</xsl:stylesheet>

Page 19: 5.1 Introducción a XSL - paginaspersonales.deusto.espaginaspersonales.deusto.es/abaitua/konzeptu/sgml/apuntes_XML/... · XML (orientado al contenido o a la presentación) en un documento

© 2002 Borja Sotomayor 2

Elemento Raíz (II)! El elemento raíz tiene dos atributos

obligatorios:! version=“numero_version”

! Actualmente sólo hay tres posibles números de versión: 1.0, 1.1, y 2.0

! xmlns:xsl=“http://www.w3.org/1999/XSL/Transform”

! El valor de este atributo debe escribirse exactamente así. De lo contrario, la hoja de transformación no funcionará.

Reglas de Transformación (I)! El elemento raíz puede contener varios

`elementos de primer nivel’.! El más importante es <xsl:template>

...

</xsl:template>

! Cada elemento xsl:template es una regla de transformación.

Page 20: 5.1 Introducción a XSL - paginaspersonales.deusto.espaginaspersonales.deusto.es/abaitua/konzeptu/sgml/apuntes_XML/... · XML (orientado al contenido o a la presentación) en un documento

© 2002 Borja Sotomayor 3

Reglas de Transformación (II)! El elemento xsl:template tiene un

atributo match con el que especificamos qué debe transformar la regla.! Por ejemplo:<xsl:template match=“lista”>

...

</xsl:template>

es una regla de transformación para el elemento lista

Reglas de Transformación (III)! Cuando el procesador XSLT se encuentra

en el documento XML un elemento que cumpla la condición especificada en el match, lo substituye por lo que sea que haya dentro del <xsl:template>.

! El atributo match toma el valor de una dirección XPath.

Page 21: 5.1 Introducción a XSL - paginaspersonales.deusto.espaginaspersonales.deusto.es/abaitua/konzeptu/sgml/apuntes_XML/... · XML (orientado al contenido o a la presentación) en un documento

© 2002 Borja Sotomayor 4

<tienda><articulo precio=“35000”>Impresora</articulo><articulo precio=“20000”>Disco Duro</articulo><articulo precio=“47000”>Monitor</articulo>

</tienda>

<xsl:stylesheet ... ><xsl:template match=“articulo”>Esto es un articulo</xsl:template>

</xsl:stylesheet>

+

=Esto es un articuloEsto es un articuloEsto es un articulo

Todos los elementos <articulo> son substituidos por el texto “Esto es un articulo”

El Procesador XSLT (I)! Pero si yo tengo el siguiente documento XML:

<cineasta nombre=“Woody Allen”>

<peliculas>

...

</peliculas>

<influencias>

<cineasta nombre=“Ingmar Bergman”/>

<cineasta nombre=“Groucho Marx”/>

</influencias>

</cineasta>

y defino una regla de transformación con match=“cineasta”...¿qué elementos serán transformados?

Page 22: 5.1 Introducción a XSL - paginaspersonales.deusto.espaginaspersonales.deusto.es/abaitua/konzeptu/sgml/apuntes_XML/... · XML (orientado al contenido o a la presentación) en un documento

© 2002 Borja Sotomayor 5

El Procesador XSLT (II)! ¿Todos?! ¿El primer elemento (Woody Allen)?! ¿Los últimos (Bergman + Marx)?! ¿match=“cineasta”? Si “cineasta” es una

dirección XPath, ¿Cual es el contexto?

! Para resolver este tipo de problemas, conviene saber como aplica exactamente las reglas de transformación el procesador XSLT.

El Procesador XSLT (III)! La transformación del documento es un

proceso recursivo.! Primero intenta transformar el elemento

raíz. Si existe una regla de transformación definida para el elemento raíz, la aplica. Si no aplica una regla por defecto, e intenta transformar a los hijos del elemento raíz.

Page 23: 5.1 Introducción a XSL - paginaspersonales.deusto.espaginaspersonales.deusto.es/abaitua/konzeptu/sgml/apuntes_XML/... · XML (orientado al contenido o a la presentación) en un documento

© 2002 Borja Sotomayor 6

El Procesador XSLT (IV)! Por cada hijo, si se ha definido una regla

de transformación, se aplica. Si no, aplica una regla por defecto, e intenta transformar a los hijos del elemento. Este proceso se repite hasta que se agotan los hijos.

! ¡Ojo! Si un elemento efectivamente tiene definida una regla de transformación, ésta se aplica y los hijos no son transformadosa no ser que lo ‘solicitemos’ explícitamente.

Informalmente, el algoritmo que sigue es:

función Transformar(nodo){

Si existe regla de transformación para nodo en contexto entoncescontexto # nodoAplicar regla de transformación

Si nocontexto # nodoAplicar regla por defectoPor cada hijo de nodo hacer

Transformar(hijo)fin “Por cada”

fin “Si”}

main(){

contexto # Nodo raízTransformar(contexto)

}

¡Ojo! La expresión “contexto # nodo” no es estrictamente correcta. En XSLT, el contexto no depende exclusivamente del ‘nodo actual’sino de más parámetros, especialmente cuando se tiene que determinar si “existe regla de transformación para nodo en contexto”. Sin embargo, en la mayoría de los casos este algoritmo es válido.

Page 24: 5.1 Introducción a XSL - paginaspersonales.deusto.espaginaspersonales.deusto.es/abaitua/konzeptu/sgml/apuntes_XML/... · XML (orientado al contenido o a la presentación) en un documento

© 2002 Borja Sotomayor 7

<cineasta nombre=“Woody Allen”>

<peliculas>

...

</peliculas>

<influencias>

<cineasta nombre=“Ingmar Bergman”/>

<cineasta nombre=“Groucho Marx”/>

</influencias>

</cineasta>

Si definimos una regla de transformación para ‘cineasta’ entonces sólo será transformado el elemento raíz ‘cineasta’. Sus hijos serán ignorados.

Page 25: 5.1 Introducción a XSL - paginaspersonales.deusto.espaginaspersonales.deusto.es/abaitua/konzeptu/sgml/apuntes_XML/... · XML (orientado al contenido o a la presentación) en un documento

© 2002 Borja Sotomayor 1

5.4 XSLT: Instrucciones Básicas

Instrucciones XSLT (I)! Antes hemos visto una regla de transformación

muy sencilla:<xsl:stylesheet ... >

<xsl:template match=“articulo”>Esto es un articulo</xsl:template>

</xsl:stylesheet>

! Obviamente, en una transformación no vamos a limitarnos a sustituir elementos por texto. Querremos hacer cosas como:! Acceder al contenido del elemento.! Acceder a los atributos del elemento.! Decidir si queremos transformar también los hijos .

Page 26: 5.1 Introducción a XSL - paginaspersonales.deusto.espaginaspersonales.deusto.es/abaitua/konzeptu/sgml/apuntes_XML/... · XML (orientado al contenido o a la presentación) en un documento

© 2002 Borja Sotomayor 2

Instrucciones XSLT (II)! Esto se consigue con las instrucciones

XSLT, que están contenidas dentro de las reglas de transformación (<xsl:template>)

xsl:value-of (I)! Para mostrar el texto de un elemento, el valor

de un atributo, etc. utilizamos<xsl:value-of select=“exp_XPath”/>

! exp_XPath es una expresión XPath (no necesariamente tiene que devolver un nodo)

! ¡Ojo! Si exp_XPath devuelve un nodo, entonces el texto que aparecerá en el documento resultante será el valor del nodo.! Si devuelve varios nodos, solo se tiene en

consideración el primer nodo.

Page 27: 5.1 Introducción a XSL - paginaspersonales.deusto.espaginaspersonales.deusto.es/abaitua/konzeptu/sgml/apuntes_XML/... · XML (orientado al contenido o a la presentación) en un documento

© 2002 Borja Sotomayor 3

xsl:value-of (II)! Valores

! Elemento: Concatenación de el valor de sus nodos texto y de los nodos texto de sus descendientes. La concatenación se realiza tal cual aparece en el documento XML original.

! Nodo Raíz: Valor del elemento raíz.! Atributo: El propio valor del atributo.

xsl:value-of (III)! Comentarios: El texto contenido entre <!–

y -->! Instrucciones de proceso: El texto

contenido entre <? y ?> pero sin el nombre de la instrucción de proceso.

Page 28: 5.1 Introducción a XSL - paginaspersonales.deusto.espaginaspersonales.deusto.es/abaitua/konzeptu/sgml/apuntes_XML/... · XML (orientado al contenido o a la presentación) en un documento

© 2002 Borja Sotomayor 4

<tienda><articulo precio=“35000”>Impresora</articulo><articulo precio=“20000”>Disco Duro</articulo><articulo precio=“47000”>Monitor</articulo>

</tienda>

<xsl:stylesheet ... ><xsl:template match=“articulo”><xsl:value-of select=“.”/></xsl:template>

</xsl:stylesheet>

+

=ImpresoraDisco DuroMonitor

Todos los elementos <articulo> son substituidos por su valor (¡¡ojo con el contexto!!)

<tienda><articulo precio=“35000”>Impresora</articulo><articulo precio=“20000”>Disco Duro</articulo><articulo precio=“47000”>Monitor</articulo>

</tienda>

<xsl:stylesheet ... ><xsl:template match=“articulo”><xsl:value-of select=“@precio”/></xsl:template>

</xsl:stylesheet>

+

=350002000047000

Todos los elementos <articulo> son substituidos por el valor de su atributo “precio”

Page 29: 5.1 Introducción a XSL - paginaspersonales.deusto.espaginaspersonales.deusto.es/abaitua/konzeptu/sgml/apuntes_XML/... · XML (orientado al contenido o a la presentación) en un documento

© 2002 Borja Sotomayor 5

xsl:value-of (IV)! ¿Y si queremos insertar un valor dentro

de un atributo? Por ejemplo:<tienda>

<articulo>Impresora</articulo><articulo>Disco Duro</articulo><articulo>Monitor</articulo>

</tienda>

<tienda><articulo nombre=“Impresora”/><articulo nombre=“Disco Duro”/><articulo nombre=“Monitor”/>

</tienda>

¿Cómo?

xsl:value-of (V)! En principio, se nos podría ocurrir

hacerlo así:

<xsl:stylesheet ... ><xsl:template match=“articulo”><articulo nombre=“<xsl:value-of select=“.”/>”></xsl:template>

</xsl:stylesheet>

Page 30: 5.1 Introducción a XSL - paginaspersonales.deusto.espaginaspersonales.deusto.es/abaitua/konzeptu/sgml/apuntes_XML/... · XML (orientado al contenido o a la presentación) en un documento

© 2002 Borja Sotomayor 6

xsl:value-of (VI)! ¡No! Hay que poner la expresión XPath

entre corchetes y dentro del valor del atributo:

<xsl:stylesheet ... ><xsl:template match=“articulo”><articulo nombre=“{.}”/></xsl:template>

</xsl:stylesheet>

xsl:apply-templates (I)! Para alterar el flujo de la

transformación, en una regla podemos ‘pausar’ la transformación actual y aplicar reglas a otro/s nodo/s.

! Especificamos estos otros nodos con una dirección XPath.! Si nos fijamos en el algoritmo, es como si

pudiésemos invocar nosotros mismos a la función Transformar(nodo)

Page 31: 5.1 Introducción a XSL - paginaspersonales.deusto.espaginaspersonales.deusto.es/abaitua/konzeptu/sgml/apuntes_XML/... · XML (orientado al contenido o a la presentación) en un documento

© 2002 Borja Sotomayor 7

xsl:apply-templates (II)! Para hacer esto, utilizamos:

<xsl:apply-templates select=“dir_XPath”/>

<tienda><articulo precio=“35000”>Impresora</articulo><articulo precio=“20000”>Disco Duro</articulo>

</tienda>

<xsl:stylesheet ... ><xsl:template match=“tienda”>

Los articulos de mi tienda son:<ol><xsl:apply-templates select=“articulo” /></ol>

</xsl:template>

<xsl:template match=“articulo”><li><xsl:value-of select=”.”/></li>

</xsl:template></xsl:stylesheet>

+

Page 32: 5.1 Introducción a XSL - paginaspersonales.deusto.espaginaspersonales.deusto.es/abaitua/konzeptu/sgml/apuntes_XML/... · XML (orientado al contenido o a la presentación) en un documento

© 2002 Borja Sotomayor 8

xsl:apply-templates (III)! El resultado es:

Los articulos de mi tienda son:<ol>

<li>Impresora</li><li>Disco Duro</li>

</ol>

xsl:apply-templates (IV)! Si omitimos el atributo select,

sencillamente se transforman todos los nodos hijos del contexto.

<xsl:apply-templates />

Page 33: 5.1 Introducción a XSL - paginaspersonales.deusto.espaginaspersonales.deusto.es/abaitua/konzeptu/sgml/apuntes_XML/... · XML (orientado al contenido o a la presentación) en un documento

© 2002 Borja Sotomayor 9

xsl:apply-templates (V)! “xsl:apply-templates” y “xsl:template”

tienen un atributo llamado “mode”, que me permite definir distintos ‘modos’ de transformación.

! Es decir, yo puedo especificar más de una regla de transformación para una misma dirección XPath, distinguiendo las reglas con el atributo “mode”.

xsl:apply-templates (VI)! Por ejemplo:

<xsl:template match=“articulo” mode=“negrita”><b><xsl:value-of select=“.”/></b>

</xsl:template>

<xsl:template match=“articulo” mode=“cursiva”><i><xsl:value-of select=“.”/></i>

</xsl:template>

Page 34: 5.1 Introducción a XSL - paginaspersonales.deusto.espaginaspersonales.deusto.es/abaitua/konzeptu/sgml/apuntes_XML/... · XML (orientado al contenido o a la presentación) en un documento

© 2002 Borja Sotomayor 10

xsl:apply-templates (VII)! ¿Cual se aplica? Lo indico con el atributo

“mode” de “xsl:apply-templates”.

<xsl:apply-templates select=“articulo” mode=“negrita”/>

Otras Instrucciones! Lo que hemos visto es lo básico de

XSLT. Tiene muchas otras instrucciones que le dan mucha potencia y versatilidad:! Iteración! Estructuras condicionales! Ordenación de nodos según un criterio