Title: XSLT XML Stylesheets Language for Transformation
1XSLT (XML Stylesheets Language for Transformation)
- LENGUAJES PARA INTERNET
- MarÃa RodrÃguez Fernández
2Contenidos de la clase de hoy
- El problema de presentar un documento XML
- XSLT un lenguaje para transformaciones
- Escribiendo documento XSL
3El problema de presentar un documento XML
- XML no incorpora ninguna semántica intrÃnseca de
presentación - XMLCSS
- XMLXSL (Extensible Stylesheet Language,
"lenguaje extensible de hojas de estilo"). - Familia de lenguajes basados en XML
- Permite describir cómo la información contenida
en un documento XML debe ser transformada o
formateada para su presentación en un medio
especÃfico
4Por qué XSL?
- Está diseñado para integrarse en la arquitectura
XML. - Es mucho más potente que CSS.
- CSS no tiene capacidades de transformación.
- Cada vez hay más herramientas para XSL.
5CSS vs. XSL
6XSL
- Formado por
- XSLT (Extensible Stylesheet Language
Transformations) permite convertir documentos
XML de una sintaxis a otra (por ejemplo, de un
XML a otro o a un documento HTML). - XSL-FO (lenguaje de hojas extensibles de formateo
de objetos) permite especificar el formato
visual con el cual se quiere presentar un
documento XML, es usado principalmente para
generar documentos PDF. - XPath, o XML Path Language sintaxis (no basada
en XML) para acceder o referirse a porciones de
un documento XML.
Estas tres especificaciones son recomendaciones
oficiales del W3C.
7Contenidos de la clase de hoy
- El problema de presentar un documento XML
- XSLT un lenguaje para transformaciones
- Escribiendo documento XSL
8Transformación XSLT
- Transformacion estructural
- Los datos son convertidos de la estrucutra de
entrada (xml) a una estructura que refleje la
salida deseada - Formato (pdf, html, etc.)
- La salida de datos, generados por la nueva
estructura se entrega en el formato requerido
(PDF, HTML,coma-delimitado)
9 Por que transformar XML ?
- Conversión entre modelos de datos
- Aunque legible, XML está pensado para el
intercambio de información entre aplicaciones. - Es necesaria una capa de presentación para hacer
amigable el acceso de los humanos a la
información XML. - XML produce separación entre el modelo de datos y
presentación visual.
10Cómo funciona?
- Durante el proceso de transformación, XSLT
utiliza XPath para definir partes del documento
fuente que encajan dentro de una o mas plantillas
predefinidas - Por cada coincidencia, XSLT transformará esta
parte del documento fuente para generar el
documento resultante - La porción del documento fuente que no encaja con
la plantilla permanecerá sin modificación alguna
11Proceso de publicación XML-XSL.
Doc. XML original
HTML, PDF, ...
12Ejemplo
. .
xslstylesheet
match
ltxsltemplate match ROWSET/ROWENAME"gt
ltEmpleado idNX-EMPNOgt ltxslvalue-of
select ENAME"/gt lt/Empleadogt lt/xsltemplategt
ltROWSETgt
. .
ltROWgt
construye
WS
ltEMPNOgt
7839
ltEmpleadogt
idNX-7839
WS
ltENAMEgt
KING
KING
13Contenidos de la clase de hoy
- El problema de presentar un documento XML
- XSLT un lenguaje para transformaciones
- Escribiendo documento XSL
- http//petra.euitio.uniovi.es/mariarf/practicaXSL
T.pdf
14Ejemplo básico
lt?xml version 1.0?gt lt?xml-stylesheet type
text/xsl href intro.xsl?gt
ltmiCursogt ltcursogt Curso de Lenguajes para
Internet lt/cursogt lt/miCursogt
lt?xml version "1.0"?gt ltxslstylesheet version
"1.0" xmlnsxsl "http//www.w3.org/1999/XSL/Tran
sform"gt ltxsltemplate match "miCurso"gt
lthtmlgt ltbodygtltpgtltxslvalue-of select
"curso"/gtlt/pgtlt/bodygt lt/htmlgt
lt/xsltemplategt lt/xslstylesheetgt
lthtmlgt ltbodygtltpgtCurso de Lenguajes para
Internetlt/pgtlt/bodygt lt/htmlgt
15Aplicación de la hoja de estilo al documento XML
- Type text/css (CSS) o text/xsl (XSL)
lt?xml-stylesheet type text/xsl href
intro.xsl?gt
16Estructura básica de una hoja XSLT
- Elementos de XSLT
- Pertenecen al namespace xsl
- Sus etiquetas llevan el prefijo xsl . Son el
equivalente a las palabras clave del lenguaje de
programación (definidos por el estándar e
interpretados por cualquier procesador de XSLT) - Elementos LRE (Literal Result Elements)
- Son elementos que no pertenecen a XSLT, sino que
se repiten en la salida sin má - Ejemplo un elemento ltfechagt
- Elementos de extensión
- Son elementos no-estándar (al igual que los LRE),
que son manejados por implementaciones concretas
del procesador. Normalmente, no los utilizaremos
17ltxslstylesheetgt
- Es el elemento raÃz de una hoja XSL
- version Suele ser 1.0
- xmlnsxsl Asigna el namespace xsl (las etiquetas
de XSL empiezan por el prefijo xsl). El valor
para XSLT suele ser http//www.w3.org/1999/XSL/Tra
nsform
ltxslstylesheet version "1.0" xmlnsxsl
"http//www.w3.org/1999/XSL/Transform"gt lt/xslst
ylesheetgt
18Elementos de nivel superior
- Son elementos hijos de xslstylesheet
- Además, son hijos directos (tampoco pueden
anidarse) - Dos excepciones xslvariable y xslparam
- No son instrucciones sobre cómo procesar
elementos, sino estructuras contenedoras para
instrucciones
19ltxsloutputgt
- Define qué tipo de salida se va a generar como
resultado - method xml, html o text
- encoding define la forma de representar
caracteres que se adoptará en la salida
(iso-8859-1, UTF-8, UTF-16, windows-1252) - omit-xml-declaration yes o no. Indica si se
genera o no la declaración lt?xml...?gt - indent yes o no. Si es yes, el procesador (para
salidas xml o html) indentará el resultado
20Otros elementos de nivel superior
- ltxslincludegt que permite referenciar plantillas
procedentes de una fuente externa - ltxslstrip-spacegt que elimina antes del
procesamiento todos los modos consistentes en
espacios en blanco - ltxslpreserve-spacegt mantiene los espacios en
blanco
21Reglas de transformación XSLTTemplates
- Es el elemento básico y fundamental del lenguaje
de transformación XSLT - Una regla (o template) consta de dos partes
- Una etiqueta formada por un patrón de
localización que selecciona nodos en el árbol XML
origen sobre los que se aplica la tranformación - Expresión XPath.
- Una acción que indica la transformación a
realizar sobre los nodos seleccionados. - Cada hoja de estilo XSLT debe contener al menos
una regla si se quiere que ejecute algo
22Obtención de patrones
- ltxsltemplate match gt
- ltxslapply-templates selectgt
23ltxsltemplategt
- Cada etiqueta ltxsltemplategt contiene reglas por
aplicar a ciertos elementos de un nodo - match es utilizado para asociar la plantilla con
un elemento XML. El atributo match también puede
utilizarse para aplicarse a una rama completa del
documento XML (Por ejemplo match"/" define a
todo el documento) - name Además de cuando encaja, un template puede
invocarse explÃcitamente (en ese caso se necesita
que tenga un nombre) - Ejemplo ltxsltemplate match"/"gt
24Ejemplo
ltxslTutorial gt ltboldgtHello, world.lt/boldgtlt
redgtI am lt/redgt ltitalicgtfine.lt/italicgt
lt/xslTutorialgt
ltPgt ltBgtHello, world.lt/Bgtlt/Pgt ltP
style"colorred"gtI am lt/Pgt ltPgt ltigtfine.lt/igtlt/Pgt
ltxslstylesheet xmlnsxsl'http//www.w3.org/1999
/XSL/Transform'gt ltxsltemplate match"bold"gt
ltPgtltBgtltxslvalue-of select"."/gtlt/Bgtlt/Pgt
lt/xsltemplategt ltxsltemplate match"red"gt
ltP style"colorred"gtltxslvalue-of
select"."/gtlt/Pgt lt/xsltemplategt ltxsltemplate
match"italic"gt ltPgtltigtltxslvalue-of
select"."/gtlt/igtlt/Pgt lt/xsltemplategt
lt/xslstylesheetgt
Hello, world. I am fine.
25ltxslapply-templatesgt
- Se utiliza para indicar al procesador que intente
emparejar templates con cierto nodo o conjunto de
nodos (nodeset) - select Su valor es una expresión XPath de
conjunto de nodos. El procesador intentará
emparejar ese conjunto de nodos con sus templates
respectivos - Ejemplo apply-templates1
- Permite realizar un tratamiento recursivo de
todos los elementos del árbol fuente
26XPath
- Objetivo Identificar elementos
- Tienen la forma
- nodo1/nodo2/.../nodoN
- Ejemplo persona/apellido/materno
- Describen un camino (path)
- Resultado
- Un conjunto de nodos
- String, número o boolean
27XPath vs. Sistema de archivos
28Resumen de sintaxis abreviada
- X hijo elemento X
- - todos los hijos elemento
- text() - todos los hijos texto
- _at_Y atributo Y
- X1 primer hijo X
- Xlast() - último hijo X
- /X nietos X
- X//Y descendientes Y de hijo X
- //Y descendientes Y de la RAIZ
- //Y/X - descendientes Y de HIJO X
- .. - padre
- //X1_at_YZ - primeros hijos X con atributo
YZ
29ltxslvalue-ofgt
- La etiqueta ltxslvalue-ofgt se utiliza para
seleccionar el valor de una etiqueta XML y
agregarlo al archivo de salida de la
transformación - El valor del atributo select contiene una
expresión XPath. Esta trabaja como la navegación
de un sistema de ficheros donde una diagonal
vertical delantera (/) selecciona subdirectorios - Ejemplo
- ltxslvalue-of select"catalog/cd/title"/ gt
30Ordenar nodos ltxslsortgt
- Permite aplicar un template a un conjunto de
nodos ordenándolos alfabética o numéricamente - Sintaxis
- ltxslapply-templates selectXPATHgt
- ltxslsort selectXPATH
- data-typetextnumber
- orderascendingdescending/gt
- ltxslsort /gt
- lt/xslapply-templatesgt
31Ejemplo
ltTABLEgt  ltTRgt     ltTHgtAlicialt/THgt  lt/TRgt  ltTRgt
     ltTHgtCarloslt/THgt  lt/TRgt  ltTRgt     ltTHgtJaim
elt/THgt  lt/TRgt  ltTRgt     ltTHgtJuanlt/THgt  lt/TRgtÂ
 ltTRgt     ltTHgtMartalt/THgt  lt/TRgtlt/TABLEgt
ltsourcegtltnamegtJuanlt/namegt ltnamegtJaimelt/namegt
ltnamegtCarloslt/namegt ltnamegtAlicialt/namegt
ltnamegtMartalt/namegt lt/sourcegt
ltxslstylesheet version '1.0'
  xmlnsxsl'http//www.w3.org/1999/XSL/Transform
'gtltxsltemplate match"/"gt   ltTABLEgt
    ltxslfor-each select"//name"gt
        ltxslsort order"ascending" select"."/gt
           ltTRgt              ltTHgtltxslvalue-of
select"."/gtlt/THgt            lt/TRgt
        lt/xslfor-eachgt   lt/TABLEgt
lt/xsltemplategtlt/xslstylesheetgt
Alicia Carlos Jaime Juan Marta
32Sentencias iterativas ltxslfor-eachgt
- La etiqueta XSL ltxslfor-eachgt se utiliza para
seleccionar todos los elementos XML del nodo
especificado. - El valor del atributo select contiene una
expresión XPath. Esta trabaja como la navegación
de un sistema de ficheros donde una diagonal
vertical delantera (/) selecciona subdirectorios.
- Sintaxis
-
- ltxslfor-each selectXPATHgt
-
- lt/xslfor-eachgt
33Ejemplo
ltxslTutorial gt ltlistgt ltentry name"A"/gtÂ
ltentry name"B"/gt ltentry name"C"/gt ltentry nam
e"D"/gt lt/listgt lt/xslTutorialgt
ltHTMLgt ltHEADgt lt/HEADgt ltBODYgt A, B, C, D,
lt/BODYgt lt/HTMLgt
ltxslstylesheet xmlnsxsl'http//www.w3.org/1999
/XSL/Transform' gt ltxsltemplate match"list"gt
ltxslfor-each select"entry"gt ltxslvalue-of
select"_at_name"/gt ltxsltextgt , lt/xsltextgt
lt/xslfor-eachgt lt/xsltemplategt
lt/xslstylesheetgt
A, B, C, D,
34Sentencias selectivas ltxslifgt
- Permite decidir si se va a procesar o no una
parte de la hoja XSL en función de una condición. - Sintaxis
- ltxslif testcondicióngt
-
- lt/xslifgt
- No contiene parte else.
- Podemos usar , !, gt, gt y not( )
35Ejemplo
ltxslstylesheet xmlnsxsl'http//www.w3.org/1999
/XSL/Transform' gt ltxsltemplate match"list"gt
ltxslfor-each select"entry"gt ltxslvalue-of
select"_at_name"/gt ltxslif test"not(position()l
ast())"gt ltxsltextgt , lt/xsltextgt
lt/xslifgt lt/xslfor-eachgt lt/xsltemplategt
lt/xslstylesheetgt
A, B, C, D
36Sentencias selectivas ltxslchoosegt
- Permite decidir qué parte de una hoja XSL se debe
procesar en función de varias condiciones - Contiene elementos xslwhen
- Atributo test (similar al de xslif)
- Son los diferentes casos de una sentencia CASE
- Caso por defecto xslotherwise (sin atributos)
- Sintaxis ltxslchoosegt
- ltxslwhen testcondicióngt
-
- lt/xslwhengt
- ltxslwhen testcondicióngt
-
- lt/xslwhengt
- ltxslotherwisegt
-
- lt/xslotherwisegt
- lt/xslchoosegt
37ltxslTutorial gt ltSECTIONgt ltDATAgtI need a pen.lt
/DATAgt ltDATAgtI need some paper.lt/DATAgt
ltSUMMARYgt I need a pen and some paper
lt/SUMMARYgt lt/SECTIONgt ltSECTIONgt
ltDATAgtI need bread.lt/DATAgt ltDATAgtI need butter.
lt/DATAgt lt/SECTIONgt lt/xslTutorialgt
ltHTMLgt ltHEADgt lt/HEADgt ltBODYgt ltPgtSUMMARY I need
a pen and some paperlt/Pgt ltPgtDATA I need
bread.lt/Pgt ltPgtDATA I need butter.lt/Pgt lt/BODYgt
lt/HTMLgt
SUMMARY I need a pen and some paper DATA I
need bread. DATA I need butter.
ltxslstylesheet xmlnsxsl'http//www.w3.org/1999/
XSL/Transform' gt ltxsltemplate
match"//SECTION"gt ltxslchoosegt ltxslwhen
test'SUMMARY'gt ltPgtltxsltextgtSUMMARYlt/xslte
xtgtltxslvalue-of select"SUMMARY"/gtlt/Pgt
lt/xslwhengt ltxslotherwisegt
ltxslfor-each select"DATA"gt
ltPgtltxsltextgt DATA lt/xsltextgt ltxslvalue-of
select"."/gtlt/Pgt lt/xslfor-eachgt
lt/xslotherwisegt lt/xslchoosegt
lt/xsltemplategt lt/xslstylesheetgt
38Construcción de elementos en el árbol resultado
- Cómo generar un elemento con cierta etiqueta y
construir sus atributos? - A veces la sintaxis no nos lo permite
directamente - Ej. ltBODY BGCOLORltxslvalue-of
selectcolor-elegido/gtgt - Se pueden utilizar los llamados AVT (Attribute
Value Template) las expresiones entre llaves se
evalúan como si hubiera un value-of - Para poner llaves "de verdad", poner cada una dos
veces - Se pueden necesitar instrucciones para
construir dichos elementos - xslelement Construye un elemento en el árbol
resultado - Atributos name
- xslattribute añade un atributo al elemento
- Atributos name
- El valor está encerrado como texto libre dentro
de xslattribute
39Ejemplo
ltBODY BGCOLOR00FFFFgt ltPgtEsto es una
pruebalt/Pgt lt/BODYgt
ltxslelement nameBODYgt ltxslattribute
nameBGCOLORgt 00FFFF lt/xslattributegt ltxsl
element namePgt Esto es una
prueba lt/xslelementgt lt/xslelementgt
40Definición de variables
- Permiten asignar valores a etiquetas para usarlos
cómodamente - Sintaxis
- ltxslvariable namenombre selectXPATHgt
- No existe el concepto de variable global. La
acumulación de valores debe hacerse mediante
llamadas recursivas a funciones. - Se definen dentro de ltxsltemplategt y NO
conservan el valor de una llamada a otra del
template.
41Llamada a funciones
- La etiqueta ltxslparamgt permite definir
parámetros con los que posteriormente se llamará
a la función. - La llamada a la función se hará según
- ltxslcall-template namenombre-funcióngt
- ltxslwith-param namepar1 selectvalor/gt
- ltxslwith-param namepar2 selectvalor/gt
- lt/xslcall-templategt
- Como ya se ha indicado, se permite hacer llamadas
recursivas a funciones
42(No Transcript)
43(No Transcript)
44Procesadores XSLT
- Aplicación de una hoja de estilo a una fuente XML
para producir una salida - MSXML3 SP4 (Internet Explorer) http//www.microsof
t.com/xml - Saxonhttp//users.iclway.co.uk/mhkay/saxon/
- Xalanhttp//xml.apache.org/xalan/overview.html
45Referencias
- W3Schools http//www.w3schools.com
- El sitio de XSLT http//www.xslt.com
- Especificación XSL. http//www.w3.org/Style/XSL
- Especificación XSLT. http//www.w3.org/TR/xslt
46Alguna pregunta?