XPath Ing. Hernández López Augusto. Introducción Es un lenguaje para encontrar información en...
-
Upload
ernesto-angeles -
Category
Documents
-
view
224 -
download
0
Transcript of XPath Ing. Hernández López Augusto. Introducción Es un lenguaje para encontrar información en...
XPath
Ing. Hernández López Augusto
Introducción Es un lenguaje para encontrar información en
un documento XML. Es utilizado para navegar a través de elementos y atributos.
Es el mayor componente en el estándar XSLT – XQuery y XPointer utilizan las expresiones XPath.
Se convirtió en un estándar recomendado por la W3C en 1999
¿Qué es XPath? Es una sintaxis para definir partes de un
documento XML Utiliza expresiones de trayectorias para
navegar en documentos XML Contiene una biblioteca de funciones estándar Es el mayor componente en XSLT Es un estándar de la W3C
Uso de XPath Con DOM/SAX es posible navegar sobre el
documento conociendo su estructura exacta, se debe especificar si busca en el padre, hermanos, hijos, etc.
Mediante XPath es posible localizar nodos en el documento XML.
Esta diseñado para procesa árboles y facilitar la referencia de los datos en la jerarquía.
Se basa en expresiones similares a las expresiones regulares, diseñadas para la estructura jerárquica de XML.
Expresiones XPath Se utilizan expresiones para seleccionar nodos
o conjuntos de nodos. Son expresiones similares a las utilizadas en
el sistema de archivos tradicional.
Funciones Estándar XPath Incluye cerca de 100 funciones. Existen funciones para valores de cadenas,
numéricas, fechas, comparación de hora, nodos, manipulación del QName, secuencias, valores booleanos, etc.
Terminología Nodos: Existen diferentes tipos: elemento,
atributo, texto, instrucción de procesamiento, comentario y documento (raíz). Se maneja como un árbol de nodos
<libreria> (nodo documento) <autor>J K. Rowling</autor> (nodo elemento)
lenguaje="es" (nodo atributo)
Terminología Valores Atómicos: Son aquellos nodos que
no tienen hijos (hojas) o padres (atributos). Artículo: Son valores atómicos o nodos.
Relaciones entre Nodos Padre: Cada elemento y atributo tiene un
padre. Hijo: Los nodos elemento pueden tener
cero, uno o más hijos. Hermanos, Vecinos: Nodos que tienen el
mismo padre. Ancestros: Un nodo padre, su padre, el
padre de su padre, etc. Descendientes: Un nodo hijo, los hijos de
sus hijos, etc.
Sintaxis XPath XPath utiliza expresiones de trayectorias para
seleccionado nodos o conjuntos de nodos en un documento XML. EL nodo es seleccionado mediante una trayectoria o pasos.
Una trayectoria esta compuesta de uno o más pasos
Cada paso esta compuesto de un eje, un nodo y opcionalmente predicados. Una pareja de dos puntos (::) separa el eje del nodo y cada predicado se pone entre paréntesis cuadrados []
Se pueden especificar trayectorias: Absolutas, si parte de la raíz del documento. / Relativas, si parte del nodo donde se encuentra.
Selección de Nodos
Los nodos se seleccionan con las siguientes trayectorias o pasos, estas son las expresiones más usuales:
nombrenodo Selecciona todos los nodos hijos del nodo nombrado
/ Selecciona desde el nodo raíz
// Selecciona nodos en el documento desde el nodo actual que corresponda a la selección no importando donde esten
. Selecciona el nodo actual
.. Selecciona el padre del nodo actual
@ Selecciona los atributos
Selección de Nodos: Ejemplo
La tabla siguiente muestra algunas expresiones y los resultados de las mismas:bookstore Selecciona todos los nodos hijos del elemento
nodo bookstore
/bookstore Selecciona el elemento raíz bookstore
bookstore/book Selecciona todos los elementos book que son hijos de bookstore
//book Selecciona todos los elementos book no importando donde estén.
bookstore//book Selecciona todos los elementos book descendientes de bookstore no importando donde estén debajo de este.
//@lang Selecciona todos los atributos llamados lang
Predicados
Predicados son utilizados para encontrar nodos específicos o un nodo que contiene un valor especifico. Están embebidos en paréntesis cuadrados [].
bookstore/book[1] Selecciona el primer elemento book
bookstore/book[last()] Selecciona el ultimo elemento book
bookstore/book[position()<3] Selecciona dos elementos
bookstore/book[price>35.00] Selecciona todos los libros con precio mayor a 35.0
//title[@lang=‘eng’] Selecciona todos los elementos que tienen atributo lang con valor ‘eng’
Nodos desconocidos
* Cualquier nodo elemento
@* Cualquier nodo atributo
node() Cualquier nodo
/bookstore/* Todos los nodos hijos de bookstore
//* Todos los nodos del documento
//title[@*] Todos los atributos del nodo title
Ejes Un eje define un conjunto de nodos relativos
al nodo actual Ancestro, ancestro o el mismo, hijo ,
descendiente, descendiente o el mismo, siguientes, hermanos siguientes, padre, precedentes, hermanos precedentes, el mismo, atributos, espacio de nombres
Se antecede el eje con :: P.ej attribute::lang, child::*
OperadoresOperador Descripción Ejemplo Valor de Retorno
| Calcula dos conjuntos de nodos //book | //cd Regresa un conjunto de nodos con book y cd
+ Suma 6 + 4 10- Resta 6 - 4 2* Multiplicación 6 * 4 24div División 8 div 4 2= Igualdad price=9.80 true si price es 9.80
!= Desigualdad price!=9.80 false si price es 9.80
< Menor que price<9.80 true si price es menor 9.80
<= Menor o igual que price<=9.80 true si price es menor o igual que 9.80
> Mayor que price>9.80 true si price es mayor 9.80
>= Mayor o igual que price>=9.80 true si price es mayor o igual que 9.80
or O price=9.80 or price=9.70 true si price es igual que 9.80 o igual que 9.70
and Y price>9.00 and price<9.90 true si price es mayor que 9.00 y menor que 9.90
mod Modulo (residuo división) 5 mod 2 1
Una expresion XPath regresa un conjunto de nodos, una cadena, un booleano o un número.
Ejes en una trayectoría
Ejesancestor Selecciona todos los ancestros del nodo actual (padre, abuelo, etc.)
ancestor-or-self Selecciona todos los ancestros del nodo actual (padre, abuelo, etc.) y el nodo actual
attribute Selecciona todos los atributos del nodo actual
child Selecciona todos los hijos del nodo actual
descendant Selecciona todos los descendientes del nodo actual (hijo, nieto, etc.)
descendant-or-self Selecciona todos los descendientes del nodo actual (hijo, nieto, etc.) y el nodo actual
following Selecciona todo en el documento que esta a partir del nodo actual
following-sibling Selecciona todos los hermanos posteriores del nodo actual
namespace Selecciona todos los nodos con el namespace del nodo actual
parent Selecciona el padre del nodo actual
preceding Selecciona todo en el documento que esta antes del nodo actual
preceding-sibling Selecciona todos los hermanos anteriores al nodo actual
self Selecciona el nodo actual
Prueba de nodos Los ejes eligen la dirección que se va a dirigir,
la prueba de nodos determina qué tipo de nodos seleccionar a los largo de los ejes:
nombre, cualquier elemento o atributo especificado
*, todos los nodos del tipo atributo prefijo:*, cualquier elemento o atributo con el
espacio de nombres mapeado por el prefijo comment(), cualquier comentario text(), cualquier nodo de texto node(), cualquier nodo processing-instruction(), cualquier instrucción
de proceso
Ejemplo books.xml Con el archivo de ejemplo y ubicados en el
nodo //book[3], ejecutar las siguientes expresiones: self::* child::* child::price following::* attribute::category preceding-sibling::node() preceding::comment() descendant::author
Trayectorias compuestas Para combinar los pasos en una trayectoria se
utiliza diagonal (/), por lo tanto el conjunto de nodos seleccionados en el primer paso se convierte en el nodo contexto del segundo paso y así sucesivamente:
//book[3]/following-sibling::node()/author //book[3]/preceding-sibling::node()/year /bookstore/child::book[child::year = 2003][2]
Trayectorias Abreviadas
Las trayectorias son equivalentes a lo siguiente:
child::nombre nombre
/ancestor::node()/parent::node() /
/descendant-or-self::node()/ //
self::node() .
parent::node() ..
attribute::nombre @nombre
Funciones XPath Devuelven algún tipo siguiente:
node-set, una colección de nodos desordenada sin duplicados
string, una secuencia de caracteres boolean, verdadero o falso number, un numero real
Algunas funciones number last() number position() number count(node-set) string substring(str, str) string concat(str, str, str*) boolean starts-with(str, str) boolean contains(str, str) number string-lenght(str) boolean not(boolean) boolean true() boolean false()
http://www.w3schools.com/XPath/xpath_functions.asphttp://www.w3.org/TR/xquery-operators/
Ejemplo XML<?xml version="1.0" encoding="ISO-8859-
1"?>
<!-- Augusto Dobeslao -->
<bookstore>
<book category="COOKING">
<title lang="en">Everyday Italian</title>
<author>Giada De Laurentiis</author>
<year>2005</year>
<price>30.00</price>
</book>
<book category="CHILDREN">
<title lang="en">Harry Potter</title>
<author>J K. Rowling</author>
<year>2005</year>
<price>29.99</price>
</book>
<book category="WEB"> <title lang="en">XQuery Kick
Start</title> <author>James McGovern</author> <author>Per Bothner</author> <author>Kurt Cagle</author> <author>James Linn</author> <author>Vaidyanathan
Nagarajan</author> <year>2003</year> <price>49.99</price></book> <book category="WEB"> <title lang="en">Learning XML</title> <author>Erik T. Ray</author> <year>2003</year> <price>39.95</price></book> </bookstore>
Referencias http://www.w3schools.com/XPath XML in a Nutshell, A Desktop Quick
Reference, Elliotte Rusty Harold & W. Scott Means, O’Reilly 2001