XPath Versión: 1.0 Introducción:

Slides:



Advertisements
Presentaciones similares
Support.ebsco.com Como crear una Colección Local Tutorial.
Advertisements

integridad referencial
Lunes 18 de Febrero 2008 Material para la clase: Elprofe3.wordpress.com.
UNIX COMP 240.
Rocío Contreras Águila Primer Semestre 2010
CI-2413 Desarrollo de Aplicaciones para Internet
XML XQuery.
Curso de Microsoft® Access® 2010
Enlaces con variables en la URL en PHP Programación en Internet II.
Curso de Microsoft® Word 2010
COLEGIO DE BACHILLERES PLANTEL 13 XOCHIMILCO-TEPEPAN MATERIA:TIC EQUIPO:23 PRESENTACION: BASE DE DATOS ALUMNAS: Velazquez Corona Elsa Ponciano Antonio.
LÓGICA DE PROGRAMACIÓN
Aprendizaje de Microsoft® Access® 2010
DOM ( Document Object Model) Prof. Franklin Cedeño.
Tema: Técnicas Básicas Excel (III) Trucos, opciones y personalización de Excel Índice: 1 Vínculos absolutos y relativos, conectando datos de Excel con.
DIAGRAMAS DE FLUJO Y PSEUDOCÓDIGO
INTELIGENCIA ARTIFICIAL
DIAGRAMAS DE FLUJO Y PSEUDOCÓDIGO
JSP Copyright ISIPE – Instituto de Servicios Informáticos para Empresas – Universidad Siglo 21 – Cualquier copia u otro uso debe ser autorizado expresamente.
Cómo consultar una base de datos o un catálogo en 5 minutos
ALGORÍTMICA Dpto. Ingeniería de Sistemas y Automática
DIAGRAMAS DE CLASES Completando los diagramas de interacción, es posible identificar la especificación de las clases que participarán en la solución indicando.
Tema: Funciones en Excel (II) Funciones de Texto
Las variables en PHP Programación en Internet II.
Al término de la clase, el alumno reconoce las ventajas de usar JAVASCRIPT para un proyecto web.
Ingeniero Anyelo Quintero
Ing. Cleyver Vazquez Jijon
Como empezar en Access 2000 Abrir Access 2000 Pulsamos INICIO
BASE DE DATOS I Clase # 1.
Curso: XML, de los datos a la presentación Julio de 2005 CAPTIVA · XPath.
Almacenar variables en cookies en PHP
XML no predefine la apariencia de los elementos. Se requiere una descripción aparte mediante una hoja de estilo. XSL (eXtensible Stylesheet Language) es.
Características y elementos fundamentales J.M. Morales-del-Castillo
Definition Type Document (DTD)
Switch en PHP Programación en Internet II. Switch en PHP Programación en Internet II Universidad de Guadalajara | Centro Universitario de la Costa Elegir.
 El primer navegador Web incluía un lenguaje de estilo interno que utilizaba dicho navegador para mostrar las páginas HTML.  Sin embargo estos primeros.
ESTRUCTURAS DE DATOS I Conocer, comprender y analizar algunos de los principales tipos de estructuras de datos.
Sistema de archivos Sistemas operativos.
XQuery. 2 Introducción De acuerdo al incremento en la cantidad de información que es almacenada, intercambiada y presentada usando XML, la habilidad para.
3. Espacios de trabajo. Manual de formación 2 3. Espacios de trabajo 3.1 Introducción … ……pág.45.
EXPRESIONES Y SENTENCIAS
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.
JOHAN ALEJANDRO SALAZAR MANUELA OCHOA 11 C  Una página web es un documento electrónico diseñado para el World Wide Web (Internet) que contiene.
NOMBRES:OLIVARES ALFARO JOSE L. BONETTI ARON GRUPO:308.
WORLD WIDE WEB Lenguaje HTML
Introducción a XML por Joel Candia C Universidad Técnica Federico Santa María Departamento de Electrónica ELO-330 Programación de Sistemas.
El lenguaje HTML Este lenguaje nos permite estructurar documentos. La mayoría de los documentos tienen estructuras comunes (títulos, parrafos, listas...)
COLEGIO DE BACHILLERES PLANTEL 13 XOCHIMILCO-TEPEPAN MATERIA:TIC EQUIPO:21 PRESENTACION: BASE DE DATOS ALUMNAS: Adán Millán Sánchez.
Términos algoritmo diseñar algoritmo implementar algoritmo
ELEMENTOS DE COMPUTACIÓN Profesor: Guillermo Figueroa
Profesora: Laura Patricia Pinto Prieto Ingeniera de sistemas Introducción a Programación 3.
DIRECCIONES URL Las siglas URL corresponden a las palabras inglesas Universal Resource Locator, que en español viene a significar algo así como "Localizador.
Hoja de Cálculo EXCEL Introducción a la informática
Las fórmulas más usadas en excel
ACCESS  Para los campos Texto, esta propiedad determina el número máximo de caracteres que se pueden introducir en el campo. Siendo por defecto.
Tipos de Datos.
Devuelve el valor lógico FALSO. Sintaxis: FALSO( ) Observación: También puede escribir la palabra FALSO directamente en la hoja de cálculo o en la fórmula.
Introducción al lenguaje PROCESSING para ARDUINO
Lic. Carla Aguirre Montalvo
Colegio de Bachilleres Plantel 13 Xochimilco - Tepepan
INTERFAZ DE ACCESS  Access es un sistema gestor de bases de datos relacionales (SGBD). Una base de datos suele definirse como un conjunto de información.

