Upload
others
View
21
Download
0
Embed Size (px)
Tecnología XML
Unidad: 3Laboratorio de Programación
Universidad Nacional de la Patagonia AustralUnidad Académica Río Gallegos
XML Laboratorio de Programacion 1
Indice
� XSL� Introducción� Concepto� Tecnicas de presentación
� XPath� Concepto� Expresiones, sintaxis y funciones� Ejemplos
� XSLT� Concepto� Estructura, instrucciones� Ejemplos
� Ejercicio
XSL
Lenguaje extensible de hojas de estilo (extensible stylesheets language).
XML Laboratorio de Programacion 3
Introducción� 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...)
XML Laboratorio de Programacion 4
Técnicas de Presentación
� Muchas formas de presentación a partir de un documento XML:
XML Laboratorio de Programacion 5
Diferentes presentaciones:
XML Laboratorio de Programacion 6
Diferentes presentaciones:
XML Laboratorio de Programacion 7
Necesidad de las transformaciones
� XML se presenta como un estándar para “transmitir”datos a través de Internet.
� Ante la posibilidad de que distintos “centros” o “aplicaciones” utilicen documentos XML, es necesario un sistema que permita “transformar” los datos de un documento XML.
� XSL (eXtensible Stylesheet Language), describe un lenguaje basado en XML para transformar documentos XML a cualquier otro formato.
XML Laboratorio de Programacion 8
XSL
� XSL (eXtensible Stylesheet Language) es un lenguaje basado en XML, estandarizado por el W3C, para expresar hojas de estilo aplicables a documentos XML.
XML Laboratorio de Programacion 9
XSL
� Está formado por tres partes:
� XSLT (eXtensible Stylesheet Transformations): lenguaje que 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.
� XPath (XML Path): Una sintaxis para aludir a diversas partes de un documento XML.
� XSL-FO (Formating Objects): Conversión del XML en un formato “imprimible” y legible por una persona (ej.: PDF). Inicialmente, este era el propósito del XSL
XML Laboratorio de Programacion 10
Beneficios de XSL
� Imprescindible para presentar información: XML no tiene información de formato
� Beneficios hojas de estilo:� Centralizar la forma de presentación� Separar la estructura del contenido� Reutilizar datos� Diferentes formatos de salida� Uniformizar el estilo de presentación � Separar la creación de contenido
XML Laboratorio de Programacion 11
Técnicas de Presentación
� Se tienen 2 técnicas de presentación del contenido de un documento XML:
� CSS (Cascading Style Sheets)
� XSL (XML Stylesheet Language)
XML Laboratorio de Programacion 12
CSS: hojas de estilo para HTML
� HTML utiliza un conjunto de etiquetas predefinidas, cuyo significado es bien conocido� Ejemplo: El elemento <p> representa un párrafo y el elemento <h1> un encabezado. Un navegador sabe como debe mostrar estos elementos al usuario.
� Las CSSs (Cascading Style Sheets) permiten definir estilos de para ser aplicados a los elementos de HTML
� Ejemplo: Indicar al navegador el color de fuente que debe utilizarse para mostrar un determinado elemento.
XPATH
XML Laboratorio de Programacion 14
XPath: conceptos
� XPath es un estándar recomendado por la W3C en 1999� Define cómo acceder a partes de un documento XML� Contiene una biblioteca de funciones estándar� Se basa en relaciones de “parentesco” entre nodos� Su estilo de notación es similar a las rutas de los ficheros, pero
se refiere a nodos en un documento XML� Ejemplo: /fecha/dia
� XPath se usa en XSLT, pero también en XSL-FO, XPointer, XLink, y otros
� En XSLT, XPath se utiliza en los valores de atributos (tales como match o select)
XML Laboratorio de Programacion 15
Expresiones XPath� Una expresión XPath arroja (tras ser evaluada) una expresión de 4 tipos
posibles: conjunto de nodos (node-set), booleano, número, cadena
� Tokens válidos en una expresión XPath� Paréntesis 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 función� 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)� Números� Referencias a variables ($nombreVariable)
XML Laboratorio de Programacion 16
Expresiones XPath
� Hay que considerar una expresión XPath como un “predicado”, que devuelve todo lo que encaja con dicho predicado
� Lo que devuelve es procesado por la regla XSL
� Las expresiones XPath se usan sobre todo en los atributos match, select y test
XML Laboratorio de Programacion 17
Sintaxis XPath
� XPath utiliza expresiones de trayectorias para seleccionado nodos o conjuntos de nodos en un documento XML. EL nodo es seleccionado mediante una trayectoria o pasos.
� Ejemplo:/universidad/ades/alumnos/alumno
Cualquier nodo “alumno” que sea hijo de un nodo “alumnos” y que sea hijo de un nodo “ades”, y que sea hijo del nodo “universidad”, que seránodo raíz.
XML Laboratorio de Programacion 18
Selección de Nodos
� Los nodos se seleccionan con las siguientes trayectorias o pasos, estas son las expresiones más usuales:
Selecciona los atributos@
Selecciona el padre del nodo actual..
Selecciona el nodo actual.
Selecciona nodos en el documento desde el
nodo actual que corresponda a la selección no
importando donde esten
//
Selecciona desde el nodo raíz/
Selecciona todos los nodos hijos del nodo
nombrado
nombrenodo
XML Laboratorio de Programacion 19
Selección de Nodos: Ejemplo
� La tabla siguiente muestra algunas expresiones y los resultados de las mismas:
bookstore Selecciona todos los nodos hijos del elemento
nodo bookstore
/bookstore Selecciona el elemento raíz bookstore
bookstore/book Selecciona todos los elementos book que son
hijos de bookstore
//book Selecciona todos los elementos book no
importando donde estén.
bookstore//book Selecciona todos los elementos book
descendientes de bookstore no importando donde
estén debajo de este.
//@lang Selecciona todos los atributos llamados lang
XML Laboratorio de Programacion 20
Predicados
� Predicados son utilizados para encontrar nodos específicos o un nodo que contiene un valor especifico. Están embebidos en paréntesis cuadrados [].
bookstore/book[1] Selecciona el primer elemento book
bookstore/book[last()] Selecciona el ultimo elemento book
bookstore/book[position()<3] Selecciona dos elementos
bookstore/book[price>35.00] Selecciona todos los libros con precio mayor a 35.0
//title[@lang=‘eng’] Selecciona todos los elementos que tienen atributo lang con valor ‘eng’
XML Laboratorio de Programacion 21
Funciones XPath
� Gran variedad de funciones� Cerca de 100 funciones.� Las mas usadas son:
� boolean(): convierte a booleano. Aplicada a un conjunto de nodos, devuelve true si no es vacío. not(), true()
� count(): Devuelve el número de nodos en un conjunto de nodos
� name(): Devuelve el nombre de un nodo (su etiqueta). local-name(), namespace-uri()
� position(): Devuelve la posición de un nodo en su contexto (empieza en 1). El ultimo nodo se denota con last()
� Biblioteca de strings. normalize-space(), string(), concat(), string-length()
� sum()
XML Laboratorio de Programacion 22
Ejemplos de consultas XPath:
� Documento XML:
<libro>
<autor>Deepak Chopra</autor>
<titulo>El sendero del Mago</titulo>
<isbn>950-15-1727</isbn>
<editorial>Harmany Book</editorial>
<sumario>... nos muestra cómo debemos ... Por medio de
historias como </sumario>
<precio moneda=“pesos">50.00</precio>
<otro/>
</libro>
XML Laboratorio de Programacion 23
Ejemplos de consultas XPath:
� Título del libro: /libro/titulo
� Título del libro: //titulo
� Cuál es la Moneda del precio del libro?:
/libro/precio/@moneda
� Todos los datos del libro: /libro/*
� El libro cuyo precio se paga en pesos: /libro[precio/@moneda =‘pesos’]
XSLT
eXtensible Stylesheet Transformations
XML Laboratorio de Programacion 25
XSLT ( XSL Transformations)
� Objetivo: transformar un documento XML origen (sourcetree) en un nuevo documento XML ( resulttree).
� Permite:� añadir elementos� eliminar elementos� ordenar elementos� reorganizar la estructura del documento� filtrar elementos o definir su formato dependiendo de su contenido
� ...
XML Laboratorio de Programacion 26
Funcionamiento de las XSLT
� En los documentos XSLT se especifican una serie de plantillas (templates) en las que se definen un conjunto de reglas de transformación.
� Cada plantilla se tiene asociada un Xpath que permite seleccionar las partes del documento original sobre la que debe aplicarse dicha plantilla.
� Cuando un subárbol del documento original satisface el Xpathde una plantilla, se aplican las reglas de allí especificadas, transformando esta parte del árbol del documento origen en el correspondiente del árbol del documento resultado.
� Las secciones del documento origen que no satisfacen ninguna plantilla aparecerán en el documento final sin modificar.
XML Laboratorio de Programacion 27
Herramientas
� Actualmente contamos con varias herramientas para realizar transformaciones XSLT:
� Saxon, desarrollado en Java por Michael Kay (un gurú de XSLT)
� Xt, diseñado por James Clark
� XMLSpy
� En las prácticas usaremos XML Copy Editor
XML Laboratorio de Programacion 28
Ejemplo XSLT
� Documento XML: hola.xml
<?xml version="1.0" encoding="UTF-8"?>
<?xml-stylesheet type="text/xsl" href="hola.xsl"?><saludo>Hola, mundo!</saludo>
XML Laboratorio de Programacion 29
Ejemplo…
� Hoja de estilo: hola.xsl
<?xml version="1.0" encoding="UTF-8"?>
<xsl:stylesheet xmlns:xsl="http://www.w3.org/1999/XSL/Transform" version="1.0">
<xsl:output method="html"/>
<xsl:template match="/">
<html>
<head><title>Un Saludo</title></head>
<body>
<p>
<font color="red" face="arial">
<strong><xsl:value-of select="saludo"/></strong>
</font>
</p>
</body>
</html>
</xsl:template>
</xsl:stylesheet>
XML Laboratorio de Programacion 30
Ejemplo…
� Salida: hola.html<?xml version="1.0" encoding="UTF-8" standalone="yes"?>
<html>
<head>
<title>Un Saludo</title>
</head>
<body>
<p>
<font color="red" face="arial">
<strong>Hola, mundo!</strong>
</font>
</p>
</body>
</html>
XML Laboratorio de Programacion 31
Estructura de una hoja de estilo XSLT
� Una hoja de estilo XSLT es un documento XML. Debe estar bien formado.
� Las hojas de estilo se guardarán siempre en archivos independientes con extensión .xsl
� Deben comenzar con una declaración XML:
<?xml version="1.0“?>
� El elemento raíz de la hoja de estilo XSLT es stylsheet.
� Este elemento contendrá a todos los demás, y debe ir precedido por el alias xsl correspondiente al espacio de nombres para hojas de estilo XSLT.
XML Laboratorio de Programacion 32
Estructura de una hoja de estilo XSLT
� En las hojas de estilo XSLT, los nombres de los elementos “reservados”, proceden de un mismo espacio de nombres, y por lo tanto deben escribirse precedidos por el correspondiente alias.
� El alias debe “apuntar” a la URL: http://www.w3.org/1999/XSL/Transform
� De esta forma, el elemento raíz quedará así:<xsl:stylesheet version="1.0" xmlns:xsl="http://www.w3.org/1999/XSL/Transform">...</xsl:stylesheet>
XML Laboratorio de Programacion 33
Estructura de una hoja de estilo XSLT
� Entras las marcas de inicio y de fin del elemento raíz xsl:stylesheet, se escribirán las reglas de transformación propiamente dichas.
� Cada regla se definirá mediante un elemento xsl:template
� La regla indica qué instancias de los elementos del documento XML se van a transformar.
� La regla también indicará cómo se deben transformar cada una de ellas
XML Laboratorio de Programacion 34
Instrucciones XSLT
� Formato y elementos de un documento XSL:� Formado por instrucciones XSLT y tags HTML.� Instrucciones XSLT:
� xsl:stylesheet� xsl:output� xsl:template� xsl:value-of� xsl:for-each� xsl:sort� xsl:if� xsl:choose� xsl:apply-templates� xsl:import y xsl:include� xsl:variable� xsl:copy-of� …
XML Laboratorio de Programacion 35
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 XSL suele ser http://www.w3.org/1999/XSL/Transform
� Ejemplo:<xsl:stylesheet version="1.0" xmlns:xsl="http://www.w3.org/1999/XSL/Transform">
...
</xsl:stylesheet>
XML Laboratorio de Programacion 36
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.
XML Laboratorio de Programacion 37
xsl:output
� Ejemplo:
<xsl:stylesheet version="1.0
xmlns:xsl="http://www.w3.org/1999/XSL/Transform">
<xsl:output method="html" />
...
</xsl:stylesheet>
XML Laboratorio de Programacion 38
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 (valor de la etiqueta)
� Se utiliza para relacionar el template con el documento XML.
XML Laboratorio de Programacion 39
xsl:template (II)
� Atributos:
� 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>
<dia>20</dia>
<mes>5</mes>
<anio>2009</anio>
</fecha>
<xsl:stylesheet version="1.0“
xmlns:xsl="http://www.w3.org/1999/XSL/Transform">
<xsl:output method="xml" encoding="UTF-8“ indent=“yes”/>
<xsl:template match=“/”>
<raiz>He encontrado un nodo raiz</raiz>
</xsl:template>
</xsl:stylesheet>
<?xml version="1.0" encoding="UTF-8"?>
<raiz>He encontrado un nodo raiz</raiz>
fecha.xml fecha.xsl
Archivo XML generado
XML Laboratorio de Programacion 40
xsl:value-of
� Permite evaluar una expresión XPath: procesa el contenido de un nodo.
� Extraemos un valor del documento XML.
� Ejemplo:
<xsl:value-of select="catalog/cd/title"/>
� El contenido del nodo actual viene dado por la expresión “.”
� Esos match y select requieren de Xpath.
XML Laboratorio de Programacion 41
xsl:value-of
<?xml version="1.0" encoding="UTF-8"?>
<xsl:stylesheet xmlns:xsl="http://www.w3.org/1999/XSL/Transform" version="1.0">
<xsl:template match="/">
<html>
<body>
<h2>My CD Collection</h2>
<table border="1">
<tr bgcolor="#9acd32">
<th align="left">Title</th>
<th align="left">Artist</th>
</tr>
<tr>
<td><xsl:value-of select="catalog/cd/title"/></td>
<td><xsl:value-of select="catalog/cd/artist"/></td>
</tr>
</table>
</body>
</html>
</xsl:template>
</xsl:stylesheet>
El elemento xsl:value-ofpermite seleccionar el valor de un
elemento del documento origen e
introducirlo en el documento
resultado.
XML Laboratorio de Programacion 42
Iteración: xsl:for-each
� Instrucción <xsl:for-each>� Se utiliza para seleccionar todos los elementos de un nodoconcreto del documento XML.
� Ejemplo:
<xsl:for-each select="catalog/cd">
nodo
</xsl:for-each>
XML Laboratorio de Programacion 43
Iteración: xsl:for-each
<?xml version="1.0" encoding="UTF-8"?>
<xsl:stylesheet xmlns:xsl="http://www.w3.org/1999/XSL/Transform" version="1.0">
<xsl:template match="/">
<html>
<body>
<h2>My CD Collection</h2>
<table border="1">
<tr bgcolor="#9acd32">
<th align="left">Title</th>
<th align="left">Artist</th>
</tr>
<xsl:for-each select="catalog/cd">
<tr>
<td><xsl:value-of select="title"/></td>
<td><xsl:value-of select="artist"/></td>
</tr>
</xsl:for-each>
</table>
</body>
</html>
</xsl:template>
</xsl:stylesheet>
El elemento xsl:for-eachpermite iterar sobre el conjunto
de nodos indicado mediante elatributo select.
XML Laboratorio de Programacion 44
Ordenar: xsl:sort
� Instrucción <xsl:sort>� Ordenar los elementos dentro de un <xsl:for-each>.
� Ejemplo:
<xsl:for-each select="catalog/cd">
<xsl:sort select="artist"/>
nodo
</xsl:for-each>
XML Laboratorio de Programacion 45
Ordenar: xsl:sort
<?xml version="1.0" encoding="UTF-8"?>
<xsl:stylesheet xmlns:xsl="http://www.w3.org/1999/XSL/Transform" version="1.0">
<xsl:template match="/">
<html>
<body>
<h2>My CD Collection</h2>
<table border="1">
<tr bgcolor="#9acd32">
<th align="left">Title</th>
<th align="left">Artist</th>
</tr>
<xsl:for-each select="catalog/cd">
<xsl:sort select="artist"/>
<tr>
<td><xsl:value-of select="title"/></td>
<td><xsl:value-of select="artist"/></td>
</tr>
</xsl:for-each>
</table>
</body>
</html>
</xsl:template>
</xsl:stylesheet>
El elemento xsl:sort permite
ordenar los elementos sobre los
que se itera al aplicar el elemento
xsl:for-each.
XML Laboratorio de Programacion 46
Filtrado c/xsl:for-each
<?xml version="1.0" encoding="UTF-8"?>
<xsl:stylesheet xmlns:xsl="http://www.w3.org/1999/XSL/Transform" version="1.0">
<xsl:template match="/">
<html>
<body>
<h2>My CD Collection</h2>
<table border="1">
<tr bgcolor="#9acd32">
<th align="left">Title</th>
<th align="left">Artist</th>
</tr>
<xsl:for-each select="catalog/cd[artist='Bob Dylan']">
<tr>
<td><xsl:value-of select="title"/></td>
<td><xsl:value-of select="artist"/></td>
</tr>
</xsl:for-each>
</table>
</body>
</html>
</xsl:template>
</xsl:stylesheet>
El XPath introducido como valor
en el atributo select permite
filtrar los elementos deldocumento original.
XML Laboratorio de Programacion 47
Condicional: xsl:if
� Instrucción <xsl:if>� Se utiliza para condicionar.
� Ejemplo:
<xsl:for-each select="catalog/cd">
<xsl:if test="price > 10">
nodo
</xsl:if>
</xsl:for-each>
XML Laboratorio de Programacion 48
Condicional: xsl:if
<?xml version="1.0" encoding="UTF-8"?>
<xsl:stylesheet xmlns:xsl="http://www.w3.org/1999/XSL/Transform" version="1.0">
<xsl:template match="/">
<html>
<body>
<h2>My CD Collection</h2>
<table border="1">
<tr bgcolor="#9acd32">
<th align="left">Title</th>
<th align="left">Artist</th>
</tr>
<xsl:for-each select="catalog/cd">
<xsl:if test="price > 10">
<tr>
<td><xsl:value-of select="title"/></td>
<td><xsl:value-of select="artist"/></td>
</tr>
</xsl:if>
</xsl:for-each>
</table>
</body>
</html>
</xsl:template>
</xsl:stylesheet>
El elemento xsl:if contiene
una plantilla que únicamente será
aplicada si la condición delatributo test se evalúa como
cierta.
XML Laboratorio de Programacion 49
Condicional: xsl:choose
� Instrucción <xsl:choose>
� Se utiliza para realizar múltiples preguntas condicionales.
� Se debe utilizar junto a <xsl:when> y <xsl:otherwise>.
� Ejemplo:
<xsl:choose>
<xsl:when test="expression">
... alguna salida ...
</xsl:when>
<xsl:otherwise>
... alguna salida ....
</xsl:otherwise>
</xsl:choose>
XML Laboratorio de Programacion 50
Condicional: xsl:choose<?xml version="1.0" encoding="UTF-8"?>
<xsl:stylesheet xmlns:xsl="http://www.w3.org/1999/XSL/Transform" version="1.0">
<xsl:template match="/">
<html>
<body>
<h2>My CD Collection</h2>
<table border="1">
<tr bgcolor="#9acd32">
<th align="left">Title</th>
<th align="left">Artist</th>
</tr>
<xsl:for-each select="catalog/cd">
<tr>
<td><xsl:value-of select="title"/></td>
<xsl:choose>
<xsl:when test="price > 10">
<td bgcolor="#ff00ff">
<xsl:value-of select="artist"/></td>
</xsl:when>
<xsl:when test="price > 9 and price <= 10">
<td bgcolor="#cccccc">
<xsl:value-of select="artist"/></td>
</xsl:when>
<xsl:otherwise>
<td><xsl:value-of select="artist"/></td>
</xsl:otherwise>
</xsl:choose>
</tr>
</xsl:for-each>
</table>
</body>
</html>
</xsl:template>
</xsl:stylesheet>
El elemento xsl:choose junto a
los elementos xsl:when y
xsl:otherwise permiten
establecer condiciones múltiples.
XML Laboratorio de Programacion 51
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.
XML Laboratorio de Programacion 52
xsl:apply-templates
� Ejemplo:<xsl:template match="artist">
Artist: <span style="color:#00ff00">
<xsl:value-of select="."/></span>
<br />
</xsl:template>
XML Laboratorio de Programacion 53
xsl:apply-templates
� Instrucción <xsl:apply-templates>� Aplicación del template:� Ejemplo:
<xsl:template match="/">
<html>
<body>
<h2>My CD Collection</h2>
<xsl:apply-templates/>
</body>
</html>
</xsl:template>
XML Laboratorio de Programacion 54
xsl:apply-templates<?xml version="1.0" encoding="UTF-8"?>
<xsl:stylesheet xmlns:xsl="http://www.w3.org/1999/XSL/Transform" version="1.0">
<xsl:template match="/">
<html>
<body> <h2>My CD Collection</h2>
<xsl:apply-templates/>
</body>
</html>
</xsl:template>
<xsl:template match="cd">
<p>
<xsl:apply-templates select="title"/>
<xsl:apply-templates select="artist"/>
</p>
</xsl:template>
<xsl:template match="title">
Title: <span style="color:#ff0000">
<xsl:value-of select="."/></span> <br/>
</xsl:template>
<xsl:template match="artist">
Artist: <span style="color:#00ff00">
<xsl:value-of select="."/></span> <br/>
</xsl:template>
</xsl:stylesheet>
El elemento xsl:apply-templatespermite continuar aplicando
plantillas al elemento actual o
sus elementos hijo.
XML Laboratorio de Programacion 55
Asociar una hoja de estilo a un documento XML
� Incluir en la cabecera del documento XML, siguiente instrucción de procesamiento:<?xml-stylesheet type=”text/xsl” href=”cdcatalog.xsl”?>
� Ejemplo:
<?xml version="1.0" encoding="ISO-8859-1"?>
<?xml-stylesheet type="text/xsl" href="cdcatalog.xsl"?>
<catalog>
<cd>
<title>Empire Burlesque</title>
<artist>Bob Dylan</artist>
<country>USA</country>
<company>Columbia</company>
<price>10.90</price>
<year>1985</year>
</cd>
...
</catalog>
Se enlaza el documentocon la hoja de estilo
XML Laboratorio de Programacion 56
Otros elementos:
atributos con xsl:value-of
� En XSLT podemos “filtrar” o indicar qué instancias de un elemento queremos procesar, tomando como criterio de selección el valor de los atributos que acompañan a los elementos.
� Para hacer esto, en un elemento xsl:value-of, podemos recuperar el valor de un atributo mediante la expresión @nombreAtributo , por ejemplo:
<xsl:template match=“vuelo">
<tr>
<td><xsl:value-of select="@numero" /></td>
<td><xsl:value-of select="@origen" /></td>
<td><xsl:value-of select="@destino" /></td>
<td><xsl:value-of select="@hora" /></td>
</tr>
</xsl:template> El documento XML es:
<vuelo numero=“747” origen=“RG” destino=“BA”
hora=“12:00”>
<asientos>
<categoria>
</vuelo>
XML Laboratorio de Programacion 57
Otros elementos: xsl:import y xsl:include
� Es posible crear hojas de estilo XSLT modulares, es decir, divididas en distintos archivos físicos
� En la hoja de estilo se incluirán referencias a otras hojas de estilo XSLT en las que se incluyen el resto de reglas.
� Para incluir las referencias, se pueden utilizar los elementos xsl:importy xsl:include
� Estos dos elementos deben ir acompañados por un elemento href que tomará como valor el URL absoluto o relativo de la hoja de estilo que se quiere utilizar.
� Los elementos xsl:import se debe incluir justo a continuación de la etiqueta de inicio del elemento xsl:stylesheet, y antes de cualquier otro elemento.
XML Laboratorio de Programacion 58
Otros elementos: xsl:import y xsl:include
� Hoja de estilo: hoja1.xls<?xml version="1.0" encoding="UTF-8"?>
<xsl:stylesheet version="1.0" xmlns:xsl="http://www.w3.org/1999/XSL/Transform">
<xsl:template match="/">
<html>
<head><title>Ejemplo</title></head>
<body>
<h1>Lista de libros</h1>
<xsl:apply-templates select="//libro">
<xsl:sort select="autor" />
</xsl:apply-templates>
</body>
</html>
</xsl:template>
<xsl:template match="libro">
<p><xsl:value-of select="autor" />.
<xsl:value-of select="titulo" />,
<xsl:value-of select="anno-pub" />, ISBN:
<xsl:value-of select="isbn" /></p>
</xsl:template>
</xsl:stylesheet>
HojaEstiloLibro.xsl
XML Laboratorio de Programacion 59
Otros elementos: xsl:import y xsl:include
� Entonces, incluyendo la referencia a la nueva hoja creada, la hoja de estilo anterior va a quedar como sigue:
<?xml version="1.0" encoding="UTF-8"?>
<xsl:stylesheet version="1.0“
xmlns:xsl="http://www.w3.org/1999/XSL/Transform">
<xsl:import href=”HojaEstiloLibro.xsl” />
<xsl:template match="/">
<html>
<head><title>Ejemplo</title></head>
<body>
<h1>Lista de libros</h1>
<xsl:apply-templates select="//libro">
<xsl:sort select="autor" />
</xsl:apply-templates>
</body>
</html>
</xsl:template>
</xsl:stylesheet>
XML Laboratorio de Programacion 60
Otros elementos: xsl:variable
� El elemento xsl:variable se utiliza para declarar una variable
� Las variables nos permiten realizar operaciones con los datosdel documento XML para luego mostrar el resultado en el documento “resultado”.
� Es importante señalar que cuando se le asigna un valor, éste yano se puede cambiar.
� Para declarar una variable, se utilizará la sintáxis:
<xsl:variable name="var" select="15" />
XML Laboratorio de Programacion 61
Otros elementos: xsl:variable<?xml version="1.0" encoding="UTF-8"?>
<pedido>
<cliente>
<nombre>Hipertehuelch</nombre>
<domicilio>Santiago del Estero 600</domicilio>
<localidad>Rio Gallegos</localidad>
</cliente>
<detalle>
<item>
<material>Tornillos-5</material>
<unidades>10000</unidades>
<precio>3</precio>
<total>30000</total>
</item>
<item>
<material>Paletas</material>
<unidades>100</unidades>
<precio>500</precio>
<total>50000</total>
</item>
<item>
<material>Ladrillos</material>
<unidades>600</unidades>
<precio>23</precio>
<total>13800</total>
</item>
</detalle>
</pedido>
pedido.xml
XML Laboratorio de Programacion 62
Otros elementos: xsl:variable<?xml version="1.0" encoding="UTF-8"?>
<xsl:stylesheet version="1.0" xmlns:xsl="http://www.w3.org/1999/XSL/Transform">
<xsl:template match="/">
<html>
<head><title>Pedido</title></head>
<body>
<xsl:apply-templates />
</body></html>
</xsl:template>
<xsl:template match="detalle">
<table width="85%">
<tr>
<th>Material</th>
<th>Unidades</th>
<th>Precio</th>
<th>Total Pesos</th>
</tr>
<xsl:for-each select="item">
<tr>
<td><xsl:value-of select="material" /></td>
<td><xsl:value-of select="unidades" /></td>
<td><xsl:value-of select="precio" /></td>
<td><xsl:value-of select="total" /></td>
</tr>
</xsl:for-each>
</table>
</xsl:template>
</xsl:stylesheet>
pedido.xsl<xsl:variable name="totalPrecio" select="sum(//total)" />
<h4>Total a pagar: <xsl:copy-of select="$totalPrecio" /></h4>
XML Laboratorio de Programacion 63
Otros elementos: xsl:variable
pedido.xsl pedido1.xsl
XML Laboratorio de Programacion 64
Otros elementos: xsl:copy-of
� Se utiliza para copiar un conjunto de nodos del documento origen, al documento resultado de la transformación.
� Se copiarán todos los nodos hijos y los atributos (en el caso de los elementos que los tengan).
� Este elemento es especialmente útil cuando se quiere convertir un documento XML a otro documento XML con una estructura diferente.
� El elemento xsl:copy-of irá acompañado por un atributo selectque toma como valor una expresión que determinará los nodos que se van a copiar.
XML Laboratorio de Programacion 65
Otros elementos: xsl:copy-of
<?xml version="1.0" encoding="UTF-8"?>
<?xml-stylesheet type="text/xsl" href="dlibros3.xsl"?>
<repertorio>
<libro>
<titulo>Don Quijote de la Mancha</titulo>
<autor>Miguel de Cervantes</autor>
<anno-pub>1987</anno-pub>
<isbn>84-568-94-3</isbn>
</libro>
<libro>
<titulo>La Galatea</titulo>
<autor>Miguel de Cervantes</autor>
<anno-pub>1989</anno-pub>
<isbn>84-568-9424</isbn>
</libro>
<libro>
<titulo>La Celestina</titulo>
<autor>Fernando de Rojas</autor>
<anno-pub>1998</anno-pub>
<isbn>84-568-95-12</isbn>
</libro>
</repertorio>
repertorio.xml
XML Laboratorio de Programacion 66
Otros elementos: xsl:copy-of
<?xml version="1.0" encoding="UTF-8"?>
<xsl:stylesheet version="1.0" xmlns:xsl="http://www.w3.org/1999/XSL/Transform">
<xsl:output method="xml" version="1.0" encoding="UTF-8" indent="yes"/>
<xsl:template match="/">
<repertorio>
<xsl:copy-of select="//libro[starts-with(autor, 'Miguel de Cervantes')]" />
</repertorio>
</xsl:template>
</xsl:stylesheet>
repertorio.xsl
XML Laboratorio de Programacion 67
Otros elementos: xsl:copy-of
� Documento XML generado:
<?xml version="1.0" encoding="UTF-8"?>
<repertorio>
<libro>
<titulo>Don Quijote de la Mancha</titulo>
<autor>Miguel de Cervantes</autor>
<anno-pub>1987</anno-pub>
<isbn>84-568-94-3</isbn>
</libro>
<libro>
<titulo>La Galatea</titulo>
<autor>Miguel de Cervantes</autor>
<anno-pub>1989</anno-pub>
<isbn>84-568-9424</isbn>
</libro>
</repertorio>
XML Laboratorio de Programacion 68
Elementos de XSLT (1)� xsl:apply-imports : Aplica una plantilla de una hoja de estilo importada� xsl:apply-templates : Aplica una plantilla al nodo actual o sus elementos hijo� xsl:attribute : Añade un atributo� xsl:attribute-set : Define un conjunto de atributos� xsl:call-template : Aplica una determinada plantilla� xsl:choose : Utilizado junto a <xsl:when> y <xsl:otherwise> para expresar
condiciones múltiples� xsl:comment : Crea un nodo comentario en el documento resultado� xsl:copy : Realiza una copia del nodo actual (sin atributos y nodos hijo)� xsl:copy-of : Realiza una copia del nodo actual (con atributos y nodos hijo)� xsl:decimal-format : Define los caracteres y símbolos utilizados a la hora de
convertir valores numéricos reales a cadenas de caracteres mediante la función format-number()
� xsl:element : Crea un nuevo elemento en el documento resultado� xsl:fallback : Especifica un código alternativo a ejecutar en caso de que el
procesador no soporte un determinado elemento XSLT� xsl:for-each : Permite iterar sobre un conjunto de nodos
XML Laboratorio de Programacion 69
Elementos de XSLT (2)� xsl:if : Contiene una plantilla que únicamente será aplicada si la condición
especificada es cierta� xsl:import : Importa el contenido de una hoja de estilo (las plantillas
especificadas en ésta tendrán menor precedencia que las de la hoja de estilo actual)
� xsl:include : Importa el contenido de una hoja de estilo (las plantillas especificadas en ésta tendrán la misma precedencia que especificadas en la hoja de estilo actual)
� xsl:key : Declara una clave que más tarde puede ser utilizada en la función key()
� xsl:message : Escribe un mensaje en la salida (utilizado para proporcionar mensajes de error)
� xsl:namespace-alias : Remplaza un determinado prefijo de espacio de nombres utilizado en la hoja de estilo, por un prefijo distinto en el documento resultado
� xsl:number : Permite especificar un formato para transformar números enteros a cadenas de caracteres
� xsl:otherwise : Utilizado junto a <xsl:when> y <xsl:choose> para expresar condiciones múltiples
� xsl:output : Permite especificar el formato del documento resultado� xsl:param : Declara un parámetro global o local a una plantilla
XML Laboratorio de Programacion 70
Elementos de XSLT (3)� xsl:preserve-space : Define los elementos en los que debe preservarse los
espacios en blanco (acción por defecto)� xsl:processing-instruction : Escribe una instrucción de procesado en la salida� xsl:sort : permite ordenar un conjunto de nodos� xsl:strip-space : Define los elementos en los que deben eliminarse los espacios
en blanco� xsl:stylesheet : Elemento raíz de la hoja de estilo� xsl:template : Define una plantilla� xsl:text : Escribe texto en el documento de salida� xsl:transform : Elemento raíz de la hoja de estilo� xsl:value-of : Extrae el valor de un determinado elemento� xsl:variable : Declara una variable global o local� xsl:when : Utilizado junto a <xsl:otherwise> y <xsl:choose> para expresar
condiciones múltiples� xsl:with-param : Define el valor de un parámetro al invocar a una plantilla
XML Laboratorio de Programacion 71
Consultas…
XML Laboratorio de Programacion 72
Ejercicio:
� Crear una hoja de estilo de acuerdo a un documento XML. Realizar los siguientes pasos:
� Crear el documento XML (ver XML adjunto)
� Crear una hoja de estilo de acuerdo al documento XML
� Verificar que tanto el documento XML como XSL estén bien formados.
� Generar como salida un archivo HTML.
� Ejemplo:
XML Laboratorio de Programacion 73
Ejercicio propuesto
� Documento catalogo.xml:<?xml version="1.0" encoding="UTF-8"?>
<catalogo>
<cd>
<titulo>Parte de la religión</titulo>
<artista>Charly García</artista>
<pais>Argentina</pais>
<compania>Sony BMG</compania>
<precio>24.99</precio>
<anio>1987</anio>
</cd>
<cd>
<titulo>Civilización</titulo>
<artista>Los Piojos</artista>
<pais>Argentina</pais>
<compania>Sony</compania>
<precio>35.00</precio>
<anio>2007</anio>
</cd>
<cd>
<titulo>Me veras volver</titulo>
<artista>Soda Stereo</artista>
<pais>Argentina</pais>
<compania>Sony BMG</compania>
<precio>38.00</precio>
<anio>2008</anio>
</cd>
</catalogo>
XML Laboratorio de Programacion 74
Próxima clase
� Ultima clase
� DOM
� Ejemplos y ejercitación