Professional Documents
Culture Documents
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.
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.
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
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
Resultado de la consulta:
14
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.
16
17
18
19
Funciones XQuery:
Xquery ofrece adems funciones para la recuperacin de informacin. Estas funciones son:
20
21
22
23
24
las
25
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
Recuperara:
<directores> <director>Peter Jackson</director> <director>Alejandro Amenabar</director> <director>Ethan Coen</director> <director>Joel Coen</director> </directores>
27
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
29
30
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
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
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