ARREGLOS BIDIMENSIONALES MATRICES Son un espacio de almacenamiento continuo, que contiene una serie de elementos del mismo tipo de datos. Desde el punto.
Lenguaje de Programación LISP
INTEGRANTE: FLORES GODOY JUAN E. Grupo:308. Una tabla es una colección de datos sobre un tema específico, como productos o proveedores. Al usar una tabla.
Dado que una colección esta gestionada por una clase dentro del lenguaje que estamos utilizando, y en cierta forma no se tiene un control total.
Arquitectura de Computadoras (Taller) Semestre II de 2008.
3.6 Manejo de E/S Estructuras En la creación de soluciones para algunos problemas surge la necesidad de agrupar datos de diferente tipo o de manejar datos.
DML Transact SQL Sesión VI Trabajando con subconsultas.
Excel 2013 Informática en los negocios lci. Excel 2013  ¿Qué es un RANGO en Excel?  Es un conjunto de celdas contiguas que pueden ser seleccionadas.
Transcripción de la presentación:

XPath Versión: 1.0 Introducción: ● XPath es el resultado de un esfuerzo para proporcionar una sintaxis y semántica comunes para funcionalidades compartidas entre XSL Transformations [XSLT] y XPointer [XPointer]; y es a su vez la base sobre la que se han especificado nuevas herramientas para el tratamiento de documentos XML. Herramientas tales como XLink y XQL, que están cambiando el modo en que actualmente concebimos la navegación por la Web. ●Así, XPath sirve para indicar a una hoja de estilo como procesar el contenido de una página XML, pero también para cargar en un navegador determinadas zonas de una página XML, en vez de toda la página. ● El propósito primario de XPath es direccionar partes de un documento XML, seleccionar y hacer referencia a texto, elementos, atributos y cualquier otra información contenida dentro de un documento XML y localizar nodos que cumplen con determinado patrón.

XPath Versión: 1.0 ●Todo el procesamiento a realizar sobre un archivo XML está basado en la posibilidad de direccionar o acceder a cada una de las partes que lo componen, de modo que podamos tratar cada uno de los elementos en forma diferenciada. ● El tratamiento de un documento XML comienza por la localización del mismo a lo largo del conjunto de documentos existentes. Para realizar esta localización de forma unívoca, se utilizan los URI (Unifom Resource Identifiers), de los cuales los URL (Unifom Resource Locators) son sin duda los más conocidos. ● Una vez localizado el documento XML, una forma de seleccionar información dentro de él es mediante el uso de XPath, que es la abreviación de XML Path Language.

El modelo de datos de XPath Árbol de Nodos ● XPath opera sobre un documento XML considerándolo como un árbol. Este modelo es solamente conceptual y no impone ninguna implementación en particular. Existen siete tipos de nodos: • nodos raíz • nodos elemento • nodos texto • nodos atributo • nodos espacio de nombres • nodos instrucción de procesamiento • nodos comentario ● Hay una ordenación, el nodo raíz será el primer nodo. Los nodos elemento se ordenan de acuerdo al orden de aparición de sus etiquetas en el documento XML. Los nodos atributo y los nodos espacio de nombres de un elemento aparecen antes que los hijos de dicho elemento. Los nodos espacio de nombres aparecen por definición antes que los nodos atributo.

El modelo de datos de XPath Árbol de Nodos ● Un documento XML es procesado por un analizador (o parser) construyendo un árbol de nodos. Este árbol comienza con un elemento raíz, que se expande a lo largo de los elementos que cuelgan de él y acaba en nodos hoja, que contienen solo texto, comentarios, Instrucciones de procesamiento o incluso que están vacíos y sólo tienen atributos ●A continuación se muestra un ejemplo de cómo se convierte en árbol un documento XML. En primer lugar se muestra el documento XML y a continuación el árbol que genera.

