Está en la página 1de 35

XQuer

y
Rosa Isela Lpez Aguilar
Maestra en Ciencias e Ingeniera
de la Computacin

Octubre 2008

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

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

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

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:

10

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.

11

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:

12

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

13

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.

14

Diferencias entre las clusulas For y Let


Consulta con For:

Resultado de la consulta:

15

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 16
"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:

17

Ejemplos de las clusulas For y Let


Resultado de la consulta:

18

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.

19

Ejemplos de las clusulas For y Let


Resultado de la consulta:

20

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

21

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:

22

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

23

Aplicacin de funciones XQuery


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

24

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:

25

Documento XML para las


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>

26

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>

27

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>
28

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>

29

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>

30

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

31

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>

32

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 >

33

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

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

35

También podría gustarte