Publicado el 29 de Mayo del 2018
730 visualizaciones desde el 29 de Mayo del 2018
458,5 KB
41 paginas
Creado hace 20a (22/07/2004)
XSLT / XPath
Agustín Cernuda del Río
Departamento de Informática
Universidad de Oviedo
XSLT – 2004 - Universidad de Oviedo
1
Justificación de XSLT (I)
• Documentos XML
– Documentos de texto con etiquetas
– Contienen esencialmente información (no se entra en detalles de
presentación)
– La información se organiza jerárquicamente
– Aunque son legibles por un humano, se supone que la información
se procesará
– Así se obtendrán formas de (re)presentación más adecuadas
– Es posible que esas representaciones impliquen también seleccionar
información
• Necesidad de algún medio para expresar la transformación de un
documento XML
– En otro documento XML (seleccionando, reordenando, calculando...)
– En un documento que una persona pueda utilizar de manera directa
(leer, imprimir...)
XSLT – 2004 - Universidad de Oviedo
2
Justificación de XSLT (II)
• Pensemos en nuestra propia solución
• Fichero XML de ejemplo:
<?xml version="1.0"?>
<curriculum>
Instrucciones de
procesamiento
Elemento raíz o
documento
<nombre>Juan Cabrera Cotarelo</nombre>
<fechanac>
<dia>1</dia>
<mes>7</mes>
<anio>1973</anio>
</fechanac>
<lugarnac>Palencia</lugarnac>
<estudios>Licenciado en Historia</estudios>
</curriculum>
XSLT – 2004 - Universidad de Oviedo
3
Justificación de XSLT (III)
• Supongamos que necesitamos extraer sólo la información de nombre y
fecha de nacimiento
• Supongamos que, dependiendo del caso, necesitamos que la fecha
aparezca en español, o en inglés, o con el año de dos dígitos, o sólo el
año, o...
• Del mismo documento pueden extraerse otros muy diversos:
<?xml version="1.0"?>
<curriculum>
<nombre>Juan Cabrera Cotarelo</nombre>
<fechanac>
<nombre>Juan Cabrera Cotarelo</nombre>
<fechanac>1-7-1973</fechanac>
<?xml version="1.0"?>
<curriculum>
</curriculum>
<dia>1</dia>
<mes>7</mes>
<anio>1973</anio>
</fechanac>
<lugarnac>Palencia</lugarnac>
<estudios>Licenciado en Historia</estudios>
</curriculum>
Juan
Juan
Cabrera
Cabrera
Cotarelo,
Cotarelo,
nacido el
nacido el
1/7/1973
1/7/1973
XSLT – 2004 - Universidad de Oviedo
4
Nomenclatura de las tecnologías
• XSLT: eXtensible Stylesheet Language for Transformations. Permite
definir cómo se transforma un documento XML en otro documento XML
• Además de XML, se puede generar como salida HTML y texto
• XSL-FO: eXtensible Stylesheet Language – Formatting Objects.
Conversión del XML en un formato “imprimible” y legible por una
persona (ej.: PDF). Inicialmente, este era el propósito del XSL
• XPath: Una sintaxis para aludir a diversas partes de un documento XML
•
La parte de transformaciones ganó en importancia, y se llega a la
terminología actual:
XSL
XSLT
XPath
XSL-FO
XSLT – 2004 - Universidad de Oviedo
5
Estructura básica de una
hoja XSLT (I)
• Una hoja XSLT transforma un documento XML en:
– Otro documento XML
– Un documento HTML
– Texto
La hoja XSLT consta de una serie de reglas
•
• Una hoja XSLT es también un documento XML (!)
XSLT – 2004 - Universidad de Oviedo
6
<?xml version="1.0"?>
<fecha>
<dia>1</dia>
<mes>7</mes>
<anio>1973</anio>
</fecha>
Estructura básica de una
hoja XSLT (II)
<xsl:stylesheet version="1.0"
xmlns:xsl="http://www.w3.org/1999/XSL/Transform">
<xsl:output method="xml" encoding="iso-8859-1"/>
<xsl:template match="fecha">
<xsl:template match="fecha">
<cuando>
<xsl:value-of select="anio"/>
<xsl:value-of select="anio"/>
</cuando>
</xsl:template>
</xsl:template>
</xsl:stylesheet>
Procesador XSLT
<?xml version="1.0" encoding="iso-8859-1"?>
<cuando>1973</cuando>
XSLT – 2004 - Universidad de Oviedo
7
Procesadores XSLT
• Existen varias formas de realizar la transformación
– Procesador XSLTPROC
– Procesador MSXML
• Un ejecutable que se limita a llamar a la biblioteca de
transformación de Internet Explorer
– Se puede invocar a la biblioteca de transformación desde un
programa
– Enlace entre el fichero XML y la hoja XSLT
• El fichero se puede ver directamente en Internet Explorer o en
otro navegador que soporte XSLT
• Desventaja: el fichero queda "ligado" a esa vista, por lo menos si
se abre directamente
• Bajo la etiqueta <?xml...?> del fichero XML, se añade
<?xml-stylesheet type="text/xsl" href="hoja.xsl"?>
XSLT – 2004 - Universidad de Oviedo
8
Estructura básica de una
hoja XSLT (III)
•
La hoja XSLT contiene básicamente tres tipos de elementos:
– Elementos de XSLT. Pertenecen al namespace xsl, y por tanto 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ás
(ejemplo: un elemento <fecha>)
– 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
XSLT – 2004 - Universidad de Oviedo
9
xsl:stylesheet
• Es el elemento raíz de una hoja XSL
• Se puede utilizar también xsl:transform (son prácticamente equivalentes)
• Atributos principales:
– version: Suele ser 1.0
– xmlns:xsl: 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/Transform
• Otros atributos:
– extension-element-prefixes: Sirve para declarar los prefijos de
elementos que deben considerarse elementos de extensión y no LRE
(se incluyen separados por espacios)
– exclude-result-prefixes: Sirve para hacer que los elementos de ciertos
namespaces (prefijos) no se reproduzcan en la salida
XSLT – 2004 - Universidad de Oviedo
10
Elementos del nivel superior
• Son elementos hijos de xsl:stylesheet
• Además, son hijos directos (tampoco pueden anidarse)
• Dos excepciones: xsl:variable y xsl:param
• No son instrucciones sobre cómo procesar elementos, sino estructuras
contenedoras para instrucciones
• Son los siguientes:
xsl:include
xsl:import
xsl:strip-space
xsl:preserve-space
xsl:output
xsl:output
xsl:key
xsl:decimal-format
xsl:namespace-alias
xsl:attribute-set
xsl:variable
xsl:param
xsl:template
xsl:template
XSLT – 2004 - Universidad de Oviedo
11
xsl:output
• Define qué tipo de salida se va a generar como resultado
• Atributos:
– method: puede tomar los valores xml, html y text (y también un valor de
extensión, con el prefijo correspondiente)
– encoding: define la forma de representar caracteres que se adoptará en
la salida. Ejemplos:
• iso-8859-1, UTF-8, UTF-16...
• windows-1252 (genera los caracteres acentuados con la
codificación de Windows)
– omit-xml-declaration: valores yes o no. Indica si se genera o no la
declaración <?xml...?>
– indent: valores yes o no. Si es yes, el procesador (para salidas xml o
html) indentará el resultado
XSLT – 2004 - Universidad de Oviedo
12
xsl:template (I)
• El bloque fundamental de una hoja XSLT
• Un template tiene dos elementos principales:
– Una expresión de emparejamiento
– Las instrucciones de procesamiento que contiene
• Si la expresión de emparejamiento coincide con un elemento del fichero
XML, el template entra en acción y se ejecutan las instrucciones de
procesamiento
Las instrucciones de procesamiento pueden ser instrucciones de XSLT
propiamente dichas o bien LREs
•
• Al procesar un template, se va construyendo el árbol resultado, en el
que se incorpora el resultado de ejecutar instrucciones o bien los LREs
(directamente)
XSLT – 2004 - Universidad de Oviedo
13
• Atributos:
xsl:template(II)
– match: Su valor es una expresión que se usa para seleccionar nodos
del árbol de entrada (cuando encaja, el template entra en acción)
– name: Además de cuando encaja, un template puede invocarse
explícitamente (en ese caso se necesita que tenga un nombre)
• Ejemplo:
<?xml version="1.0"?>
<fecha>
RAIZ
<dia>1</dia>
<mes>7</mes>
<anio>1973</anio>
</fecha>
<xsl:stylesheet version="1.0"
xmlns:xsl="http://www.w3.org/1999/XSL/Transform">
<xsl:output method="xml" encoding="iso-8859-1“
indent=“yes”/>
<xsl:template match=“/”>
<raiz>He encontrado un nodo raiz</raiz>
</xsl:template>
</xsl:stylesheet>
<?xml version="1.0" encoding="iso-8859-1"?>
<raiz>He encontrado un nodo raiz</raiz>
XSLT – 2004 - Universidad de Oviedo
14
Ejercicio
• Copiar los ficheros del ejemplo anterior, y probar el procesador
XSLTPROC
XSLTPROC –o salida.html hoja.xsl fichero.xml
• Probar también a enlazar directamente el XML con su hoja
<?xml-stylesheet type="text/xsl" href="hoja.xsl"?>
XSLT – 2004 - Universidad de Oviedo
15
Recapitulando...
• Elemento fundamental: xsl:stylesheet, en el que incluimos versión (1.0) y
el namespace xsl
• Dentro de él, los elementos del nivel superior
• Utilizamos xsl:output para decir si la salida es XML, HTML o texto
normal, y algunos detalles más de cómo se genera
• Utilizamos xsl:template como bloque básico
• Problemas (en este punto):
– No hemos visto cómo escribir expresiones match para los templates
– No hemos visto qué instrucciones podemos utilizar para generar la
salida
– Con lo visto hasta ahora, prácticamente sólo podemos procesar el
nodo raíz y generar una salida constante (LRE)
• Primer problema: cómo procesar más allá del nodo raíz
XSLT – 2004 - Universidad de Oviedo
16
xsl:apply-templates
• El procesador empareja con sus reglas por defecto (recorre todo)
• Si encuentra una regla concreta, aplica esa (no sigue procesando los
•
hijos de ese nodo, salvo que se lo indiquemos)
xsl:apply-templates se utiliza para indicar al procesador que intente
emparejar templates con cierto nodo o conjunto de nodos (nodeset)
• Atributos:
– 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
•
xsl:apply-templates permite realizar un tratamiento recursivo de todos
los elementos del árbol fuente
Comentarios de: XSLT / XPath (0)
No hay comentarios