Instrucciones de procesamiento Una instrucción de procesamiento es un medio de transmitir pautas para el procesador de XSLT acerca de cómo manejar algo.  XML permite la colocación de instrucciones de procesamiento en cualquier lugar en un documento. Una instrucción de procesamiento (a veces referida como un IP) utiliza una sintaxis especial para indicar que no se trata de un elemento, comentario, o texto  <? nombre contenido ?>  Por ejemplo: <? dbfo bgcolor = "# AAAAAA"?> La primera palabra de una IP es el nombre. En este ejemplo, el nombre de la instrucción de procesamiento es dbfo y el contenido es bgcolor = "# AAAAAA" . Al contenido se lo llama "pseudo atributo", ya tiene un parecido con el par nombre-valor de un verdadero atributo. Pueden ponerse varios pseudo atributos en una IP, o puede ponerse cada uno de ellos en su propia IP. Diapositiva anterior

Documento XML <libro> <titulo>Dos por tres calles</titulo> <autor>Josefa Santos</autor> <capitulo num="1"> La primera calle <parrafo> Era una sombría noche del mes de agosto... </parrafo> <parrafo destacar="si"> Ella, inocente cual <enlace href="http://www.mariposa.es">mariposa</enlace> que surca el cielo en busca de libaciones... </parrafo> </capitulo> <capitulo num="2" public="si"> La segunda calle <parrafo>Era una oscura noche del mes de septiembre...</parrafo> <parrafo> <enlace href="http://www.abejilla.es">abejilla</enlace> que surca el viento en busca del néctar de las flores...

<apendice num="a" public="si"> La tercera calle <parrafo> Era una densa noche del mes de diciembre... </parrafo> Ella, cándida cual <enlace href="http://www.pajarillo.es">pajarillo</enlace> que surca el espacio en busca de bichejos para comer... </apendice> </libro>

Árbol generado / | +---libro +---titulo | | | | | +---(texto)Dos por tres calles +---autor | +---(texto)Josefa Santos +---capitulo [num=1] | +---(texto)La primera calle | +---parrafo | | | | | +---(texto)Era una sombría noche ... | | | +---(texto)Ella, inocente cual mariposa... +---capitulo [num=2] +---(texto)La segunda calle +---parrafo | +---(texto)Era una oscura noche ... +---(texto)Ella, cual inocente abejilla...

Tipos de Nodos Existen distintos tipos de nodos en un árbol generado a partir de un documento XML, a saber: raíz, elemento, atributo, texto, comentario e instrucción de procesamiento. Nodo Raíz Se identifica por /. No se debe confundir el nodo raíz con el elemento raíz del documento. Así, el documento XML de nuestro ejemplo tiene por elemento raíz a libro, éste es el primer nodo que cuelgua del nodo raíz del árbol, que es / Nodo Elemento Cualquier elemento de un documento XML se convierte en un nodo elemento dentro del árbol. El nodo padre de cualquier elemento es, a su vez, un elemento, excepto el elemento raíz, cuyo padre es el nodo raíz.

Nodo Elemento… Los nodos elemento tienen a su vez hijos, que son: nodos elemento, nodos texto, nodos comentario y nodos de intrucciones de proceso. ● Los nodos elemento también tienen propiedades tales como su nombre, sus atributos e información sobre los "espacios de nombre" que tengan activos. ● Una propiedad interesante de los nodos elemento es que pueden tener identificadores únicos (para ello deben ir acompañados de un DTD que especifique que dicho atributo toma valores únicos), esto permite referenciar a dichos elementos de una forma mucho más directa.

Nodos comentario y de instrucciones de proceso Nodos texto Por texto vamos a hacer referencia a todos los caracteres del documento marcados con alguna etiqueta. Un nodo texto no tiene hijos, es decir, los distintos caracteres que lo forman no se consideran hijos. Nodos atributo Como ya hemos indicado, los nodos atributo no son considerados hijos del nodo elemento que los contiene sino propiedades de dicho nodo elemento. ● Cada nodo atributo consta de un nombre y un valor (que es siempre un string) y un posible "espacio de nombres". Nodos comentario y de instrucciones de proceso En el árbol también se “generan” nodos para cada nodo con comentarios o con intrucciones de proceso.

Expresiones Conceptos Básicos Expresiones Una "instrucción" en lenguaje XPath se denomina una expresión. (XPath es un lenguaje declarativo por eso instrucción está entre comillas). ● Una expresión es la construcción sintáctica básica en XPath. Son evaluadas para producir un objeto, que tendrá uno de los siguientes cuatro tipos básicos: • Conjunto de nodos (una colección desordenada de nodos sin duplicados) • booleano (verdadero o falso) • número (un número en punto flotante) • cadena de caracteres La sintaxis de una expresión de camino es similar a la usada para describir los directorios en Unix o Linux. Sin embargo, el significado de las expresiones es totalmente diferente.

