80
0 XPath Pedro A. Castillo Valdivieso Universidad de Granada La construcción de sitios web en el ámbito educativo

Pedro A. Castillo Valdivieso Universidad de Granadamercurio.ugr.es/pedro/tutoriales/cursos/XPath/presentacion_como... · Modo de trabajo para el tutorial ... Pueden incluir operaciones

  • Upload
    vanthu

  • View
    214

  • Download
    0

Embed Size (px)

Citation preview

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>