XQUERY

 

Bibliografía
1. ¿POR QUÉ NECESITAMOS XQUERY?

2. DEFINICIÓN DE XQUERY

2.1 Requerimientos técnicos de XQuery

3. CONSULTAS EN XQUERY.

3.1. Reglas generales.

3.2. Funciones de entrada.

3.3. Expresiones condicionales.

3.4. Cuantificadores existenciales.

3.5. Operadores y funciones principales.

3.6. Comentarios.

3.7. XQueryX.

4.HERRAMIENTAS RELACIONADAS CON XQUERY

4.1 XQEngine.

4.2 Xquark Bridge

4.3 BumbleBee

5. MOTORES XQUERY OPEN-SOURCE

6.CONCLUSIONES

 

1. ¿Por qué necesitamos XQuery?.

Actualmente, XML se ha convertido en una herramienta de uso cotidiano en los entornos de tratamiento de información y de programación. Sin embargo, a medida que se emplea en un mayor número de proyectos, de complejidad y tamaño crecientes, y además, aumenta la cantidad de datos almacenados en XML, se comprueba que las herramientas más habituales para manipular desde un programa un árbol con un conjunto de datos en XML, los parsers SAX y DOM1, no son prácticos para manejar grandes y complejas colecciones de datos en XML.

Un ejemplo de un escenario donde no es aplicable ninguna de las herramientas como parsers, binding y XSLT, lo encontramos a la hora de consultar la información en los actuales servidores de bases de datos que ya incorporan funciones para poder obtener los datos en XML o bases de datos XML nativas (Native XML Database). El escenario de uso más común se da cuando tenemos que realizar alguna búsqueda en un documento o conjunto de documentos con gran cantidad de datos en XML, o bien hemos de trabajar sólo sobre un subconjunto de todos los datos XML y queremos obtener dicho subconjunto de una forma sencilla, para evitar trabajar con toda la colección de datos.

Por todo ello, se hace necesaria la aparición de un lenguaje que permita definir de forma rápida y compacta, consultas o recorridos complejos sobre colecciones de datos en XML, los cuales, devuelvan todos los nodos que cumplan ciertas condiciones. Este lenguaje debe ser además, declarativo, es decir, independientemente de la forma en que se realice el recorrido o de donde se encuentren los datos. Este lenguaje ya existe y se llama XQuery.

2. Definición de XQuery.

XQuery es un leguaje de consultas estándar, publicado por el W3C (World Wide Web Consortium) que utiliza la notación XML para definir consultas y manejar los resultados. Podemos decir que XQuery es a XML lo mismo que SQL es a las bases de datos relacionales.

XQuery es un lenguaje de consulta diseñado para escribir consultas sobre colecciones de datos expresadas en XML. Abarca desde archivos XML hasta bases de datos relacionales con funciones de conversión de registros a XML. Su principal función es extraer información de un conjunto de datos organizados como un árbol nário de etiquetas XML. En este sentido XQuery es independiente del origen de los datos.

XQuery es un lenguaje funcional, lo que significa que, en vez de ejecutar una lista de comandos como un lenguaje procedimental clásico, cada consulta es una expresión que es evaluada y devuelve un resultado, al igual que en SQL. Diversas expresiones pueden combinarse de una manera muy flexible con otras expresiones para crear nuevas expresiones más complejas y de mayor potencia semántica.

XQuery está definido en términos de un modelo formal abstracto, no en términos de texto XML. Los términos formales están definidos en el documento XQuery 1.0 and XPath 2.0 Data Model.

En el modelo de datos XQuery, cada documento es representado como un árbol de nodos. Los tipos de nodos posibles son:

  • Document
  • Element
  • Attribute
  • Text
  • Namespace
  • Processing Instruction
  • Comment

Cada nodo en el modelo de datos es único e idéntico a sí mismo, y diferente a todos los demás. Esto no implica que no puedan tener valores iguales, sino que conceptualmente se los debe tomar como entidades diferentes. Podría trazarse una relación con el principio de identidad existente en la teoría de objetos.