Expresiones de camino (“Location Paths”) Conceptos Básicos… ● La evaluación de expresiones se realiza respecto a un contexto, dado básicamente por el llamado nodo contextual. ● Para comprender mejor el concepto de contexto, pensemos en un árbol que contiene nodos. Al buscar desde la raíz del árbol todos los nodos con el nombre X se obtiene un conjunto de resultados, mientras que si lo hacemos desde una rama del árbol se obtiene un conjunto diferente de resultados. Por tanto, el resultado de una expresión depende del contexto en el cual se ejecute.

● El resultado que entrega un camino de localización, es el Expresiones de camino… ● Un tipo importante de expresión son las expresiones de camino de localización (“Location Path”). ● El resultado que entrega un camino de localización, es el conjunto de nodos seleccionados al evaluar dicho camino. Hay que considerar una expresión XPath como un “predicado”, que devuelve todo lo que encaja con dicho predicado ● El concepto de "nodo contexto" es imprescindible para comprender cómo se lleva a cabo la elección de los nodos que cumplen con el patrón indicado en la expresión. El nodo contexto cambia con cada /, que actúa como separador de los pasos de localización.

Nodo actual vs nodo contexto Expresiones de camino… Nodo actual vs nodo contexto • Nodo actual (current node) –Es un nodo que está seleccionado cuando se va a evaluar una expresión XPath –Constituye el punto de partida al evaluar la expresión • Nodo contexto (context node) –Cada vez que se evalúa una sub-expresión se obtiene un nuevo conjunto de nodos (node-set) que es el nuevo contexto para evaluar la siguiente subexpresión. • Tamaño del contexto (context size) –El número de nodos que se están evaluando en un momento dado en la expresión XPath

Nodo actual vs nodo contexto… Expresiones de camino… Nodo actual vs nodo contexto… ● En la mayor parte de los casos son la misma cosa. El nodo actual es sobre el que se está operando, normalmente ocurre que éste es también el nodo contexto, pero el nodo contexto tiene un significado especial dentro de las expresiones anidadas (van entre corchetes). En ellas el nodo contexto se refiere al nodo que está siendo testeado en busca de coincidencias (tested for a match). De ahí que el nodo contexto cambia dentro de las expresiones, pero no el nodo actual. ● A causa de esto es útil poder recuperar desde una sub- expresión el nodo original para el cual la expresión está siendo evaluada. Para ello podemos usar la función current() cuya utilidad es dar acceso al nodo actual cuando este no es el mismo que el nodo contexto. ● El nodo contexto se abrevia con un punto (.) o a veces directamente se omite

Expresiones de camino… ●Hay dos tipos de caminos de localización: caminos de localización relativos y caminos de localización absolutos. ● Un camino de localización relativo consiste en una secuencia de uno o más pasos de localización separados por /. Los pasos en un camino de localización relativo se componen de izquierda a derecha. Una secuencia inicial de pasos se une al paso siguiente de la siguiente forma. La secuencia inicial de pasos selecciona un conjunto de nodos relativos a un nodo de contexto. Cada nodo de ese conjunto se usará como nodo de contexto para el siguiente paso. Los distintos conjuntos de nodos identificados por ese paso se unen. Por ejemplo, child::emple/child::nombre selecciona los elementos nombre hijos de los elementos emple hijos del nodo contextual, o, en otras palabras, los elementos nombre nietos que tengan padres emple. ● Un camino de localización absoluto consiste en / seguido opcionalmente por un camino de localización relativo. Una / por si misma selecciona el nodo raíz del documento. Si es seguida por un camino de localización relativo, entonces el camino de localización selecciona el conjunto de nodos que seleccionaría el camino de localización relativo con el nodo raíz del documento como nodo contextual.

/libro/capitulo/parrafo Expresiones de camino… ● Para explicar lo anterior, veamos cómo actuaría un motor de evaluación de expresiones XPath al leer la siguiente expresión aplicada al documento XML del ejemplo libro: /libro/capitulo/parrafo

/libro/capitulo/parrafo Expresiones de camino… evaluación de expresiones XPath … /libro/capitulo/parrafo ● La primera / indica que debe seleccionar el nodo raíz, en el momento en que el evaluador de XPath localiza el nodo raíz, éste pasa a ser el nuevo nodo contexto de dicha expresión. El analizador continua leyendo la expresión XPath y llega a parrafo, entonces deben seleccionarse TODOS los elementos parrafo que cuelgan del nuevo nodo contexto...¡¡pero NO hay un capítulo, sino 2 Bueno, no pasa nada, cada uno de los nodos de ese conjunto de nodos va a tener “su momento”, el evaluador de expresiones los va a recorrer uno por uno haciendo que, mientras evalúa un determinado nodo, ése sea el nodo contexto. En otras palabras, para localizar todos los elementos parrafo, se procesa el primer elemento capitulo y de él se extraen todos los parrafos que contenga. A continuación se pasa al próximo elemento capitulo del cual se vuelven a extraer todos los parrafos que tenga... y así sucesivamente. El resultado final es un conjunto de nodos que encajan con el patrón buscado.

