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 (nodo documento) J K. Rowling (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: nombrenodoSelecciona 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 los atributos
Selección de Nodos: Ejemplo La tabla siguiente muestra algunas expresiones y los resultados de las mismas: bookstoreSelecciona todos los nodos hijos del elemento nodo bookstore /bookstoreSelecciona el elemento raíz bookstore bookstore/bookSelecciona todos los elementos book que son hijos de bookstore //bookSelecciona todos los elementos book no importando donde estén. bookstore//bookSelecciona todos los elementos book descendientes de bookstore no importando donde estén debajo de este. 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 todos los elementos que tienen atributo lang con valor ‘eng’
Nodos desconocidos *Cualquier nodo nodo atributo node()Cualquier nodo /bookstore/*Todos los nodos hijos de bookstore //*Todos los nodos del documento 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::*
Operadores OperadorDescripciónEjemploValor de Retorno |Calcula dos conjuntos de nodos//book | //cdRegresa un conjunto de nodos con book y cd +Suma Resta *Multiplicación6 * 424 divDivisión8 div 42 =Igualdadprice=9.80true si price es 9.80 !=Desigualdadprice!=9.80false si price es 9.80 <Menor queprice<9.80true si price es menor 9.80 <=Menor o igual queprice<=9.80true si price es menor o igual que 9.80 >Mayor queprice>9.80true si price es mayor 9.80 >=Mayor o igual queprice>=9.80true si price es mayor o igual que 9.80 orOprice=9.80 or price=9.70true si price es igual que 9.80 o igual que 9.70 andYprice>9.00 and price<9.90true si price es mayor que 9.00 y menor que 9.90 modModulo (residuo división)5 mod 21 Una expresion XPath regresa un conjunto de nodos, una cadena, un booleano o un número.
Ejes en una trayectoría
Ejes ancestor 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::nombrenombre /ancestor::node()/parent::node()/ /descendant-or-self::node()/// self::node(). parent::node()..
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()
Ejemplo XML Everyday Italian Giada De Laurentiis Harry Potter J K. Rowling XQuery Kick Start James McGovern Per Bothner Kurt Cagle James Linn Vaidyanathan Nagarajan Learning XML Erik T. Ray
Referencias XML in a Nutshell, A Desktop Quick Reference, Elliotte Rusty Harold & W. Scott Means, O’Reilly 2001