La descarga está en progreso. Por favor, espere

La descarga está en progreso. Por favor, espere

XPath Versión: 1.0 Introducción:

Presentaciones similares


Presentación del tema: "XPath Versión: 1.0 Introducción:"— Transcripción de la presentación:

1 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.

2 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.

3 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.

4 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.

5 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

6 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=" 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=" que surca el viento en busca del néctar de las flores...

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

8 Á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...

9 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.

10 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.

11 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.

12 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.

13 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.

14 ● 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.

15 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

16 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

17 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.

18 /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

19 /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.

20 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.

21 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.

22 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 > 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.

23 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

24 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.

25 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

26 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.

27 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

28 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

29 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

30 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 ej. attribute::name se reemplaza Para seleccionar el atributo num que posean los elementos capitulo /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 : Para seleccionar el valor del atributo href del caso anterior: Para seleccionar todos los elementos descendientes de capitulo /libro/capítulo//*

31 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]

32 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]

33 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

34 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()

35 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()

36 <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 > A-401 banco-2/cliente/nombre-cliente/text() José María Consultas y resultados:

37 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). Ejemplo: Seleccionar todos los elementos capitulo que tengan un parrafo que tenga algún elemento con atributo href:

38 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”: También se puede hacer uso del operador and encerrando entre paréntesis los distintos predicados logicos. También se puede hacer uso de la operación or.

39 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 |   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 función id()… ver + adelante

40 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]

41 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]

42 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 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.

43 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 > 2] La función doc(nombre) devuelve la raiz del documento citado, permite acceder a datos de otro archivo XML.

44 El documento se Encuentra en el archivo ‘po.xml’ Xpath como lenguaje
<?xml version="1.0"?> <purchaseOrder orderDate=“ "> <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> </shipDate> </items> </purchaseOrder> Xpath como lenguaje de consulta para XML El documento se Encuentra en el archivo ‘po.xml’

45 document(“po.xml”)/purchaseOrder/@orderDate[../shipTo/
Seleccionar la fecha de la orden de compra si fue enviada a Belgica: @country=“Belgium”] 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]

46 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: [../shipTo/city/text()=../billTo/city/text()]


Descargar ppt "XPath Versión: 1.0 Introducción:"

Presentaciones similares


Anuncios Google