Sei sulla pagina 1di 40

Lenguajes de Marcas y Sistemas de

Información

UD5. Conversión y adaptación de documentos XML


Contenido

1. Introducción
2. Vincular nuestro XML con un XSL
3. Estructura de un fichero XSL
4. Elementos básicos de una plantilla XSL
5. Operadores en XSL
6. Procesamiento condicional

2
1. Introducción

● Hasta ahora hemos estudiado las técnicas básicas de definición de ficheros XML bien
formados y hemos profundizado en los diferentes métodos para garantizar la validez
de los mismos.

● Sin embargo, parece evidente que un documento XML no es más que un fichero de
texto plano con una estructura que, difícilmente, podrá ser entendida por un usuario
final (Ajeno al mundo del desarrollo)

● XML permite separar de manera efectiva los datos a almacenar, la semántica en la


que se organizan (Su estructura) y la presentación de los mismos.

● En esta UD trataremos en profundidad este último extremo, como convertir un


documento de texto plano XML a un formato atractivo y fácilmente legible.

3
1. Introducción

● Para pasar de un documento XML a un documento formateado usaremos el lenguaje


XSL.

● XSL es el lenguaje de presentación de datos para documentos XML.

● Permite definir hojas de estilo elaboradas para los documentos XML.

● XSL se inspiró en DSSSL y CSS, los lenguajes de estilos de SGML y HTML


respectivamente.

● Las hojas de estilo XSL se escriben en XML. Reutilizando la semántica de DSSSL.

4
1. Introducción

● La actual versión de XSL es conocida como XSLT (eXtensible Stylesheet


Transformation)

● Nos permite tomar pleno control sobre los datos, pudiendo establecer criterios como
qué datos ver, en qué orden visualizarlos, estableciendo filtros y definiendo formatos
de salida para su presentación.

5
1. Introducción

6
1. Introducción

7
1. Introducción
● Cómo podemos ver, a partir de una sencilla hoja de transformación podemos mostrar
nuestro documento XML como si fuera una tabla html, con la ventaja de que los datos
que en ella se muestran son dinámicos, es decir, si modificamos el XML la información
mostrada se actualizará.

8
1. Introducción
● Hemos visto un pequeño ejemplo de transformación. Un documento XML puede ser
fácilmente transformado a:
○ HTML → A través de XSLT
○ PDF → XSL-FO

● Para poder utilizar correctamente esta tecnología debemos:


○ Tener correctamente definido el documento XML
○ Crear una hoja de estilos (documento de transformación) XSL bien formado.
○ Vincular el documento XML a nuestra hoja XSL.

9
2. Vincular nuestro XML con un XSL
● Para vincular nuestro documento XML con una hoja de transformación debemos
incluir, bajo el prólogo y antes del elemento raíz, el siguiente código.

● El elemento href debe contener la ruta RELATIVA hacia nuestra hoja de estilos.

10
3. Estructura de un fichero XSL
● Un fichero de transformaciones XSL no deja de ser un fichero XML y, como tal, ha de
estar bien formado, por tanto, la primera etiqueta que debe aparecer es el prólogo,
indicando la versión de XML y la codificación que usaremos.

● A continuación debemos definir la etiqueta stylesheet, perteneciente al namespace


http://www.w3.org/1999/XSL/Transform. Este será el elemento raíz de nuestro
documento.

11
3. Estructura de un fichero XSL
● A continuación debemos definir un elemento plantilla que permitirá generar la salida
formateada.

● A través del atributo match indicamos sobre que parte del documento actuará la
plantilla. Por el momento todas las plantillas que creemos actuarán sobre la raíz de
nuestro documento, indicada por /.

● Dentro de template es donde definiremos la estructura de salida de nuestro


documento.

12
4. Elementos básicos de una plantilla XSL
● Ahora que ya conocemos la estructura básica de un documento, ha llegado el
momento de estudiar los diferentes elementos que posibilitan una transformación.

a) xsl:value-of → Es el elemento más básico y primitivo de una plantilla XSL, nos


permite acceder al valor de un elemento simple de nuestro documento XML.
● Debemos indicar, mediante el atributo select a que elemento de nuestro árbol
XML estamos haciendo referencia.

13
4. Elementos básicos de una plantilla XSL
b) xsl:for-each → Es muy habitual encontrarnos documentos XML conformados por
diversos listados de elementos iguales. Mediante for-each podemos simular un bucle
que los recorrerá todos, facilitandonos la creación de estilos de representación para
este tipo de estructuras.
● Debemos indicar, mediante el atributo select a que elemento de nuestro árbol
XML estamos haciendo referencia.

