Tema IV. XML - WikiESEI - home4+-+XML...Ejes Los ejes (axis) permiten navegar el árbol de nodos a...
Transcript of Tema IV. XML - WikiESEI - home4+-+XML...Ejes Los ejes (axis) permiten navegar el árbol de nodos a...
Tema IV. XMLVI. XSL (XPath & XSLT)
Desarrollo de Aplicaciones para InternetCurso 12|13
Índice
1.Introducción
2.XPath
i. Introducción
ii. Rutas y Expresiones1.Nodos
2.Ejes
3.Predicados
iii.Tipos de dato, Funciones y Operadores
iv.XPath en Java
3.XSLT
i. Introducción
ii. Uso de XSLT
iii.Elementos
4.Referencias
Índice
1.Introducción
2.XPath
i. Introducción
ii. Rutas y Expresiones1.Nodos
2.Ejes
3.Predicados
iii.Tipos de dato, Funciones y Operadores
iv.XPath en Java
3.XSLT
i. Introducción
ii. Uso de XSLT
iii.Elementos
4.Referencias
XSL
● Extensible Stylesheet Language (XSL)● Familia de recomendaciones W3C:
http://www.w3.org/Style/XSL/ ● Lenguajes XSL
– XSL Transformations (XSLT)● Lenguaje para transformar XML
– XML Path Language (XPath)● Lenguaje de expresiones para acceder a distintas partes
de un documento XML
– XSL Formatting Objects (XSL-FO)● Vocabulario XML para especificar semánticas de formato
Workflow XSL
Workflow con XSL-FO Workflow sin XSL-FO
*Imágenes adaptadas de: http://upload.wikimedia.org/wikipedia/commons/e/e6/XSLT_en.svg
Ejemplo DTD
Ejemplo XML
Ejemplo XSLT
Ejemplo HTML
Índice
1.Introducción
2.XPath
i. Introducción
ii. Rutas y Expresiones1.Nodos
2.Ejes
3.Predicados
iii.Tipos de dato, Funciones y Operadores
iv.XPath en Java
3.XSLT
i. Introducción
ii. Uso de XSLT
iii.Elementos
4.Referencias
XPath
● El objetivo de XPath es seleccionar partes de un documento XML
● Es una recomendación del W3C:– http://www.w3.org/TR/xpath
– http://www.w3.org/TR/xpath20
● Aunque la versión actual es la 2.0, la versión 1.0 está mucho más extendida (es la soportada por Java)*
● Está relacionado con otras tecnologías XML: XSLT, XQuery, XML Pointer, XForms, etc.
*En este tema veremos XPath 1.0
Índice
1.Introducción
2.XPath
i. Introducción
ii.Rutas y Expresiones1.Nodos
2.Ejes
3.Predicados
iii.Tipos de dato, Funciones y Operadores
iv.XPath en Java
3.XSLT
i. Introducción
ii. Uso de XSLT
iii.Elementos
4.Referencias
Rutas
● XPath se basa en la definición de rutas de acceso a los elementos a seleccionar
● Tipos de rutas– Absolutas
● Indican la posición del elemento o elementos a seleccionar desde la raíz del documento
– /Libro/Capitulo[@numero=1] Desde la raíz
– //Capitulo Desde cualquier nivel
– Relativas● Indican la posición del elemento o elementos a
seleccionar desde el contexto actual– Capitulo[@numero=2]
Expresiones
● Una expresión es una ruta mediante la cual se seleccionan conjuntos de nodos XPath
● Una expresión está compuesta de varios pasos de ubicación separados por /
● Estructura paso de ubicación (ejemplo)child::Capitulo[position()=2]
● Ejemplos:– http://www.w3.org/TR/xpath/#location-paths
– http://www.w3.org/TR/xpath/#path-abbrev
Eje(Axis)
Nodo Predicado
Índice
1.Introducción
2.XPath
i. Introducción
ii.Rutas y Expresiones1.Nodos
2.Ejes
3.Predicados
iii.Tipos de dato, Funciones y Operadores
iv.XPath en Java
3.XSLT
i. Introducción
ii. Uso de XSLT
iii.Elementos
4.Referencias
Nodos
● XPath identifica cada parte del XML con un tipo de nodo
● Existen siete tipos de nodo– Raíz (/)– Elemento (nombre)
– Atributo (@atributo)
– Texto (text())– Namespace (namespace::)
– Comentario (comment())– Instrucción de procesado (processing-instruction(...))
Nodos
● Existen una serie de elementos comodín para seleccionar nodos:– * Coincide con cualquier nodo elemento
– @* Coincide con cualquier nodo atributo
– node() Coincide con cualquier nodo de cualquier tipo
Índice
1.Introducción
2.XPath
i. Introducción
ii.Rutas y Expresiones1.Nodos
2.Ejes
3.Predicados
iii.Tipos de dato, Funciones y Operadores
iv.XPath en Java
3.XSLT
i. Introducción
ii. Uso de XSLT
iii.Elementos
4.Referencias
Ejes
● Los ejes (axis) permiten navegar el árbol de nodos a partir de la posición actual
● Existen trece ejes en XPath– child: Selecciona hijos del nodo actual. Es el eje
por defecto
– attribute: Selecciona atributos del nodo actual si es un elemento. Es equivalente a “@”
– ancestor: Selecciona los nodos que se encuentren entre el nodo actual y el nodo raíz
– ancestor-or-self: Selecciona el nodo actual y los nodos que se encuentren él y el nodo raíz
Ejes
● Ejes (continuación)– descendant: Selecciona los nodos hijo del nodo
actual recursivamente
– descendant-or-self: Selecciona el nodo actual y sus nodos hijo recursivamente. Es equivalente a “//”
– following: Selecciona nodos del documento siguientes al actual, excluyendo nodos descendientes, atributos y namespaces
– following-sibling: Selecciona nodos siguientes (igual que following) al actual que compartan el mismo padre
Ejes
● Ejes (continuación)– namespace: Selecciona declaraciones de
namespace (atributo xmlns)
– parent: Selecciona el nodo padre del nodo actual. Equivalente a “..”
– predecing: Selecciona nodos del documento previos al actual, excluyendo los nodos padre, atributos y namespaces
– predecing-sibling: Selecciona nodos previos (igual que preceding) al actual que compartan el mismo padre
– self: Representa al nodo actual. Equivalente a “.”
Índice
1.Introducción
2.XPath
i. Introducción
ii.Rutas y Expresiones1.Nodos
2.Ejes
3.Predicados
iii.Tipos de dato, Funciones y Operadores
iv.XPath en Java
3.XSLT
i. Introducción
ii. Uso de XSLT
iii.Elementos
4.Referencias
Predicados
● Filtran los elementos seleccionados en base a:– Índices: Se indica la posición numérica del
elemento que queremos seleccionar. El primer elemento será el 1 y el último last()
/libros/libro/capitulo[1]
– Expresiones lógicas: Pueden incluir funciones y suelen hacer uso de operadores
//libro/capitulo[position()=1]
//capitulo[@numero>1]
Índice
1.Introducción
2.XPath
i. Introducción
ii. Rutas y Expresiones1.Nodos
2.Ejes
3.Predicados
iii.Tipos de dato, Funciones y Operadores
iv.XPath en Java
3.XSLT
i. Introducción
ii. Uso de XSLT
iii.Elementos
4.Referencias
Funciones
● Existen una serie de funciones que pueden ser utilizadas en las expresiones de XPath
● Normalmente, están asociadas a un tipo de dato determinado
● La lista completa de funciones se encuentra en http://www.w3.org/TR/xpath/#corelib
● A continuación veremos los tipos de dato existentes en XPath y algunas de las más funciones más importantes
Tipos
● Existen cuatro tipos– Boolean
– Node-set
– Number
– String
Tipos
● Boolean– Pueden tomar el valor true() o false()
– Los valores booleanos son funciones para evitar la ambigüedad con el nombre de etiquetas (p.ej. <true>verdadero</true>)
● Node-Sets– Representan un conjunto de nodos XPath
– Aunque la especificación de XPath no lo requiere, normalmente los nodos están en el mismo orden que en el documento XML
Tipos
● Numbers– Representa a números de coma flotante (no
existen enteros)
● Strings– Representan una secuencia de caracteres
Unicode
Funciones
● Funciones Booleanas– boolean(object): Convierte object en un valor
booleano, según los siguientes criterios:● Number: Falso si es 0 o NaN. Verdadero en otro caso● Node-Set: Falso si es vacío. Verdadero en otro caso● String: Falso si es vacío. Verdadero en otro caso
– false(): Devuelve el valor falso
– not(boolean): Devuelve la negación de boolean
– true(): Devuelve el valor verdadero
Funciones
● Funciones Node-Set– count(node-set): Devuelve el número de
nodos en el node-set
– id(string): Devuelve un node-set con los nodos que tengan el id o ids pasados como argumento (útil con IDREF e IDREFS)
– last(): Devuelve el tamaño del nodo actual
– local-name([node-set]): Devuelve el nombre local (sin prefijo) del nodo actual o del nodo pasado como argumento
Funciones
● Funciones Node-Set (continuación)– name([node-set]): Devuelve el nombre del
nodo actual o del nodo pasado como argumento
– namespace-uri([node-set]): Devuelve el URI de namespace actual o del nodo pasado como argumento
– position(): Devuelve el valor de la posición del nodo actual
Funciones
● Funciones Numéricas– ceiling(number): Redondea number al entero
más próximo mayor que él
– floor(number): Redondea number al entero más próximo menor que él
– number(object): Convierte object en un number siguiento los siguientes criterios
● String: Si contiene un número, devuelve el número. Si no, devuelve NaN
● Boolean: Si es verdadero, devuelve 1. Si no, devuelve 0● Node-Set: Es equivalente a hacer
number(string(node-set))
Funciones
● Funciones Numéricas (continuación)– round(number): Redondea numbe al entero
más próximo
– sum(node-set): Suma el valor de los nodos contenidos en node-set convirtiéndolos, previamente, a un number (si es posible). Si algún nodo no se puede convertir, el resultado será NaN
Funciones
● Funciones String– concat(string1, string2[, string3...]):
Concatena las cadenas de texto pasadas como parámetros
– contains(string, search): Devuelve verdadero si string contiene search. Falso en caso contrario
– normalize-space(string): Elimina los espacios al inicio y fin de string, y convierte en espacios simples los espacios múltiples
– stats-with(string, start): Devuelve verdadero si string comienza por start
Funciones
● Funciones String (continuación)– string(object): Convierte object en una
cadena de texto
– string-length(string): Devuelve la longitud de una cadena de texto
– substring(string, number1[, number2]): Devuelve una subcadena de string comenzando en la posición number1 y finalizando en number2. Si number2 no se indica, entonces será la última posición
Operadores
● Operadores
| Unión de dos node-sets (//libro | //cd)
+ Suma
- Resta
* Multiplicación
div División
= Igual
!= Distinto
< Menor que
<= Menor o igual que
> Mayor que
>= Mayor o igual que
or Disyunción
and Conjunción
mod Módulo
Índice
1.Introducción
2.XPath
i. Introducción
ii. Rutas y Expresiones1.Nodos
2.Ejes
3.Predicados
iii.Tipos de dato, Funciones y Operadores
iv.XPath en Java
3.XSLT
i. Introducción
ii. Uso de XSLT
iii.Elementos
4.Referencias
XPath en Java
● Java incorpora una pequeña API para realizar consultas con XPath sobre un XML
● Las clases relacionadas se encuentran en el paquete javax.xml.xpath
● En esta API se ha establecido el siguiente mapeo de tipos (Tipo XPath <=> Tipo Java)– Number <=> java.lang.Double
– String <=> java.lang.String
– Boolean <=> java.lang.Boolean
– Node-Set <=> org.w3c.dom.NodeList
XPath en Java
● Clases principales– XPathFactory: Factoría que permite la creación
de objetos XPath
– XPathConstants: Contiene seis constantes, cinco de las cuales son utilizadas para definir el tipo de retorno esperado de una consulta. Estas son:
● BOOLEAN● NODE● NODESET● NUMBER● STRING
XPath en Java
● Interfaces principales– XPath: Los objetos XPath permiten hacer
consultas mediante el método “evalulate”. Además, permiten crear expresiones XPath precompiladas (XpathExpression), mediante el método “compile”
– XPathExpression: Representa una expresión XPath precompilada. También permite hacer consultas mediante el método “evaluate”. Se suele utilizar cuando una consulta se va a repetir varias veces
Ejemplo API XPath
Ejemplo API XPath
Ejemplo API XPath
Índice
1.Introducción
2.XPath
i. Introducción
ii. Rutas y Expresiones1.Nodos
2.Ejes
3.Predicados
iii.Tipos de dato, Funciones y Operadores
iv.XPath en Java
3.XSLT
i. Introducción
ii. Uso de XSLT
iii.Elementos
4.Referencias
XSTL
● XSLT: Extensible Stylesheet Language Transformations
● Permite modificar la presentación de la información contenida en los XML
● Es un lenguaje declarativo escrito en XML para la transformación de XML en otro formato
● Es una recomendación W3C:– http://www.w3.org/TR/xslt
– http://www.w3.org/TR/xslt20
● Igual que con XPath, aunque la versión estable es la 2.0, Java solo soporta la versión 1.0
Índice
1.Introducción
2.XPath
i. Introducción
ii. Rutas y Expresiones1.Nodos
2.Ejes
3.Predicados
iii.Tipos de dato, Funciones y Operadores
iv.XPath en Java
3.XSLT
i. Introducción
ii.Uso de XSLT
iii.Elementos
4.Referencias
Transformación de XML con XSLT
● Existen dos métodos para transformar un XML con XSLT– Incluyendo el XSLT en el XML
● Mediante una instrucción se asocia el XSLT al XML● Los navegadores Web utilizan esta información para
transformar el documento antes de mostrarlo● Ejemplo de instrucción (debe ir en la cabecera del
XML):
<?xml-stylesheet
href=”ejemplo.xsl”
type=”text/xsl”?>
Transformación de XML con XSLT
● Existen dos métodos para transformar un XML con XSLT (continuación)– Utilizando un Transformer (Java)
● La transformación puede hacerse programáticamente● Ejemplo
Definición de XSLT
● Un XSLT tiene un elemento raíz: stylesheet o transform (son sinónimos)
● Es más habitual el uso de stylesheet● En documentos sencillos puede llegar a omitirse este
elemento raíz, pero no es lo habitual● Los elementos de XSLT pertenecen al namespace
http://www.w3.org/1999/XSL/Transform ● La declaración de este elemento es la siguiente: <xsl:stylesheet
xmlns:xsl=”http://www.w3.org/1999/XSL/Transform”
Version=”1.0”>
</xsl:stylesheet>
Ejemplo XSLT
Índice
1.Introducción
2.XPath
i. Introducción
ii. Rutas y Expresiones1.Nodos
2.Ejes
3.Predicados
iii.Tipos de dato, Funciones y Operadores
iv.XPath en Java
3.XSLT
i. Introducción
ii. Uso de XSLT
iii.Elementos
4.Referencias
Elemento output
● Permite seleccionar el tipo de salida que se va a producir: XML, HTML o texto
● Facilita el trabajo al procesador de XML/XSLT● Posee varios atributos para modificar la salida● Ejemplos <xsl:output method=”xml”/>
<xsl:output method=”html”/>
<xsl:output method=”text”/>
Ejemplo XSLT
Elemento template
● Define una plantilla de transformación asociada a un elemento
● Tiene un atributo “match” que indica con qué elemento se asocia la plantilla
● Es habitual que exista una plantilla asociada al elemento raíz “/”.
● Declaración <xsl:template match=”/”>
<!-- Contenido de la plantilla -->
</xsl:template>
Ejemplo XSLT
Elemento apply-templates
● Indica que deben aplicarse las plantillas disponibles a los nodos hijo del nodo actual
● El atributo “select” permite seleccionar los nodos hijos a los que se deben aplicar las plantillas
● Si se omite “select” se evaluarán todos los nodos hijo
● Ejemplos <xsl:apply-templates/>
<xsl:apply-templates select=”Capitulo”/>
Ejemplo XSLT
Elemento value-of
● Recupera el valor de una selección XPath● Posee el atributo obligatorio “select”, donde
se indica la consulta XPath● Ejemplos <xsl:value-of select=”Capitulo/text()”/>
<xsl:value-of select=”count(Capitulo)”/>
Ejemplo XSLT
Elemento text
● Añade un texto a la salida● Suele utilizarse cuando el texto que se quiere escribir
puede ser conflictivo con el parser XSLT● El atributo “disable-output-escaping” permite
indicar si se desea que en la salida se escapen los caracteres conflictivos (p.ej. <, >, &, etc.)
● Este atributo también está presente en value-of● Ejemplo <xsl:text disable-output-escaping=”yes”>
<br/>
</xsl:text>
Ejemplo XSLT
Elemento if
● Comprueba una condición booleana y, en caso de que sea cierta, se instancia su contenido
● La condición se indica mediante el atributo “test”, que contendrá una expresión XPath
● No existe el elemento “else”
● Ejemplos <xsl:if test=”@edad > 18”>
<!-- Contenido a instanciar -->
</xsl:if>
Elemento choose
● Comprueba una serie de condiciones booleanas y, en caso de que una sea cierta, se instancia su contenido
● Se usa en combinación con los elementos– when: Funciona del mismo modo que un if
– otherwise: Su contenido se instanciará si no se entra por ningún when previo
● En un choose se entrará, únicamente, por el primer when cuya condición sea verdadera. Si no, por el otherwise
● Ejemplo <xsl:choose>
<xsl:when test=”@edad > 18”><!-- Contenido --></xsl:when>
<xsl:when test=”@edad > 30”><!-- Contenido --></xsl:when>
<xsl:otherwise><!-- Contenido --></xsl:otherwise>
</xsl:choose>
Elemento for-each
● Permite recorrer los nodos de un node-set y generar contenido para ellos
● En el atributo “select” se debe indicar el XPath de selección del node-set
● Puede combinarse con el elemento “sort” para ordenar los nodos
● Ejemplo <xsl:for-each select=”//Capitulo”>
<xsl:sort select=”.” order=”ascending”/>
<li><xsl:value-of select=”.”/></li>
</xsl:for-each>
Ejemplo XSLT
Elemento variable
● Una variable en XSLT es el equivalente a las constantes en otros lenguajes (su valor no se puede modificar)
● Las variables deben tener un nombre asignado mediante el atributo “name”
● Las variables se referencian con $nombreVariable
● El valor de una variable se puede establecer mediante:
– Selección: En el atributo “select” se define una expresión cuyo valor será asignado a la variable
– Contenido: El contenido de la etiqueta “variable” es su valor
● Ejemplos <xsl:variable name=”capitulos” select=”//capitulo”/>
<xsl:variable name=”descripción”>
Este será el contenido de la variable
</xsl:variable>
Elemento call-template
● Los elementos template pueden tener un nombre asignado (atributo name)
● Mediante call-template se puede invocar un template por su nombre (atributo name)
● Mediante la etiqueta with-param se pueden pasar parámetros. Su funcionamiento es igual que el de variable
● Ejemplos <xsl:call-template name=”listaCapitulos”>
<xsl:with-param name=”numerosCapitulo”>
1 2 3
</xsl:with-param>
</xsl:call-template>
Índice
1.Introducción
2.XPath
i. Introducción
ii. Rutas y Expresiones1.Nodos
2.Ejes
3.Predicados
iii.Tipos de dato, Funciones y Operadores
iv.XPath en Java
3.XSLT
i. Introducción
ii. Uso de XSLT
iii.Elementos
4.Referencias
Bibliografía
● Beginning XML, 4th Edition – D. Hunter et al.
● Professional XML – B. Evjen et al.
● World Wide Web Consortium (W3C)– http://www.w3.org/ - última visita 31/08/2012
● Lesson: Extensible Stylesheet Language Transfomations– http://docs.oracle.com/javase/tutorial/jaxp/xslt/intro.html - última visita
23/10/2012
● W3Schools:Tutoriales de XPath y de XSLT– http://www.w3schools.com/xsl/default.asp
– http://www.w3schools.com/xpath/default.asp