Presentación de XQuery
Presentación de XQuery
XML Query (más conocido como XQuery) es una especificación del W3C.
Hoy en día existen numerosos documentos en formato XML. Por lo tanto, era necesario crear un lenguaje simple para poder realizar consultas sobre estos documentos.
Las consultas permiten extraer información específica que se encuentra en un documento seleccionando y aislando los resultados... Por ejemplo, es posible obtener los precios superiores a 40 euros en un documento XML que represente un catálogo de venta de productos.
XPath 2.0 tiene como objetivo diseñar los objetos de un documento XML, direccionar los nodos de los árboles XML 1.0 y XML 1.1.
XPath está incluido dentro de XQuery.
En informática, la expresión designa una combinación de valores, de variables de operadores y de funciones que será interpretada por un programa que generará un resultado. XQuery es un lenguaje de expresión.
XQuery utiliza una sintaxis sensible a mayúsculas y minúsculas. Los elementos, los atributos y las variables deben tener nombres válidos en XML.
1. XQuery y el SQL
Podemos comparar XQuery con otro lenguaje, el SQL (Structured Query Langage o lenguaje de consulta estructurada). El SQL nace de los trabajos del matemático Edgar Frank Codd, inventor del álgebra relacional. Este lenguaje fue creado para procesar los datos cuando estos cobran mucha importancia...
El lenguaje
Con XQuery es posible extraer los resultados de un documento XML almacenado en su ordenador o en un servidor.
Las sintaxis son las siguientes:
-
Para un documento local:
doc('ruta_hacia_documento_xml')
-
Para un documento alojado en un servidor:
doc('http://dirección_del_documento_xml')
No debe confundirse doc y document de xslt que no funciona con Query. document es una sintaxis reservada para XSLT que permite cargar uno o varios documentos XML a partir del URI.
XQuery permite utilizar los argumentos de los elementos de un documento XML.
La sintaxis es la siguiente:
doc('ruta_hacia_documento_xml') //nodo[@argumento expresión]
Ejemplo con un identificador de edad:
doc('ruta_hacia_documento_xml') //niño[@edad=12]
1. Los comentarios
Al igual que XML, XQuery utiliza comentarios. Por lo tanto, el procesador no interpreta estos comentarios, que se usan para ayudar a entender la consulta escrita a la persona a la que esté destinada.
El comentario comienza con un paréntesis de apertura seguido de dos puntos y termina con un paréntesis de cierre precedido de dos puntos.
Ejemplo de comentario:
(: este es un comentario en XQuery :)
2. Posición en un árbol
Para obtener elementos específicos en un árbol, debemos indicar el documento sobre el que trabajamos y, a continuación, añadir un espacio, dos barras y finalmente el o los elementos deseados.
Ejemplo para...
Las expresiones
1. Expresiones de comparación
a. Comparación general
Podemos utilizar los operadores de comparación sobre los elementos y los argumentos de un árbol:
Operador |
Significado |
= |
Es igual |
!= |
No es igual |
> |
Es superior |
>= |
Es superior o igual |
< |
Es inferior |
<= |
Es inferior o igual |
Para obtener los elementos en los que todos los niños tienen más de doce años, escribiremos por ejemplo:
document('ruta_hacia_documento_xml') //niño[@edad>=12]
Para realizar comparaciones con cadenas de caracteres es necesario escribir la expresión de la derecha entre comillas.
En el siguiente ejemplo con un argumento ciudad, obtenemos los elementos niño en los que el atributo ciudad sea Barcelona:
doc('ruta_hacia_documento_xml') //niño[@ciudad= "Barcelona"]
Recuerde que XQuery es sensible a las mayúsculas y minúsculas.
b. Comparación de valores
Las expresiones de comparación utilizan las palabras claves eq, ne, lt, gt, ge, le:
-
eq para "equal", en español "igual a".
-
ne para "non equal", en español "distinto de".
-
lt para "less than", en castellano "inferior a".
-
gt para "greater than", en castellano "superior a".
-
le y ge para "less or equal" y "greater or equal", en español "inferior o igual" y "superior o igual".
A continuación, la consulta devuelve los niños del árbol familia cuyo nombre es Miguel.
doc('prueba.xml') //familia/niño[./nombre eq "Miguel"]
¿Qué diferencia hay entre la comparación de valores y la comparación general? La comparación de valores necesita definir los tipos con XMLSchema, de lo contrario el procesador devuelve un error indicando que los tipos no corresponden. Este no es el caso de las comparaciones generales. Por lo tanto es preferible utilizar las comparaciones de valor con los documentos XML con tipos definidos.
c. Comparación de nodos
Para ilustrar la comparación de nodos vamos a comparar un nodo consigo mismo. Para ello, vamos a utilizar la palabra clave is cuya sintaxis es:
nodo1 is nodo2
Por ejemplo:
doc('prueba.xml')...
Conclusión
En este capítulo ha descubierto el lenguaje XQuery y las posibilidades que ofrece. Quienes tengan nociones de programación sabrán sacar partido rápidamente de este lenguaje ya que se asemeja a otros lenguajes de programación. Quienes conozcan el SQL podrán reconocer con facilidad la presencia de consultas corrientes en las expresiones FLOWR.
Como habrá podido observar, XQuery posee funciones y le permite crear las suyas propias. Es muy posible que este lenguaje evolucione todavía y ofrezca más posibilidades para el procesamiento de documentos XML.