Funciones de XQuery

XQuery 1.0, XPath 2.0 y XSLT 2.0 comparten la misma biblioteca de funciones.

Funciones de XQuery

XQuery contiene más de 100 funciones integradas. Estas funciones se pueden usar para valores de cadena, valores numéricos, comparación de fechas y horas, operaciones de nodos y QName, operaciones de secuencia, valores lógicos, etc. También puede definir sus propias funciones en XQuery.

Funciones integradas de XQuery

URI del espacio de nombres de las funciones de XQuery:

http://www.w3.org/2005/02/xpath-functions

El prefijo predeterminado del espacio de nombres de las funciones es fn:.

Consejo:Las funciones se llaman generalmente con el prefijo fn:, por ejemplo, fn:string(). Sin embargo, ya que fn: es el prefijo predeterminado del espacio de nombres, el nombre de la función no es necesario que se utilice como prefijo en la llamada.

Puede encontrar la completa "Manual de referencia de funciones integradas de XQuery》。

Ejemplo de llamada a la función

La llamada a la función puede utilizarse junto con la expresión. Vea el siguiente ejemplo:

Ejemplo 1: En el elemento

<name>{upper-case($booktitle)}</name>

Ejemplo 2: En el predicado de la expresión de ruta

doc("books.xml")/bookstore/book[substring(title,1,5)='Harry'

Ejemplo 3: En la declaración let

let $name := (substring($booktitle,1,4))

Funciones definidas por el usuario de XQuery

Si no encuentra la función XQuery necesaria, puede escribir su propia función.

Las funciones personalizadas pueden definirse en consultas o en bibliotecas independientes.

Sintaxis

declare function prefijo:nombre_de_la_función($parámetro AS tipo_de_datos)
  AS tipo de datos de retorno
{}}
(: ...código de la función... :)
;

Consideraciones sobre las funciones personalizadas del usuario:

  • Utilice la palabra clave declare function
  • El nombre de la función debe usar un prefijo
  • El tipo de datos del parámetro generalmente coincide con el tipo de datos definido en el XML Schema
  • El cuerpo de la función debe estar encerrado entre corchetes

Un ejemplo de una función personalizada declarada en una consulta:

declare function local:minPrice(
  $price as xs:decimal?,
  $discount as xs:decimal?)
  AS xs:decimal?
{}}
let $disc := ($price * $discount) div 100
return ($price - $disc)
;
(A continuación, se muestra un ejemplo de cómo llamar a la función anterior :)
<minPrice>{local:minPrice($book/price, $book/discount)}</minPrice>