xpath ing. hernández lópez augusto. introducción es un lenguaje para encontrar información en...

Post on 23-Jan-2016

224 Views

Category:

Documents

0 Downloads

Preview:

Click to see full reader

TRANSCRIPT

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

top related