Fonctions XQuery

XQuery 1.0, XPath 2.0 et XSLT 2.0 partagent la même bibliothèque de fonctions.

Fonctions XQuery

XQuery contient plus de 100 fonctions intégrées. Ces fonctions peuvent être utilisées pour les valeurs de chaîne, les valeurs numériques, les comparaisons de dates et d'heures, les opérations sur les nœuds et QName, les opérations sur les séquences, les valeurs logiques, etc. Vous pouvez également définir vos propres fonctions en XQuery.

Fonctions intégrées XQuery

URI de l'espace de noms des fonctions XQuery :

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

Le préfixe par défaut du namespace des fonctions est fn:.

Astuce :Les fonctions sont souvent appelées avec le préfixe fn: par exemple fn:string(). Cependant, étant donné que fn: est le préfixe par défaut du namespace, le préfixe n'est pas nécessaire lors de l'appel de la fonction.

Vous pouvez trouver la complete 'Référence du manuel des fonctions intégrées XQuery》。

Exemple d'appel de la fonction

L'appel de la fonction peut être utilisé avec des expressions. Voir les exemples suivants :

Exemple 1: Dans un élément

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

Exemple 2: Dans le prédicat d'une expression de chemin

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

Exemple 3: Dans une instruction let

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

Fonctions utilisateur XQuery

Si vous ne trouvez pas la fonction XQuery nécessaire, vous pouvez écrire votre propre fonction.

Les fonctions utilisateur peuvent être définies dans une requête ou dans une bibliothèque indépendante.

Syntaxe

declare function préfixe:nomDeLaFonction($paramètre AS typeDeDonnées)
  AS le type de données retourné
{}}
(: ...code de la fonction... :)
;

Remarques sur les fonctions utilisateur :

  • Utilisez la clé mot-clé declare function
  • Le nom de la fonction doit utiliser un préfixe
  • Le type de données des paramètres correspond généralement au type de données défini dans XML Schema
  • Le corps de la fonction doit être entouré de crochets

Un exemple de fonction utilisateur déclarée dans une requête :

declare function local:minPrice(
  $price as xs:decimal?,
  $discount as xs:decimal?)
  AS xs:decimal?
{}}
let $disc := ($price * $discount) div 100
return ($price - $disc)
;
(Les exemples suivants montrent comment appeler la fonction ci-dessus :)
<minPrice>{local:minPrice($book/price, $book/discount)}</minPrice>