Fonctions en XQuery

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

Fonctions en 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 les 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 nom 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, comme fn: est le préfixe par défaut du namespace de nommage, le préfixe n'est pas nécessaire lors de l'appel de la fonction.

Vous pouvez trouver la totalité de la <Référence des fonctions intégrées XQuery}`.

Exemple d'appel de fonction

L'appel de fonction peut être utilisé avec des expressions. Voir l'exemple suivant :

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:nom_de_la_fonction($paramètre AS type_de_données)
  AS type de données de retour
{
(: ...code de la fonction... :)
;

Remarques sur les fonctions utilisateur :

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

Exemple d'une 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)
;
(Exemples d'appel de la fonction ci-dessus :)
<minPrice>{local:minPrice($book/price, $book/discount)}</minPrice>