XQuery
Lenguaje de consulta que permite extraer y procesar informaci贸n almacenada en formato XML Con XPath comparte modelo de datos y soporta las misma funciones y operadores XQuery es un superconjunto de XPath. Toda expresi贸n XPath tambi茅n lo es XQuery
Ejemplo de expresiones XQuery: ●
7+3
●
if (3 < 4) then “Verdarero” else “Falso”
●
for $ciudad in doc(“fichero.xml”)//ciudad/nombre/text() where starts-with($ciudad, “Q”) order by $ciudad return data($ciudad)
TIPOS DE DATOS: Son los mismos que en los esquemas XML ● ● ● ● ● ●
Numéricos: enteros o reales. Booleanos Cadenas de texto Fechas, horas y dureaciones Tipos relacionados con XML, como QName. Nodos XML: raíz, elemento, atributo, texto, comentario, instrucción de procesamiento, espacio de nombres
SECUENCIAS Son listas de valores simples (at贸micos) Ejemplo: let $s1 := (1, 2, 3)
(: Se declara la variable $s1 y se le asigna una secuencia de 3 elementos :)
let $s2:= ($s1, $s1) let $s3:= 4 let $s4:= () return (count ($s1), count ($s2), count ($s3), count ($s4))
LECTURA DE ARCHIVOS función doc(“fichero.xml”) Devuelve el nodo raíz de “fichero.xml” o los elementos que se indiquen mediante la expresión XPath que le siga.
Clausulas FLWOR (
For, Let, Where, Order by, Return)
CLAUSULAS FLWOR (FOR, LET, WHERE, ORDER BY, RETURN)
for Indica el elemento que se va a seleccionar, normalmente desde un documento XML. Acompañada de la clausula “at” permite numerar los elementos que se van procesando. Ejemplos: for $x in (1 to 5) return <numero> {$x} </numero> for $x at $i in doc(“libros.xml”)/clasicos/clasico/titulo return <libro>{$i} . {data($x)} </libro>
<datos> { for $v1 in (1, 3), $v2 in (2, 4) return <dato><variable1>{$v1}</variable1><variable2>{$v2}</variable2></dato> } </datos>
let Permite declarar variables a las que se les asignan valores Ejemplos: let $v1 := 7, $v2 := 6 return 20*$v1*$v2 let $v1 := 7 let $v2 := 6 return 20*$v1*$v2
<continentes> { for $c in doc(â&#x20AC;&#x153;informacionGeografica.xmlâ&#x20AC;?)//continente let $nc := $c/nombre/data() order by $nc return <continente>{$nc}</continente> } </continentes>
where Permite definir condiciones que deben cumplir los elementos seleccionados por “for” Ejemplos: for $c in doc(“informacionGeografica.xml”)//continente for $p in doc(“informacionGeografica.xml”)//pais where $c/@id = $p/continente and $c/nombre=”Europa” return data ($p/nombre)
order by Permite ordenar los resultados de la consulta
return Indica los valores que devuelve la consulta
if â&#x20AC;Ś. then ...else Permite definir comportamientos condicionales
FUNCIONES XQuery ● ●
Existen funciones predefinidas (muchas coinciden con funciones XPath) El URI del espacio de nombres de las funciones XQuery es el mismo que el de las funciones XPath y su prefijo es fn (normalmente se omite) Funciones predefinidas: De texto: concat, string-length, upper-case, lower-case, substring, contains, starts-with, endswith, replace, normalize-space,... Numéricas: min, max, abs, avg, sum, floor, ceiling, round, count, …. De fechas: current-date, current-time, day-from-date,, hours-from-time,... De nodos XML: root, data,... De uso general: empty, exits, distinc-values, ….
OPERADORES ● ● ● ●
eq (=), ne (!=), lt (<), gt (>), le (<=), ge (>=) Aritméticos: +, -, *, div, mod Lógicos: and, or Comparación de nodos: is, is not, <<
Ejemplos: for $o in doc(“fichero.xml”)//organizacion return count($o/miembros) avg( for $o in doc(“fichero.xml”)//organizacion return count($o/miembros)) round( avg ( for $o in doc(“fichero.xml”)//organizacion return count($o/miembros) ))
declare function Permite declarar funciones definidas por el usuario Ejemplos: declare function local: aumento ($cantidad as xs:decimal, $porcentaje as xs:decimal) as xs:decimal{ let $respuesta := $cantidad * (1 + porcentaje div 100) return ($respuesta) }; for $p in doc(“informacionGeografica.xml”)//pais let $pA := local:aumento( $p/poblacion, 10) return <pais nombre=”{data($p/nombre)}” poblacion=”{data($p/poblacion)} poblacionAum=”{data($pA)}” />