Funzione XQuery

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

Funzione XQuery

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

Funzioni integrate 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 tramite il prefisso fn:, ad esempio fn:string(). Tuttavia, poiché fn: è il prefisso predefinito dello spazio dei nomi, il prefisso non è necessario quando si chiama la funzione.

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

Esempio di chiamata della funzione

La chiamata della funzione può essere utilizzata insieme a un'espressione. 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: nel comando let

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

Funzione utente XQuery

Se non trovi la funzione XQuery necessaria, puoi scrivere la tua funzione.

Le funzioni utente definite possono essere definite nella query o in un repository indipendente.

Sintassi

declare function prefisso:nome della funzione($parametro AS tipo dei dati)
  AS tipo dei dati restituiti
{}}
(: ...codice della funzione... :)
;

Considerazioni sulla funzione utente definita:

  • 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 definita nella 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)
;
(Di seguito è riportato un esempio di chiamata alla funzione sopra)
<minPrice>{local:minPrice($book/price, $book/discount)}</minPrice>