14
4. Elementos básicos de una plantilla XSL
● Es posible aplicar filtros para que el estilo solo se aplique a determinados elementos
de nuestra lista, por ejemplo, si quisiéramos aplicar el estilo a todos los libros escritos
por Kenny Erleben:

● O todos aquellos que no hubieran sido escritos por Carlos Garre

15
4. Elementos básicos de una plantilla XSL
b) xsl:sort → Permite ordenar los elementos de una lista. Este elemento se emplea
siempre junto al elemento xsl:for-each.
● Debemos indicar, mediante el atributo select qué elemento hará las veces de
criterio de ordenación.

● Mediante el atributo order podemos indicar si queremos que el orden sea ascendente
o descendente. (ascending, descending)

16
5. Operadores en XSL
● Hemos visto que podemos aplicar ciertas condiciones a las instrucciones de
procesamiento, a fin de discriminar que datos mostramos y cuales no.
● Para ello debemos hacer uso de los operadores, sin embargo, XSL presenta algunas
particularidades que debemos aprender a usar antes de poder trabajar con ellas..

● Operadores:

Operador Representación Clásica XSL

Igualdad = “=”

Desigualdad != “!=”

Menor que < “&lt;”

Mayor que > “&gt;”


17
6. Procesamiento condicional
● Del mismo modo que contamos con instrucciones de procesamiento iterativas
(Bucles), en XSL también contamos con instrucciones que nos permiten aplicar
condiciones.
● De este modo podemos mostrar la información con un formato u otro, dependiendo de
su contenido o decidir que, según una determinada condición debemos o no mostrar
cierta información.

a) xsl:if → Es el elemento de procesamiento condicional más sencillo que podemos


encontrar.
● Mediante el atributo test debemos indicar la condición del if.

18
6. Procesamiento condicional
● En el siguiente ejemplo usaremos el elemento <xsl:if test=”...”/> para mostrar tan solo
los libros con un precio menor a 30€.

19
6. Procesamiento condicional
● En el siguiente ejemplo usaremos el elemento <xsl:if test=”...”/> para mostrar tan solo
los libros con un precio menor a 30€.

20
6. Procesamiento condicional
b) xsl:choose → Similar al elemento switch de Java, permite establecer múltiples
condiciones e instrucciones asociadas a cada una de ellas.
● Asociado al elemento <xsl:choose> (switch) aparecerá siempre asociado el
elemento <xsl:when test=”...”> (case .. ).

21
6. Procesamiento condicional
● En el siguiente ejemplo usamos choose para poner diferentes colores de fondo
dependiendo del precio de los libros.

22
6. Procesamiento condicional
● En el siguiente ejemplo usamos choose para poner diferentes colores de fondo
dependiendo del precio de los libros.

23
7. XPath, navegando el XML
● Ahora que ya conocemos los fundamentos de XSLT, ha llegado el momento de hablar
del lenguaje que lo hace posible, XPath.

● XPath (XML Path Language) es la especificación que desarrolla el lenguaje para


acceder a los elementos de un documento XML. Ha sido desarrollada para ser
utilizada desde la especificación XSLT y XPointer.

● Con XPath podemos hacer referencia a cualquier elemento que contenga nuestro
XML:
○ Elementos
○ Atributos
○ Texto
○ Etc.

24
7.1. XPath: El modelo de datos
● Cuando un parser analiza nuestro documento XML construye un árbol de nodos.

● Este árbol parte de un elemento raíz y va ramificando hasta llegar a los nodos hoja
(Elementos simples que contienen la información textual).

● El modo en que XPath interpreta las partes de un documento XML se basa en la


representación en forma de árbol que forma el propio documento.

● De este modo, como ya hemos visto, el método de acceso a las diferentes partes de
un documento XML a través de XPath se asemeja bastante a la forma en la que
accedemos a los archivos dentro de un sistema de ficheros.

25
7.1. XPath: El modelo de datos
● Veamos un ejemplo de árbol XPath.

26
7.1. XPath: El modelo de datos
● Como podemos ver, el árbol comienza con un nodo raíz
(/).

● De este nodo cuelga primero el elemento raíz de nuestro


documento, seguido del resto en estructura arbórea.

27
7.1. XPath: El modelo de datos
● Por tanto, como hemos visto, XPath interpreta nuestro documento creando un árbol de
nodos, dentro de ese árbol podemos encontrar los siguientes tipos de nodos:

a) Nodo Raíz → Se identifica por / y no debemos confundirlo con el elemento raíz


