6.6.- Funciones.
Ahora que conocemos las cláusulas que sustentan el lenguaje XQuery, vamos a ocuparnos de las funciones que soporta.
Estas son 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. Las funciones más importantes se muestran a continuación:
- Funciones numéricas
floor(), que devuelve el valor numérico inferior más próximo al dado.ceiling(), que devuelve el valor numérico superior más próximo al dado.round(), que redondea el valor dado al más próximo.count(), determina el número deítemsen una colección.min()omax(), devuelven respectivamente el mínimo y el máximo de los valores de los nodos dados.avg(), calcula el valor medio de los valores dados.sum(), calcula la suma total de una cantidad deítemsdados.
- Funciones de cadenas de texto
concat(), devuelve una cadena construida por la unión de dos cadenas dadas.string-length(), devuelve la cantidad de caracteres que forman una cadena.startswith(), ends-with(), determinan si una cadena dada comienza o termina, respectivamente, con otra cadena dada.upper-case(), lower-case(), devuelve la cadena dada en mayúsculas o minúsculas respectivamente.
- Funciones de uso general
empty(), devuelve “true” cuando la secuencia dada no contiene ningún elemento.exits(), devuelve “true” cuando una secuencia contiene, al menos, un elemento.distinct-values(), extrae los valores de una secuencia de nodos y crea una nueva secuencia con valores únicos, eliminando los nodos duplicados.data(), devuelve el valor de los elementos que recibe como argumentos, es decir, sin etiquetas.
- Cuantificadores existenciales:
some, every, permiten definir consultas que devuelven algún, o todos los elementos, que verifiquen la condición dada.
Ejemplo de la función data
Esta consulta devuelve todos los títulos, incluyendo las etiquetas:
for $x in doc("libros.xml")/biblioteca/libros/libro/titulo
return $x
El resultado con el fichero de ejemplo sería:
<titulo>Learning XML</titulo>
<titulo>XML Imprescindible</titulo>
<titulo>XML Schema</titulo>
<titulo>XPath Essentials</titulo>
<titulo>Beginning XSLT 2.0: Form Novice to Professional</titulo>
<titulo>XQuery</titulo>
Utilizando la función data:
for $x in doc("libros.xml")/biblioteca/libros/libro/titulo
return data($x)
...se obtiene:
Learning XML
XML Imprescindible
XML Schema
XPath Essentials
Beginning XSLT 2.0: Form Novice to Professional
XQuery
Además de estas funciones que están definidas en el lenguaje, XQuery permite al desarrollador construir sus propias funciones:
declare nombre_funcion($param1 as tipo_dato1, $param2 as tipo_dato2,… $paramN as tipo_datoN)
as tipo_dato_devuelto
{
...CÓDIGO DE LA FUNCIÓN...
}