Saltar la navegación

6.6.- Funciones.

Imagen publicitaria de un jarra en la que se puede leer: “Multiply function Pot”, en castellano se traduce como “Jarra multifunción”.
mollyali - www.flickr.com (CC BY-NC)

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 ítems en una colección.
    • min() o max(), 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 ítems dados.
  • 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...
}