SlideShare ist ein Scribd-Unternehmen logo
1 von 43
Jose Emilio Labra Gayo – Universidad de Oviedo
XPath
Departamento de Informática
Universidad de Oviedo
http://www.di.uniovi.es/~labra
Jose Emilio Labra Gayo – Universidad de Oviedo
XPath
Desarrollado en 1999 como parte de XSL
La especificación de XSL se dividía en:
XPath: Acceso a partes del documento XML
XSLT: Transformación
XSL-FO: Objetos de formateo
Luego se independizó para usarse otros contextos:
XQuery, XML Schema, XPointer, etc.
XPath 2.0 (2005)
XPath 3.0 (2014)
Jose Emilio Labra Gayo – Universidad de Oviedo
Características
Lenguaje sencillo con sintaxis no XML
Permite acceder/consultar partes de un documento XML
Inspirado en las rutas de acceso a ficheros
Trabaja sobre el árbol del documento XML
Jose Emilio Labra Gayo – Universidad de Oviedo
<pedido fecha="3/2/2011">
<producto codigo="G23">
<nombre>Grapadora</nombre>
<cantidad>20</cantidad>
<comentarios>
Contactar con <persona>Juan</persona>
</comentarios>
</producto>
<producto codigo="R15">
<nombre>Rotulador</nombre>
<cantidad>10</cantidad>
</producto>
</pedido>
Árbol del documento
pedido
producto productofecha
<root>
3/2/2011
Atributo
Elemento
Raíz
Texto
nombre cantidadcodigo
G23
comentarios
Grapadora 20 Contactar con persona
Juan
nombre cantidadcodigo
R15 Rotulador 10
Jose Emilio Labra Gayo – Universidad de Oviedo
Tipos de nodos
Los nodos del árbol pueden ser de los siguientes tipos:
Nodo raíz
Elemento
Atributo
Comentario
Instrucciones de procesamiento
Texto
Espacios de nombres
Jose Emilio Labra Gayo – Universidad de Oviedo
Expresiones XPath
Lenguaje inspirado en acceso a directorios
20
/pedido/producto/cantidadExpresión Xpath
10
Fichero XML
Resultado
<pedido fecha="3/2/2011">
<producto codigo="G23">
<nombre>Grapadora</nombre>
<cantidad>20</cantidad>
<comentarios>
Contactar con <persona>Juan</persona>
</comentarios>
</producto>
<producto codigo="R15">
<nombre>Rotulador</nombre>
<cantidad>10</cantidad>
</producto>
</pedido>
Jose Emilio Labra Gayo – Universidad de Oviedo
Tipos de Expresiones XPath
Ruta de localización: /pedido/producto/cantidad
Llamada a una variable: $cantidad
Valor literal: 'Juan', 23
Llamada a una función:
sum(/pedido/producto/cantidad)
Unión de conjuntos de nodos mediante | :
//nombre | //persona
XPath suele utilizarse en valores de atributos en XML
Normas para codificar cadenas
Ejemplo: “cantidad &lt; 10”
Alternar comillas simples/dobles
Ejemplo: “nombre = ‘Juan’”
Jose Emilio Labra Gayo – Universidad de Oviedo
Tipos de datos en XPath
El resultado de una expresión XPath puede ser:
Valor booleano (true/false)
Cadena de caracteres
Número (entero/flotante)
Conjunto de nodos XML
Los elementos del conjunto son hermanos
Jose Emilio Labra Gayo – Universidad de Oviedo
Contexto de evaluación
Las expresiones se evalúan en función de un contexto
El contexto contiene:
Nodo actual del documento
Posición (entero)
Tamaño (entero)
Otra información:
Valores de variables
Biblioteca de funciones
Declaraciones de espacios de nombres
Jose Emilio Labra Gayo – Universidad de Oviedo
Ruta de localización
Se compone de varios pasos separados por /
/pedido/producto/cantidad
La ruta puede ser:
Relativa: se evalúa desde el nodo de contexto
Absoluta: se evalúa desde el nodo raíz (comienza por /)
Jose Emilio Labra Gayo – Universidad de Oviedo
Pasos de localización
Cada paso se compone de:
Un eje (por defecto es child)
Una prueba de nodo
Opcionalmente, varios predicados entre [ ]
Sintaxis:
eje::pruebaNodo[predicado1][predicado2]…
Ejemplo:
/descendant::producto[cantidad > 20]
Jose Emilio Labra Gayo – Universidad de Oviedo
Ejes
child:: Hijos directos del nodo actual (eje por defecto)
parent:: Padre del nodo actual
descendant:: Descendientes
ancestor:: Antecesores
descendant-or-self:: Descendientes incluido el nodo actual
ascestor-or-self:: Antecesores incluido el nodo actual
following:: Los nodos siguientes (incluidos los descencientes)
preceding:: Los precedentes (excluyendo los antecesores )
following-sibling:: Hermanos siguientes
preceding-sibling:: Hermanos precedentes
attribute:: Atributo
namespace:: Espacio de nombres
Jose Emilio Labra Gayo – Universidad de Oviedo
Ejes de localización: child
1 2
Jose Emilio Labra Gayo – Universidad de Oviedo
Ejes de localización: parent
1
Jose Emilio Labra Gayo – Universidad de Oviedo
Ejes de localización: ancestor
1
2
3
Jose Emilio Labra Gayo – Universidad de Oviedo
Ejes de localización: ancestor-or-self
1
2
3
4
Jose Emilio Labra Gayo – Universidad de Oviedo
Ejes de localización: descendant
3
1 2
4 5
Jose Emilio Labra Gayo – Universidad de Oviedo
Ejes de localización: descendant-or-self
4
1
2 3
5 6
Jose Emilio Labra Gayo – Universidad de Oviedo
Ejes de localización: following
2
63
4
5
1 7
98
10
Jose Emilio Labra Gayo – Universidad de Oviedo
Ejes de localización: following-sibling
1
Jose Emilio Labra Gayo – Universidad de Oviedo
Ejes de localización: preceding
1
6
3 5
98
2
7
4
Jose Emilio Labra Gayo – Universidad de Oviedo
Ejes de localización: preceding-sibling
21
Jose Emilio Labra Gayo – Universidad de Oviedo
Ejes de localización: self
1
Jose Emilio Labra Gayo – Universidad de Oviedo
Predicados
Añade un nivel de verificación al paso de localización
Expresión booleana
Ejemplos:
//producto[cantidad > 15]
//producto[position()=2]
//producto[contains(nombre, ‘pa’)]
Puede haber más de un predicado
El orden es significativo
//producto[position()=2][contains(nombre,'pa')]

