Está en la página 1de 34

Introduccin

De acuerdo al incremento en la cantidad de informacin que es almacenada, intercambiada y presentada usando XML, la habilidad para consultar fuentes de datos XML llega a ser muy importante. El XML tiene la flexibilidad de representar diferentes tipos de informacin desde diversas fuentes. Para explotar esta flexibilidad, un lenguaje de consulta XML debe proveer componentes para obtener e interpretar la informacin desde diversas fuentes.
1

Qu es XQuery?
* XQuery es el lenguaje para consultar datos XML. * XQuery para XML es como el SQL para las BD's. * XQuery fue construido sobre expresiones XPath * XQuery es soportado por la mayor parte de los proveedores de BD's (IBM, Oracle, Microsoft, etc.) * XQuery es una recomendacin W3C.

Por qu necesitamos XQuery?


Actualmente, XML se ha convertido en una herramienta de uso cotidiano. Sin embargo, a medida que se emplea en un mayor nmero de proyectos de complejidad y tamao crecientes y la cantidad de datos almacenados en XML aumenta, se comprueba que, las herramientas ms habituales para manipular desde un programa un rbol con un conjunto de datos en XML, los parsers SAX y DOM, no son prcticas para manejar grandes y complejas colecciones de datos en XML. XQuery es un lenguaje funcional, lo que significa que, en vez de ejecutar una lista de comandos como un lenguaje procedimental clsico, cada consulta es una expresin que es evaluada y devuelve un resultado, al igual que en SQL.
3

Documento XML Ejemplo (libros.xml)

Documento XML Ejemplo (comentarios.xml)

Consultas en XQuery
Una consulta en XQuery es una expresin que lee una secuencia de datos en XML y devuelve como resultado otra secuencia de datos en XML. Un detalle importante es que, a diferencia de lo que sucede en SQL, en XQuery las expresiones y los valores que devuelven son dependientes del contexto. Por ejemplo: los nodos que aparecern en el resultado dependen de los namespaces, de la posicin donde aparezca la etiqueta raz del nodo (dentro de otra, por ejemplo), etc. En XQuery las consultas pueden estar compuestas por clusulas de hasta cinco tipos distintos. Las consultas siguen la norma FLWOR, siendo FLWOR las siglas de For, Let, Where, Order y Return.
7

Consultas en XQuery
En la siguiente tabla se describe la funcin de cada bloque:

Consultas en XQuery
En el siguiente ejemplo de clusula for, la variable $b tomar como valor cada uno de los nodos libros que contenga el archivo libros.xml. Cada uno de esos nodos libros, ser una tupla vinculada a la variable $b.

A continuacin se muestra un ejemplo de una consulta donde aparecen las 5 clausulas.

Resultado de la consulta:

Consultas en XQuery
Las barras: // son parte de la expresin XPath que indica la localizacin de los valores que tomar la variable $b. En esta consulta la funcin count() hace la misma funcin que en SQL, contar el nmero de elementos, nodos en este caso, referenciados por la variable $c. Una expresin FLWOR vincula variables a valores con clusulas for y let y utiliza esos vnculos para crear nuevas estructuras de datos XML.

10

Consultas en XQuery
A continuacin se muestra otro ejemplo de consulta XQuery. La siguiente consulta devuelve los ttulos de los libros del ao 2.000. Como ao es un atributo y no un elemento se le antecede con un carcter @.

Resultado de la consulta:

11

Consultas en XQuery
A continuacin se muestran los resultados parciales de la consulta:

12

Reglas Generales de consultas XQuery


For y let sirven para crear las tuplas con las que trabajar el resto de las clusulas de la consulta y pueden usarse tantas veces como se desee en una consulta, incluso dentro de otras clusulas. Sin embargo solo puede declararse una nica clusula where, una nica clusula order by y una nica clusula return.

Ninguna de las clusulas FLWOR es obligatoria en una consulta XQuery. Por ejemplo, una expresin XPath, como la que se muestra a continuacin, es una consulta vlida y no contiene ninguna de las clusulas FLWOR.

13

Diferencias entre las clusulas For y Let


Consulta con For:

Resultado de la consulta:

14

Diferencias entre las clusulas For y Let


Consulta con Let:

Resultado de la consulta:

