Recuperacion y Organizacion de la Informacion

Lenguajes de recuperación para la Web: XQuery

Qué es XML Query

XML Query, comúnmente denominado XQuery y publicado por el W3C (World Wide Web Consortium), es un lenguaje funcional que utilizando la notación XML permite realizar consultas en infinidad de tipos de diferentes documentos tales como documentos estructurados, colecciones de documentos, bases de datos, estructuras DOM, catálogos, Servicios Web, aplicaciones, sistemas heredados, etc. Gracias a su robustez y flexibilidad permite consultar un amplio espectro de fuentes de información.

Por qué necesitamos XML Query

Actualmente, XML se ha convertido en una herramienta de uso cotidiano en los entornos de tratamiento de información y en los entornos de programación. Sin embargo, a medida que se emplea en un mayor número de proyectos de complejidad y tamaño crecientes y la cantidad de datos almacenados en XML aumenta, 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. Este lenguaje debe ser, además declarativo, es decir independientemente de la forma en que se realice el recorrido o donde se encuentren los datos. Como solución a esta necesidad surge el lenguaje XML Query.

El lenguaje XML Query y sus características

XML Query es un lenguaje de consulta diseñado para escribir consultas sobre colecciones de datos expresadas en 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 XML Query es independiente del origen de los datos.

XML Query 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 devulve un resultado, al igual que en SQL. Diversas espresiones pueden combinarse de una manera muy flexible con otras expresiones para crear nuevas expresiones más complejas y de mayor potencia semántica.

XML Query, que hace un uso intensivo de XPath, presenta las siguientes características:

  • Es declaratorio.
  • Es relacionalmente completo y, en particular, puede expresar combinaciones.
  • Es lo bastante sencillo como para que técnicas de bases de datos conocidas para la optimización de consultas y estimación de costos puedan extenderse a XML-QL.
  • Puede extraer datos de documentos XML existentes y construir nuevos documentos XML.

Consultas en XML Query

Un 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. es decir, los nodos que aperecerán en el resultado dependen de los namespaces, de la posición donde aparezca la etiqueta raíz del nodo, etc...

En XQuery las consultas pueden estar compuestas por claúsulas de hasta cinco tipos distintos. Las consultas siguen la norma FLWOR (For, Let, Where, Order y Return):

  • FOR: Vinvula 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 variables.
  • LET: Vincula una variable al resultado completo de una expresión añadiendo esos vínculos a las tuplas generadas por una claúsula for o, si no existe ninguna claúsula 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 claúsula where y ordenada por la claúsula order by.

En XQuery, cuando usamos el término de 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.

--> Reglas Generales

Toda consulta escrita en XQuery debe cumplir las siguientes reglas:

  • 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 calúsulas. Sin embargo solo puede declararse una única cláusula WHERE, una única cláusula ORDER BY y una única claúsula RETURN.
  • Ninguna de las cláusulas FLWOR es obligatoria en una consulta XQuery.

--> Funciones de entrada

XQuery utilizar las funciones de entrada en las cláusulas FOR o LET o en expresiones XPath para identificar el origen de los datos:

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

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

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

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

--> Cuantificadores existenciales

XQuery soporta dos cuantificadores existenciales llamados "some" y "every", de tal manera que nos permite definir consultas que devuelvan 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)".

--> Operadores y funciones principales

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.

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

--> Comentarios

Los comentarios en XQuery, a diferencia de XML, van encerrados entre caras sonrientes " (: :) ".

Página creada por Vanesa Gil Sánchez

Última Actualización: 10-04-2007

validado XHTML Validación CSS Nivel WAI - AA TAW. Nivel doble A. WCAG 1.0 WAI Cynthia Tested

Recuperacion y organizacion de la informacion Recuperacion y organizacion de la informacion Recuperacion y organizacion de la informacion Recuperacion y organizacion de la informacion

Equipo 1  - Lenguajes de Recuperación para la Web I - Recuperación y Organización de la Información