El primer nodo en cualquier documento es el "nodo documento" (document node). El nodo documento no se corresponde con nada visible en el documento, éste representa el mismo documento.

Los nodos conectados forman un árbol, que consiste en un nodo "root" y todos los nodos que cuelgan de él. Un árbol cuyo root es un nodo documento se denomina árbol documento, todos los demás son denominados fragmentos.

XQuery está llamado a ser el futuro estándar de consultas sobre documentos XML gracias a su robustez y flexibilidad que permite consultar un amplio espectro de fuentes de información.

2.1. Requerimientos técnicos de XQuery.

El grupo de trabajo en XQuery del W3C ha definido un conjunto de requerimientos técnicos para este lenguaje. Los más importantes son:

  • XQuery debe ser un lenguaje declarativo. Al igual que SQL hay que indicar que se quiere, no la manera de obtenerlo.

  • XQuery debe ser independiente del protocolo de acceso a la colección de datos. Una consulta en XQuery debe funcionar igual al consultar un archivo local que al consultar un servidor de bases de datos que al consultar un archivo XML en un servidor web.

  • Las consultas y los resultados deben respetar el modelo de datos XML

  • Las consultas y los resultados deben ofrecer soporte para los namespace.

  • Debe ser capaz de soportar XML-Schemas y DTDs y también debe ser capaz de trabajar sin ninguno de ellos.

  • XQuery debe poder trabajar con independencia de la estructura del documento, esto es, sin necesidad de conocerla.

  • XQuery debe soportar tipos simples, como enteros y cadenas, y tipos complejos, como un nodo compuesto por varios nodos hijos.

  • Las consultan deben soportar cuantificadores universales (para todo) y existenciales (existe).

  • Las consultas deben soportar operaciones sobre jerarquías de nodos y secuencias de nodos.

  • Debe ser posible en una consulta combinar información de múltiples fuentes.

  • Las consultas deben ser capaces de manipular los datos independientemente del origen de estos.

  • Mediante XQuery debe ser posible definir consultas que transformen las estructuras de información originales y debe ser posible crear nuevas estructuras de datos.

  • El lenguaje de consulta debe ser independiente de la sintaxis, esto es, debe ser posible que existan varias sintaxis distintas para expresar una misma consulta en XQuery.

Aunque XQuery y SQL puedan considerarse similares en casi la totalidad de sus aspectos, el modelo de datos sobre el que se sustenta XQuery es muy distinto del modelo de datos relacional sobre el que sustenta SQL, ya que XML incluye conceptos como jerarquía y orden de los datos que no están presentes en el modelo relacional. Por ejemplo, a diferencia de SQL, en XQuery el orden es 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 (que pueden estar anidadas dentro de una etiqueta <A> o fuera).

XQuery ha sido construido sobre la base de Xpath. Xpath es un lenguaje declarativo para la localización de nodos y fragmentos de información en árboles XML. XQuery se basa en este lenguaje para realizar la selección de información y la iteración a través del conjunto de datos.

3. Consultas en XQuery.

Una consulta en XQuery es una expresión 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 aparecerán en el resultado dependen de los namespaces, de la posición donde aparezca la etiqueta raíz del nodo (dentro de otra, por ejemplo), etc.

En XQuery las consultas pueden estar compuestas por cláusulas de hasta cinco tipos distintos. Las consultas siguen la norma FLWOR, siendo FLWOR las siglas de For, Let, Where, Order y Return. A continuación se describe a través de una tabla la función de cada bloque:

For

Vincula una o más variables a expresiones escritas en XPath, creando un flujo de tuplas en el que cada tupla está vinculada a una de las variable

Let

 

Vincula una variable al resultado completo de una expresión añadiendo esos vínculos a las tuplas generadas por una cláusula for o, si no existe ninguna cláusula for, creando una única 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 según el criterio dado.

