|
XQUERY
|
Bibliografía | |||||||||||||||||||||||||||
| 1.
¿POR QUÉ NECESITAMOS XQUERY?
2.1
Requerimientos técnicos de XQuery 3.3.
Expresiones condicionales. 3.4.
Cuantificadores existenciales. 3.5.
Operadores y funciones principales. 4.HERRAMIENTAS
RELACIONADAS CON XQUERY
|
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.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:
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:
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. 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:
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. A
continuación, enunciamos una serie de reglas que debe cumplir cualquier
consulta escrita en XQuery:
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. 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”). 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:
(*) 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. Los comentarios en XQuery, a diferencia de XML, van encerrados entre dos puntos y paréntesis, como se muestra a continuación:
La sintaxis de comentario usada en XML no es aplicable a XQuery salvo que la consulta se escriba con la sintaxis 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. 4.
Herramientas relacionadas con XQuery 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. 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. 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. Estos son los motores XQuery open-source más relevantes y sus características principales:
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:
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. Actualizado a 27/04/2007
|
Recursos electrónicos: 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). |