0% encontró este documento útil (0 votos)
238 vistas41 páginas

X Query

Este documento introduce conceptos básicos de XQuery, incluyendo que es un lenguaje para consultar datos XML de forma declarativa e independiente de la fuente de datos, y explica elementos clave de las consultas XQuery como FOR, LET, WHERE, ORDER BY y RETURN.
Derechos de autor
© Attribution Non-Commercial (BY-NC)
Nos tomamos en serio los derechos de los contenidos. Si sospechas que se trata de tu contenido, reclámalo aquí.
Formatos disponibles
Descarga como PDF, TXT o lee en línea desde Scribd
0% encontró este documento útil (0 votos)
238 vistas41 páginas

X Query

Este documento introduce conceptos básicos de XQuery, incluyendo que es un lenguaje para consultar datos XML de forma declarativa e independiente de la fuente de datos, y explica elementos clave de las consultas XQuery como FOR, LET, WHERE, ORDER BY y RETURN.
Derechos de autor
© Attribution Non-Commercial (BY-NC)
Nos tomamos en serio los derechos de los contenidos. Si sospechas que se trata de tu contenido, reclámalo aquí.
Formatos disponibles
Descarga como PDF, TXT o lee en línea desde Scribd

Introduccin o Consultas en XQuery

XQuery
Yolanda Garc Ruiz (UCM) a

January 19, 2011

Yolanda Garc Ruiz (UCM) a

XQuery

Introduccin o Consultas en XQuery

XQuery - Introduccin o XQuery es a XML lo mismo que SQL es a las bases de datos relacionales Lenguaje que permite denir de forma rpida y compacta, a consultas o recorridos complejos sobre colecciones de datos en XML los cuales devuelven todos los nodos que cumplan ciertas condiciones Este lenguaje es declarativo, es decir, independiente de la forma en que se realice el recorrido o de donde se encuentren los datos Es independiente de la fuente de datos: Esta fuente de datos puede ser archivos XML hasta bases de datos relacionales con funciones de conversin de registros a XML o

Yolanda Garc Ruiz (UCM) a

XQuery

Introduccin o Consultas en XQuery

XQuery - Introduccin o XQuery y SQL puedan considerarse similares (con ciertos matices). El modelo de datos sobre el que se sustenta XQuery es muy distinto del modelo de datos relacional sobre el que sustenta SQL XML incluye conceptos como jerarqu y orden de los datos a que no estn presentes en el modelo relacional a En XQuery el orden en el que se encuentren los datos es importante y determinante, ya que no es lo mismo buscar una etiqueta < B > dentro de una etiqueta < A > que todas las etiquetas < B > del documento

Yolanda Garc Ruiz (UCM) a

XQuery

Introduccin o Consultas en XQuery

XQuery - Introduccin o XQuery ha sido construido sobre la base de Xpath Xpath es un lenguaje declarativo para la localizacin de nodos o y fragmentos de informacin en rboles XML o a XQuery se basa en este lenguaje para realizar la seleccin de o informacin y la iteracin a travs del conjunto de datos o o e

Yolanda Garc Ruiz (UCM) a

XQuery

Introduccin o Consultas en XQuery

Expresiones condicionales Operadores y funciones XQuery Comentarios

Consultas Una consulta en XQuery es una expresin que lee una o secuencia de datos en XML y devuelve como resultado otra secuencia de datos en XML En XQuery las expresiones y los valores que devuelven son dependientes del contexto. Por ejemplo, los nodos del resultado dependen de los namespaces, de la posicin donde o aparezca la etiqueta ra del nodo (dentro de otra, por z ejemplo), etc. En XQuery las consultas pueden estar compuestas por clusulas de hasta cinco tipos distintos a Las consultas siguen la norma FLWOR (le como ower), do siendo FLWOR las siglas de For, Let, Where, Order y Return
Yolanda Garc Ruiz (UCM) a XQuery

Introduccin o Consultas en XQuery

Expresiones condicionales Operadores y funciones XQuery Comentarios

FLWOR For: Vincula una o ms variables a expresiones escritas en a XPath, creando un ujo de tuplas en el que cada tupla est a vinculada a una de las variable.

Yolanda Garc Ruiz (UCM) a

XQuery

Introduccin o Consultas en XQuery