Expresiones de camino… Pasos de localización ● Un paso de localización es cada paso de una ruta de localización (separados por /) y consiste en: ● Un eje de dirección (axis), que especifica la relación jerárquica entre los nodos seleccionados por el paso de localización y el nodo contextual. ● Una prueba de nodo (node test), que especifica el tipo de nodo y el nombre-expandido (algunos tipos de nodo tienen un nombre expandido, que es un par formado por una parte local y un URI de espacio de nombres). ● Cero o más predicados, para refinar aún más el conjunto de nodos seleccionado por el paso de localización. • El eje a veces está implícito (no se pone). El predicado es opcional. La sintaxis del paso de localización es: eje::node_test[predicado] Por ejemplo, en child::nombre[position()=1] , child es el eje, nombre es la prueba de nodo y [position()=1] es un predicado.

Expresiones de camino… Pasos de localización… ● El conjunto de nodos seleccionado por el paso de localización es el que resulta de generar un conjunto de nodos inicial a partir del eje y prueba de nodo, y a continuación filtrar dicho conjunto por cada uno de los predicados en forma sucesiva. ● El conjunto de nodos inicial se compone de los nodos que tengan la relación con el nodo contextual que se especifica en el eje, y tengan el tipo de nodo y nombre especificados por la prueba de nodo. Por ejemplo, un paso de localización descendant::nombre selecciona los elementos nombre descendientes del nodo contextual, cada nodo en el conjunto de nodos inicial debe ser un descendiente del contexto y ser un elemento llamado nombre.

Expresiones de camino… Los atributos son accedidos usando “@” Las expresiones de camino son evaluadas de izquierda a derecha Cada paso opera sobre el conjunto de instancias producido por el paso previo Un predicado de selección puede seguir a cualquier paso de un camino, se expresa entre [ ] Ejemplos: /banco/cuenta [balance > 400] Retorna los elementos cuenta con balance mayor que 400 /banco/cuenta [balance] retorna elementos cuenta que contengan un subelemento balance /banco/cuenta [balance > 400]/@número_cuenta Devuelve los números_de_cuenta de las cuentas que tengan balance > 400 Un paso del camino puede ir a padres, hermanos, ancestros y descendientes de los nodos generados en un paso previo, y no necesariamente a un hijo.

Expresiones de camino… Pasos de localización: Ejes Los ejes disponibles son: ancestor, ancestor-or-self, attribute, child, descendant, descendant-or-self, following, following-sibling, namespace, parent, preceding, preceding-sibling, self • El eje y la prueba de nodo se separan mediante el operador :: • Dicho operador equivale a “que es un”, pero sus argumentos se leen de derecha a izquierda. • child está implícito y casi nunca se pone. Para el nodo raíz, está implícito self (self denota al nodo de contexto) • Ejemplo: /emple/child::nombre/following-sibling::* Selecciona todos los nodos que son “hermanos después de” nombre (en el orden del documento) que es hijo de emple eje::pruebanodo[predicado] contexto cq nodo

Pasos de localización: Ejes… Expresiones de camino… Pasos de localización: Ejes… El eje child contiene los hijos del nodo contextual. El eje descendant contiene los descendientes del nodo contextual; un descendiente es un hijo o el hijo de un hijo, etc; de modo que el eje descendant nunca contiene nodos atributo o espacio de nombres. El eje parent contiene el  padre del nodo contextual, si lo hay. El eje ancestor contiene los ancestros del nodo contextual; los ancestros del nodo contextual consisten en el  padre del nodo contextual y el padre del padre, etc; así, el eje ancestor siempre incluirá al nodo raíz, salvo que el nodo contextual sea el nodo raíz.

Expresiones de camino… Pasos de localización: Ejes… El eje  following-sibling contiene todos los siguientes hermanos del nodo contextual; si el nodo contextual es un nodo atributo o un nodo espacio de nombres, el eje following-sibling está vacío. El eje preceding-sibling contiene todos los hermanos precedentes del nodo contextual; si el nodo contextual es un nodo preceding-sibling está vacío El eje following contiene todos los nodos del mismo documento que el nodo contextual que están después de este según el orden del documento, excluyendo los descendientes y excluyendo nodos atributo y nodos espacio de nombres. El eje preceding contiene todos los nodos del mismo documento que el nodo contextual que están antes de este según el orden del documento, excluyendo los ancestros y