Return

 

Construye el resultado de la consulta para una tupla dada, después de haber sido filtrada por la cláusula where y ordenada por la cláusula order by.

En XQuery, cuando usamos el térmico tupla, nos estamos refiriendo a cada uno de los valores que toma una variable. Con estas sentencias se consigue buena parte de la funcionalidad que diferencia a XQuery de XPath. Entre otras cosas, permite construir el documento que será la salida de la sentencia.

EJEMPLOS SOBRE CONSULTAS

3.1. Reglas generales.

A continuación, enunciamos una serie de reglas que debe cumplir cualquier consulta escrita en XQuery:

  • For y Let sirven para crear las tuplas con las que trabajará el resto de las cláusulas de la consulta y pueden usarse tantas veces como se desee en una consulta, incluso dentro de otras cláusulas. Sin embargo solo puede declararse una única cláusula "Where", una única cláusula "Order by" y una única cláusula "Return".  
  • Ninguna de las cláusulas FLWOR es obligatoria en una consulta XQuery. Por ejemplo, una expresión XPath, como la que se muestra a continuación, es una consulta válida y no contiene ninguna de las cláusulas FLWOR.

 Ejemplo:

doc("libros.xml")/bib/libro/titulo[/bib/libro/autor/apellido='St evens']

Esta expresión XPath, que también es una consulta XQuery válida, devuelve los títulos de los libros que tengan algún autor de apellido ‘Stevens’.

Es posible especificar varios criterios de ordenación en la cláusula order by, separándolos por comas. Los criterios de ordenación se aplican por orden de izquierda a derecha.  

3.2. Funciones de entrada.

XQuery utiliza las funciones de entrada en las cláusulas For o Let o en expresiones XPath para identificar el origen de los datos. Actualmente el borrador de XPath y XQuery define dos funciones de entrada distintas, doc (URI) y collection (URI).

La función doc (URI) devuelve el nodo documento, o nodo raíz, del documento referenciado por un identificador universal de recursos (URI). Esta es la función más habitual para acceder a la información almacenada en archivos.

La función collection (URI) devuelve una secuencia de nodos referenciados por una URI, sin necesidad de que exista un nodo documento o nodo raíz. Esta es la función más habitual para acceder a la información almacenada en una base de datos que tenga capacidad para crear estructuras de datos XML.

3.3. Expresiones condicionales.

Además de la cláusula where, XQuery también soporta expresiones condicionales del tipo “if-then-else” con la misma semántica que en los lenguajes de programación más habituales (C, Java, Delphi, etc...).

La cláusula where de una consulta permite filtrar las tuplas que aparecerán en el resultado, mientras que una expresión condicional nos permite crear una u otra estructura de nodos en el resultado que dependa de los valores de las tuplas filtradas.

A diferencia de la mayoría de los lenguajes, la cláusula else es obligatoria y debe aparecer siempre en la expresión condicional. El motivo de esto es que toda expresión en XQuery debe devolver un valor. Si no existe ningún valor a devolver al no cumplirse la cláusula if, devolvemos una secuencia vacía con ‘else ()’

3.4. Cuantificadores existenciales.

XQuery soporta dos cuantificadores existenciales llamados “some” y “every”, de tal manera que nos permite definir consultas que devuelva algún elemento que satisfaga la condición (“some”) o consultas que devuelvan los elementos en los que todos sus nodos satisfagan la condición (“every”).

EJEMPLOS

3.5. Operadores y funciones principales.

El conjunto de funciones y operadores soportado por XQuery 1.0 es el mismo conjunto de funciones y operadores utilizado en XPath 2.0 y XSLT 2.0. XQuery soporta operadores y funciones matemáticas, de cadenas, para el tratamiento de expresiones regulares, comparaciones de fechas y horas, manipulación de nodos XML, manipulación de secuencias, comprobación y conversión de tipos y lógica booleana. Además, permite definir funciones propias y funciones dependientes del entorno de ejecución del motor XQuery. Los operadores y funciones más importantes se muestran en la tabla siguiente:

Matemáticos

+, -, *, div(*), idiv(*), mod.

Comparación

=, !=, <, >, <=, >=, not()

Secuencia

union (|), intersect, except

Redondeo

floor(), ceiling(), round().

Funciones de agrupación

count(), min(), max(), avg(), sum().

Funciones de cadena

concat(), string-length(), startswith(), ends-with(), substring(), upper-case(), lower-case(), string()

Uso general

distinct-values(), empty(), exits()

(*) La división se indica con el operador ‘div’ ya que el símbolo ‘/’ es necesario para indicar caminos. El operador ‘idiv’ es para divisiones con enteros en las que se ignora el resto.

El resultado de un operador aritmético en el que uno, o ambos, de los operandos sea una cadena vacía es una cadena vacía. Como regla general el funcionamiento de las cadenas vacías en XQuery es análogo al funcionamiento de los valores nulos en SQL.

El operador unión recibe dos secuencias de nodos y devuelve una secuencia con todos los nodos existentes en las dos secuencias originales.

EJEMPLOS

3.6. Comentarios.

Los comentarios en XQuery, a diferencia de XML, van encerrados entre dos puntos y paréntesis, como se muestra a continuación:

(: Comentarios en XQuery :)

La sintaxis de comentario usada en XML no es aplicable a XQuery salvo que la consulta se escriba con la sintaxis XQueryX.

3.7. XQueryX.

Como hemos visto, uno de los requerimientos de XQuery es que debe permitir utilizar diferentes sintaxis para redactar las consultas. XQueryX es un ejemplo de sintaxis alternativa para XQuery.

XQueryX es la especificación de una sintaxis alternativa para XQuery que permite definir una consulta XQuery mediante etiquetas XML. Con una sintaxis basada en XML es más sencillo analizar las consultas mediante el uso de herramientas estándares y generar y consultar los contenidos de la consulta. Esto es útil, por ejemplo, para optimizaciones a nivel de código fuente que dependen de la capacidad de inspeccionar de forma rápida y sencilla el código de una consulta.

Sin embargo, el borrador de XQueryX no ha sido actualizado desde su creación en el año 2.001, ni el grupo de trabajo de XQuery ha hecho ningún comentario al respecto sobre esta sintaxis, por lo que su futuro es bastante incierto.

EJEMPLOS

4. Herramientas relacionadas con XQuery

4.1 XQEngine.

XQEngine es un motor GPL dedicado al indexado y búsqueda de información en ficheros XML cuya sintaxis de consulta es una implementación de XQuery. XQEngine es un componente muy compacto, con un tamaño aproximado de 360 KBs, y por lo tanto, fácilmente integrable dentro de nuestras aplicaciones.

XQEngine se distribuye con una sencilla aplicación de ejemplo "SampleApp.java" que, además de mostrar con un caso práctico como utilizar este componente en nuestros desarrollos, contiene un sencillo interfaz gráfico que permite ejecutar directamente consultas XQuery y obtener sus resultados.

4.2 Xquark Bridge

XQuark Bridge es una herramienta que permite importar y exportar datos a bases de datos relacionales utilizando XML. De este modo, XQuark ofrece la posibilidad de manejar estructuras XML y realizar la transformación a objetos de la base de datos, siendo capaz también de realizar el paso contrario. Además de todo esto XQuark es capaz de respetar todas las restricciones de integridad y transformar las relaciones implícitas en los documentos XML en relaciones explícitas en la base de datos y todo ello, con un buen rendimiento.

XQuark-Bridge soporta también la consulta y manipulación de los datos en formato XML utilizando el lenguaje XQuery.

XQuark-Bridge soporta MySQL, Oracle, SQLServer y Sybase y tiene una licencia LGPL.

4.3 BumbleBee

BumbleBee, es un entorno de prueba automático creado con el fin de evaluar motores de XQuery y validar consultas escritas en sintaxis XQuery. BumbleBee permite evaluar que grado de satisfacción de los borradores del estándar y especificaciones satisface un motor XQuery y comprobar si una versión más moderna de nuestro motor permite seguir ejecutando nuestras consultas.

BumbleBee se distribuye con un conjunto de pruebas ya preparadas y, además, ofrece un entorno sencillo para redactar y ejecutar nuestras propias pruebas.

5. Motores XQuery open-source

Estos son los motores XQuery open-source más relevantes y sus características principales:

  • Qexo es un motor XQuery escrito en Java y con licencia GPL que se distribuye integrado dentro del paquete Kawa.
  • es otro motor XQuery escrito en Java que se distribuye en dos paquetes, uno de ellos, Saxon-B es open-source bajo licencia GPL y contiene una implementación básica de XSLT 2.0 y XQuery, mientras que el segundo paquete, Saxon-SA, contiene un procesador completo XSLT y XQuery pero tiene licencia propietaria, aunque está disponible una licencia de evaluación de 30 días.
  • Qizx/open es una implementación Java de la última versión de las especificaciones XQuery. Implementa todas las características del lenguaje excepto la importación y validación de XML-Schemas. Actualmente este es el motor con licencia GPL más completo que existe.

6. Conclusiones

XQuery es en la actualidad, y a pesar de estar aún en fase de borrador, una tecnología emergente con grandes expectativas en el mundo de la programación y del tratamiento y manipulación de información como lo demuestra el número de empresas que están apostando por desarrollar implementaciones de motores de consulta basados en XQuery.

Sus principales aplicaciones se pueden resumir en tres grandes grupos:

  • En primer lugar, recuperar información a partir de conjuntos de datos XML.
  • En segundo lugar, transformar unas estructuras de datos XML en otras estructuras que organicen la información de forma diferente.
  • En tercer lugar, ofrecer una alternativa a XSLT para realizar transformaciones de datos en XML a otro tipo de representaciones, como HTML o PDF.

Aún así, restan cerrar algunas cuestiones. Por ejemplo, el comité aún no ha definido cómo implementará las modificaciones de datos y todo indica que la versión 1.0 no dispondrá de esta funcionalidad (al día de hoy cada proveedor ha usado soluciones propietarias).

Sin embargo, hay que destacar que la aceptación en el mercado ha sido masiva; hoy existen productos que no solo lo están usando del lado del servidor, sino también de lado del cliente (en combinación con JavaScript). Microsoft ha adoptado como base la especificación de Diciembre de 2001 para SQL Server 2005 Beta 1, sin embargo, se destaca que cuando se acerque el primer release, se ajustarán más a la nueva recomendación.

Lo que parece ser innegable es que terminará siendo un lenguaje estándar para acceso a datos.

 


Esta página es el resultado del estudio sobre XQuery para la asignatura "Sistemas Avanzados de Recuperación de la Información" impartida en la Universidad Carlos III de Madrid en 2º Curso de la Licenciatura en Documentación. 

 

Página realizada por Laura Burgué Dorda.

  xquery_xml@yahoo.es

                                                                                                 CSS Validator                                                                                   Universidad Carlos III de Madrid

Actualizado a 27/04/2007

 

 

 

 

 

 

 

 

 

 

Recursos electrónicos:

XQuery

W3C XQuery

Tutorial Xquery

XPath Language

XQEngine

Qexo

Qizx/open

Saxon

Xquark

W3C

XQueryX

XSLT

XML

Libros:

XQuery from the Experts: A Guide to the W3C XML Query Language (Howard Katz, D. D. Chamberlin)

XQuery: The XML Query Language (Michael Brundage)

Querying XML: XQuery, XPath, and SQL/XML in Context (Jim Melton and Stephen Buxton).

1