//producto[contains(nombre, 'pa')] [position()=2]
Jose Emilio Labra Gayo – Universidad de Oviedo
Abreviaturas
child:: es el eje por defecto
/child::pedido/child::producto = /pedido/producto
attribute:: equivale a @
/pedido/attribute::fecha = /pedido/@fecha
. equivale a self::node()
.. equivale a parent::node()
// equivale a descendant-or-self::node()/
[position() = nº] equivale a [nº]
//producto[position()=2] = //producto[2]
Jose Emilio Labra Gayo – Universidad de Oviedo
Ejercicio
El fichero Europa.xml* contiene información sobre países
europeos, construir expresiones XPath para:
Obtener el nombre del continente
Obtener información sobre España
Obtener el PIB de España
Obtener países con más de 40 millones de habitantes
Obtener nombres de países con PIB mayor que España
* http://www.di.uniovi.es/~labra/cursos/XML/files/europa.xml
Jose Emilio Labra Gayo – Universidad de Oviedo
Funciones predefinidas de XPath
Jose Emilio Labra Gayo – Universidad de Oviedo
Conversión de tipos
string() convierte a cadena de texto
Si es un número lo representa
Si es un booleano devuelve true/false
Si es un conjunto de nodos, lo aplica al primer nodo
number() convierte a nº
Si es una cadena de texto, trata de analizarla
Si es booleano, devuelve 1/true ó 0/false
Si es un conjunto de nodos, aplica primero String
boolean() convierte a booleano
Si es un nº es true si es distinto de cero
Si es una cadena de texto, es true si no está vacía
Si es un conjunto de nodos, es true si contiene algún nodo
Jose Emilio Labra Gayo – Universidad de Oviedo
Funciones booleanas
Operadores and y or
Función not()
Jose Emilio Labra Gayo – Universidad de Oviedo
Funciones matemáticas
Operadores matemáticos habituales:
+
- (debe estar precedido de espacio)
*
div (la división no es /)
mod
Operadores de comparación
=, !=, >, <, <=, >= (si está en XSLT, se pone &lt; ó &gt;)
Otras funciones matemáticas
sum(), floor(), ceiling(), round(), …
Jose Emilio Labra Gayo – Universidad de Oviedo
Funciones con cadenas
concat(c1,c2,c*) = resultado de concatenar sus argumentos
concat('uno','dos‘) = ‘unodos‘
Jose Emilio Labra Gayo – Universidad de Oviedo
Funciones con cadenas
substring(cad,pos,long?) = subcadena de cad a partir de
la posición pos de longitud long
substring(‘camina‘,3) = ‘mina‘
substring(‘camina‘,3,2) = ‘mi‘
Jose Emilio Labra Gayo – Universidad de Oviedo
Funciones con cadenas
contains(cad1, cad2) = true si cad1 contiene cad2
contains(‘camina’,’ca’) = true
contains(‘camina’,’mi’) = true
Jose Emilio Labra Gayo – Universidad de Oviedo
Funciones con cadenas
starts-with(cad1,cad2) = true si cad1 comienza con cad1
starts-with(‘camina’,’ca’) = true
Jose Emilio Labra Gayo – Universidad de Oviedo
Funciones con cadenas
substring-before(cad1,cad2) devuelve el trozo de cadena
de cad1 anterior a cad2
substring-after(cad1,cad2) devuelve el trozo de cadena
de cad1 posterior a cad2
substring-before(‘camina’,’mi’) = ‘ca’
substring-after(‘camina’,’mi’) = ‘na’
Jose Emilio Labra Gayo – Universidad de Oviedo
Funciones con cadenas
string-length(cad) devuelve la longitud de cad
string-length(‘camina’) = 6
Jose Emilio Labra Gayo – Universidad de Oviedo
Funciones con cadenas
normalize-space(cad1) = devuelve el resultado de
normalizar cad1 quitando los espacios en blanco
redundantes
normalize-space(‘un espacio largo ‘)= ‘un espacio largo’
Jose Emilio Labra Gayo – Universidad de Oviedo
Funciones con cadenas
translate(cad1,cad2,cad3)= devuelve el resultado de
traducir todos los caracteres de cad1 que aparecen en
cad2 por sus correspondientes en cad3
translate(‘camina’,’aeiou’,’AEIOU’)=‘cAmInA’
Jose Emilio Labra Gayo – Universidad de Oviedo
Funciones de conjuntos de nodos
position() posición del nodo
last() tamaño del contexto actual
count(nodos) cuenta el número de nodos de un conjunto
id(objeto) selecciona objetos por su id único
name(nodo) devuelve el nombre del nodo
local-name(nodo) = devuelve el nombre local
namespace-uri(nodo) = devuelve la URI del espacio de
nombres
lang(cad)= devuelve true si el idioma del nodo es cad
Jose Emilio Labra Gayo – Universidad de Oviedo
Ejercicio
A partir del fichero de países europeos, consultar:
Países empiezan por E
Países que contienen la letra e
Países que contienen la letra e (mayúscula o minúscula)
Países que acaben por e
PIB medio de los países europeos
Países cuyo PIB esté por encima de la media
Jose Emilio Labra Gayo – Universidad de Oviedo
Documentos
document(fichero) permite acceder a un documento XML
determinado
Sirve para extraer y combinar información de varios
ficheros
Jose Emilio Labra Gayo – Universidad de Oviedo
XPath 2.0
Propuesto en 2005
Novedades:
Concepto de secuencias
Sentencias if y for
Cuantificadores
Soporte para tipos primitivos de XML Schema
Encaje de cadenas mediante expresiones regulares
Jose Emilio Labra Gayo – Universidad de Oviedo
FIN

Weitere ähnliche Inhalte

Was ist angesagt? (20)

Clases y objetos de java
Clases y objetos de javaClases y objetos de java
Clases y objetos de java
 
Functions in c
Functions in cFunctions in c
Functions in c
 
06 - Arrays y matrices en lenguaje C
06 - Arrays y matrices en lenguaje C06 - Arrays y matrices en lenguaje C
06 - Arrays y matrices en lenguaje C
 
Ejercicios de XSD
Ejercicios de XSDEjercicios de XSD
Ejercicios de XSD
 
Ejercicios resueltos con Python
Ejercicios resueltos con PythonEjercicios resueltos con Python
Ejercicios resueltos con Python
 
stack and queue array implementation in java.
stack and queue array implementation in java.stack and queue array implementation in java.
stack and queue array implementation in java.
 
Herencia Y Polimorfismo
Herencia Y PolimorfismoHerencia Y Polimorfismo
Herencia Y Polimorfismo
 
5. ejercicios normalización
5. ejercicios normalización5. ejercicios normalización
5. ejercicios normalización
 
Ppt presentation of queues
Ppt presentation of queuesPpt presentation of queues
Ppt presentation of queues
 
Python for Beginners(v1)
Python for Beginners(v1)Python for Beginners(v1)
Python for Beginners(v1)
 
Lab2 ddl commands
Lab2 ddl commandsLab2 ddl commands
Lab2 ddl commands
 
The Expression Problem - Part 1
The Expression Problem - Part 1The Expression Problem - Part 1
The Expression Problem - Part 1
 
Mysql datatypes
Mysql datatypesMysql datatypes
Mysql datatypes
 
Programa de Cola Estática
Programa de Cola EstáticaPrograma de Cola Estática
Programa de Cola Estática
 
Stacks
StacksStacks
Stacks
 
List in python
List in pythonList in python
List in python
 
Stacks in c++
Stacks in c++Stacks in c++
Stacks in c++
 
Direccionamiento - Ejercicios - Explicacion - Clases A-B-C
Direccionamiento - Ejercicios - Explicacion - Clases A-B-CDireccionamiento - Ejercicios - Explicacion - Clases A-B-C
Direccionamiento - Ejercicios - Explicacion - Clases A-B-C
 
Haskell study 3
Haskell study 3Haskell study 3
Haskell study 3
 
Unidad 5 TransformacióN Er A Relacional NormalizacióN
Unidad 5 TransformacióN Er A Relacional   NormalizacióNUnidad 5 TransformacióN Er A Relacional   NormalizacióN
Unidad 5 TransformacióN Er A Relacional NormalizacióN
 

Ähnlich wie XPath

Scala en proyectos de vinculación Ancap-UR - 2013-03
Scala en proyectos de vinculación Ancap-UR - 2013-03Scala en proyectos de vinculación Ancap-UR - 2013-03
Scala en proyectos de vinculación Ancap-UR - 2013-03Germán Ferrari
 
Fundamentos De Algoritmia
Fundamentos De AlgoritmiaFundamentos De Algoritmia
Fundamentos De Algoritmiacckokyco
 
Claves XML: Una Implementación de Algoritmos de Implicación y Validación
Claves XML: Una Implementación de Algoritmos de Implicación y ValidaciónClaves XML: Una Implementación de Algoritmos de Implicación y Validación
Claves XML: Una Implementación de Algoritmos de Implicación y ValidaciónEmir Muñoz
 
0139-php-y-mysql-lenguaje-php-basico.pdf
0139-php-y-mysql-lenguaje-php-basico.pdf0139-php-y-mysql-lenguaje-php-basico.pdf
0139-php-y-mysql-lenguaje-php-basico.pdfmiguelalemangonzales1
 
programacion orientada a objetos
programacion orientada a objetosprogramacion orientada a objetos
programacion orientada a objetosale8819
 
Iniciando en java en www.fiec.espol.edu.ec
Iniciando en java  en www.fiec.espol.edu.ecIniciando en java  en www.fiec.espol.edu.ec
Iniciando en java en www.fiec.espol.edu.ecSilvana Vargas
 
Fundamentos de Scala (Scala Basics) (español) Catecbol
Fundamentos de Scala (Scala Basics) (español) CatecbolFundamentos de Scala (Scala Basics) (español) Catecbol
Fundamentos de Scala (Scala Basics) (español) CatecbolJean-Paul Calbimonte
 
solucionEjercicioPF.pdf
solucionEjercicioPF.pdfsolucionEjercicioPF.pdf
solucionEjercicioPF.pdfMisterioCR
 
PHP Tema 2 - Lenguaje PHP básico
PHP Tema 2 - Lenguaje PHP básicoPHP Tema 2 - Lenguaje PHP básico
PHP Tema 2 - Lenguaje PHP básicoSpacetoshare
 
Rc jose franqueller_garcia
Rc jose franqueller_garciaRc jose franqueller_garcia
Rc jose franqueller_garciafrankgatom
 

Ähnlich wie XPath (20)

23 sparql
23 sparql23 sparql
23 sparql
 
Introducción a Scala
Introducción a ScalaIntroducción a Scala
Introducción a Scala
 
Scala en proyectos de vinculación Ancap-UR - 2013-03
Scala en proyectos de vinculación Ancap-UR - 2013-03Scala en proyectos de vinculación Ancap-UR - 2013-03
Scala en proyectos de vinculación Ancap-UR - 2013-03
 
2 Introducción al lenguaje Ruby
2 Introducción al lenguaje Ruby2 Introducción al lenguaje Ruby
2 Introducción al lenguaje Ruby
 
Fundamentos De Algoritmia
Fundamentos De AlgoritmiaFundamentos De Algoritmia
Fundamentos De Algoritmia
 
XPath
XPathXPath
XPath
 
4 Introducción al lenguaje Scala
4 Introducción al lenguaje Scala4 Introducción al lenguaje Scala
4 Introducción al lenguaje Scala
 
Tema2 3
Tema2 3Tema2 3
Tema2 3
 
Poo
PooPoo
Poo
 
Claves XML: Una Implementación de Algoritmos de Implicación y Validación
Claves XML: Una Implementación de Algoritmos de Implicación y ValidaciónClaves XML: Una Implementación de Algoritmos de Implicación y Validación
Claves XML: Una Implementación de Algoritmos de Implicación y Validación
 
Taller completo
Taller completoTaller completo
Taller completo
 
0139-php-y-mysql-lenguaje-php-basico.pdf
0139-php-y-mysql-lenguaje-php-basico.pdf0139-php-y-mysql-lenguaje-php-basico.pdf
0139-php-y-mysql-lenguaje-php-basico.pdf
 
programacion orientada a objetos
programacion orientada a objetosprogramacion orientada a objetos
programacion orientada a objetos
 
Iniciando en java en www.fiec.espol.edu.ec
Iniciando en java  en www.fiec.espol.edu.ecIniciando en java  en www.fiec.espol.edu.ec
Iniciando en java en www.fiec.espol.edu.ec
 
XML - Introducción
XML - IntroducciónXML - Introducción
XML - Introducción
 
Fundamentos de Scala (Scala Basics) (español) Catecbol
Fundamentos de Scala (Scala Basics) (español) CatecbolFundamentos de Scala (Scala Basics) (español) Catecbol
Fundamentos de Scala (Scala Basics) (español) Catecbol
 
solucionEjercicioPF.pdf
solucionEjercicioPF.pdfsolucionEjercicioPF.pdf
solucionEjercicioPF.pdf
 
PHP Tema 2 - Lenguaje PHP básico
PHP Tema 2 - Lenguaje PHP básicoPHP Tema 2 - Lenguaje PHP básico
PHP Tema 2 - Lenguaje PHP básico
 
Algoritmos1
Algoritmos1Algoritmos1
Algoritmos1
 
Rc jose franqueller_garcia
Rc jose franqueller_garciaRc jose franqueller_garcia
Rc jose franqueller_garcia
 

Mehr von Jose Emilio Labra Gayo

Introducción a la investigación/doctorado
Introducción a la investigación/doctoradoIntroducción a la investigación/doctorado
Introducción a la investigación/doctoradoJose Emilio Labra Gayo
 
Challenges and applications of RDF shapes
Challenges and applications of RDF shapesChallenges and applications of RDF shapes
Challenges and applications of RDF shapesJose Emilio Labra Gayo
 
Legislative data portals and linked data quality
Legislative data portals and linked data qualityLegislative data portals and linked data quality
Legislative data portals and linked data qualityJose Emilio Labra Gayo
 
Validating RDF data: Challenges and perspectives
Validating RDF data: Challenges and perspectivesValidating RDF data: Challenges and perspectives
Validating RDF data: Challenges and perspectivesJose Emilio Labra Gayo
 
Legislative document content extraction based on Semantic Web technologies
Legislative document content extraction based on Semantic Web technologiesLegislative document content extraction based on Semantic Web technologies
Legislative document content extraction based on Semantic Web technologiesJose Emilio Labra Gayo
 
Como publicar datos: hacia los datos abiertos enlazados
Como publicar datos: hacia los datos abiertos enlazadosComo publicar datos: hacia los datos abiertos enlazados
Como publicar datos: hacia los datos abiertos enlazadosJose Emilio Labra Gayo
 
Arquitectura de la Web y Computación en el Servidor
Arquitectura de la Web y Computación en el ServidorArquitectura de la Web y Computación en el Servidor
Arquitectura de la Web y Computación en el ServidorJose Emilio Labra Gayo
 

Mehr von Jose Emilio Labra Gayo (20)

Publicaciones de investigación
Publicaciones de investigaciónPublicaciones de investigación
Publicaciones de investigación
 
Introducción a la investigación/doctorado
Introducción a la investigación/doctoradoIntroducción a la investigación/doctorado
Introducción a la investigación/doctorado
 
Challenges and applications of RDF shapes
Challenges and applications of RDF shapesChallenges and applications of RDF shapes
Challenges and applications of RDF shapes
 
Legislative data portals and linked data quality
Legislative data portals and linked data qualityLegislative data portals and linked data quality
Legislative data portals and linked data quality
 
Validating RDF data: Challenges and perspectives
Validating RDF data: Challenges and perspectivesValidating RDF data: Challenges and perspectives
Validating RDF data: Challenges and perspectives
 
Wikidata
WikidataWikidata
Wikidata
 
Legislative document content extraction based on Semantic Web technologies
Legislative document content extraction based on Semantic Web technologiesLegislative document content extraction based on Semantic Web technologies
Legislative document content extraction based on Semantic Web technologies
 
ShEx by Example
ShEx by ExampleShEx by Example
ShEx by Example
 
Introduction to SPARQL
Introduction to SPARQLIntroduction to SPARQL
Introduction to SPARQL
 
Introducción a la Web Semántica
Introducción a la Web SemánticaIntroducción a la Web Semántica
Introducción a la Web Semántica
 
RDF Data Model
RDF Data ModelRDF Data Model
RDF Data Model
 
2017 Tendencias en informática
2017 Tendencias en informática2017 Tendencias en informática
2017 Tendencias en informática
 
RDF, linked data and semantic web
RDF, linked data and semantic webRDF, linked data and semantic web
RDF, linked data and semantic web
 
Introduction to SPARQL
Introduction to SPARQLIntroduction to SPARQL
Introduction to SPARQL
 
19 javascript servidor
19 javascript servidor19 javascript servidor
19 javascript servidor
 
Como publicar datos: hacia los datos abiertos enlazados
Como publicar datos: hacia los datos abiertos enlazadosComo publicar datos: hacia los datos abiertos enlazados
Como publicar datos: hacia los datos abiertos enlazados
 
16 Alternativas XML
16 Alternativas XML16 Alternativas XML
16 Alternativas XML
 
XSLT
XSLTXSLT
XSLT
 
Arquitectura de la Web y Computación en el Servidor
Arquitectura de la Web y Computación en el ServidorArquitectura de la Web y Computación en el Servidor
Arquitectura de la Web y Computación en el Servidor
 
RDF validation tutorial
RDF validation tutorialRDF validation tutorial
RDF validation tutorial
 

XPath

  • 1. Jose Emilio Labra Gayo – Universidad de Oviedo XPath Departamento de Informática Universidad de Oviedo http://www.di.uniovi.es/~labra
  • 2. Jose Emilio Labra Gayo – Universidad de Oviedo XPath Desarrollado en 1999 como parte de XSL La especificación de XSL se dividía en: XPath: Acceso a partes del documento XML XSLT: Transformación XSL-FO: Objetos de formateo Luego se independizó para usarse otros contextos: XQuery, XML Schema, XPointer, etc. XPath 2.0 (2005) XPath 3.0 (2014)
  • 3. Jose Emilio Labra Gayo – Universidad de Oviedo Características Lenguaje sencillo con sintaxis no XML Permite acceder/consultar partes de un documento XML Inspirado en las rutas de acceso a ficheros Trabaja sobre el árbol del documento XML
  • 4. Jose Emilio Labra Gayo – Universidad de Oviedo <pedido fecha="3/2/2011"> <producto codigo="G23"> <nombre>Grapadora</nombre> <cantidad>20</cantidad> <comentarios> Contactar con <persona>Juan</persona> </comentarios> </producto> <producto codigo="R15"> <nombre>Rotulador</nombre> <cantidad>10</cantidad> </producto> </pedido> Árbol del documento pedido producto productofecha <root> 3/2/2011 Atributo Elemento Raíz Texto nombre cantidadcodigo G23 comentarios Grapadora 20 Contactar con persona Juan nombre cantidadcodigo R15 Rotulador 10
  • 5. Jose Emilio Labra Gayo – Universidad de Oviedo Tipos de nodos Los nodos del árbol pueden ser de los siguientes tipos: Nodo raíz Elemento Atributo Comentario Instrucciones de procesamiento Texto Espacios de nombres
  • 6. Jose Emilio Labra Gayo – Universidad de Oviedo Expresiones XPath Lenguaje inspirado en acceso a directorios 20 /pedido/producto/cantidadExpresión Xpath 10 Fichero XML Resultado <pedido fecha="3/2/2011"> <producto codigo="G23"> <nombre>Grapadora</nombre> <cantidad>20</cantidad> <comentarios> Contactar con <persona>Juan</persona> </comentarios> </producto> <producto codigo="R15"> <nombre>Rotulador</nombre> <cantidad>10</cantidad> </producto> </pedido>
  • 7. Jose Emilio Labra Gayo – Universidad de Oviedo Tipos de Expresiones XPath Ruta de localización: /pedido/producto/cantidad Llamada a una variable: $cantidad Valor literal: 'Juan', 23 Llamada a una función: sum(/pedido/producto/cantidad) Unión de conjuntos de nodos mediante | : //nombre | //persona XPath suele utilizarse en valores de atributos en XML Normas para codificar cadenas Ejemplo: “cantidad &lt; 10” Alternar comillas simples/dobles Ejemplo: “nombre = ‘Juan’”
  • 8. Jose Emilio Labra Gayo – Universidad de Oviedo Tipos de datos en XPath El resultado de una expresión XPath puede ser: Valor booleano (true/false) Cadena de caracteres Número (entero/flotante) Conjunto de nodos XML Los elementos del conjunto son hermanos
  • 9. Jose Emilio Labra Gayo – Universidad de Oviedo Contexto de evaluación Las expresiones se evalúan en función de un contexto El contexto contiene: Nodo actual del documento Posición (entero) Tamaño (entero) Otra información: Valores de variables Biblioteca de funciones Declaraciones de espacios de nombres
  • 10. Jose Emilio Labra Gayo – Universidad de Oviedo Ruta de localización Se compone de varios pasos separados por / /pedido/producto/cantidad La ruta puede ser: Relativa: se evalúa desde el nodo de contexto Absoluta: se evalúa desde el nodo raíz (comienza por /)
  • 11. Jose Emilio Labra Gayo – Universidad de Oviedo Pasos de localización Cada paso se compone de: Un eje (por defecto es child) Una prueba de nodo Opcionalmente, varios predicados entre [ ] Sintaxis: eje::pruebaNodo[predicado1][predicado2]… Ejemplo: /descendant::producto[cantidad > 20]
  • 12. Jose Emilio Labra Gayo – Universidad de Oviedo Ejes child:: Hijos directos del nodo actual (eje por defecto) parent:: Padre del nodo actual descendant:: Descendientes ancestor:: Antecesores descendant-or-self:: Descendientes incluido el nodo actual ascestor-or-self:: Antecesores incluido el nodo actual following:: Los nodos siguientes (incluidos los descencientes) preceding:: Los precedentes (excluyendo los antecesores ) following-sibling:: Hermanos siguientes preceding-sibling:: Hermanos precedentes attribute:: Atributo namespace:: Espacio de nombres
  • 13. Jose Emilio Labra Gayo – Universidad de Oviedo Ejes de localización: child 1 2
  • 14. Jose Emilio Labra Gayo – Universidad de Oviedo Ejes de localización: parent 1
  • 15. Jose Emilio Labra Gayo – Universidad de Oviedo Ejes de localización: ancestor 1 2 3
  • 16. Jose Emilio Labra Gayo – Universidad de Oviedo Ejes de localización: ancestor-or-self 1 2 3 4
  • 17. Jose Emilio Labra Gayo – Universidad de Oviedo Ejes de localización: descendant 3 1 2 4 5
  • 18. Jose Emilio Labra Gayo – Universidad de Oviedo Ejes de localización: descendant-or-self 4 1 2 3 5 6
  • 19. Jose Emilio Labra Gayo – Universidad de Oviedo Ejes de localización: following 2 63 4 5 1 7 98 10
  • 20. Jose Emilio Labra Gayo – Universidad de Oviedo Ejes de localización: following-sibling 1
  • 21. Jose Emilio Labra Gayo – Universidad de Oviedo Ejes de localización: preceding 1 6 3 5 98 2 7 4
  • 22. Jose Emilio Labra Gayo – Universidad de Oviedo Ejes de localización: preceding-sibling 21
  • 23. Jose Emilio Labra Gayo – Universidad de Oviedo Ejes de localización: self 1
  • 24. Jose Emilio Labra Gayo – Universidad de Oviedo Predicados Añade un nivel de verificación al paso de localización Expresión booleana Ejemplos: //producto[cantidad > 15] //producto[position()=2] //producto[contains(nombre, ‘pa’)] Puede haber más de un predicado El orden es significativo //producto[position()=2][contains(nombre,'pa')]  //producto[contains(nombre, 'pa')] [position()=2]
  • 25. Jose Emilio Labra Gayo – Universidad de Oviedo Abreviaturas child:: es el eje por defecto /child::pedido/child::producto = /pedido/producto attribute:: equivale a @ /pedido/attribute::fecha = /pedido/@fecha . equivale a self::node() .. equivale a parent::node() // equivale a descendant-or-self::node()/ [position() = nº] equivale a [nº] //producto[position()=2] = //producto[2]
  • 26. Jose Emilio Labra Gayo – Universidad de Oviedo Ejercicio El fichero Europa.xml* contiene información sobre países europeos, construir expresiones XPath para: Obtener el nombre del continente Obtener información sobre España Obtener el PIB de España Obtener países con más de 40 millones de habitantes Obtener nombres de países con PIB mayor que España * http://www.di.uniovi.es/~labra/cursos/XML/files/europa.xml
  • 27. Jose Emilio Labra Gayo – Universidad de Oviedo Funciones predefinidas de XPath
  • 28. Jose Emilio Labra Gayo – Universidad de Oviedo Conversión de tipos string() convierte a cadena de texto Si es un número lo representa Si es un booleano devuelve true/false Si es un conjunto de nodos, lo aplica al primer nodo number() convierte a nº Si es una cadena de texto, trata de analizarla Si es booleano, devuelve 1/true ó 0/false Si es un conjunto de nodos, aplica primero String boolean() convierte a booleano Si es un nº es true si es distinto de cero Si es una cadena de texto, es true si no está vacía Si es un conjunto de nodos, es true si contiene algún nodo
  • 29. Jose Emilio Labra Gayo – Universidad de Oviedo Funciones booleanas Operadores and y or Función not()
  • 30. Jose Emilio Labra Gayo – Universidad de Oviedo Funciones matemáticas Operadores matemáticos habituales: + - (debe estar precedido de espacio) * div (la división no es /) mod Operadores de comparación =, !=, >, <, <=, >= (si está en XSLT, se pone &lt; ó &gt;) Otras funciones matemáticas sum(), floor(), ceiling(), round(), …
  • 31. Jose Emilio Labra Gayo – Universidad de Oviedo Funciones con cadenas concat(c1,c2,c*) = resultado de concatenar sus argumentos concat('uno','dos‘) = ‘unodos‘
  • 32. Jose Emilio Labra Gayo – Universidad de Oviedo Funciones con cadenas substring(cad,pos,long?) = subcadena de cad a partir de la posición pos de longitud long substring(‘camina‘,3) = ‘mina‘ substring(‘camina‘,3,2) = ‘mi‘
  • 33. Jose Emilio Labra Gayo – Universidad de Oviedo Funciones con cadenas contains(cad1, cad2) = true si cad1 contiene cad2 contains(‘camina’,’ca’) = true contains(‘camina’,’mi’) = true
  • 34. Jose Emilio Labra Gayo – Universidad de Oviedo Funciones con cadenas starts-with(cad1,cad2) = true si cad1 comienza con cad1 starts-with(‘camina’,’ca’) = true
  • 35. Jose Emilio Labra Gayo – Universidad de Oviedo Funciones con cadenas substring-before(cad1,cad2) devuelve el trozo de cadena de cad1 anterior a cad2 substring-after(cad1,cad2) devuelve el trozo de cadena de cad1 posterior a cad2 substring-before(‘camina’,’mi’) = ‘ca’ substring-after(‘camina’,’mi’) = ‘na’
  • 36. Jose Emilio Labra Gayo – Universidad de Oviedo Funciones con cadenas string-length(cad) devuelve la longitud de cad string-length(‘camina’) = 6
  • 37. Jose Emilio Labra Gayo – Universidad de Oviedo Funciones con cadenas normalize-space(cad1) = devuelve el resultado de normalizar cad1 quitando los espacios en blanco redundantes normalize-space(‘un espacio largo ‘)= ‘un espacio largo’
  • 38. Jose Emilio Labra Gayo – Universidad de Oviedo Funciones con cadenas translate(cad1,cad2,cad3)= devuelve el resultado de traducir todos los caracteres de cad1 que aparecen en cad2 por sus correspondientes en cad3 translate(‘camina’,’aeiou’,’AEIOU’)=‘cAmInA’
  • 39. Jose Emilio Labra Gayo – Universidad de Oviedo Funciones de conjuntos de nodos position() posición del nodo last() tamaño del contexto actual count(nodos) cuenta el número de nodos de un conjunto id(objeto) selecciona objetos por su id único name(nodo) devuelve el nombre del nodo local-name(nodo) = devuelve el nombre local namespace-uri(nodo) = devuelve la URI del espacio de nombres lang(cad)= devuelve true si el idioma del nodo es cad
  • 40. Jose Emilio Labra Gayo – Universidad de Oviedo Ejercicio A partir del fichero de países europeos, consultar: Países empiezan por E Países que contienen la letra e Países que contienen la letra e (mayúscula o minúscula) Países que acaben por e PIB medio de los países europeos Países cuyo PIB esté por encima de la media
  • 41. Jose Emilio Labra Gayo – Universidad de Oviedo Documentos document(fichero) permite acceder a un documento XML determinado Sirve para extraer y combinar información de varios ficheros
  • 42. Jose Emilio Labra Gayo – Universidad de Oviedo XPath 2.0 Propuesto en 2005 Novedades: Concepto de secuencias Sentencias if y for Cuantificadores Soporte para tipos primitivos de XML Schema Encaje de cadenas mediante expresiones regulares
  • 43. Jose Emilio Labra Gayo – Universidad de Oviedo FIN