Comparando los resultados obtenidos por ambas consultas, la clusula for vincula una variable con cada nodo que encuentre en la coleccin de datos. Por este motivo aparece repetido el par de etiquetas <titulos>...</titulos> para cada ttulo. La clusula let, en cambio, vincula una variable con todo el resultado de una expresin. En este ejemplo, la variable $d se vincula a todos los ttulos de todos los libros del archivo 15 "libros.xml", creando una nica tupla con todos esos ttulos.

Ejemplos de las clusulas For y Let


Si una clusula let aparece en una consulta que ya posee una o ms clusulas for, los valores de la variable vinculada por la clusula let se aaden a cada una de las tuplas generadas por la clusula for. Un ejemplo se muestra en la siguiente consulta:

16

Ejemplos de las clusulas For y Let


Resultado de la consulta:

17

Ejemplos de las clusulas For y Let


Si en la consulta aparece ms de una clusula for (o ms de una variable en una clsula for), el resultado es el producto cartesiano de dichas variables, es decir, las tuplas generadas cubren todas las posibles combinaciones de los nodos de dichas variables. Un ejemplo se muestra en la siguiente consulta, la cual devuelve los ttulos de todos los libros contenidos en el archivo libros.xml y todos los comentarios de cada libro contenidos en el archivo comentarios.xml.

18

Ejemplos de las clusulas For y Let


Resultado de la consulta:

19

Funciones XQuery:
Xquery ofrece adems funciones para la recuperacin de informacin. Estas funciones son:

20

Aplicacin de funciones XQuery


El operador unin recibe dos secuencias de nodos y devuelve una secuencia con todos los nodos existentes en las dos secuencias originales. A continuacin se muestra una consulta que usa el operador unin para obtener una lista ordenada de apellidos de todos los autores y editores:

El resultado de esta consulta se muestra en el siguiente prrafo:

21

Aplicacin de funciones XQuery


El operador de interseccin recibe dos secuencias de nodos como operandos y devuelve una secuencia conteniendo todos los nodos que aparezcan en ambos operandos. El operador de sustraccin (except) recibe dos secuencias de nodos como operandos y devuelve una secuencia conteniendo todos los nodos del primer operando que no aparezcan en el segundo operando. A continuacin se muestra una consulta que usa el operador sustraccin para obtener un nodo libro con todos sus nodos hijos salvo el nodo <precio>.

22

Aplicacin de funciones XQuery


El resultado de esta consulta se muestra en el siguiente prrafo:

23

Aplicacin de funciones XQuery


La funcin distinct-values() extrae los valores de una secuencia de nodos y crea una nueva secuencia con valores nicos, eliminando los nodos duplicados. Por ejemplo, la siguiente consulta devuelve todos los apellidos distintos de los autores.

El resultado de esta consulta se muestra en el siguiente prrafo:

24

Documento XML para consultas: <pelicula fechaEstreno="19/12/2007">


<titulo>Los Otros </titulo> <director>Alejandro Amenabar</director> </pelicula> <pelicula fechaEstreno="15/11/1986"> <titulo>Matrix </titulo> <director>Ethan Coen </director> </pelicula> <pelicula fechaEstreno="14/06/1990"> <titulo>No es pas para pobres </titulo> <director>Ethan Coen </director> <director>Joel Coen </director> </pelicula> <pelicula fechaEstreno="19/12/2007"> <titulo> Harry Potter </titulo> <director> Peter Jackson</director> </pelicula>

las

25

Algunos Ejemplos de Consultas XQuery:


FOR: cada nodo recuperado por la expresin, es vinculado a una nica tupla.
FOR $b IN doc("informacion.xml")//pelcula/director RETURN <directores>$b</directores>

Recuperara:
<directores> <director>Peter Jackson</director> </directores> <directores> <director>Alejandro Amenabar</director> </directores> <directores> <director>Ethan Coen</director> </directores> <directores> <director>Joel Coen</director> </directores>

26

Algunos Ejemplos de Consultas XQuery:


LET: recupera todos los nodos en una nica tupla.
LET $b IN doc("informacion.xml")//pelcula/director RETURN <directores>$b</directores>

Recuperara:
<directores> <director>Peter Jackson</director> <director>Alejandro Amenabar</director> <director>Ethan Coen</director> <director>Joel Coen</director> </directores>
27