Expresiones de camino… Pasos de localización: Ejes… El eje attribute contiene los atributos del nodo contextual; el eje estará vacío a no ser que el nodo contextual sea un elemento. El eje namespace contiene los nodos espacio de nombres del nodo contextual; el eje estará vacío a no ser que el nodo contextual sea un elemento. El eje self contiene simplemente el propio nodo contextual. El eje descendant-or-self contiene el nodo contextual y sus descendientes. El eje ancestor-or-self contiene el nodo contextual y sus ancestros; así, el eje ancestor-or-self siempre incluirá el nodo raíz.

Expresiones de camino… Pasos de localización: Ejes… Ejemplos: child::a selecciona los elementos hijo con nombre a del nodo contexto child::* selecciona todos los elementos hijo del nodo contexto child::text() selecciona todo el texto hijo del nodo contexto child::node() selecciona todo (elemento o texto) hijo del nodo contexto attribute::a selecciona el atributo con nombre a del nodo contexto attribute::* selecciona todos los atributos del nodo contexto descendant::a selecciona los elementos descendiente del nodo contexto de nombre a descendant-or-self::a selecciona los elementos descendiente con nombre a del nodo contexto y el propio nodo contexto si tiene ancestor::a selecciona todos los ancestros con nombre a del nodo contexto ancestor-or-self::a selecciona todos los ancestros con nombre a del nodo contexto y el propio nodo contexto si este tiene nombre a self::a selecciona el nodo contexto si este tiene nombre a, en caso contrario no selecciona nada

Expresiones de camino… Pasos de localización: Ejes:… ejemplos child::capítulo/descendant::a selecciona los descendientes con nombre a de los elementos hijo con nombre capítulo del nodo contexto child::*/child::a selecciona todos los nietos con nombre a del nodo contexto / selecciona la raiz del documento /descendant::a selecciona todos los elementos de nombre a en el mismo documento del nodo contexto /descendant::a/child::b selecciona todos los elementos con nombre b que tienen un padre con nombre a en el mismo documento del nodo contexto child::a[position()=1] selecciona el primer hijo con nombre a del nodo contexto child::a[position()=last()] selecciona el último hijo con nombre a del nodo contexto child::a[position()=last()-1] selecciona el penúltimo hijo con nombre a del nodo contexto child::a[position()>1] selecciona todos los hijos con nombre a del nodo contexto excepto el primero

Expresiones de camino… Pasos de localización: Ejes… ejemplos following-sibling::capítulo[position()=1] selecciona el siguiente capítulo hermano del nodo contexto preceding-sibling::capítulo[position()=1] selecciona el capítulo hermano anterior del nodo contexto /descendant::figura[position()=12] selecciona el elemento 12 con nombre figura en el documento child::a[attribute::tipo=“warning”] selecciona todos los hijos de nombre a del nodo contexto que tienen un atributo de nombre tipo y valor “warning” child::a[attribute::tipo=“warning”][position()=5] selecciona el 5to hijo con nombre a del nodo contexto que tenga un atributo con nombre tipo y valor “warning” child::capítulo[child::título] selecciona el capítulo hijo del nodo contexto que tenga uno o más hijos con nombre título child::*[self::capítulo or self::apéndice] selecciona el capítulo y apéndice de los hijos del nodo contexto

Expresiones de camino… Pasos de localización: Ejes… Sintaxis abreviada (Se usa más que la sintaxis no abreviada) child:: se omite ej. child::name se reemplaza por name attribute:: se abrevia @ ej. attribute::name se reemplaza por @name Para seleccionar el atributo num que posean los elementos capitulo /libro/capitulo/@num /descendant:: se abrevia // y se usa para saltar múltiples niveles de nodos (es un atajo a los descendientes) ejemplos: Para seleccionar todos los parrafo de un libro: /libro//parrafo Para seleccionar todos los descendientes de parrafo que tienen un atributo href : //parrafo//*[@href] Para seleccionar el valor del atributo href del caso anterior: //parrafo//*[@href]/@href Para seleccionar todos los elementos descendientes de capitulo /libro/capítulo//*

Expresiones de camino… Pasos de localización: Ejes… Sintaxis abreviada self::node() Se abrevia mediante un punto . Es muy útil pues sirve para seleccionar el nodo contexto. Por ejemplo, supongamos que deseamos seleccionar todos los elementos parrafo descendientes del nodo contexto. No podemos escribir //parrafo, dado que seleccionaría todos los descendientes del nodo raíz. Por ello, la forma correcta es: .//parrafo otro ej. self::node()/descendant-or-self::node()/child::name se reemplaza por .//name parent::node() se abrevia .. Realiza un paso hacia atrás en el árbol de nodos (especifica a los padres), por ejemplo: /../../ sube 2 niveles ej. parent::node()/child::title se reemplaza por ../title position()= se omite ej. [position()=1] se reemplaza por [1]

