1.1. ¿Qué es XQuery?
XQuery, también conocido como XML Query, es un lenguaje creado para buscar y extraer elementos yatributos de documentos XML. La mejor forma de entender este lenguaje es diciendo que XQuery es paraXML lo que SQL es para las bases de datos. XQuery es un lenguaje de consulta diseñado para escribirconsultas 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-ario de etiquetas XML. En este sentido XQuery es independiente del origen de los datos.
Una consulta XQuery podría resolver, por ejemplo, la siguiente pregunta: "Seleccionar todos los libros con un precio menor a 20 euros de la colección de libros almacenada en un documento XML llamado catalogo.xml".
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 pretende ser el futuro estándar de consultas sobre documentos XML. Actualmente XQuery es un conjunto de borradores en el que trabaja el grupo W3C, por lo que es compatible con XML, Namespaces, XSLT, XPath y XML Schema. Sin embargo, a pesar de no tener una redacción definitiva ya existen o están en proceso numerosas implementaciones de motores y herramientas que lo soportan.
XQuery hace uso de XPath, un lenguaje utilizado para seleccionar partes de XML. De hecho, XQuery 1.0 y XPath 2.0 comparten el mismo modelo de datos y soportan las mismas funciones y operadores.
• XQuery es un lenguaje para consultar datos XML
• XQuery es para XML lo que SQL para las bases de datos
• XQuery se basa en expresiones XPath
• XQuery funciona en la mayoría de los motores de bases de datos (IBM, Oracle, Microsoft, etc.)
• XQuery 1.0: W3C Recommendation (2007)
Características de XQuery
Se parece a SQL.
Se parece a XPath, utiliza el mismo modelo de datos y funciones
Tiene el mismo esquema de datos atómicos de XML.
En las consultas se base en FLWOR(*) (leído como "flower" ).
Permite definir funciones de usuario
(*) "flower" . For+Let+Where+Order by+Return
Lenguaje de expresión
En XQuery, todo es una declaración que se evalúa de acuerdo con un valor.
Por ejemplo, 7 + 3 es un código de XQuery válido que se evalúa por 10.
Otro ejemplo es una declaración condicional proporcionada por un texto:
if (3 < 4) then "Verdadero" else "Falso"
Al evaluar, devolvera el texto "Verdadero"
Ejemplos
a. Todas las ciudades
//city
b. El país que tiene @country como atributo
//city[@country]
c. @longitude 20 o mayor
//city[@longitude > 20]
d. population elementuaren balioa aurreko hirietan
data(//city[@longitude > 20]/population)
e. El nombre de la ciudad con población mayor de 100000
//city[population/number()>100000]/name/text()
f. Su población de 1.000.000 o mayor que el nombre del país empieza por P (case insensitive)
//country[matches(@name,'^P','i') and @population>1000000]/name
Tipo de datos
Tipos de datos base (predefinidos) o atómicos (no compuestos) .
Númericos: enteros y reales
Booleanos
Cadenas de texto
Días, horas y tiempo
Tipos relacionados con XML; por ejemplo, QName
Nods XML: nodo raíz, elemento, atributo, texto, comentarios, intrucciones de procesamiento eta y espacio de nombres
Secuencias
Son listas simples (atómicas).
0 Ejemplo:
Para comprender las secuencias, las secuencias se definen mediante varias variables, y la función count () se usará para mostrar cuántas secuencias tiene cada elemento:
let $s1:= (2, 4, 6) ❶
let $s2:= ($s1, $s1) ❷
let $s3:= 10 ❸
let $s4:= () ❹
return (count($s1), count($s2), count($s3), count($s4))❺
❶ Se declara una variable $s1 y se asigna una secuencia de 3 elementos.
❷ La segunda secuencia es la concatenación de la primera cadena , ; entonces tiene 6 elementos
❸ La tercera secuencia tiene solo un elemento.
❹ La cuarta secuencia esta vacia, no tiene elementos.
❺ El tamaño de cada secuencia , que es 3 6 1 0.
1 Ejemplo:
//city/name/text() Con la búsqueda XPath , se encuentras los nombres de diferentes ciudades (que se encuentran en cualquier parte del árbol XML) y se almacenan en la variable $city. Nos detendremos con aquellos que empiezan por Q, serán ordenados y mostrados.
for $hiria in doc('mondial')//city/name/text()
where starts-with($hiria, 'Q')
order by $hiria
return data($hiria)
Leer archivo
Función doc(), lee un documento XML que se expresa como un parámetro y devuelve el nodo raíz o los elementos indicados por una instrucción XPath.
Lo que deberíamos considerar con Xquery:
XQuery es sensible a la tipografía (mayúsculas y minúsculas).
Cualquier elemento XML, atributo o variable XQuery debe tener un identificador válido.
El valor de cadena o cadena XQuery debe estar entre comillas simples o dobles.
Las variables de XQuery deben comenzar con $ símbolos. Por ejemplo, $ library.
A diferencia de XML, los comentarios de XQuery, como se muestra a continuación, se deben colocar entre caras sonrientes. (: Este es el comentario de XQuery :)
doc ("XML_file") devuelve el archivo XML y devuelve el documento completo.
XQuery usa las expresiones "xpath" para cruzar nodos de documentos XML y navegar a través del documento. Por ejemplo, utilizaremos la siguiente declaración para seleccionar todos los títulos (títulos de elementos) en el archivo "book-store.xml":
doc("book-store.xml")/book-store/book/title
XQuery usa XPath para limitar la cantidad de datos que se extraen del documento XML (filtrado). Los siguientes predicados permiten que el elemento "libro" "librería" seleccione todos los artículos que son "precio" bajo el ítem 30:
doc("book-store.xml")/book-store/book/[precio<30]
XQuery y espacios de nombres: si los documentos XML que se van a consultar se usan para nombres de espacios de nombres,también deben usar consultas de XQuery. Para esto, es necesario declarar los espacios de nombres y sus prefijos en las consultas. Por ejemplo, "http://www.adibideak.com" declara el espacio de nombre y asigna el prefijo "eje". El nombre del espacio de nombres debe coincidir con el documento XML, pero el prefijo puede ser diferente.
declare namespace src="http://www.ejemplos.com";