En procédant de la sorte, nous obtenons un résultat différent, mais au prix d’une requête longue (121
lignes) et complexe à lire.
Nous utiliserons les « functions » ou fonctions proposées par XQuery afin d’alléger le code.
Le bloc suivant calculant la somme des mesurages pour une activité se répète à sept reprises.
Nous le transformons en « function ».
Une « function » comporte les parties suivantes:
– la déclaration de « function » suivie de son nom « declare function local: ici le nom ».
– les paramètres de la « function » et le type retourné par la « function » (entre parenthèses).
– le corps de la « function » contenant les instructions de traitement.
Nous déclarons la « function » que nous nommons : « activite »:
declare function local:activite
Nous avons un seul paramètre qui est « act1 » ou « act2 », …, ou « act7 ».
La variable « $ak » que nous déclarons prendra comme argument un des sept « act… »
Ce paramètre est de type « atomic », et le résultat de la « function » sera également une valeur
« atomic » (un nombre).
La déclaration de « function » complète est:
declare function local:activite($ak as xs:anyAtomicType?)as xs:anyAtomicType?
Le corps de la « function » est la partie de imbriquée dans SUM.
La « function » complète ci-dessous:
Nous pouvons créer une seconde « function » calculant la somme des mesurage par activité pour
une commande précise.
Nous nommons cette « function » « activite2 ».
XQuery permet qu’une « function » se trouve au sein d’un espace mémoire dédié ou bien dans la
requête elle même; nous retenons cette seconde possibilité.
Les deux « functions » se trouvent en préambule de la requête.
Au sein de la requête, pour le calcul relatif à l’activité1, nous appelons la « function » « activite »
par:
local:activite(“act1”)
et lui passons le paramètre « act1 »
et la seconde « function » qui reçoit le meme paramètre par:
local:activite2(“act1”)
La requête complète devient:
La requête est simplifiée, 85 lignes; si nous souhaitons modifier la méthode de calcul des quantités
de mesurage, une seule modification de « function » sera nécessaire, alors qu’il aurait fallu modifier
à sept reprises sans l’usage de « functions ».
Le résultat de cette requête est identique: