Title: Curso de XSL
1Curso de XSL
- Sistema para la visualización de documentos XML
2Arquitectura XSL
- XSLT lenguaje para la transformación de
documentos XML. - XPath lenguage de consulta en estructuras XML.
- XSLFO lenguaje de definición de objetos de
formato de presentación.
3XSLT definición
- eXtensible Stylesheet Language Tranformations.
- http//www.w3.org/TR/xstl
- Diseñado para la transformación de documentos XML
en otras estructuras XML y no-XML.
4 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.
5Cómo se construye una presentación
- Una transformación estructural desde el documento
con la estructura de datos original hacia una
estructura que refleje la presentación gráfica
deseada. - Formateo de la salida, utilizando los elementos
de representación visual adecuados.
6Proceso de publicación XML-XSL.
Doc. XML original
HTML, PDF, ...
7Cómo se realiza la transformación (1)
8Cómo se realiza la transformación(2)
9Cómo se realiza la transformación(3)
10Lo que ve el procesador
- La raiz del documento.
- Elementos.
- Texto.
- Atributos.
- Espacios de nombres (Namespaces).
- Instrucciones de procesamiento (PI).
- Comentarios.
11Como se implementa la transformación
- Desarrollo de una aplicación a medida a partir de
los parsers XML existentes (SAX, DOM). - Programación XSLT
- lenguaje declarativo para definir reglas de
transformación genéricas (dependientes de un
contexto).
12Procesamiento XSLT-Servidor
Fuente de contenidos
Visor de FO
XSL_FO
Procesador XSLT
Navegador Web
HTML
XML
XML
13Procesamiento XSLT-Cliente
Fuente de contenidos
Visor de FO
IMAGEN
Procesador XSLT
XML
Navegador Web
HTML
14Dónde tiene lugar la transformación
- En el cliente
- Tanto el documento XML como el XSL son servidos
al cliente y este los procesa. - En el servidor
- Éste aplica la XSL al XML y genera un documento
publicable que envía al cliente (servlet, ASP,
CGI, ...). - Un tercer programa hace la transformación.
15Comparación XSLT - SQL
- XML modelo de datos jerárquico (más rico que el
relacional). - Lenguaje de acceso a los datos XSLT.
- Selección declarativa de los datos XPath.
- XSLT manipula el resultado de la selección
- Modelo relacional modelo de datos tabular.
- Lenguaje de query SQL.
- Selección declarativa de los datos SELECT.
16Comparación XSLT - SQL
- Ambos aportan funciones adicionales para las
queries aritméticas, manejo de cadenas,
operadores de comparación, etc. - Ambos complementan la sintaxis declarativa con
construcciones procedimentales que ayudan a la
descripción de secuencias. - Ambos son cerrados respecto del modelo de datos.
17 Por que XSL ?
- Está diseñado para integrarse en la arquitectura
XML. - Es mucho más potente que CSS.
- Aunque un poco menos potente que DSSSL es mucho
más sencillo de usar. - Cada vez hay más herramientas para XSL.
18Composición de los documentos XSL.
- XSLT usa XML para describir las reglas
- patrones y plantillas.
- Un documento XSL se construye a partir de una
raiz ltxslstylesheetgt ... lt/xslstylesheetgt - Todos los elementos de XSL que son instrucciones
pertenecen al espacio de nombres - xmlnsxslhttp//www.w3.org/XSL/Transform/1.0
19Declaración de Hoja de Estilo
- El elemento raiz de la Hoja de Estilo debe tener
al menos el atributo versionx.y - lt?xml version"1.0" encoding"UTF-8"?gt
-
- ltxslstylesheet version"1.0 xmlnsxsl"http//ww
w.w3.org/1999/XSL/Transform"gt - ltxsloutput method"xml" version"1.0
encoding"UTF-8" indent"yes"/gt -
-
-
- lt/xslstylesheetgt
20Asociar una XSL a un XML
- Insertar una instrucción de procesamiento
- lt?xml version1.0?gt
- lt?xml-stylesheet typetext/xsl
hrefmyHoja.xsl?gt - El atributo type debe contener el valor fijo
text/xsl. - href debe contener la URL que localiza la hoja de
estilo.
21XSLT Elementos Top-level.
El elemento ltxslstylesheetgt puede contener como
hijos cualquiera de los siguientes elementos
(top-level)
- xslimport
- xslinclude
- xslstrip-space
- xslpreserve-space
- xsloutput
- xslkey
- xsldecimal-format
- xslnamespace-alias
- xslattribute-set
- xslvariable
- xslparam
- xsltemplate
22Definición de ltxsloutputgt
- lt!-- Category top-level-element --gt
- ltxsloutput
- method"xml" "html" "text"
qname-but-not-ncname - version nmtoken
- encoding string
- omit-xml-declaration "yes" "no"
- standalone "yes" "no"
- doctype-public string
- doctype-system string
- cdata-section-elements qnames
- indent "yes" "no"
- media-type string /gt
23Templates (Plantillas)
- Es el elemento más importante de la
especificación XSL. - Especifica la transformación que se aplicará a
una parte concreta del documento origen. - Cada hoja de estilo debe tener al menos un
template. - Un template seleccionado asocia una salida
concreta con una entrada concreta.
24Plantillas XSL
- ltxsltemplate matchxpathgt
- Plantilla a aplicar (acción).
- lt/xsltemplategt
- Dispara una acción ante el patrón de búsqueda
xpath. - Una expresión XPath lenguaje de query para
localizar elementos en una estructura XML
(lenguaje regular de árboles).
25apply-templates
- Para ir más allá de la raiz hay que dirigir al
procesador en la búsqueda de elementos hijos del
documento origen. - El uso deltxslapply-templatesgt indica dónde
continuar recursivamente el proceso. - En dicho punto se aplicarán los templates
apropiados según los hijos del elemento activo
26xslapply-templates
- En general, este elemento es vacío e indica el
punto de inserción de contenidos. - Cada nodo que cumple el patrón (match) es tratado
como un árbol. - lttemplate matchCapítulogt
- ltapply-templates/gt
- lt/templategt
27Cómo funcionan los templates
- lt?xml version1.0?gt
- lt?xml-stylesheet typetext/xsl
hrefmiEstilo.xsl?gt - ltDocumentogt
- lthijoA_1gt
- lthijoA_1-1gt ... lt/hijoA_1-1gt
- lthijoA_1-2gt ... lt/hijoA_1-2gt
- lthijoA_1-1gt ... lt/hijoA_1-1gt
- lt/hijoA_1gt
- lthijoB_1gt ... lthijoB_1gt
- lt/Documentogt
28Cómo funcionan los templates
- lt?xml version1.0?gt
- ltxslstylesheet xmlnsxslhttp//www.w3.org/XSL/
Transaform/1.0gt - ltxsltemplate match/gt
- lthtmlgt ltxslapply-templates/gtlt/htmlgt
- lt/xsltemplategt
- ltxsltemplate matchDocumentogt
- ltbodygtltxslapply-templates/gtlt/bodygt
- lt/xsltemplategt
- lt/xslstylesheetgt
29Cómo funcionan los templates
- ltxsltemplate matchhijoA_1gt
- lth1gtEsto es la salidalth1gt
- ltxslapply-templategt
- lt/xsltemplategt
- ltxsltemplate matchhijoA_1-1gt
- ltpgtElemento HijoA_1.1lt/pgt
- lt/xsltemplategt
- lt/xslstylesheetgt
30Cómo funcionan los templates
- La raiz del documento XML se compara con todos
los patrones y casa con / . - Se imprime la marca lthtmlgt .
- La instrucción ltxslapply-templatesgt induce el
procesamiento de los hijos de la raiz. - El primer hijo es una PI lt?xml-stylesheet?gt no
casa con nada gt no es procesado.
31Cómo funcionan los templates
- El segundo hijo casa con la segunda regla se
imprime la marca ltbodygt . - Se siguen aplicando reglas recursivamente gracias
a que esta regla contiene la instrucción - ltxslapply-templates/gt
- El hilo de ejecución sigue con los hijos del
elemento actual (nodo_contexto) - ltDocumentogt
32Cómo funcionan los templates
- Resultado
- lthtmlgt
- ltbodygt
- lth1gtEsto es la salidalth1gt
- ltpgtElementoHijoA_1.1lt/pgt
- ltpgtElementoHijoA_1.1lt/pgt
- lt/bodygt
- lt/htmlgt
33El atributo select
- ltxslapply-templates selectelemento/gt
- Restringe a un tipo de hijos (subárboles) la
aplicación de la regla.
34xslvalue-of
- ltxsltemplate matchpadregt
- ltxslvalue-of selectid_hijo/gt
- ltxsltemplate/gt
- Copia el contenido del nodo seleccionado en la
salida. - El valor de id_hijo es relativo al nodo fuente
seleccionado en el template.
35Regla por defecto para texto
- ltxsltemplate matchtext()gt
- ltxslvalue-of select./gt
- lt/xsltemplategt
- Concuerda con todos los nodos-texto y copia sus
contenidos a la salida. - Asegura que como mímimo se imprime el texto de
todos los elementos seleccionados. - Se puede sobrecargar esta regla para modificar el
comportamiento por defecto.
36Regla por defecto para elementos
- Situación no queremos procesar un elemento pero
si algunos de sus hijos. - ltxsltemplate match/gt
- ltxslapply-templates/gt
- lt/xsltemplategt
- Asegura que todos los elementos serán procesados
(visitados) recursivamente.
37Regla por defecto para elementos(ejemplo-1)
- ltlibrogt
- ltintroduccióngt
- ltparagt Esto es un párrafolt/paragt
- ltparagt Otro párrafolt/paragt
- lt/introduccióngt
- lt/librogt
38Regla por defecto para elementos(ejemplo-2)
- lttemplate matchlibrogt
- ltapply-templates/gt
- lt/templategt
- lttemplate matchparagt
- ltapply-templates/gt
- lt/templategt
- lt! No hay template para introducción --gt
39Modificar la regla por defecto
- Ejemplo
- Evitar que se procese ningún hijo de un elemento
que no tenga definido un template. - lttemplate match/gt
- lt! Nada --gt
- lt/templategt
40Ocultar contenidos
- ltnotagtltparagt...lt/paragtltparagt...lt/paragtlt/notagt
- lttemplate matchnotagtlt/templategt
- Como consecuencia
- es necesaria una regla vacía para que no se
procese un subárbol que depende de un elemento
concreto.
41xslfor-each
- ltxslfor-each selectgt
- otras reglas XSL
- lt/xslfor-eachgt
- Se aplica a colecciones de nodos.
- Si no hay select, se aplica a todos los hijos del
nodo actual.
42Manejo de tipos de nodos
- Text()
- Comment()
- Pi()
- Node()
43Manipulación de espacios en blanco
- ltxslpreserve-space elementnombre/gt
- Indica el subárbol origen al cual hay que
preservarle los espacios en blanco. - ltxslstrip-space elementnombre/gt
- Indica el subárbol origen al cual hay que
preservarle los espacios en blanco.
44Xslchoose xslwhen
- ltxsltemplate matchcapítulo/títulogt
- ltxslchoosegt
- ltxslwhen test.first-of-type()gt
- Primer capítulo
- lt/xslwhengt
- ltxslotherwisegt
- Capítulo siguiente
- lt/xslotherwisegt
- lt/xslchoosegt
- lt/xsltemplategt
45xsl element- attribute - text
- Insertan un elemento, un atributo y un nodo hijo
de tipo texto, respectivamente, en el árbol de
salida. - ltxslelement namelibrogt
- ltxslattribute nametítulogtEl Quijote
- lt/xslattributegt
- ltxsltextgtEste libro es famoso.lt/xsltextgt
- lt/xslelementgt
- ltlibro títuloEl QuijotegtEste libro es
famoso.lt/librogt
46Templates con nombre
- Se parece a la definición y llamada a subrutina
- ltxsltemplate namenombreTemplategt
- ltxslparam nameparametro1/gt
- lt! El código va aquí --gt
- lt/xsltemplategt
- ltxslcall-template namenombreTemplategt
- ltxslwith-param nameparametro1
selectvalorParam/gt - lt/xslcall-templategt
-
47Variablesy función document()
- Muy Importante Una vez instanciadas NUNCA pueden
cambiar de valor !!! - ltxslvariable nameficheroExt
- selectdocument(url)/XPath/gt
- ...
- ltxslapply-templates selectficheroExt/XPath/gt
48XPath
- Lenguaje de expresiones de localización
49Expresiones XPath
- Parten una gramática formal especificación).
- Generan un lenguaje formal no-ambiguo.
- Expresiones de localización con doble
funcionalidad en las operaciones - pattern matching -gt devuelven un booleano.
- Evaluación de expresiones -gt devuelven un
conjunto de nodos.
50Expresiones de localización(1)
- Seleccionan un conjunto de nodos del documento
origen. - Existe un punto absoluto de referencia para las
localizaciones /, la raiz del documento
origen. - Las expresiones que no comienzan con / son
relativas a un nodo de contexto (normalmente el
actual).
51Expresiones de localización(2)
- El símbolo / a mitad de expresión sirve para
incluir expresiones recursivamente (paso de
localización), actuando como filtros sucesivos. - Un paso de localización se compone de
- Una base
- Un eje de identificación (indicando dirección de
localiz.). - Un nodo de test (filtrando nodos de su tipo y
nombre). - Uno o más predicados (filtrando nodos).
52Ejes de localización
Hay trece ejes de localización
- following-sibling
- namespace
- parent
- preceding
- preceding-sibling
- self
- ancestor
- ancestor-or-self
- attribute
- child
- descendant
- descendant-or-self
- following
53Ejes XPath
54Ejes de localizaciónabreviaturas
- Un nombre o tipo de nodo indica child
- Un carácter _at_ indica attribute
- La secuencia // indica
- /descendant-or-selfnode()/
- La secuencia .. indica parentnode()
- La secuencia . indica selfnode()
55Nodos de test
- Determinan que nodos localizar en el eje
indicado - Por nombre del nodo.
- Por tipo de nodo.
- Por valor de atributo.
56Predicados
- Qualificadores opcionales de listas de nodos (la
lista ordenada de nodos en un eje). - El orden es en función de la proximidad al nodo
actual. - La concatenación de predicados se evalúa
- de izda. a dcha.
- Contra todos los nodos del contexto.
- reduce la lista de nodos seleccionados, cambiando
la posición (contexto) de la expresión XPath.
57Ejemplos de expresiones y contextos
- SelfnomNodo ,
- Indica el nodo actual si se llama nomNodo, si
no da lista_vacía. - nomNodo , ./nomNodo , childnomNodo ,
- Conjunto de elementos-hijo del nodo actual que se
llamen nomNodo. - .//nomNodo ,
- Elementos decendientes del actual
(nombrenomNodo). - //nomNodo ,
- Elementos decendientes del raiz
(nombrenomNodo).
58Ejemplos de expresiones y contextos
- ../nomNodo ,
- Elementos hermano (y él mismo) nomNodo.
- _at_atrib ,
- Nodos atributos asociados con nombreatrib.
- ../_at_atrib ,
- Los nodos atributo del nodo-padre con
nombreatrib. - ../nomNodo/_at_atrib ,
- Atributos atrib de los elementos-hermanonomNod
o. - nomNodo/_at_atrib ,
- Atributos atrib de los elementos-hijonomNodo.
59Ejemplos de expresiones y contextos
- nomNodoposition()last() ,
- El último elemento-hijonomNodo.
- nomNodoposition()3 , nomNodo3 ,
- El tercer elemento-hijonomNodo.
- nomNodo_at_atrib3 ,
- El tercer elemento-hijonomNodo que tiene un
atributoatrib. - nomNodo3_at_atrib ,
- El tercer elemento-hijonomNodo SI tiene un
atributo asociadoatrib, en caso negtivo da
lista-vacía.
60Ejemplos de expresiones y contextos
- ancestornomNodo ,
- Conjunto de nodos antecesoresnomNodo.
- ancestornomNodo1 ,
- El nodo antecesor más próximonomNodo.
- ancestornomNodo_at_atrib1 ,
- El nodo antecesor más próximonomNodo y
atributoatrib. - ancestor1_at_atrib ,
- El nodo antecesor más próximonomNodo SII tiene
un atributoatrib, si-no lista vacía.
61Ejemplos de expresiones y contextos
- ancestornomNodo/_at_atrib ,
- Selecciona los atributosatrib de todos los
elementos-antecesoresnomNodo. - ancestornomNodo_at_atrib1/_at_atrib ,
- El atributoatrib del elemento-antecedentenomN
odo más próximo. - id(_at_ref)/_at_atrib ,
- El atributoatrib del elemento que devuelve la
función id() con parámetro el valor del atributo
ref del elemento actual.
62Dirección de procesamiento de los Ejes
- Los predicados se orientan por proximidad al nodo
actual - Aplicados a antecesores actúan sobre conjuntos
ordenados en forma inversa al orden del
documento. - Aplicados a sucesores actúan sobre conjuntos
ordenados en el mismo orden del documento. - Los conjuntos resultado que se procesen como
colección, se hará en el orden del documento.
63Dirección de procesamiento de ejes (ejemplo)
- Documento XML origen de transformación
- lt?xml version1.0?gt
- ltconjuntogt
- ltitemgtAlt/itemgt
- ltitemgtBlt/itemgt
- ltitemgtClt/itemgt
- lt/conjuntogt
64Ejemplo (cont.)
- Hoja de estilo XSL
- ltxsltemplate match/gt
- ltxslfor-each select//itemlast()gt
- ltxsltextgtpreceding-siblingitem1lt/xsltextgt
- ltxslvalue-of selectpreceding-siblingitem1
/gt - ltxsltextgtnl(preceding-siblingitem)1lt/xsl
textgt - ltxslvalue-of select(preceding-siblingitem)1
/gt - ltxsltextgtfor-each preceding-siblingitemlt/xsl
textgt - ltxslfor-each selectpreceding-siblingitem/tex
t()gt - ltxsltextgtnl Itemlt/xsltextgtltxslvalue-of
select./gt - lt/xslfor-eachgtlt/xslfor-eachgtlt/xsltemplategt
65Ejemplo resultado
- preceding-siblingitem1 B
- (preceding-siblingitem1 A
- for-each proceding-siblingitem
- Item A
- Item B