Expresiones de camino… Sintaxis abreviada... Ancestor no tiene ninguna forma abreviada, sino que hay que ponerlo como ancestor:: Ejemplos con sistaxis abreviada a selecciona los elementos hijo con nombre a del nodo contexto * selecciona los elementos hijos del nodo contexto node() selecciona los elementos y texto hijos del nodo contexto @a selecciona el atributo con nombre a del nodo contexto @* selecciona todos los atributos del nodo contexto */a seleccioma todos los elementos nietos con nombre a del nodo contexto /doc/chapter[5]/section[2] es una abreviación de: /child::doc/child::chapter[position()=5]/child::section[position()=2]

Expresiones de camino… Ejemplos con sistaxis abreviada chapter//a es una abreviación de chapter/descendant-or-self::node()/child::a //a es una abreviación de /descendant-or-self::node()/child::a ./a es una abreviación de self::node()/child::a, y es equivalente a child::a chapter/./a es una abreviación de child::chapter/self::node()/child::a, y es equivalente a child::chapter/child::a o chapter/a */.. es una abreviación de child::*/parent::node() Selecciona el nodo contexto si tiene hijos, en caso contrario nada es selecc. /descendant::a[1] es una abreviación de /descendant::a[position()=1] selecciona el primer nombre a descendiente de la raiz

Prueba de nodos (node tests) Expresiones de camino… Prueba de nodos (node tests) * devuelve todo nodo del tipo principal que son: elemento, atributo o espacio de nombres, pero no nodos de texto, comentarios, y de instrucciones de proceso. Ejemplo: Seleccionar todos los nodos principales descendientes de parrafo: //parrafo/* comment() Devuelve cualquier nodo de tipo comentario. processing-instruction() Devuelve cualquier nodo del tipo instrucción de proceso. node() devuelve todos los nodos de todos los tipos. Seleccionar todos los nodos descendientes de parrafo: //parrafo/node()

Expresiones de camino… text() devuelve nodos de tipo texto. Mientras que /banco/cliente/nombre_cliente devolvería: <nombre_cliente>José</nombre_cliente> <nombre_cliente>María</nombre_cliente> La expresión /banco/cliente/nombre_cliente/text( ) devuelve los mismos nombres pero sin etiquetas: José Maria Seleccionar todo el texto que cuelga de todos los nodos parrafo: //parrafo//text()

<cuenta número-cuenta=“A-401” clientes=“C100 C102”> <banco-2> <cuenta número-cuenta=“A-401” clientes=“C100 C102”> <sucursal> Centro </sucursal> <saldo> 500 </saldo> </cuenta> <cliente cliente-id=“C100” cuentas=“A-401”> <nombre-cliente>José< /nombre-cliente> <calle-cliente>Mártires< /calle-cliente> <ciudad-cliente>Mendoza< /ciudad-cliente> </cliente> <cliente cliente-id=“C102” cuentas=“A-401 A-402”> <nombre-cliente>María</nombre-cliente> <calle-cliente>P.Argentinos</calle-cliente> <ciudad-cliente>San Juan</ciudad-cliente> </cliente > </banco-2> banco2/cuenta [saldo > 400] <cuenta número-cuenta=“C-401” clientes=“C100 C102”> <sucursal> Centro </sucursal> <saldo>500 </saldo> </cuenta> banco2/cuenta [saldo > 400]/@número-cuenta A-401 banco-2/cliente/nombre-cliente/text() José María Consultas y resultados:

Predicados de selección Expresiones de camino… Predicados de selección Para restringir la selección de nodos se utilizan predicados. Los predicados se incluyen dentro de una expresión de camino utilizando corchetes [ ], veamos un par de ejemplos: Ejemplo:Seleccionar todos los elementos parrafo de todos los elementos capitulo que tengan un atributo llamado num al cual se le haya asignado el valor "1" (recordemos que en XML los atributos tienen valores de tipo string). /libro/capitulo[@num="1"]/parrafo Ejemplo: Seleccionar todos los elementos capitulo que tengan un parrafo que tenga algún elemento con atributo href: //capitulo[parrafo/*[@href]]

Predicados.. Expresiones de camino… Los predicados se pueden suceder uno a otro haciendo el efecto de la operación AND. Como en el siguiente ejemplo. Ejemplo: Seleccionar todos los elementos capítulo que tengan un párrafo que tenga algún elemento con atributo href y que ellos mismos (los capitulos) tengan el atributo llamado public en valor “si”: //capitulo[parrafo/*[@href]][@public='si'] También se puede hacer uso del operador and encerrando entre paréntesis los distintos predicados logicos. //capitulo[(parrafo/*[@href]) and (@public='si')] También se puede hacer uso de la operación or.

