XPath

45
Contenidos Antecedentes Sintaxis XPath Localizaciones en XPath Funciones predefinidas en XPath XPath 2.0 XPath Jose Emilio Labra Gayo Noviembre 2006 Jose Emilio Labra Gayo XPath

Transcript of XPath

Page 1: XPath

Contenidos Antecedentes Sintaxis XPath Localizaciones en XPath Funciones predefinidas en XPath XPath 2.0

XPath

Jose Emilio Labra Gayo

Noviembre 2006

Jose Emilio Labra Gayo

XPath

Page 2: XPath

Contenidos Antecedentes Sintaxis XPath Localizaciones en XPath Funciones predefinidas en XPath XPath 2.0

Contenidos

Antecedentes

Sintaxis XPath

Localizaciones en XPath

Funciones predefinidas en XPathConversion de tiposBooleanasMatematicasCadenasConjuntos de nodos

XPath 2.0

Jose Emilio Labra Gayo

XPath

Page 3: XPath

Contenidos Antecedentes Sintaxis XPath Localizaciones en XPath Funciones predefinidas en XPath XPath 2.0

Evolucion de XPath

I Desarrollado en 1999 como parte de XSL (eXtensibleStylesheet Language)

I La especificacion de XSL se dividio en:I XPath: Lenguaje para identificar nodos del arbolI XSLT: Lenguaje para transformar documentos XMLI XSL-FO: Lenguaje para definir objetos de formateo, paginas y

contenidos de paginas.

I XPath se independizo como una notacion para navegar por elarbol de un documento XML.

I Se utiliza en: XQuery, XPointer, XML Schema, Schematron,etc.

I XPath 2.0 propuesto en 2005

Jose Emilio Labra Gayo

XPath

Page 4: XPath

Contenidos Antecedentes Sintaxis XPath Localizaciones en XPath Funciones predefinidas en XPath XPath 2.0

Lenguaje XPath

No tiene sintaxis XMLTrabaja sobre el arbol del documentoLa version XPath 1.0 tiene 4 tipos de datos:

I Booleanos

I Cadenas

I Numeros

I Conjuntos de nodos

Jose Emilio Labra Gayo

XPath

Page 5: XPath

Contenidos Antecedentes Sintaxis XPath Localizaciones en XPath Funciones predefinidas en XPath XPath 2.0

Arbol del documento

< t i t u l o>Alba</ t i t u l o><ve r so>Mi corazon op r im ido</ ve r so><ve r so>s i e n t e j un t o a l a a l bo r ada</ ve r so><ve r so>e l d o l o r de su s amores . . .</ ve r so></poema>

Jose Emilio Labra Gayo

XPath

Page 6: XPath

Contenidos Antecedentes Sintaxis XPath Localizaciones en XPath Funciones predefinidas en XPath XPath 2.0

Tipos de nodos

Existen 7 tipos de nodos

1. Nodo raız

2. Elementos

3. Atributos

4. Comentarios

5. Instrucciones de procesamiento

6. Texto

7. Espacios de nombres

Jose Emilio Labra Gayo

XPath

Page 7: XPath

Contenidos Antecedentes Sintaxis XPath Localizaciones en XPath Funciones predefinidas en XPath XPath 2.0

Expresiones XPath

I Las expresiones XPath suelen utilizarse en valores de atributosXML

I Se aplican las normas para codificar cadenas en XML

// t i t u l o | // v e r s o

I Se pueden alternar comillas simples/dobles o codificarlasmediante &quot; o &apos;

// t i t u l o | // v e r s o

I Se usan diversas abreviaciones para facilitar la escritura

Jose Emilio Labra Gayo

XPath

Page 8: XPath

Contenidos Antecedentes Sintaxis XPath Localizaciones en XPath Funciones predefinidas en XPath XPath 2.0

Expresiones XPath (1/2)

Tipos de expresiones:

I Union de 2 conjuntos de nodos mediante |.

