Pedro A. Castillo Valdivieso Universidad de...
Transcript of Pedro A. Castillo Valdivieso Universidad de...
0
XPathPedro A. Castillo Valdivieso
Universidad de Granada
La construcción de sitios web en el ámbito educativo
1
Guión
XPath. IntroducciónEl modelo de datos de XPathLocation PathsModo de trabajo para el tutorialSelección de nodosEjercicios
XM
L: L
a co
nst
rucc
ión
de
siti
os w
eben
el á
mbi
to e
duca
tivo
2
XPath. Introducción
Procesamiento de un documento XML basado en el acceso a cada parte que lo compone
Podemos guardar mucha información en un XML, pero para cada tipo de usuario debemos poder extraer la información de forma automática.
La selección de la información se harámediante XPath, y la transformación mediante XSLT
XM
L: L
a co
nst
rucc
ión
de
siti
os w
eben
el á
mbi
to e
duca
tivo
Introducción
3
XPath. IntroducciónX
ML:
La
con
stru
cció
n d
e si
tios
web
en e
l ám
bito
edu
cati
vo
Introducción
XSLT
Transformación del XML en HTML usando XSLT y XPath
XML HTML
XPath
4
XPath. Introducción
XPath = XML Path Language
Seleccionar y hacer referencia a texto, elementos, atributos y otra información contenida en un documento XML
Lenguaje de tipo declarativo, diferente a los lenguajes procedurales tipo C++, Java...
XM
L: L
a co
nst
rucc
ión
de
siti
os w
eben
el á
mbi
to e
duca
tivo
Introducción
5
Guión
XPath. IntroducciónEl modelo de datos de XPathLocation PathsModo de trabajo para el tutorialSelección de nodosEjercicios
XM
L: L
a co
nst
rucc
ión
de
siti
os w
eben
el á
mbi
to e
duca
tivo
6
El modelo de datos XPath
Construcción del árbol de nodos
Un documento XML pasa por el parser para construir el árbol de nodos:
Comienza en el nodo raízAcaba en los nodos hoja
XPath selecciona partes del documento XML basándose en la estructura en árbol
XM
L: L
a co
nst
rucc
ión
de
siti
os w
eben
el á
mbi
to e
duca
tivo
El modelo de datos XPath
/|+---libro
|+---titulo| +---(texto)El titulo|+---autor| +---(texto)Luisito|+---capitulo
7
La construcción del árbol de nodos
Ejemplo sencillo:
XM
L: L
a co
nst
rucc
ión
de
siti
os w
eben
el á
mbi
to e
duca
tivo
El modelo de datos XPath
<AAA><BBB/><DDD>
texto</DDD><CCC/>
</AAA>
/|+---AAA
|+---BBB|+---DDD| +--- texto|+---CCC
8
La construcción del árbol de nodos
Ejemplo :
XM
L: L
a co
nst
rucc
ión
de
siti
os w
eben
el á
mbi
to e
duca
tivo
El modelo de datos XPath
<libro><titulo>Dos por tres calles</titulo><autor>Josefa</autor><capitulo num=“1”>La primera calle<parrafo>texto</parrafo><parrafo>texto</parrafo>
</capitulo><capitulo num=“2” public=“si”>La segunda calle<parrafo>texto</parrafo>
...
/|+---libro
|+---titulo| +---(texto) Dos por tres calles|+---autor| +---(texto) Josefa|+---capitulo [num=1]
9
Tipos de nodos
Nodo raízNodo elementoNodo atributoNodo textoNodo comentarioNodo tipo instrucción de procesamiento
XM
L: L
a co
nst
rucc
ión
de
siti
os w
eben
el á
mbi
to e
duca
tivo
El modelo de datos XPath
10
Tipos de nodos: Raíz
Se identifica por /
Es diferente el nodo raíz del elemento raíz del documento:
/ hace referencia al nodo raíz del árbol, pero no al elemento raíz del documento XML
El nodo raíz del árbol contiene al elemento raíz del documentoXM
L: L
a co
nst
rucc
ión
de
siti
os w
eben
el á
mbi
to e
duca
tivo
El modelo de datos XPath
11
Tipos de nodos: Elemento
Un elemento del documento se convierte en nodo del árbol
Cada elemento tiene un nodo padre
Cada elemento tiene hijos (elementos, texto, atributos...)
XM
L: L
a co
nst
rucc
ión
de
siti
os w
eben
el á
mbi
to e
duca
tivo
El modelo de datos XPath
12
Tipos de nodos: Texto
Son los caracteres del documento que no están marcados con etiquetas
No puede tener hijos
XM
L: L
a co
nst
rucc
ión
de
siti
os w
eben
el á
mbi
to e
duca
tivo
El modelo de datos XPath
<libro><titulo>Mi primer libro</titulo>
<capitulo>El primero<parrafo>muchas cosas y otras</parrafo><parrafo>otras diferentes</parrafo>
</capitulo></libro>
13
Tipos de nodos: Atributo
Son etiquetas añadidas al elemento que los contiene
Consta de un nombre y un valor (cadena)
Pueden tener valor por defecto (si fue definido en el DTD)
XM
L: L
a co
nst
rucc
ión
de
siti
os w
eben
el á
mbi
to e
duca
tivo
El modelo de datos XPath
14
Tipos de nodos: otros
Nodos comentario.Nodos instrucciones de proceso.
Se puede acceder a ellos con la propiedad string-value
XM
L: L
a co
nst
rucc
ión
de
siti
os w
eben
el á
mbi
to e
duca
tivo
El modelo de datos XPath
15
Tipos de nodos: EjemploX
ML:
La
con
stru
cció
n d
e si
tios
web
en e
l ám
bito
edu
cati
vo
El modelo de datos XPath
<libro><titulo>Dos por tres calles</titulo><autor>Josefa</autor><capitulo num=“1”>La primera calle<parrafo>texto</parrafo><parrafo>texto</parrafo>
</capitulo><capitulo num=“2” public=“si”>La segunda calle<parrafo>texto</parrafo>
...
/|+---libro
|+---titulo| +---(texto) Dos por tres calles|+---autor| +---(texto) Josefa|+---capitulo [num=1]
Nodo raíz
Nodo elemento
Nodo atributo
Nodo texto
16
Guión
XPath. IntroducciónEl modelo de datos de XPathLocation PathsModo de trabajo para el tutorialSelección de nodosEjercicios
XM
L: L
a co
nst
rucc
ión
de
siti
os w
eben
el á
mbi
to e
duca
tivo
17
Location Paths. Introducción
Una instrucción de XPath se denomina expresión
Pueden incluir operaciones sobre los operandos:
Llamadas a funcionesCaminos de localización
XM
L: L
a co
nst
rucc
ión
de
siti
os w
eben
el á
mbi
to e
duca
tivo
Location Paths
18
Location Paths. Sintaxis
La sintaxis de un location path es similar a la usada para describir la ruta de directorios (en Linux o Unix)
/home/usuario/documentos/archivo
c:\cuenta\documentos\archivo
Pero el significado es muy diferenteXM
L: L
a co
nst
rucc
ión
de
siti
os w
eben
el á
mbi
to e
duca
tivo
Location Paths
19
Location Paths. Sintaxis
URL indica la ruta a un archivo particularXPath indica la ruta hasta varios nodos, basándose en la estructura del documento XML
Ejemplo :/home/juan/documentos
/libro/capitulo/parrafo
XM
L: L
a co
nst
rucc
ión
de
siti
os w
eben
el á
mbi
to e
duca
tivo
Location Paths
Referencia a un único directorio llamado
documentos que cuelga de /home/juan
Referencia a todos los elementos parrafo que cuelguen de cualquier
capitulo del libro
20
Location Paths. Sintaxis
Una expresión XPath no devuelve los elementos que cumplen el patrón de búsquedaLa expresión XPath devuelve una lista de referencias a dichos elementos
XM
L: L
a co
nst
rucc
ión
de
siti
os w
eben
el á
mbi
to e
duca
tivo
Location Paths
<libro><titulo>Mi primer libro</titulo><autor>Luisito</autor><capitulo>El primero<parrafo>muchas cosas y otras</parrafo><parrafo>otras diferentes</parrafo>
</capitulo></libro>
/libro/capitulo/parrafo
21
Location Paths. Nodo contexto
Un location path siempre tiene un nodo contextoEs similar al concepto de directorio actual:
ls ./juan/documentos
En Linux/Unix, si ponemos / al referenciar a un archivo estaremos indicando el path absoluto
En XPath, si la expresión comienza por / estamos dando un path absoluto, partiendo del raíz. Sino, estamos dando un camino relativo desde el nodo actual (nodo contexto)
XM
L: L
a co
nst
rucc
ión
de
siti
os w
eben
el á
mbi
to e
duca
tivo
Location Paths
22
Location Paths. Nodo contexto
Si se indica el camino completo, la búsqueda comienza en el nodo raízSi se indica un camino completo, se entiende que el path comienza en el nodo que en cada momento se está procesando
/libro/capitulo/parrafo
XM
L: L
a co
nst
rucc
ión
de
siti
os w
eben
el á
mbi
to e
duca
tivo
Location Paths
Al leer / se selecciona el nodo raíz como nodo contexto.Al leer libro se selecc. los elem libro que cuelgan del contexto (/)Al leer capitulo se selecc los elem capitulo que cuelgan del contexto (en ese momento es libro)Al leer parrafo se selecc los elem parrafo que cuelgan del contexto (en ese momento es capitulo)
23
Location Paths. Predicados
¿y si sólo queremos seleccionar un nodo que cumple ciertas características?
Podemos incluir predicados que especifican condiciones
Sintaxis (entre corchetes):/libro/capitulo[@num=“1”]/parrafo
XM
L: L
a co
nst
rucc
ión
de
siti
os w
eben
el á
mbi
to e
duca
tivo
Location Paths
Tomar el libro. Buscar los capítulos cuyo atributo num es igual a 1.Devolver todos los párrafos de esos capítulos.
24
¿qué devuelve una búsqueda XPath?
Al hacer la búsqueda mediante una expresión XPath, obtendremos un conjunto de nodos.Sólo se devuelven los nodos considerados, y no los hijos de dichos nodos.
/libro/capitulo
/libro/capitulo/parrafo
XM
L: L
a co
nst
rucc
ión
de
siti
os w
eben
el á
mbi
to e
duca
tivo
Location Paths
Devuelve los nodos capitulo (referencias) pero no lo que contengan los capitulos (los hijos)
Devuelve los nodos parrafo(referencias) pero no lo que contengan (los hijos)
25
¿qué devuelve una búsqueda XPath?X
ML:
La
con
stru
cció
n d
e si
tios
web
en e
l ám
bito
edu
cati
vo
Location Paths
<libro><titulo>Mi primer libro</titulo><autor>Luisito</autor><capitulo>El primero<parrafo>muchas cosas y otras</parrafo><parrafo>otras diferentes</parrafo>
</capitulo><capitulo>
..........</libro>
libro
capitulocapitulo
parrafo parrafo parrafo parrafo
Conjunto de nodos obtenido en la búsqueda XPath
/libro/capitulo
Nodo capitulo y nodos descendientes del mismo
26
Guión
XPath. IntroducciónEl modelo de datos de XPathLocation PathsModo de trabajo para el tutorialSelección de nodosEjercicios
XM
L: L
a co
nst
rucc
ión
de
siti
os w
eben
el á
mbi
to e
duca
tivo
27
Modo de trabajo en el tutorial
Comprobar que las expresiones XPath son correctas:
usar una hoja XSL (aplicada al doc.XML)
hacer nuestro propio programa (en Java)
usar programas disponibles (EditiX)
XM
L: L
a co
nst
rucc
ión
de
siti
os w
eben
el á
mbi
to e
duca
tivo
Modo de trabajo
28
Usar una hoja XSL (I)
Necesitamos el documento XML
XM
L: L
a co
nst
rucc
ión
de
siti
os w
eben
el á
mbi
to e
duca
tivo
Modo de trabajo: hoja XSL
<?xml version="1.0"?>
<?xml-stylesheet type="text/xsl" href="ej.xsl"?>
<libro>
<titulo>Mi primer libro</titulo><autor>Luisito</autor>
<capitulo>El primero<parrafo>muchas cosas y otras</parrafo><parrafo>otras diferentes</parrafo>
</capitulo>
</libro>
ej.xml
29
Usar una hoja XSL (I)
Necesitamos el documento XMLy la hoja XSL siguiente:
XM
L: L
a co
nst
rucc
ión
de
siti
os w
eben
el á
mbi
to e
duca
tivo
Modo de trabajo: hoja XSL
<?xml version="1.0"?><xsl:stylesheet version="1.0"
xmlns:xsl="http://www.w3.org/1999/XSL/Transform">
<xsl:template match="libro"><HTML><BODY><H1>Resultados:</H1><PRE>
<xsl:apply-templates select="/libro/titulo/text()"/></PRE>
</BODY></HTML></xsl:template></xsl:stylesheet>
ej.xsl
30
Usar una hoja XSL (I)X
ML:
La
con
stru
cció
n d
e si
tios
web
en e
l ám
bito
edu
cati
vo
Modo de trabajo: hoja XSL
/libro/titulo
31
Ejercicios. Usar una hoja XSL (I)X
ML:
La
con
stru
cció
n d
e si
tios
web
en e
l ám
bito
edu
cati
vo
Modo de trabajo: hoja XSL
http://mercurio.ugr.es/pedro/xpath/descargas/hojaxsl/
32
Hacer nuestro propio programa (II)
Disponemos de las librerías:javax.xml.parsers*javax.xml.xpath.*org.w3c.*org.xml.*
Y podemos crear fácilmente objetos que procesen documentos y expresiones:
XpathFactory.newInstance().newXPath()XMLDoc.getDocumentElement()xpath.compile(cad)expr.evaluate(elem,XPathConstants.STRING)
XM
L: L
a co
nst
rucc
ión
de
siti
os w
eben
el á
mbi
to e
duca
tivo
Modo de trabajo: nuestro programa
33
Hacer nuestro propio programa (II)X
ML:
La
con
stru
cció
n d
e si
tios
web
en e
l ám
bito
edu
cati
vo
Modo de trabajo: nuestro programa
import java.io.*;
import javax.xml.parsers.DocumentBuilderFactory;
import javax.xml.xpath.*;
import org.w3c.dom.Document;
import org.w3c.dom.Element;
import org.xml.sax.InputSource;
public class DemoXPath {
public DemoXPath() { }
public static void main(String[] args) {
if (args.length != 1) {
System.out.println("\nUSO: java DemoXPath doc.xml \n");
System.exit(0);
}
DemoXPath demoxpath = new DemoXPath();
continua...
34
Hacer nuestro propio programa (II)X
ML:
La
con
stru
cció
n d
e si
tios
web
en e
l ám
bito
edu
cati
vo
Modo de trabajo: nuestro programa
try {
System.out.print("\nIntroduce la expresion de busqueda: ");
BufferedReader stdin = new BufferedReader(new InputStreamReader(Syste
String busqueda = stdin.readLine();
XPath xpath = XPathFactory.newInstance().newXPath();
DocumentBuilderFactory factory = DocumentBuilderFactory.newInstance()
Document XMLDoc = factory.newDocumentBuilder().parse(
new InputSource(new FileInputStream( args[0] )));
Element element = XMLDoc.getDocumentElement();
XPathExpression exp = xpath.compile( busqueda );
System.out.println("=>\n" + (String)
exp.evaluate(element, XPathConstants.STRING) + "\n");
}catch (Exception ex) {
System.out.println("Error: " + ex.toString());
}}}
...continuación
35
Hacer nuestro propio programa (II)
Compilar: javac -classpath . DemoXPath.java
Ejecutar: java DemoXPath docum.xml
XM
L: L
a co
nst
rucc
ión
de
siti
os w
eben
el á
mbi
to e
duca
tivo
Modo de trabajo: nuestro programa
36
Ejercicios. Hacer nuestro programa (II)X
ML:
La
con
stru
cció
n d
e si
tios
web
en e
l ám
bito
edu
cati
vo
Modo de trabajo: nuestro programa
http://mercurio.ugr.es/pedro/xpath/descargas/java/
37
Descarga y uso de EditiX (III)
Existen editores XML muy completos que nos permiten aplicar expresiones XPath
http://www.editix.com/download.htmlhttp://mercurio.ugr.es/pedro/xpath/descargas
XM
L: L
a co
nst
rucc
ión
de
siti
os w
eben
el á
mbi
to e
duca
tivo
Modo de trabajo: EditiX
38
Descarga uso de EditiX (III)X
ML:
La
con
stru
cció
n d
e si
tios
web
en e
l ám
bito
edu
cati
vo
Modo de trabajo: EditiX
39
Descarga uso de EditiX (III)X
ML:
La
con
stru
cció
n d
e si
tios
web
en e
l ám
bito
edu
cati
vo
Modo de trabajo: EditiX
40
Descarga uso de EditiX (III)X
ML:
La
con
stru
cció
n d
e si
tios
web
en e
l ám
bito
edu
cati
vo
Modo de trabajo: EditiX
41
Ejercicios. EditiX (III)X
ML:
La
con
stru
cció
n d
e si
tios
web
en e
l ám
bito
edu
cati
vo
Modo de trabajo: EditiX
http://mercurio.ugr.es/pedro/xpath/descargas
42
Guión
XPath. IntroducciónEl modelo de datos de XPathLocation PathsModo de trabajo para el tutorialSelección de nodos
Tipos de hachaNodos testPredicados
Ejercicios
XM
L: L
a co
nst
rucc
ión
de
siti
os w
eben
el á
mbi
to e
duca
tivo
43
Selección de nodos
Veamos las diferentes formas de recorrer el árbol (hacer búsquedas)
Un hacha (AXE) selecciona nodos de acuerdo a algún patrón
Tipos de “hachas”
XM
L: L
a co
nst
rucc
ión
de
siti
os w
eben
el á
mbi
to e
duca
tivo
Selección de nodos
44
Tipos de hacha: Child
Es el hacha por defectoSe corresponde con la /
Ejemplos:
XM
L: L
a co
nst
rucc
ión
de
siti
os w
eben
el á
mbi
to e
duca
tivo
Seleccionar todos los elementos titulo de libro
/libro/titulo
Seleccionar el autor del libro
/libro/autor
Selección de nodos: tipos de hacha
45
Tipos de hacha: Attribute
Seleccionar los nodos atributo deseadosSe corresponde con la @Ejemplos:
XM
L: L
a co
nst
rucc
ión
de
siti
os w
eben
el á
mbi
to e
duca
tivo
Seleccionar el atributo num de capitulo/libro/capitulo/@num
Seleccionar el contenido de los capitulo con atributo public
/libro/capitulo[@public]/*
Seleccionar el contenido de los parrafo con atributo destacar igual a “si”
/libro/capitulo/parrafo[@destacar=“si”]
Selección de nodos: tipos de hacha
46
Tipos de hacha: Descendant
Seleccionar todos los nodos descendientes, y no solo los hijosSe corresponde con //Ejemplos:
XM
L: L
a co
nst
rucc
ión
de
siti
os w
eben
el á
mbi
to e
duca
tivo
Seleccionar todos los parrafo del libro/libro//parrafo
Seleccionar cualquier cosa que descienda de parrafo y tenga atributo href
//parrafo//*[@href]
Selección de nodos: tipos de hacha
47
Tipos de hacha: Self
Selecciona el nodo contextoSe corresponde con .
Ejemplos:
XM
L: L
a co
nst
rucc
ión
de
siti
os w
eben
el á
mbi
to e
duca
tivo
Seleccionar todos los elementos parrafo
//parrafo
Seleccionar los elementos parrafoa partir del nodo contexto
.//parrafo
Selección de nodos: tipos de hacha
48
Tipos de hacha: Parent
Realiza un paso hacia atrás en el árbolSe corresponde con ..
Ejemplos:
XM
L: L
a co
nst
rucc
ión
de
siti
os w
eben
el á
mbi
to e
duca
tivo
Los nodos que tienen un hijo de tipo parrafo//parrafo/..
Nodos capitulo que tienen algún hijo parrafo//parrafo/../../capitulo
//capitulo/parrafo/..
Selección de nodos: tipos de hacha
49
Tipos de hacha: Ancestor
Ancestor es a parent lo que descendant a childDevuelve todos los elementos de los que el nodo contexto es descendiente
Se corresponde con ancestor::Ejemplos:
XM
L: L
a co
nst
rucc
ión
de
siti
os w
eben
el á
mbi
to e
duca
tivo
Selección de nodos: tipos de hacha
Seleccionar los elementos que tienen entre susdescendientes algun parrafo
//parrafo/ancestor::*
50
Tipos de hacha: following
Devuelve los nodos que vienen a continuación del nodo contexto en el orden del XMLSe corresponde con following::Ejemplos:
XM
L: L
a co
nst
rucc
ión
de
siti
os w
eben
el á
mbi
to e
duca
tivo
Selección de nodos: tipos de hacha
Seleccionar el siguiente capitulo a aquel que tiene identificador igual a 2
/libro/capitulo[id=“2”]/following::capitulo
51
Tipos de hacha: preceding
Devuelve los nodos que vienen justo antes del nodo contexto en el orden del XMLSe corresponde con preceding::Ejemplos:
XM
L: L
a co
nst
rucc
ión
de
siti
os w
eben
el á
mbi
to e
duca
tivo
Selección de nodos: tipos de hacha
Seleccionar el capitulo anterior a aquel que tiene identificador igual a 2
/libro/capitulo[id=“2”]/preceding::capitulo
52
Selección. Nodos test
Son funciones que nos ayudarán a restringir las búsquedas
Algunas de estas funciones se pueden aplicar a todas las hachas vistasOtras funciones no se pueden aplicar a attribute
Tipos de “nodos test”
XM
L: L
a co
nst
rucc
ión
de
siti
os w
eben
el á
mbi
to e
duca
tivo
Selección de nodos: nodos test
53
Nodos test: *
Devuelve todos los nodos principalesNo devuelve texto, comentarios o instrucciones
Ejemplos:
XM
L: L
a co
nst
rucc
ión
de
siti
os w
eben
el á
mbi
to e
duca
tivo
Seleccionar todos los elementos principalesdescendientes de parrafo
//parrafo/*
Selección de nodos: nodos test
Devuelve SOLO los elementos que hay dentro
de todos los párrafos
54
Nodos test: node()
Devuelve todos los nodos de cualquier tipo
Ejemplos:
XM
L: L
a co
nst
rucc
ión
de
siti
os w
eben
el á
mbi
to e
duca
tivo
Seleccionar todos los elementos (cualquier tipo)descendientes de parrafo
//parrafo/node()
Selección de nodos: nodos test
Devuelve el texto y los elementos que hay dentro
de todos los párrafos
55
Nodos test: text()
Devuelve todos los nodos de tipo textoutilizado para ver los resultados de los ejemplos
Ejemplos:
XM
L: L
a co
nst
rucc
ión
de
siti
os w
eben
el á
mbi
to e
duca
tivo
Seleccionar el texto de todos los nodos parrafo//parrafo/text()
Seleccionar todo el texto que cuelga de todos los nodos parrafo
//parrafo//text()
Selección de nodos: nodos test
También devuelve el texto que haya dentro de los elementos que hay dentro de todos los párrafos
56
Nodos test: contains()
Devuelve los nodos que incluyen la subcadenaindicadaEjemplos:
XM
L: L
a co
nst
rucc
ión
de
siti
os w
eben
el á
mbi
to e
duca
tivo
Seleccionar los nodos parrafo cuyo texto incluye la subcadena “mor”
//parrafo[ contains( . , ‘mor’ ) ]
Selección de nodos: nodos test
57
Nodos test: starts-with()
Devuelve los nodos que comienzan con la subcadena indicadaEjemplos:
XM
L: L
a co
nst
rucc
ión
de
siti
os w
eben
el á
mbi
to e
duca
tivo
Seleccionar los nodos parrafo cuyo texto Comienza por la subcadena “El”
//parrafo[ starts-with( . , ‘El’ ) ]
Selección de nodos: nodos test
58
Nodos test: otros
comment()Selecciona cualquier nodo de tipo comentario
processing-instruction()Selecciona cualquier nodo de instrucción de proceso
XM
L: L
a co
nst
rucc
ión
de
siti
os w
eben
el á
mbi
to e
duca
tivo
Selección de nodos: nodos test
59
Selección. Predicados
Sabemos buscar y obtener los valores de atributos, pero ¿y si queremos buscar los elementos que tienen atributos?
Permiten restringir el conjunto de nodos seleccionados por un hacha a los que cumplen cierta condición
La condición se expresa entre corchetes
Podemos hacer composiciones de condiciones con los operadores AND, OR, NOT
XM
L: L
a co
nst
rucc
ión
de
siti
os w
eben
el á
mbi
to e
duca
tivo
Selección de nodos: predicados
60
Predicados. Ejemplos
Selección según una condición compleja:
XM
L: L
a co
nst
rucc
ión
de
siti
os w
eben
el á
mbi
to e
duca
tivo
Selección de nodos: predicados
Seleccionar todos los capitulo que tengan un parrafo que tenga algún elemento con atributo href
//capitulo[parrafo/*[@href]]
61
Predicados. Ejemplos
Especificar la negación de una condición:
XM
L: L
a co
nst
rucc
ión
de
siti
os w
eben
el á
mbi
to e
duca
tivo
Selección de nodos: predicados
Seleccionar todos los capitulo que NO tengan el atributo public
//capitulo[ not(@public) ]
62
Predicados. Ejemplos
La condición incluye el operador AND:
XM
L: L
a co
nst
rucc
ión
de
siti
os w
eben
el á
mbi
to e
duca
tivo
Selección de nodos: predicados
Buscar todos los capitulo que tengan un parrafoque tenga algún elemento con atributo hrefY el mismo capitulo tenga public a valor “si”
//capitulo [parrafo/*[@href]] [@public=“si”]
63
Predicados. Ejemplos
El operador OR separa dos expresiones XPath:
XM
L: L
a co
nst
rucc
ión
de
siti
os w
eben
el á
mbi
to e
duca
tivo
Selección de nodos: predicados
Buscar todos los capitulo que tengan un parrafoque tenga algún elemento con atributo hrefo bien todos los apendice
//capitulo [parrafo/*[@href]] | //apendice
64
Predicados con función de cardinalidad
Sirven para restringir basándose en la posición del elemento devuelto:
position()
//capitulo[ position()=2 ]
//capitulo[ 2 ]
XM
L: L
a co
nst
rucc
ión
de
siti
os w
eben
el á
mbi
to e
duca
tivo
Selección de nodos: predicados
65
Predicados con función de cardinalidad
Sirven para restringir basándose en la posición del elemento devuelto:
last()
//capitulo[ last()-1 ]
//capitulo[ not( position()=last() ) ]
XM
L: L
a co
nst
rucc
ión
de
siti
os w
eben
el á
mbi
to e
duca
tivo
Selección de nodos: predicados
66
Predicado con función de identificación
Para restringir basándose en el identificador del elemento devuelto:
id()
Sólo se puede usar en XML validados con un DTD en el que se especifique que el atributo ID es único
XM
L: L
a co
nst
rucc
ión
de
siti
os w
eben
el á
mbi
to e
duca
tivo
Selección de nodos: predicados
67
Predicados con funciones de cadena
contains()Devuelve los nodos que incluyen la subcadenaindicada
XM
L: L
a co
nst
rucc
ión
de
siti
os w
eben
el á
mbi
to e
duca
tivo
Seleccionar los nodos parrafo cuyo texto incluye la subcadena “mor”
//parrafo[ contains( . , ‘mor’ ) ]
Selección de nodos: predicados
68
Predicados con funciones de cadena
starts-with()Devuelve los nodos que comienzan con la subcadena indicada
XM
L: L
a co
nst
rucc
ión
de
siti
os w
eben
el á
mbi
to e
duca
tivo
Seleccionar los nodos parrafo cuyo texto Comienza por la subcadena “El”
//parrafo[ starts-with( . , ‘El’ ) ]
Selección de nodos: predicados
69
Ejemplos complejos (I)X
ML:
La
con
stru
cció
n d
e si
tios
web
en e
l ám
bito
edu
cati
vo
Selección de nodos: ejemplos
70
Ejemplos complejos (II)X
ML:
La
con
stru
cció
n d
e si
tios
web
en e
l ám
bito
edu
cati
vo
Selección de nodos: ejemplos
71
Ejemplos complejos (III)X
ML:
La
con
stru
cció
n d
e si
tios
web
en e
l ám
bito
edu
cati
vo
Selección de nodos: ejemplos
72
Ejemplos complejos (IV)X
ML:
La
con
stru
cció
n d
e si
tios
web
en e
l ám
bito
edu
cati
vo
Selección de nodos: ejemplos
73
Ejemplos complejos (V)X
ML:
La
con
stru
cció
n d
e si
tios
web
en e
l ám
bito
edu
cati
vo
Selección de nodos: ejemplos
74
Ejemplos complejos (VI)X
ML:
La
con
stru
cció
n d
e si
tios
web
en e
l ám
bito
edu
cati
vo
Selección de nodos: ejemplos
75
Ejemplos complejos (VII)X
ML:
La
con
stru
cció
n d
e si
tios
web
en e
l ám
bito
edu
cati
vo
Selección de nodos: ejemplos
76
Ejemplos complejos (VIII)X
ML:
La
con
stru
cció
n d
e si
tios
web
en e
l ám
bito
edu
cati
vo
Selección de nodos: ejemplos
77
Guión
XPath. IntroducciónEl modelo de datos de XPathLocation PathsModo de trabajo para el tutorialSelección de nodosEjercicios
XM
L: L
a co
nst
rucc
ión
de
siti
os w
eben
el á
mbi
to e
duca
tivo
78
Ejercicios
Entrar en la web:
http://mercurio.ugr.es/pedro/xpath/
y llevar a cabo los ejercicios de autoevaluaciónusando el documento XML de ejemplo (universidad y alumnos)
XM
L: L
a co
nst
rucc
ión
de
siti
os w
eben
el á
mbi
to e
duca
tivo
Ejercicios
79
EjerciciosX
ML:
La
con
stru
cció
n d
e si
tios
web
en e
l ám
bito
edu
cati
vo
<?xml version="1.0" encoding="ISO-8859-1"?> <universidad><nombre>Universidad de Victoria</nombre><pais>España</pais> <carreras><carrera id="c01"><nombre>I.T. Informática</nombre><plan>2003</plan><creditos>250</creditos><centro>Escuela de Informática</centro></carrera>
</carreras> <asignaturas><asignatura id="a01" titulacion="c01"><nombre>Ofimática</nombre><creditos_teoricos>3</creditos_teoricos><creditos_practicos>1.5</creditos_practicos><trimestre>1</trimestre></asignatura>
</asignaturas> <alumnos> <alumno id="e01"><apellido1>Rivas</apellido1> <estudios> <carrera codigo="c01"/><asignaturas> <asignatura codigo="a01"/> </asignaturas> </estudios></alumno>
</universidad>