Expresiones condicionales Operadores y funciones XQuery Comentarios

FLWOR For: Vincula una o ms variables a expresiones escritas en a XPath, creando un ujo de tuplas en el que cada tupla est a vinculada a una de las variable. Let: Vincula una variable al resultado completo de una expresin aadiendo esos v o n nculos a las tuplas generadas por una clusula For o, si no existe ninguna clusula For, creando a a una unica tupla que contenga esos v nculos.

Yolanda Garc Ruiz (UCM) a

XQuery

Introduccin o Consultas en XQuery

Expresiones condicionales Operadores y funciones XQuery Comentarios

FLWOR For: Vincula una o ms variables a expresiones escritas en a XPath, creando un ujo de tuplas en el que cada tupla est a vinculada a una de las variable. Let: Vincula una variable al resultado completo de una expresin aadiendo esos v o n nculos a las tuplas generadas por una clusula For o, si no existe ninguna clusula For, creando a a una unica tupla que contenga esos v nculos. Where: Filtra las tuplas eliminando todos los valores que no cumplan las condiciones dadas

Yolanda Garc Ruiz (UCM) a

XQuery

Introduccin o Consultas en XQuery

Expresiones condicionales Operadores y funciones XQuery Comentarios

FLWOR For: Vincula una o ms variables a expresiones escritas en a XPath, creando un ujo de tuplas en el que cada tupla est a vinculada a una de las variable. Let: Vincula una variable al resultado completo de una expresin aadiendo esos v o n nculos a las tuplas generadas por una clusula For o, si no existe ninguna clusula For, creando a a una unica tupla que contenga esos v nculos. Where: Filtra las tuplas eliminando todos los valores que no cumplan las condiciones dadas Order by: Ordena las tuplas segn el criterio dado u

Yolanda Garc Ruiz (UCM) a

XQuery

Introduccin o Consultas en XQuery

Expresiones condicionales Operadores y funciones XQuery Comentarios

FLWOR For: Vincula una o ms variables a expresiones escritas en a XPath, creando un ujo de tuplas en el que cada tupla est a vinculada a una de las variable. Let: Vincula una variable al resultado completo de una expresin aadiendo esos v o n nculos a las tuplas generadas por una clusula For o, si no existe ninguna clusula For, creando a a una unica tupla que contenga esos v nculos. Where: Filtra las tuplas eliminando todos los valores que no cumplan las condiciones dadas Order by: Ordena las tuplas segn el criterio dado u Return: Construye el rbol XML resultado de la consulta a para una tupla dada, despus de haber sido ltrada por la e clusula where y ordenada por la clusula order by a a
Nota: En XQuery, cuando usamos el trmico tupla, nos estamos reriendo a e cada uno de los valores que toma una variable
Yolanda Garc Ruiz (UCM) a XQuery

Introduccin o Consultas en XQuery

Expresiones condicionales Operadores y funciones XQuery Comentarios

