Documentos XML
Documentos de texto con etiquetas
Contienen esencialmente informacin (no se entra en detalles de
presentacin)
La informacin se organiza jerrquicamente
Aunque son legibles por un humano, se supone que la informacin
se procesar
As se obtendrn formas de (re)presentacin ms adecuadas
Es posible que esas representaciones impliquen tambin seleccionar
informacin
Necesidad de algn medio para expresar la transformacin de un
documento XML
En otro documento XML (seleccionando, reordenando, calculando...)
En un documento que una persona pueda utilizar de manera directa
(leer, imprimir...)
Elemento raz o
documento
Instrucciones de
procesamiento
<?xml version="1.0"?>
<curriculum>
<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>
<?xml version="1.0"?>
<?xml version="1.0"?>
<curriculum>
<curriculum>
<nombre>Juan Cabrera Cotarelo</nombre>
<nombre>Juan Cabrera Cotarelo</nombre>
<fechanac>
<fechanac>1-7-1973</fechanac>
<dia>1</dia>
</curriculum>
Juan
<mes>7</mes>
Juan
Cabrera
<anio>1973</anio>
Cabrera
Cotarelo,
Cotarelo,
</fechanac>
nacido
nacidoelel
<lugarnac>Palencia</lugarnac>
1/7/1973
1/7/1973
<estudios>Licenciado en Historia</estudios>
</curriculum>
XSLT 2005 - Universidad de Oviedo
XSL
XPath
XSL-FO
XSLT 2005 - Universidad de Oviedo
<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">
<cuando>
<xsl:value-of select="anio"/>
select="anio"/>
<xsl:value-of
</cuando>
</xsl:template>
</xsl:stylesheet>
Procesador XSLT
Procesadores XSLT
xsl:stylesheet
Otros atributos:
extension-element-prefixes: Sirve para declarar los prefijos de
elementos que deben considerarse elementos de extensin 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
10
xsl:output
xsl:key
xsl:decimal-format
xsl:namespace-alias
xsl:attribute-set
xsl:variable
xsl:param
xsl:template
11
xsl:output
12
xsl:template (I)
13
xsl:template(II)
Atributos:
match: Su valor es una expresin que se usa para seleccionar nodos
del rbol de entrada (cuando encaja, el template entra en accin)
name: Adems de cuando encaja, un template puede invocarse
explcitamente (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>
14
Ejercicio
15
Recapitulando...
16
xsl:apply-templates
17
Ejercicio
Escribir una hoja para el fichero fecha que a la salida genere un fichero
XML en el cual:
Cuando se encuentre una fecha en el raz, crear un elemento de
tipo fecha con el texto Una fecha
Dentro del mismo, aplicar los templates del mes, el da y el ao
El template del mes se limitar a crear un elemento mes con el texto
Un mes
Los templates de da y ao actuarn de manera similar
18
xsl:value-of
19
Introduccin a XPath
20
10
21
Expresiones XPath
Una expresin XPath arroja (tras ser evaluada) una expresin de 4 tipos
posibles: conjunto de nodos (node-set), booleano, nmero, cadena
Tokens vlidos en una expresin XPath
Parntesis y similares: ( ) { } [ ]
Elemento actual . y elemento padre ..
Atributo @, elemento * y separador ::
La coma ,
El nombre de un elemento
Tipo de nodo (comment, text, processing instruction, node)
Operadores: and, or, mod, div, *, /, //, |, +, -, =, !=, <, <=, >, >=
Nombres de funcin
Nombre de eje (axis): ancestor, ancestor-or-self, attribute, child,
descendant, descendant-or-self, following, following-sibling, namespace,
parent, preceding, preceding-sibling, self
Literales, entre comillas dobles o simples (se pueden anidar alternadas)
Nmeros
Referencias a variables ($nombreVariable)
22
11
Expresiones XPath
23
Node-set
Node-set
Grupo de nodos (no ordenado) resultado de evaluar una expresin XPath
Los nodos pueden ser de 7 tipos
Elemento
Atributo
Texto
Espacio de nombres
Instruccin de procesamiento
Comentario
Raz
Los elementos de un node-set son siempre hermanos (da igual lo que
fuesen originalmente)
Sus hijos originales no estn incluidos (no hablamos de subrboles), pero
se puede acceder a ellos
24
12
25
Pasos de localizacin
eje::pruebanodo[predicado]
/ alumnos / tercero / juan
26
13
universidad/*
Encaja con cualquier nodo que sea hijo de un nodo universidad
que sea hijo del nodo de contexto
IMPORTANTE: // indica que sea hijo de cualquiera
27
Ejes (axis)
28
14
Predicado
29
Funciones XPath
30
15
Acceso a atributos
31
32
16
Recapitulando...
33
Instrucciones XSL
34
17
Ordenar: xsl:sort
xsl:sort
Se especifica dentro de xsl:apply-templates o xsl:for-each
Podra haber sido un atributo?
Su atributo es select
Indica cmo se establece el orden
Ejercicio: hacer que el horario salga en orden horario6.xsl
35
Condicional: xsl:if
xsl:if
Atributo: test
El valor del atributo es una expresin booleana
Las instrucciones que contiene se ejecutan slo si la condicin se
cumple
Ejercicio: hacer que en el horario no salga la Prioridad si realmente el
elemento no tiene tal atributo horario7.xsl
36
18
Condicional: xsl:choose
xsl:choose
Contiene elementos xsl:when
Atributo: test (similar al de xsl:if)
Son los diferentes casos de una sentencia CASE
Caso por defecto: xsl:otherwise (sin atributos)
37
Iteracin: xsl:for-each
xsl:for-each
Atributo: select
Aplica las instrucciones de su interior para todos y cada uno de los
nodos del conjunto de nodos dado por select
Ejercicio: Al final del horario, sacar una lista de todas las tareas,
indicando si la tarea en cuestin es por la maana (acaba ANTES de las
12), por la tarde (empieza DESPUES de las 12), o al medioda (toca a
las 12 de cualquier manera) horario8.xsl
NOTA: Usar // para recorrer las tareas
38
19
Construccin de elementos en el
rbol resultado (I)
Cmo generar un elemento con cierta etiqueta y construir sus atributos?
A veces la sintaxis no nos lo permite directamente. Posible ejemplo:
<BODY BGCOLOR=<xsl:value-of select=color-elegido/>>
Se pueden utilizar los llamados AVT (Attribute Value Template): las
expresiones entre llaves se evalan como si hubiera un value-of
Para poner llaves "de verdad", poner cada una dos veces
Se pueden necesitar instrucciones para construir dichos elementos
xsl:element
Construccin de un elemento en el rbol resultado
Atributos: name
xsl:attribute
Aadir un atributo al elemento en cuestin
Atributos: name
El valor est encerrado como texto libre dentro de xsl:attribute
39
Construccin de elementos en el
rbol resultado (II)
<BODY BGCOLOR=#00FFFF>
<P>Esto es una prueba</P>
</BODY>
<xsl:element name=BODY>
<xsl:attribute name=BGCOLOR>
#00FFFF
</xsl:attribute>
<xsl:element name=P>
Esto es una prueba
</xsl:element>
</xsl:element>
40
20
Y ahora...
Mejorar la hoja XSL para el horario: generar mejor HTML (ttulo, por
ejemplo)
Hacer que el horario salga en forma de tabla
Hacer que salgan todos los das, aunque en el documento XML no estn
Hacer que cada tarea salga en la casilla que ocupa en el horario
Utilizar tambin una hoja CSS
41
21