XSLT
XSLT
XSLT
Introducción a XSLT
Octubre 2006
Contenidos
Plantillas
Plantillas predefinidas
Creación del Árbol de resultado
Programación
Alternativas y control
Variables y parámetros
Plantillas con nombre y recursividad
Automatización
Clasificación
Numeración
Claves e identificadores
Múltiples documentos
Ejemplo
I Xalan
java org.apache.xalan.Process -in f.xml -xsl
h.xsl
I XSLT de GNome
xsltproc hoja.xsl f.xml
I XMLStarlet
xml tr hoja.xsl f.xml
I Saxon
java net.sf.saxon.Transform f.xml h.xsl
Generando HTML
Reglas de Plantillas
Obtener valores
Aplicando plantillas
Modos
Es posible indicar varios modos de recorrido
Crear una tabla de contenidos
< x s l : t e m p l a t e match=” / ”>
Contenidos:
<u l><x s l : a p p l y − t e m p l a t e s mode=” c o n t ” /></ u l>
<x s l : a p p l y − t e m p l a t e s />
</ x s l : t e m p l a t e>
Plantillas predefinidas
Plantillas predefinidas
Plantillas predefinidas
Plantillas predefinidas
Plantillas predefinidas
Creación de elementos
Creación de atributos
Mediante attribute puede definirse un atributo nuevo.
<e n l a c e
u r l=” h t t p : //www . u n i o v i . e s ”>
U n i v e r s i d a d</ e n l a c e>
resultado
< x s l : t e m p l a t e match=” e n l a c e ”> <a
<x s l : e l e m e n t name=” a ”> h r e f=” h t t p : //www . u n i o v i . e s ”>
< x s l : a t t r i b u t e name=” h r e f ”> U n i v e r s i d a d</ a>
<x s l : v a l u e − o f s e l e c t =” @ u r l ” />
</ x s l : a t t r i b u t e>
<x s l : v a l u e − o f s e l e c t=” . ” />
</ x s l : e l e m e n t>
</ x s l : t e m p l a t e>
Plantillas de atributos
<e n l a c e
u r l=” h t t p : //www . u n i o v i . e s ”>
U n i v e r s i d a d</ e n l a c e> resultado
<a
< x s l : t e m p l a t e match=” e n l a c e ”> h r e f=” h t t p : //www . u n i o v i . e s ”>
<a h r e f=” { @ u r l } ”> U n i v e r s i d a d</ a>
<x s l : v a l u e − o f s e l e c t =” . ” />
</ a>
</ x s l : t e m p l a t e>
Conjuntos de atributos
Mediante attribute-set pueden definirse conjuntos de atributos
para su reutilización posterior
Texto
Comentarios
<poema>
<!−− G e n e r a d o m e d i a n t e XSLT −−>
...
</poema>
Instrucciones de procesamiento
Resultado
<? xml−s t y l e s h e e t h r e f=”poema . x s l ” t y p e=” t e x t / x s l ” ?>
Copiado de contenido
Copiado de contenido
Ejemplo
Ejercicio
Alternativas y control
Condicional
Alternativas y control
Condicional
Alternativas y control
Repetición
Alternativas y control
Ejercicio
Formatear un libro
Crear una hoja de estilos que tome un documento que represente un
libro y genere una página Web.
Como ejemplo, puede utilizarse el documento siguiente
I Incluir una tabla de contenidos con enlaces a cada capı́tulo
I Incluir enlaces en cada capı́tulo al capı́tulo siguiente y al
anterior
Alternativas y control
Ejercicio
Alternativas y control
Ejercicio
Lista de eventos
Crear un vocabulario que represente eventos
Cada evento tendrá asociada la siguiente información:
I Tı́tulo
I Fecha: hora, dı́a, mes y año
I Descripción (texto libre con marcas HTML)
I Lugar
I Otra información que se considere interesante
Crear un documento de ejemplo de eventos
Crear una hoja de estilos que transforme documentos con eventos
en formato HTML
Jose Emilio Labra Gayo
Introducción a XSLT
Contenidos Plantillas Programación Automatización Múltiples documentos
Alternativas y control
Ejercicio
Formato Atom
Crear una hoja de estilos que convierta documentos en formato Atom
en documentos en el formato de eventos desarrollado en el ejercicio
anterior
Variables y parámetros
Variables
variable permite declarar una variable
NOTA: Los valores de las variables no pueden modificarse =
Programación declarativa!
El area es
<x s l : v a l u e − o f s e l e c t=” $ a r e a ” /> y
e l doble del area es
<x s l : v a l u e − o f s e l e c t=” $ a r e a ∗ 2 ” />
</ x s l : t e m p l a t e>
Variables y parámetros
Parámetros
Recursividad
Factorial
< x s l : t e m p l a t e name=” f a c t ”>
<x s l : p a r a m name=”n” />
< x s l : c h o o s e>
<x s l : w h e n t e s t=” $n=0”>1</ x s l : w h e n>
< x s l : o t h e r w i s e>
< x s l : v a r i a b l e name=” r ”>
< x s l : c a l l − t e m p l a t e name=” f a c t ”>
<x s l : w i t h − p a r a m name=”n” s e l e c t=” $n − 1 ” />
</ x s l : c a l l − t e m p l a t e>
</ x s l : v a r i a b l e>
<x s l : v a l u e − o f s e l e c t=” $n ∗ $ r ” />
</ x s l : o t h e r w i s e>
</ x s l : c h o o s e>
</ x s l : t e m p l a t e>
Ejercicio
Bucle for
Crear una hoja de estilos que tome un número n y genere una lista
de n items con el siguiente formato:
<u l>
< l i >I t e m 1</ l i >
< l i >I t e m 2</ l i >
< l i >I t e m 3</ l i >
...
</ u l>
Ejercicio
Tabla
Crear una hoja de estilos que tome un número n y genere una tabla
HTML de n filas y n columnas
Ejercicio
Substituir
Crear una hoja de estilos que tome un documento y substituya todas
las apariciones de una cadena de texto por otra.
Ejercicio
Crear un calendario
Crear una hoja de estilos que tome como argumento un mes y un
año y genere un calendario. Puede partirse del siguiente documento
XML y de la siguiente hoja de estilos
Ejercicio
Eventos en calendario
Crear una hoja de estilos que represente documentos de eventos en
un calendario
Mensajes y terminación
XSLT es un lenguaje pensado para transformar documentos XML
I No tiene mecanismos de interacción con el usuario
I Para cambiar el comportamiento se le pueden pasar
parámetros
I El elemento message muestra un mensaje. Puede ser útil para
depuración. El atributo terminate permite indicar al
procesador que aborte la ejecución
Clasificación
Clasificación
Clasificación
Clasificación
El atributo data-type permite indicar la forma de clasificación:
I number: numérica
I text: textual (por defecto)
El atributo order indica el tipo de clasificación:
I ascending: ascendente (por defecto)
I descending: descendente
Numeración
Numeración automática
Numeración
Estilo de numeración
Numeración
Formato de numeración
El elemento number-format especifica el formato del número
Los atributos para controlar el formato de salida son:
I decimal-separator
I grouping-separator
I percent
I per-mille
I zero-digit
I digit
I pattern-separator
I infinity
I NaN
I minus-sign
Claves e identificadores
Identificadores
La función id permite seleccionar un elemento con un identificador
determinado
Puede ser útil para buscar elementos
Limitación: requiere declarar atributo como ID en la DTD
<d i b u j o s>
< c o l o r e s>
<c o l o r i d=” r o j o ”>2 5 5 , 0 , 0</ c o l o r>
< x s l : t e m p l a t e match=” c u a d r o ”>
<c o l o r i d=” a z u l ”>0 , 0 , 2 5 5</ c o l o r>
<s v g : r e c t
...
f i l l=
</ c o l o r e s>
” rgb ({ i d ( @color )}) ”
. . . />
<c u a d r o c o l o r=” r o j o ” . . . / >
</ x s l : t e m p l a t e>
<c u a d r o c o l o r=” v e r d e ” . . . / >
...
</ d i b u j o s>
Claves e identificadores
Identificadores y claves
El ejemplo anterior puede realizarse mediante una búsqueda
completa
Limitación: la búsqueda completa es poco eficiente
<d i b u j o s>
< x s l : t e m p l a t e match=” c u a d r o ”>
< c o l o r e s>
<x s l : v a r i a b l e
<c o l o r i d=” r o j o ”>2 5 5 , 0 , 0</ c o l o r>
name=” c o l o r ”
<c o l o r i d=” a z u l ”>0 , 0 , 2 5 5</ c o l o r>
s e l e c t=” @ c o l o r ” />
...
<s v g : r e c t
</ c o l o r e s>
f i l l=
” rgb ({/ d i b u j o s / c o l o r e s / c o l o r
<c u a d r o c o l o r=” r o j o ” . . . / >
[ @ i d=$ c o l o r ] } ) ”
<c u a d r o c o l o r=” v e r d e ” . . . / >
. . . />
...
</ x s l : t e m p l a t e>
</ d i b u j o s>
Claves e identificadores
Identificadores y Claves
Claves e identificadores
Generación de identificadores
La función generate-id() permite generar un identificador único.
Toma como argumento un nodo y devuelve un identificador
asociado a dicho nodo.
Puede ser útil para generación de tablas de contenidos
Inclusión
< x s l : s t y l e s h e e t v e r s i o n=” 1 . 0 ”
x m l n s : x s l=” h t t p : //www . w3 . o r g /1999/ XSL/ T r a n s f o r m ”>
...
</ x s l : s t y l e s h e e t>
Importación
xsl:import importa el contenido de otra hoja de estilos en el
documento actual.
Las plantillas de la hoja importada tienen menor prioridad que las
plantillas de la hoja principal.
La instrucción import debe aparecer al comienzo de la hoja de
estilos. No se permite recursividad
< x s l : s t y l e s h e e t v e r s i o n=” 1 . 0 ”
x m l n s : x s l=” h t t p : //www . w3 . o r g /1999/ XSL/ T r a n s f o r m ”>
...
</ x s l : s t y l e s h e e t>
Controlando la salida
El elemento output permite controlar el formato del resultado.
Puede tener los siguientes atributos:
I method: indica el tipo de documento a generar. Puede ser
xml, text ó html
I encoding: especifica la codificación del resultado
Fin de la presentación