// t i t u l o | // v e r s o

I Llamada a una variable.

$pepe

I Valor literal: una cadena o un numero.

’ Hola ’ 23 .45 ”Adios ”

Jose Emilio Labra Gayo

XPath

Page 9: XPath

Contenidos Antecedentes Sintaxis XPath Localizaciones en XPath Funciones predefinidas en XPath XPath 2.0

Expresiones XPath (2/2)

Tipos de expresiones:

I Llamada a una funcion u operador.

count (// v e r s o )

I Ruta de localizacion.

/poemas/poema/ v e r s o

Jose Emilio Labra Gayo

XPath

Page 10: XPath

Contenidos Antecedentes Sintaxis XPath Localizaciones en XPath Funciones predefinidas en XPath XPath 2.0

Valor de una expresion

El valor de una expresion puede ser:

I Una cadena

I Un numero

I Un valor booleano

I Un conjunto de nodos

En XPath 2.0 se substituyen conjuntos de nodos por secuencias engeneral

Jose Emilio Labra Gayo

XPath

Page 11: XPath

Contenidos Antecedentes Sintaxis XPath Localizaciones en XPath Funciones predefinidas en XPath XPath 2.0

Contexto de evaluacion

I Las expresiones se evaluan en funcion de un contextoI El contexto contiene la siguiente informacion:

I Nodo actual del contextoI Posicion (entero)I Tamano (entero)

I Otra informacion del contextoI Valores de variables (no hay asignacion destructiva)I Biblioteca de funcionesI Declaraciones de espacios de nombres

Jose Emilio Labra Gayo

XPath

Page 12: XPath

Contenidos Antecedentes Sintaxis XPath Localizaciones en XPath Funciones predefinidas en XPath XPath 2.0

Ruta de localizacion

I Una ruta se compone de varios pasos separados por /

/poema/ v e r s o

I La ruta puede ser:I Relativa: se evalua desde el nodo de contextoI Absoluta: se evalua desde en nodo raız. Comienza por /

Jose Emilio Labra Gayo

XPath

Page 13: XPath

Contenidos Antecedentes Sintaxis XPath Localizaciones en XPath Funciones predefinidas en XPath XPath 2.0

Pasos de localizacion

I Cada paso se compone de:I Un ejeI Una prueba de nodoI Opcionalmente, varios predicados

I Sintaxis: eje :: pruebaNodo [pred1][pred2]...

I Ejemplo:/descendant::verso[contains(.,’anochecer’)]

Jose Emilio Labra Gayo

XPath

Page 14: XPath

Contenidos Antecedentes Sintaxis XPath Localizaciones en XPath Funciones predefinidas en XPath XPath 2.0

Ejes

I child:: Hijos directos del nodo actualI parent:: Padre del nodo actualI descendant:: DescendientesI ancestor:: AntecesoresI descendant-or-self:: Descendientes incluido el nodo

actualI ascestor-or-self:: Antecesores incluido el nodo actualI following:: Los nodos siguientes (incluidos los

descencientes)I preceding:: Los precedentes (excluyendo los antecesores)I following-sibling:: Hermanos siguientesI preceding-sibling:: Hermanos precedentes

Jose Emilio Labra Gayo

XPath

Page 15: XPath

Contenidos Antecedentes Sintaxis XPath Localizaciones en XPath Funciones predefinidas en XPath XPath 2.0

Eje child

Jose Emilio Labra Gayo

XPath

Page 16: XPath

Contenidos Antecedentes Sintaxis XPath Localizaciones en XPath Funciones predefinidas en XPath XPath 2.0

Eje parent

Jose Emilio Labra Gayo

XPath

Page 17: XPath

Contenidos Antecedentes Sintaxis XPath Localizaciones en XPath Funciones predefinidas en XPath XPath 2.0

Eje ancestor

Jose Emilio Labra Gayo

XPath

Page 18: XPath

Contenidos Antecedentes Sintaxis XPath Localizaciones en XPath Funciones predefinidas en XPath XPath 2.0

Eje descendant

Jose Emilio Labra Gayo

XPath

Page 19: XPath

Contenidos Antecedentes Sintaxis XPath Localizaciones en XPath Funciones predefinidas en XPath XPath 2.0

Eje following-sibling

Jose Emilio Labra Gayo

XPath

Page 20: XPath

Contenidos Antecedentes Sintaxis XPath Localizaciones en XPath Funciones predefinidas en XPath XPath 2.0

Eje preceding-sibling

Jose Emilio Labra Gayo

XPath

Page 21: XPath

Contenidos Antecedentes Sintaxis XPath Localizaciones en XPath Funciones predefinidas en XPath XPath 2.0

Eje following

Jose Emilio Labra Gayo

XPath

Page 22: XPath

Contenidos Antecedentes Sintaxis XPath Localizaciones en XPath Funciones predefinidas en XPath XPath 2.0

Eje preceding

Jose Emilio Labra Gayo

XPath

Page 23: XPath

Contenidos Antecedentes Sintaxis XPath Localizaciones en XPath Funciones predefinidas en XPath XPath 2.0

Ejes (II)

I attribute:: Atributos del nodo actual

I namespace:: Nodos de espacio de nombres

I self:: Localiza el nodo actual

Jose Emilio Labra Gayo

XPath

Page 24: XPath

Contenidos Antecedentes Sintaxis XPath Localizaciones en XPath Funciones predefinidas en XPath XPath 2.0

Prueba de nodo

I nombre se verifica para todos los nodos que tienen ese nombre

I * todos los nodos del tipo del eje

I node() cualquier nodo (sea del tipo que sea)

I text() nodos de tipo texto

I comment() nodos de tipo comentario

I processing-instruction() instrucciones de procesamiento

Jose Emilio Labra Gayo

XPath

Page 25: XPath

Contenidos Antecedentes Sintaxis XPath Localizaciones en XPath Funciones predefinidas en XPath XPath 2.0

Predicados

Un predicado es una funcion booleana que actua como un filtroEjemplo: /descendant::verso[position()=2]Puede haber mas de un predicado y el orden es significativo.Ejemplo:/descendant::verso[position()=2][contains(.,’de’)]/descendant::verso[contains(.,’de’)][position()=2]

Jose Emilio Labra Gayo

XPath

Page 26: XPath

Contenidos Antecedentes Sintaxis XPath Localizaciones en XPath Funciones predefinidas en XPath XPath 2.0

Abreviaturas

I child:: es el eje por defecto

I attribute:: equivale a @

I . equivale a self::node()

I .. equivale a parent::node()

I // es /descendant-or-self::node()/

I [position()=no] equivale a [no]

Jose Emilio Labra Gayo

XPath

Page 27: XPath

Contenidos Antecedentes Sintaxis XPath Localizaciones en XPath Funciones predefinidas en XPath XPath 2.0

Ejercicio

Paıses Europeos

En este fichero se muestra informacion sobre paıses de Europa enformato XMLConstruir expresiones XPath para realizar las siguientes consultas

I Obtener el nombre del continente

I Obtener informacion sobre Espana

I Obtener PIB de Espana

I Obtener paıses con mas de 40 millones de habitantes

I Obtener nombres de paıses con PIB mayor que Espana

Puede utilizarse el programa XPath Explorer

Jose Emilio Labra Gayo

XPath

Page 28: XPath

Contenidos Antecedentes Sintaxis XPath Localizaciones en XPath Funciones predefinidas en XPath XPath 2.0

Conversion de tipos

string()

Convierte a cadena de texto

I Si es un numero, se devuelve su representacion como cadena(para controlar el formato, es preferible, format-number

I Si es booleano, devuelve true o false

I Si es un conjunto de nodos, se aplica al primer nodo

I Si es un nodo, devuelve el valor de cadena de dicho nodo

Jose Emilio Labra Gayo

XPath

Page 29: XPath

Contenidos Antecedentes Sintaxis XPath Localizaciones en XPath Funciones predefinidas en XPath XPath 2.0

Conversion de tipos

number()

Convierte a un numero

I Si es una cadena, trata de analizarla para convertirla a numero

I Si es un booleano, devuelve 1 si es true y 0 si es false

I Si es un conjunto de nodos, se convierte primero a cadenamediante string()

Jose Emilio Labra Gayo

XPath

Page 30: XPath

Contenidos Antecedentes Sintaxis XPath Localizaciones en XPath Funciones predefinidas en XPath XPath 2.0

Conversion de tipos

boolean()

Convierte a un valor booleano

I Si es un numero, es true si es distinto de cero

I Si es un conjunto de nodos, es true si contiene algun nodo.

I Si es una cadena, es true si no es la cadena vacıa

Jose Emilio Labra Gayo

XPath

Page 31: XPath

Contenidos Antecedentes Sintaxis XPath Localizaciones en XPath Funciones predefinidas en XPath XPath 2.0

Booleanas

Funciones booleanas

XPath incluye los operadores and y orTambien incluye la funcion not()

Jose Emilio Labra Gayo

XPath

Page 32: XPath

Contenidos Antecedentes Sintaxis XPath Localizaciones en XPath Funciones predefinidas en XPath XPath 2.0

Matematicas

Funciones matematicas

XPath contiene los operadores matematicos habituales: +, - (debeestar precedido de un espacio), *, div (la division no es con / ) ymodTambien incluye los operadores de comparacion: =, !=, <, >, <=, >=Otras funciones matematicas: sum(), floor(), ceiling(),round()

Jose Emilio Labra Gayo

XPath

Page 33: XPath

Contenidos Antecedentes Sintaxis XPath Localizaciones en XPath Funciones predefinidas en XPath XPath 2.0

Cadenas

Funciones de cadenas: concat

I concat(cad1,cad2,cad*) devuelve el resultado deconcatenar sus argumentos

I Ejemplo: concat(’uno’,’dos’) = ’unodos’

Jose Emilio Labra Gayo

XPath

Page 34: XPath

Contenidos Antecedentes Sintaxis XPath Localizaciones en XPath Funciones predefinidas en XPath XPath 2.0

Cadenas

Funciones de cadenas: substring

I substring(cad,pos,long?) devuelve la subcadena de cada partir de la posicion pos y de longitud long

I Ejemplo: substring(’camina’,3) = ’mina’

I Ejemplo: substring(’camina’,3,2) = ’mi’

Jose Emilio Labra Gayo

XPath

Page 35: XPath

Contenidos Antecedentes Sintaxis XPath Localizaciones en XPath Funciones predefinidas en XPath XPath 2.0

Cadenas

Funciones de cadenas: contains

I contains(cad1,cad2) devuelve true si cad1 contiene lacadena cad2

I Ejemplo: contains(’camina’,’ca’) = true

Jose Emilio Labra Gayo

XPath

Page 36: XPath

Contenidos Antecedentes Sintaxis XPath Localizaciones en XPath Funciones predefinidas en XPath XPath 2.0

Cadenas

Funciones de cadenas: starts-with

I starts-with(cad1,cad2) devuelve true si cad1 comienzacon la cadena cad2

I Ejemplo: starts-with(’camina’,’ca’) = true

I NOTA: En XPath 1.0 no existe ends-with

Jose Emilio Labra Gayo

XPath

Page 37: XPath

Contenidos Antecedentes Sintaxis XPath Localizaciones en XPath Funciones predefinidas en XPath XPath 2.0

Cadenas

Funciones de cadenas: substring-before/after

I substring-before(cad1,cad2) devuelve el trozo de cadenade cad1 anterior a cad2

I Ejemplo: substring-before(’camina’,’mi’) = ’ca’

I substring-after(cad1,cad2) devuelve el trozo de cadenade cad1 posterior a cad2

I Ejemplo: substring-after(’camina’,’mi’) = ’na’

Jose Emilio Labra Gayo

XPath

Page 38: XPath

Contenidos Antecedentes Sintaxis XPath Localizaciones en XPath Funciones predefinidas en XPath XPath 2.0

Cadenas

Funciones de cadenas: string-length

I string-length(cad) devuelve la longitud de cad

I Ejemplo: string-length(’camina’) = 6

Jose Emilio Labra Gayo

XPath

Page 39: XPath

Contenidos Antecedentes Sintaxis XPath Localizaciones en XPath Funciones predefinidas en XPath XPath 2.0

Cadenas

Funciones de cadenas: normalize

I normalize-space(cad) devuelve el resultado de normalizarcad eliminando espacios en blanco redundantes

I Ejemplo:

no rma l i z e−space ( ’ un e s p a c i o l a r g o ’ ) = ’ un e s p a c i o l a r g o ’

Jose Emilio Labra Gayo

XPath

Page 40: XPath

Contenidos Antecedentes Sintaxis XPath Localizaciones en XPath Funciones predefinidas en XPath XPath 2.0

Cadenas

Funciones de cadenas: translate

I translate(cad1,cad2,cad3) devuelve el resultado detraducir todos los caracteres de cad1 que aparecen en cad2por sus correspondientes en cad3

I Ejemplo:

t r a n s l a t e ( ’ camina ’ , ’ a e i ou ’ , ’AEIOU ’ ) = ’ cAmInA ’

Jose Emilio Labra Gayo

XPath

Page 41: XPath

Contenidos Antecedentes Sintaxis XPath Localizaciones en XPath Funciones predefinidas en XPath XPath 2.0

Conjuntos de nodos

Funciones de conjuntos de nodos

I position(): posicion del nodo actual

I last() devuelve el tamano del contexto actual

I count(nodos) devuelve el numero de nodos

I id(objeto) selecciona elementos por su ID unico (declaradoen la DTD)

I name(nodo?) devuelve el nombre del nodo

I local-name(nodo?) devuelve el nombre local

I namespace-uri(nodo?) devuelve la URI del espacio denombres

I lang(cad) devuelve true si el idioma del nodo actual es cad

Jose Emilio Labra Gayo

XPath

Page 42: XPath

Contenidos Antecedentes Sintaxis XPath Localizaciones en XPath Funciones predefinidas en XPath XPath 2.0

Conjuntos de nodos

Ejercicio

Paıses Europeos

A partir de este ficheroRealizar las siguientes consultas

I Paıses que empiezan por E

I Paıses que contienen la letra e

I Paıses que contienen la letra e (mayuscula o minuscula)

I Paıses que acaben por la letra e

I PIB medio de paıses europeos

I Paıses cuyo PIB esta por encima de la media

Jose Emilio Labra Gayo

XPath

Page 43: XPath

Contenidos Antecedentes Sintaxis XPath Localizaciones en XPath Funciones predefinidas en XPath XPath 2.0

Conjuntos de nodos

Carga de documentos externos

I document(URI) permite cargar un fichero en tiempo deejecucion

I Permite extraer y combinar informacion de varios ficheros

Jose Emilio Labra Gayo

XPath

Page 44: XPath

Contenidos Antecedentes Sintaxis XPath Localizaciones en XPath Funciones predefinidas en XPath XPath 2.0

XPath 2.0

XPath 2.0 fue propuesto en 2005. Novedades:

I Concepto de secuencias

I Sentencias if y for

I Cuantificadores

I Soporte para tipos primitivos de XML Schema

I Encaje de cadenas mediante expresiones regulares

Jose Emilio Labra Gayo

XPath

Page 45: XPath

Contenidos Antecedentes Sintaxis XPath Localizaciones en XPath Funciones predefinidas en XPath XPath 2.0

Fin

Fin de la presentacion

Jose Emilio Labra Gayo

XPath