función id()… ver + adelante Expresiones de camino… Predicados.. El operador “|” es usado para implementar union y se aplica entre dos expresiones XPath. Ejemplo: Seleccionar los clientes que tengan cuentas o préstamos /banco/cuenta/id(@propietario) | /banco/prestamo/id(@prestatario)   Por último, también podemos especificar con not la negación de alguna condición. Ejemplo: Seleccionar todos los capitulos que no tengan el atributo public //capitulo[not(@public)] función id()… ver + adelante

Expresiones de camino… Predicados con funciones Xpath Existen ciertas funciones que sirven para restringir el conjunto de nodos devueltos en una expresión XPath. Tales funciones son: position(), last() e id(). position() Seleccionar el segundo capitulo: //capitulo[position()=2] Esta función se puede simular poniendo simplemente el número entre corchetes. Para seleccionar el segundo capitulo: //capitulo[2]

Expresiones de camino… Predicados con funciones Xpath.. last() Seleccionar el último capitulo: //capitulo[last()] Seleccionar todos los capítulo menos el último: //capitulo[not(position()=last())] Estas funciones se pueden usar con expresiones matemáticas, como en el siguiente ejemplo. Seleccionar el penúltimo capitulo: //capitulo[last()-1]

Expresiones de camino… funciones Xpath.. id(): IDREFs pueden ser referenciados usando la función id() Puede ser aplicado a conjuntos de referencias IDREFS y aún a strings conteniendo múltiples referencias separadas por blancos. Seleccionar los parrafos hijos del elemento con id="capitulo_1" : id( "capitulo_1" )/parrafo Seleccionar todos los clientes referenciados desde el atributo propietario de los elementos cuenta. /banco/cuenta /id(@propietarios) Hay que tener en cuenta un detalle. Solo se podrá usar en aquellos documentos XML que sean validados por un DTD en el que se especifique que el atributo id es único.

Expresiones de camino… Predicados con funciones Xpath.. La función count() cuenta el número de elementos del conjunto generado por el path. Seleccionar cuentas que pertenecen a más de 2 clientes /banco/cuenta[count(./@propietarios) > 2] La función doc(nombre) devuelve la raiz del documento citado, permite acceder a datos de otro archivo XML.

El documento se Encuentra en el archivo ‘po.xml’ Xpath como lenguaje <?xml version="1.0"?> <purchaseOrder orderDate=“2004-10-20"> <shipTo country="US"> <name>Alice Smith</name> <street>123 Maple Street</street> <city>Mill Valley</city> <state>CA</state> <zip>90952</zip> </shipTo> <billTo country="US"> <name>Robert Smith</name> <street>8 Oak Avenue</street> <city>Old Town</city> <state>PA</state> <zip>95819</zip> </billTo> <comment>Hurry, my lawn is going wild!</comment> <items> <item partNum="872-AA"> <productName>Lawnmower</productName> <quantity>1</quantity> <USPrice>148.95</USPrice> <comment>Confirm this is electric</comment> </item> <item partNum="926-AA"> <productName>Baby Monitor</productName> <USPrice>39.98</USPrice> <shipDate>2004-12-21</shipDate> </items> </purchaseOrder> Xpath como lenguaje de consulta para XML El documento se Encuentra en el archivo ‘po.xml’

document(“po.xml”)/purchaseOrder/@orderDate[../shipTo/ Seleccionar la fecha de la orden de compra si fue enviada a Belgica: document(“po.xml”)/purchaseOrder/@orderDate[../shipTo/ @country=“Belgium”] document(“po.xml”)/purchaseOrder[shipTo/@country= “Belgium”]/@orderDate Seleccionar el item que fué enviado a Mechelen cuyo precio es mayor que 40: document(“po.xml”)//item[USPrice/text()>40 and (../../billTo/city/text()="Mechelen")] Seleccionar la orden de compra si el precio de todos sus items es mayor que 40: document(“po.xml”)/purchaseOrder[not(.//USPrice/text() <=40)] Seleccionar la orden de compra si el precio de alguno de sus items es > 40: document(“po.xml”)/purchaseOrder[.//USPrice/text>40]

document(“po.xml”)/purchaseOrder[items/item[2]] Seleccionar la orden de compra si contiene al menos 2 items: document(“po.xml”)/purchaseOrder[items/item[2]] Dado un item, seleccione el precedente en la misma orden de compra: preceding-sibling::*[1] Seleccione la fecha en la cual hay una orden de compra que se paga en la Misma ciudad a la que se envía: document(“po.xml”)/purchaseOrder/@orderDate [../shipTo/city/text()=../billTo/city/text()]