Ejemplo En el siguiente ejemplo de clusula for, la variable $b tomar a a como valor cada uno de los nodos libros que contenga en archivo libros.xml. Cada uno de esos nodos libros, ser una tupla vinculada a la a variable $b. for $b in doc("libros.xml)//bib/libro

Yolanda Garc Ruiz (UCM) a

XQuery

Introduccin o Consultas en XQuery

Expresiones condicionales Operadores y funciones XQuery Comentarios

Ejemplo La siguiente consulta devuelve los t tulos de los libros del ao n 2.000 for $b in doc("libros.xml")//libro where $b/@a~o = "2000" n order by $b/titulo return $b/titulo cuyo resultado es: <titulo>Data on the Web</titulo> <titulo>Millenium</titulo>

Yolanda Garc Ruiz (UCM) a

XQuery

Introduccin o Consultas en XQuery

Expresiones condicionales Operadores y funciones XQuery Comentarios

Ejemplo La siguiente consulta devuelve los t tulos de los libros que tengan ms de dos autores ordenados por su t a tulo for $b in doc("libros.xml")//libro let $c := $b//autor where count($c) > 2 order by $b/titulo return $b/ titulo cuyo resultado es: <title>Data on the Web</title>

Yolanda Garc Ruiz (UCM) a

XQuery

Introduccin o Consultas en XQuery

Expresiones condicionales Operadores y funciones XQuery Comentarios

For y Let:
Sirven para crear las tuplas con las que trabajar el resto de las a clusulas de la consulta a Pueden usarse tantas veces como se desee en una consulta, incluso dentro de otras clusulas a

Where:
Filtra las tuplas. Solo puede declararse una unica clusula a Where

Order by:
Ordena las tuplas. Solo puede declararse una unica clusula a Order by Es posible especicar varios criterios de ordenacin o separndolos por comas a

Return:
Transforma las tuplas. Solo puede declararse una unica clusula Return a
Yolanda Garc Ruiz (UCM) a XQuery

Introduccin o Consultas en XQuery

Expresiones condicionales Operadores y funciones XQuery Comentarios

No es necesario que aparezca ninguna de las cinco clusulas a FLWOR en una consulta. Como XQuery est construido sobre XPath, una expresin a o XPath es una consulta vlida y no tiene ninguna de las 5 a clusulas vistas a

Yolanda Garc Ruiz (UCM) a

XQuery

Introduccin o Consultas en XQuery

Expresiones condicionales Operadores y funciones XQuery Comentarios

Funcionamiento de una consulta La siguiente consulta devuelve los t tulos de los libros del ao 2000 n for $b in doc("libros.xml")//libro where $b/@a~o = "2000" n order by $b/titulo return $b/titulo 1. La clusula for asigna a la variable $b cada uno de los nodos a <libro> .... <\libro> que aparecen en cualquier lugar del documento XML.
<libro <libro <libro <libro <libro a~o="1994"> n a~o="2000"> n a~o="1992"> n a~o="2000"> n a~o="1999"> n <titulo>TCP/IP Illustrated ... </libro> <titulo>Millenium... </libro> <titulo>Advan Programming ...</libro> <titulo>Data on the Web ... </libro> <titulo>Economics of ...</libro>

Yolanda Garc Ruiz (UCM) a

XQuery

Introduccin o Consultas en XQuery

Expresiones condicionales Operadores y funciones XQuery Comentarios

Funcionamiento de una consulta La siguiente consulta devuelve los t tulos de los libros del ao 2000 n for $b in doc("libros.xml")//libro where $b/@a~o = "2000" n order by $b/titulo return $b/titulo 2. La clusula where hace una criba de los valores de la variable a $b comprobando para cada valor de $b si el atributo ao es n igual a 2000. Si es as ese valor se incluye en la solucin , o
<libro a~o="2000"> <titulo>Millenium... </libro> n <libro a~o="2000"> <titulo>Data on the Web ... </libro> n

Yolanda Garc Ruiz (UCM) a

XQuery

Introduccin o Consultas en XQuery

Expresiones condicionales Operadores y funciones XQuery Comentarios

Funcionamiento de una consulta La siguiente consulta devuelve los t tulos de los libros del ao 2000 n for $b in doc("libros.xml")//libro where $b/@a~o = "2000" n order by $b/titulo return $b/titulo 3. La clusula order by ordena los nodos t a tulo que han pasado la criba por el orden alfabtico de su contenido e
<libro a~o="2000"> <titulo>Data on the Web ... </libro> n <libro a~o="2000"> <titulo>Millenium... </libro> n

Yolanda Garc Ruiz (UCM) a

XQuery

Introduccin o Consultas en XQuery

Expresiones condicionales Operadores y funciones XQuery Comentarios

Funcionamiento de una consulta La siguiente consulta devuelve los t tulos de los libros del ao 2000 n for $b in doc("libros.xml")//libro where $b/@a~o = "2000" n order by $b/titulo return $b/titulo 4. La clusula return devuleve como resultado de la consulta los a nodos que hayan pasado la criba
<titulo>Data on the Web</titulo> <titulo>Millenium</titulo>

Yolanda Garc Ruiz (UCM) a

XQuery

Introduccin o Consultas en XQuery

Expresiones condicionales Operadores y funciones XQuery Comentarios

Diferencias entre las clusulas for y let a A primera vista la clusula for y let pueden parecer iguales a pero, aunque su objetivo es el mismo, trabajan de diferente forma La clusula for vincula una variable con cada nodo que a encuentra en la coleccin de datos o Para la consulta: for $b in doc("libros.xml")/bib/libro/titulo where $b/@a~o = 2000 n return <titulos>{ $b }</titulos> La clusula for asigna a la variable $b cada uno de los libros a del ao 2000 que aparecen en cualquier lugar del documento n XML. En el resultado se repiten 2 veves la etiqueta <titulos>
<titulos> <titulo>Millenium</titulo> </titulos> <titulos> <titulo>Data on the Web</titulo> </titulos>
Yolanda Garc Ruiz (UCM) a XQuery

Introduccin o Consultas en XQuery

Expresiones condicionales Operadores y funciones XQuery Comentarios

Diferencias entre las clusulas for y let a La clusula let vincula una variable con todo el resultado de a una expresin o Sustituyendo for por let en la consulta anterior: Para la consulta: let $b in doc("libros.xml")/bib/libro/titulo where $b/@a~o = 2000 n return <titulos>{ $b }</titulos> Obtenemos el siguiente resultado:
<titulos> <titulo>Millenium</titulo> <titulo>Data on the Web</titulo> </titulos>

La variable $b se vincula una sola vez a todos los t tulos de todos los librosdel ao 2000. Aparece las etiqueta <titulos> n una sola vez
Yolanda Garc Ruiz (UCM) a XQuery

Introduccin o Consultas en XQuery

Expresiones condicionales Operadores y funciones XQuery Comentarios

Ejemplo Si una clusula let aparece en una consulta que ya posee una a o ms clusulas for, los valores de la variable vinculada por la a a clusula let se aaden a cada una de las tuplas generadas por a n la clusula for. a for $b in doc("libros.xml")//libro let $c := $b/autor return <libro>{ $b/titulo, <autores>{ count($c) }</autores>} </libro> Obtenemos el siguiente resultado:
...

Yolanda Garc Ruiz (UCM) a

XQuery

Introduccin o Consultas en XQuery

Expresiones condicionales Operadores y funciones XQuery Comentarios

Ejemplo Obtenemos el siguiente resultado:


<libro> <titulo>TCP/IP Illustrated</titulo> <autores>1</autores> </libro> <libro> <titulo>Advan Programming for Unix environment</titulo> <autores>1</autores> </libro> <libro> <titulo>Millenium</titulo> <autores>1</autores> </libro> ... <titulo> Economics of Technology for Digital TV</titulo> <autores>0</autores> </libro>

Yolanda Garc Ruiz (UCM) a

XQuery

Introduccin o Consultas en XQuery

Expresiones condicionales Operadores y funciones XQuery Comentarios

Ejemplo Si en la consulta aparece ms de una clusula for (o ms de a a a una variable en una clsula for), el resultado es el producto a cartesiano de dichas variables variables. Seleccionar los t tulos de todos los libros contenidos en el archivo libros.xml y todos los comentarios de cada libro contenidos en el archivo comentarios.xml for $t in doc("libros.xml")//titulo, $e in doc("comentarios.xml")//entrada where $t = $e/titulo return <comentario>{ $t, $e/comentario }</comentario> Obtenemos el siguiente resultado:
...
Yolanda Garc Ruiz (UCM) a XQuery

Introduccin o Consultas en XQuery

Expresiones condicionales Operadores y funciones XQuery Comentarios

Ejemplo Obtenemos el siguiente resultado:


<comentario> <titulo>TCP/IP Illustrated</titulo> <comentario>Uno de los mejores libros de TCP/IP</comentario> </comentario> <comentario> <titulo>Data on the Web</titulo> <comentario>Un libro muy bueno sobre bases de datos</comentario> </comentario>

Yolanda Garc Ruiz (UCM) a

XQuery

Introduccin o Consultas en XQuery

Expresiones condicionales Operadores y funciones XQuery Comentarios

Expresiones condicionales Adems de la clusula where, XQuery tambin soporta a a e expresiones condicionales del tipo if-then-else con la misma semntica que en los lenguajes de programacin ms a o a habituales (C, Java, Delphi, etc..) La clusula where de una consulta permite ltrar las tuplas a que aparecern en el resultado, mientras que una expresin a o condicional nos permite crear una u otra estructura de nodos en el resultado que dependa de los valores de las tuplas ltradas

Yolanda Garc Ruiz (UCM) a

XQuery

Introduccin o Consultas en XQuery

Expresiones condicionales Operadores y funciones XQuery Comentarios

Expresiones condicionales: Ejemplo Seleccionar los t tulos de todos los libros almacenados en el archivo libros.xml y sus dos primeros autores. En el caso de que existan ms de dos autores para un libro, se a aade un tercer autor et al.. n

for $b in doc("libros.xml")//libro return <libro> { $b/titulo } { for $a at $i in $b/autor where $i <= 2 return <autor>{string($a/apellido), ", ", string($a/nombre)}</aut } { if (count($b/autor) > 2) then <autor>et al.</autor> else () } </libro>
Yolanda Garc Ruiz (UCM) a XQuery

Introduccin o Consultas en XQuery

Expresiones condicionales Operadores y funciones XQuery Comentarios

Ejemplo Obtenemos el siguiente resultado:


<libro> <titulo>TCP/IP Illustrated</titulo> <autor>Stevens, W.</autor> </libro> <libro> ... <libro> <titulo>Millenium</titulo> <autor>Falk, Lombardo</autor> </libro> <libro> <titulo>Data on the Web</titulo> <autor>Abiteboul, Serge</autor> <autor>Buneman, Peter</autor> <autor>et al.</autor> </libro> <libro> <titulo> Economics of Technology for Digital TV</titulo> Yolanda Garc Ruiz (UCM) a XQuery </libro>

Introduccin o Consultas en XQuery

Expresiones condicionales Operadores y funciones XQuery Comentarios

Cuanticadores existenciales XQuery soporta dos cuanticadores existenciales: some y every Estos cuanticadores nos permiten denir consultas que devuelvan algn elemento que satisfaga la condicin some o u o consultas que devuelvan los elementos en los que todos sus nodos satisfagan la condicin every. o Por ejemplo, seleccionar los t tulos de los libros en los que al menos uno de sus autores es W. Stevens
for $b in doc("libros.xml")//libro where some $a in $b/autor satisfies ($a/apellido="Stevens" and $a/nombre="W.") return $b/titulo

Yolanda Garc Ruiz (UCM) a

XQuery

Introduccin o Consultas en XQuery

Expresiones condicionales Operadores y funciones XQuery Comentarios

Ejemplo Obtenemos el siguiente resultado:


<titulo>TCP/IP Illustrated</titulo> <titulo>Advan Programming for Unix environment</titulo>

Yolanda Garc Ruiz (UCM) a

XQuery

Introduccin o Consultas en XQuery

Expresiones condicionales Operadores y funciones XQuery Comentarios

Cuanticadores existenciales Seleccionar todos los t tulos de los libros en los que todos los autores de cada libro es W. Stevens.
for $b in doc("libros.xml")//libro where every $a in $b/autor satisfies ($a/apellido="Stevens" and $a/nombre="W.") return $b/titulo

Yolanda Garc Ruiz (UCM) a

XQuery

Introduccin o Consultas en XQuery

Expresiones condicionales Operadores y funciones XQuery Comentarios

Ejemplo Obtenemos el siguiente resultado:


<titulo>TCP/IP Illustrated</titulo> <titulo>Advan Programming for Unix environment</titulo> <titulo>Economics of Technology for Digital TV</titulo>

El ultimo libro no tiene autores

Yolanda Garc Ruiz (UCM) a

XQuery

Introduccin o Consultas en XQuery

Expresiones condicionales Operadores y funciones XQuery Comentarios

Ejemplo La siguiente consulta devuelve el t tulo de todos los libros que mencionen programing en cada uno de los prrafos de los a libros almacenados en libros.xml for $b in doc("libros.xml")//libro where every $p in $b//titulo satisfies contains($p,"Programming") return $b/titulo Obtenemos el siguiente resultado:
<titulo>Advan Programming for Unix environment</titulo>

Yolanda Garc Ruiz (UCM) a

XQuery

Introduccin o Consultas en XQuery

Expresiones condicionales Operadores y funciones XQuery Comentarios

XQuery soporta operadores y funciones:


matemticas, a de cadenas, para el tratamiento de expresiones regulares, comparaciones de fechas y horas, manipulacin de secuencias, o manipulacin de nodos XML, o comprobacin y conversin de tipos y lgica booleana o o o

Adems permite denir funciones propias y funciones a dependientes del entorno de ejecucin del motor XQuery o

Yolanda Garc Ruiz (UCM) a

XQuery

Introduccin o Consultas en XQuery

Expresiones condicionales Operadores y funciones XQuery Comentarios

XQuery soporta operadores y funciones:


Matemticas: +, , , div(), idiv(), mod. a Comparacin: =, ! =, <, >, <=, >=, not() o Secuencia: unin (|), intersect, except o Redondeo: oor(), ceiling(), round(). Funciones de agrupacin: count(), min(), max(), avg(), o sum(). Funciones de cadena: concat(), string-length(), startswith(), ends-with(), substring(), upper-case(), lower-case(), string() Uso general: distinct-values(), empty(), exits()

La divisin se indica con el operador div ya que el s o mbolo / es necesario para indicar caminos. El operador idiv es para divisiones con enteros en las que se ignora el resto.

Yolanda Garc Ruiz (UCM) a

XQuery

Introduccin o Consultas en XQuery

Expresiones condicionales Operadores y funciones XQuery Comentarios

Ejemplo Obtener una lista ordenada de apellidos de todos los autores y editores for $l in distinct-values(doc("libros.xml") //(autor|editor)/apellido) order by $l return <apellidos>{ $l }</apellidos> Obtenemos el siguiente resultado:
<apellidos>Abiteboul</apellidos> <apellidos>Buneman</apellidos> <apellidos>Falk</apellidos> <apellidos>Gerbarg</apellidos> <apellidos>Stevens</apellidos> <apellidos>Suciu</apellidos>
Yolanda Garc Ruiz (UCM) a XQuery

Introduccin o Consultas en XQuery

Expresiones condicionales Operadores y funciones XQuery Comentarios

Ejemplo Obtener un nodo libro con todos sus nodos hijos salvo el nodo precio. for $b in doc("libros.xml")//libro where $b/titulo = "TCP/IP Illustrated" return <libro> { $b/@* } { $b/* except $b/precio } </libro> Obtenemos el siguiente resultado:
<libro a~o="1994"> n <titulo>TCP/IP Illustrated</titulo> <autor> <apellido>Stevens</apellido> <nombre>W.</nombre> </autor> <editorial>Addison-Wesley</editorial> </libro> Yolanda Garc Ruiz (UCM) a XQuery

Introduccin o Consultas en XQuery

Expresiones condicionales Operadores y funciones XQuery Comentarios

Ejemplo Obtener los nodos libro que tengan al menos un nodo autor for $b in doc("libros.xml")//libro where not(empty($b/autor)) return $b Obtenemos el siguiente resultado:
<libro a~o="1999"> n <titulo> Economics of Technology for Digital TV</titulo> <editor> <apellido>Gerbarg</apellido> <nombre>Darcy</nombre> <afiliacion>CITI</afiliacion> </editor> <editorial>Kluwer Academic editorials</editorial> <precio>129.95</precio> </libro>

Yolanda Garc Ruiz (UCM) a

XQuery

Introduccin o Consultas en XQuery

Expresiones condicionales Operadores y funciones XQuery Comentarios

Comentarios Los comentarios en XQuery, a diferencia de XML, van encerrados entre caras sonrientes, tal y como se muestra a continuacin. o (: esto es un comentario :)

Yolanda Garc Ruiz (UCM) a

XQuery

Introduccin o Consultas en XQuery

Expresiones condicionales Operadores y funciones XQuery Comentarios

Aplicaciones de XQuery Hemos visto cmo utilizar XQuery para escribir consultas o sobre colecciones de datos XML. Sin embargo es posible utilizar el lenguaje para otros usos:
Transformacin de Jerarqu o as: transformar unas estructuras de datos XML en otras estructuras que organicen la informacin de forma diferente. o XQuery como alternativa a XLST: permite realizar transformaciones de datos en XML a otro tipo de representaciones, como HTML o PDF

Yolanda Garc Ruiz (UCM) a

XQuery

Introduccin o Consultas en XQuery

Expresiones condicionales Operadores y funciones XQuery Comentarios

Bibliograf a: J. J. Gutirrez, M. J. Escalona, M. Mej J. Torres, e as, D.Villadiego. XQuery. Universidad de Sevilla. 2005. http://www.lsi.us.es/docs/informes/LSI-2005-02.pdf

Yolanda Garc Ruiz (UCM) a

XQuery

También podría gustarte