Algunos Ejemplos de Consultas XQuery:


WHERE: filtra la informacin de las tuplas devueltas por FOR o LET, recuperando nicamente aquellas que cumplen una expresin.
LET $b IN doc("informacin.xml")//pelcula/director WHERE $b/../@fechaEstreno="19/12/2007" RETURN <directores>$b</directores>

Recuperara:
Recuperara, nicamente los directores que hubiesen estrenado pelcula el da 19-12-2007 (Suponemos fechaEstreno es un atributo por ello ponemos @ delante, el /../ es para subir un nivel en el rbol XML donde est la informacin): <directores> <director>Peter Jackson</director> <director>Alejandro Amenabar</director> </directores>

28

Algunos Ejemplos de Consultas XQuery:


ORDER: organiza la informacin recuperada. Por defecto, organiza por orden ascendente segn el tipo de datos.
FOR $b IN doc("informacin.xml")//pelcula/director ORDER BY $b/../titulo RETURN <directores>$b</directores>

Recuperara los directores ordenador por el titulo de sus pelculas:


<directores> <director>Alejandro Amenabar</director> </directores> <directores> <director>Ethan Coen</director> </directores> <directores> <director>Joel Coen</director> </directores> <directores> <director>Peter Jackson</director> </directores>

29

Algunos Ejemplos de Consultas XQuery:


RETURN: formatea la informacin de salida. Esto tiene muchas utilidades ya que puedes convertir la informacin recuperada a HTML, PDF, o cualquier otro.
En los anteriores ejemplos ya utilizbamos la clausula RETURN para que nos devolviera los resultados entre los tags <directores>.
XQuery tambin admite expresiones condicionales IF-THEN-ELSE. Esta clusula es til para dar un formato diferente a la salida dependiendo de la informacin de esta, es decir, podemos cambiar la estructura de los nodos en los que recuperamos la informacin segn nos convenga por su contenido. El ELSE es obligatorio pero puede ser nicamente ELSE ().

30

Algunos Ejemplos de Consultas XQuery:


Si tuvieramos: FOR $b IN doc("informacin.xml")//pelcula/director RETURN

Entonces:
IF ($b = "Alejandro Amenabar") THEN <espanol>{ $b }</espanol> ELSE <directores>{ $b }</directores>

Recuperara, todos los nodos <director> de todas las pelculas del documento:
<directores> <director>Peter Jackson</director> </directores> <directores> <director>Alejandro Amenabar</director> </directores> <directores> <director>Ethan Coen</director> </directores>

31

Algunos Ejemplos de Consultas XQuery:


Cuantificadores existenciales
XQuery dispone de dos cuantificadores existenciales EVERY: recupera aquellas tuplas en las que todos los nodos cumplan la condicin. SOME: recupera aquellas tuplas en las que algn nodo cumpla la condicin.

Ejemplo:
LET $b IN doc("informacin.xml")//pelcula/titulo WHERE SOME $a in $b/../director SATISFIES ($a = "Ethan Coen") RETURN <titulos>$b</titulos>

Recuperara los ttulos de las pelculas en las que algn director fuera "Ethan Coen"
<titulos> <titulo>Matrix</titulo> <titulo>No es pas para pobres</titulo> </ titulos >

32

Algunos Ejemplos de Consultas XQuery:


Cuantificadores existenciales
Igual pero con EVERY:
LET $b IN doc("informacin.xml")//pelcula/titulo WHERE EVERY $a in $b/../director SATISFIES ($a = "Ethan Coen") RETURN <titulos>$b</titulos>

Recuperara los ttulos de las pelculas en las que todos los directores (en este caso el nico) fueran "Ethan Coen"
<titulos> <titulo>Matrix</titulo> </ titulos >
33

Referencias
http://geocities.com/recuperacioninformacionorganiza/T utorial_XQuery.html
Departamento de Lenguajes y Sistemas Informticos. Escuela Tcnica Superior de Ingeniera Informtica. Universidad de Sevilla. Avda Reina Mercedes, s/n. 41012 SEVILLA. Fax : 95 455 71 39. Tlf: 95 455 71 39. E-mail: lsi@lsi.us.es http://www.lsi.us.es/docs/informes/LSI-2005-02.pdf

34