Ud7. - Lmsgi PDF
Ud7. - Lmsgi PDF
Ud7. - Lmsgi PDF
UD7.-
Conversión y adaptación de documentos
XML.
Mª Ángeles Sánchez 1
TÉCNICAS DE TRANSFORMACIÓN DE
DOCUMENTOS XML (1/2)
Mª Ángeles Sánchez
TÉCNICAS DE TRANSFORMACIÓN DE
DOCUMENTOS XML (2/2)
Las tecnologías que entran en juego en la transformación
de documentos son:
• XSLT: permite definir el modo de transformar un
documento XML en otro.
• XSL-FO: Se utiliza para transformar XML en un formato
legible e imprimible por una persona, por ejemplo en un
documento PDF.
• Xpath: permite el acceso a los diversos componentes
de un documento XML
La parte de transformaciones ganó en importancia, y se
llega a la terminología actual que es XSL y comprende las
3
anteriores.
Mª Ángeles Sánchez
XPATH
u Una expresión XPath es un predicado que se aplica sobre
una estructura de árbol correspondiente a la jerarquía de los
datos de un documento XML, y devuelve todo lo que encaja
con ese predicado.
u Es un estándar diferente de XML, aprobado por el W3C, que
nos permite acceder a partes de un documento XML
basándonos en las relaciones de parentesco entre los nodos
del documento.
u Su notación es similar a las de las rutas de los ficheros.
u Inicialmente se creo para utilizarlo con XLST, pero en la
actualidad se utiliza también con XML Schema, Xquery, Xlink,
Xpointer, Xforms, etc...
4
Mª Ángeles Sánchez
VERSIONES DE XPATH
Mª Ángeles Sánchez
XPATH: Términos básicos (1/2)
• Nodo raíz, es el nodo que contiene al ejemplar del fichero
XML. No debe confundirse con el elemento raíz del
documento, ya que éste último está por debajo de él. Se
identifica por “/”.
• Nodos elemento, son cada uno de los elementos del
documento XML. Todos ellos tienen un elemento padre, el
padre del elemento raíz, es decir del ejemplar, es el nodo raíz
del documento. Pueden tener identificadores únicos, para ello
es necesario que un atributo esté definido de ese modo en
un DTD o un fichero XSDasociado, esto nos permite
referenciar dicho elemento de forma mucho más directa.
• Nodos texto, son aquellos caracteres del documento que no
están marcados con ninguna etiqueta. Este tipo de nodos no
tienen hijos. 6
Mª Ángeles Sánchez
XPATH: Términos básicos (2/2)
• Nodos atributo, no se consideran hijos del elemento al que están
asociados sino etiquetas añadidas al nodo elemento. Aquellos atributos
que tengan un valor asignado en el esquema asociado, se tratarán como si
ese valor se le hubiese dado al escribir el documento XML. Para las
definiciones de los espacios de nombre y para aquellos atributos que se
han definido con la propiedad #IMPLIED en su DTD no se crean nodos.
• Nodos de comentario y de instrucciones de proceso, son los nodos
que se generan para los elementos con comentarios e instrucciones de
proceso.
• Nodo actual, es aquél al que nos referimos cuando se evalúa una
expresión en Xpath.
• Nodo contexto, cada expresión está formada por subexpresiones que se
van evaluando antes de resolver la siguiente. El conjunto de nodos
obtenido tras evaluar una expresión y que se utiliza para evaluar la
siguiente es el nuevo contexto.
• Tamaño del contexto, es el número de nodos que se están evaluando en
un momento dado en una expresión Xpath. 7
Mª Ángeles Sánchez
XPATH: Resultados de la evaluación de una expresión
¿Cuáles son los resultados que da la evaluación de una expresión Xpath?
Podemos obtener cuatro tipos de resultados diferentes:
• Un conjunto de nodos que no está ordenado, node-set.. Se considera que
todos los elementos de un conjunto de nodos son hermanos,
independientemente de lo que fuesen originalmente. Aunque los hijos de los
nodos que forman un conjunto de nodos son accesibles, los subárboles de
un nodo no se consideran elementos del conjunto. Los nodos pueden ser de
7 tipos diferentes:
Ø Elemento.
Ø Atributo.
Ø Texto.
Ø Espacio de nombres.
Ø Instrucción de procesamiento.
Ø Comentario.
Ø Raíz.
• Booleano.
• Número. 8
• Cadena.
Mª Ángeles Sánchez
XPATH: Expresiones (1/2)
¿Cuáles son los tokens que podemos utilizar en una
expresión XPath?
• Operadores: and, or, mod, div, *, /, //, |, +, -, =, !=, <, >, <=, >=.
• Nombres de función.
• Denominación de ejes: ancestor, ancestor-or-self-atribute,
child, descendant, descendant-or-self, following, following-
sibling, namespace, parent, preceding, preceding-sibling, self.
• Literales, se ponen entre comillas dobles o simples. Pueden
anidarse alternando el tipo de comillas.
• Números.
• Referencias a variables, para lo que se utiliza la
sintaxis: $nombreVariable
10
Mª Ángeles Sánchez
XPATH: Ruta de localización (1/3)
11
Mª Ángeles Sánchez
XPATH: Ruta de localización (2/3)
Las rutas de localización básicas son:
• La ruta de localización del nodo raíz del documento, es la barra
diagonal “/”. Se trata de una ruta absoluta, porque siempre significa lo
mismo independientemente de la posición del procesador en el
documento de entrada al aplicar la regla.
• Localización de un elemento, selecciona todos los hijos del nodo de
contexto con el nombre especificado. Los elementos a los que se refiera
dependerán de la localización del nodo de contexto, por lo que es una
ruta relativa. En el caso de que el nodo contexto no tenga ningún nodo
hijo con esa denominación, el valor dela ruta de localización será un
elemento vacío.
• Localización de atributos, para referirnos a ellos en XPath, se utiliza el
símbolo “@” seguido del nombre del atributo deseado.
• Localización de espacios de nombres, no se tratan explícitamente.
• Localización de comentarios.
• Localización de nodos de texto.
• Localización de instrucciones de procesamiento. 12
Mª Ángeles Sánchez
XPATH: Ruta de localización (3/3)
¿Cómo podemos comparar distintos elementos y tipos de
nodo simultáneamente? Utilizando alguno de los tres
comodines mostrados a continuación:
Mª Ángeles Sánchez
XPATH: Predicado(1/3)
Es una expresión booleana que añade un nivel de verificación
al paso de localización.
Mª Ángeles Sánchez
XPATH: Predicado(2/3)
Veamos que es lo que podemos incluir en un predicado.
Mª Ángeles Sánchez
XPATH: Predicado(3/3)
2. Nodos test, permiten restringir lo que devuelve una expresión Xpath.
Podemos agruparlos en función de los ejes a los que se puede aplicar.
Varios predicados pueden unirse mediante los operadores lógicos and, or o not.
16
Mª Ángeles Sánchez
XPATH: Funciones(1/2)
• boolean(), al aplicarla sobre un conjunto de nodos devuelve true si no es
vacío.
• not(), al aplicarla sobre un predicado devuelve true si el predicado es falso , y
falso si el predicado es true.
• true(), devuelve el valor true.
• false(), devuelve el valor false.
• count(), devuelve el número de nodos que forman un conjunto de nodos.
• name(), devuelve un nombre de un nodo.
• local-name(), devuelve el nombre del nodo actual o del primer nodo de un
conjunto de nodos.
• namespace-uri(), devuelve el URI del nodo actual o del primer nodo de un
conjunto dado.
• position(), devuelve la posición de un nodo en su contexto comenzando en 1.
Por ejemplo, para seleccionar los dos primeros elementos de tipo elemento de
un fichero XML pondremos: //elemento[position()<=2]
• 17
Mª Ángeles Sánchez
XPATH: Funciones(2/2)
• last(), Devuelve el último elemento del conjunto dado.
• normalize-space(), permite normalizar los espacios de una cadena de texto,
es decir, si se introduce una cadena donde hay varios espacios consecutivos,
esta función lo sustituye por uno solo.
• string(), es una función que convierte un objeto en una cadena. Los valores
numéricos se convierten en la cadena que los representa teniendo en cuenta
que los positivos pierden el signo. Los valores booleanos se convierten en la
cadena que representa su valor, esto es “true” o “false”.
• concat(), devuelve dos cadenas de texto concatenadas. El ejemplo siguiente
devuelve “Xpath permite obtener datos de un fichero XML”.
concat('XPath', 'permite obtener datos de un fichero XML')
• string-length(), devuelve la cantidad de caracteres que forman una cadena
de caracteres.
• sum(), devuelve la suma de los valores numéricos de cada nodo en un
conjunto de nodos determinado.
• 18
Mª Ángeles Sánchez
XPATH: Accesos a atributos
19
Mª Ángeles Sánchez
XPATH: Accesos a elementos de otro
documento XML
Además de acceder a los datos del fichero XML con el que se
está trabajando directamente, es útil poder acceder a los datos
de otros ficheros.
Mª Ángeles Sánchez
AUTOEVALUACIÓN
¿Cuál de estas afirmaciones es correcta?
Mª Ángeles Sánchez
AUTOEVALUACIÓN: Solución
¿Cuál de estas afirmaciones es correcta?
Mª Ángeles Sánchez
VAMOS A PRACTICAR…
23
Mª Ángeles Sánchez
Ejemplo 1: DOCUMENTO XML
<?xml version="1.0" encoding="UTF-8"?>
<biblioteca>
<libro>
<titulo>La vida está en otra parte</titulo>
<autor>Milan Kundera</autor>
<fechaPublicacion año="1973"/>
</libro>
<libro>
<titulo>Pantaleón y las visitadoras</titulo>
<autor fechaNacimiento="28/03/1936">Mario Vargas Llosa</autor>
<fechaPublicacion año="1973"/>
</libro>
<libro>
<titulo>Conversación en la catedral</titulo>
<autor fechaNacimiento="28/03/1936">Mario Vargas Llosa</autor>
<fechaPublicacion año="1969"/>
</libro>
</biblioteca>
24
Mª Ángeles Sánchez
Ejemplo 1: GRAFO DEL DOCUMENTO XML
25
Mª Ángeles Sánchez
Ejemplo 1: Expresiones XPath
Eje (en inglés, axis)
El eje nos permite seleccionar un subconjunto de nodos del documento y
corresponde a recorridos en el árbol del documento. Los nodos elemento se
indican mediante el nombre del elemento. Los nodos atributo se indican mediante
@ y el nombre del atributo.
1. /biblioteca/libro/autor
2. /autor
3. /biblioteca/autor
4. /biblioteca/libro/autor/@fechaNacimiento
5. /biblioteca/libro/@fechaNacimiento
26
Mª Ángeles Sánchez
Ejemplo 1: Expresiones XPath
//: indica "descendiente" (hijos, hijos de hijos, etc.).
1. /biblioteca//autor
2. //autor
3. //autor//libro
4. //@año
1. /biblioteca/libro/autor/@fechaNacimiento/..
2. //@fechaNacimiento/../..
1. //autor|//titulo
2. //autor|//titulo|//@año
27
Mª Ángeles Sánchez
Ejemplo 1: Expresiones XPath
Predicado (en inglés, predicate)
El predicado se escribe entre corchetes, a continuación del eje. Si el eje ha
seleccionado unos nodos, el predicado permite restringir esa selección a los que
cumplan determinadas condiciones.
1. //autor[@fechaNacimiento]
28
Mª Ángeles Sánchez
Ejemplo 1: Expresiones XPath
[condicion]: selecciona los nodos que cumplen la condición.
1. //fechaPublicacion[@año>1970]
2. //libro[autor="Mario Vargas Llosa"]
3. //@año[.>1970]
4. //autor[.="Mario Vargas Llosa"]
5. //libro[autor="Mario Vargas Llosa" and fechaPublicacion/@año="1973"]
6. //libro[autor="Mario Vargas Llosa" or fechaPublicacion/@año="1973"]
7. //libro[autor="Mario Vargas Llosa"][fechaPublicacion/@año="1973"]
3. //libro//node()
Mª Ángeles Sánchez
Ejemplo 1: Expresiones XPath
/text():selecciona únicamente el texto contenido en el nodo.
//text(): selecciona únicamente el texto contenido en el nodo y todos sus
descendientes.
1. //autor/text()
2. //libro/text()
3. //libro//text()
Mª Ángeles Sánchez
EJERCICIOS:
31
Mª Ángeles Sánchez
SOLUCIÓN EJERCICIOS: (1/3)
Mª Ángeles Sánchez
SOLUCIÓN EJERCICIOS: (2/3)
3. Obtener los títulos de los libros publicados el mismo
año que la novela "La vida está en otra parte".
//libro[fechaPublicacion/@año=//libro[titulo="La vida está en otra
parte"]/fechaPublicacion/@año]/titulo
33
Mª Ángeles Sánchez
SOLUCIÓN EJERCICIOS: (3/3)
5. Obtener el autor que ha publicado libros en 1969.
//libro[fechaPublicacion/@año=1969]/autor
34
Mª Ángeles Sánchez
1º DAM (LMSGI)
UD7.-
Conversión y adaptación de documentos
XML.
Mª Ángeles Sánchez 35