Funzioni in XQuery

XQuery 1.0, XPath 2.0 e XSLT 2.0 condividono la stessa libreria di funzioni.

Funzioni in XQuery

XQuery contiene oltre 100 funzioni predefinite. Queste funzioni possono essere utilizzate per valori di stringa, valori numerici, confronti di date e ora, operazioni su nodi e QName, operazioni su sequenze, valori logici, ecc. Puoi anche definire le tue proprie funzioni in XQuery.

Funzioni predefinite XQuery

URI dello spazio dei nomi delle funzioni XQuery:

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

Il prefisso predefinito dello spazio dei nomi delle funzioni è fn:.

Suggerimento:Le funzioni sono spesso chiamate con il prefisso fn:, ad esempio fn:string(). Tuttavia, poiché fn: è il prefisso di namespace predefinito, non è necessario utilizzare il prefisso quando si chiama la funzione.

Puoi trovare l'intero <Manuale di riferimento delle funzioni XQuery predefinite》。

Esempio di chiamata di funzione

La chiamata di funzione può essere utilizzata insieme a espressioni. Ecco un esempio:

Esempio 1: Nell'elemento

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

Esempio 2: Nel predicato dell'espressione di percorso

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

Esempio 3: Nell'espressione let

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

Funzione utente definita in XQuery

Se non si trova la funzione XQuery necessaria, è possibile scrivere la propria funzione.

Le funzioni utente definite possono essere definite all'interno della query o in un repository indipendente.

Sintassi

declare function prefisso:nome_della_funzione($parametro AS tipo_dati)
  AS tipo di dati di ritorno
{
(: ...codice della funzione... :)
;

Considerazioni sull'uso delle funzioni utente definite:

  • Utilizzare la parola chiave declare function
  • Il nome della funzione deve utilizzare un prefisso
  • Il tipo di dati dei parametri solitamente corrisponde al tipo di dati definito nello schema XML
  • Il corpo della funzione deve essere racchiuso tra parentesi graffe

Esempio di funzione utente dichiarata in una query:

declare function local:minPrice(
  $price as xs:decimal?,
  $discount as xs:decimal?
  AS xs:decimal?
{
let $disc := ($price * $discount) div 100
return ($price - $disc)
;
(Esempio di chiamata alla funzione sopra indicata :)
<minPrice>{local:minPrice($book/price, $book/discount)}</minPrice>