del documento XML.
b) Nodo Elemento → Cualquier elemento de un documento XML se convierte en
un nodo elemento dentro del árbol.
i) Un nodo elemento puede tener ascendentes y/o descendentes.
ii) Cuando un nodo no contiene descendientes se le denomina nodo
hoja.

c) Nodos Atributo → Los nodos atributo no se consideran hijos sino “etiquetas”


añadidas al elemento que los contiene.
d) Nodos Comentario → Por cada comentario en nuestro XML, XPath generará un
nodo en el árbol.
28
7.2. XPath: Location Paths
Conceptos básicos

● Los Location Paths son expresiones XPath que nos permiten hacer referencia a los
diferentes nodos de un árbol.

● La estructura de los Location Paths es similar a la utilizada en los sistemas *NIX para
acceder a los diferentes directorios.

● Por ejemplo:
○ /grupo → Hace referencia al nodo grupo, por lo que accederemos a todo su
contenido.

○ /grupo/musico/nombre → Hace referencia al nombre del músico, por lo que


solo mostrará la información de dicho nodo hoja. (En caso de que solo exista
uno)
29
7.2. XPath: Location Paths
Nodo contexto

● Del mismo modo que sucede con las rutas de ficheros, un Location Path siempre tiene
un punto de partida, denominado nodo contexto.

● De este modo, cuando usemos una estructura de control para recorrer un listado de
nodos, debemos partir del nodo recorrido y no del raíz para establecer el camino a
seguir.

30
7.2. XPath: Location Paths
Predicados

● Los predicados son “condiciones” que podemos añadir a nuestros Location Paths para
acceder a determinados nodos, estas condiciones puede aplicarse sobre el contenido
o la posición de los nodos (Si existen varias ocurrencias de un mismo elemento).

● Los predicados se sitúan entre corchetes [...] junto al elemento al que van a ser
aplicados.

31
7.2. XPath: Location Paths
Predicados

● Por ejemplo:
○ /grupo/musico[1]/nombre → Obtendremos el nombre del primer músico.

○ /grupo/musico[@edad=”43”]/nombre → Obtendremos el nombre de todos


aquellos músicos cuyo atributo edad sea 43.

○ /grupo/musico[nombre=”Robert”] → Obtendremos los músicos cuyo nombre


sea Robert.

32
7.2. XPath: Location Paths
Funciones

● XPath cuenta con algunas funciones interesantes que nos permitirán aumentar la
precisión con la cual seleccionamos la información:
○ comment() → Selecciona los nodos comentario.
○ node() → Selecciona todos los nodos (Sin importar su tipo)
○ text() → Selecciona un nodo de texto.
○ name() → Devuelve el nombre del nodo.
○ position() → Devuelve la posición del nodo.
○ last() → Selecciona el último nodo en relación al nodo actual.

33
7.2. XPath: Location Paths
Funciones

● Funciones numéricas
○ ceiling() → Redondea al siguiente entero.
○ floor() → Redondea al entero inferior
○ round() → Devuelve el valor redondeado siguiendo las normas estandár.
○ sum() → Devuelve la suma de dos números.
○ count() → Cuenta los elementos de una relación.

34
7.2. XPath: Location Paths
Funciones

● Funciones para cadenas


○ start-with(string1, string2) → Devuelve true si string1 empieza con string2
○ contains(string1, string2) → Devuelve true si string1 contiene a string2
○ substring(string, offset, [length]) → Devuelve una substring de string1.
Comenzando por la posición de offset y con la longitud dada.
○ string-length(string) → Devuelve la longitud de la cadena.
○ concat(string1, string2, …) → Concatena las cadenas dadas.

35
7.2. XPath: Location Paths
Operadores

● Operadores booleanos
○ and
○ or
○ not()

● Operadores numéricos.
○ +
○ -
○ *
○ div
○ mod → Resto de la división entera. Ej. NUM mod 5.

36
7.2. XPath: Location Paths
Operadores

● Operadores de nodo
○ / → Usado para seleccionar un nodo que se encuentra específicamente bajo otro.
○ [...] → Utilizado para los predicados de los nodos.
○ | → Utilizado para concatenar dos nodos.
○ @attribute → Seleccionar un atributo.

37
7.2. XPath: Location Paths
Ejemplos

● Contar la cantidad de músicos.


● Obtener el nombre del primer músico a partir del segundo carácter.
● Dividir la edad del primer músico entre 10
● Obtener todos los nodos descendientes de grupo
● Obtener todos los músicos cuyo nombre NO sea Robert

38
39
Dudas y preguntas

40

Potrebbero piacerti anche