XQuery
XQuery est un langage de requĂȘte informatique permettant non seulement d'extraire des informations d'un document XML, ou d'une collection de documents XML, mais Ă©galement d'effectuer des calculs complexes Ă partir des informations extraites et de reconstruire de nouveaux documents ou fragments XML.
XQuery | |
Date de premiĂšre version | |
---|---|
Site web | www.w3.org/XML/Query |
XQuery est une spécification du W3C dont la version 1.0 finale date de , et dont l'élaboration a demandé prÚs de huit années. XQuery a été développé conjointement avec XSLT 2, une révision majeure du langage de transformation XML XSLT, avec lequel il partage le sous-ensemble XPath 2.0 (en).
XQuery joue par rapport aux données XML un rÎle similaire à celui du langage SQL vis-à -vis des données relationnelles, et l'on peut trouver des analogies entre ces deux langages.
Syntaxes
Il existe deux syntaxes distinctes pour XQuery :
- la syntaxe "naturelle" non-XML dite aussi FLWOR (prononcer flower), dont le nom vient des cinq clauses principales qui la composent (for, let, where, order by et return) ;
- la syntaxe XQueryX (pour « XML Syntax for XQuery »), dans laquelle une requĂȘte est un document XML. De ce fait, elle est beaucoup plus verbeuse et moins lisible que la prĂ©cĂ©dente et est destinĂ©e Ă des manipulations formelles par des programmes (Ă©ventuellement eux-mĂȘmes Ă©crits en XQuery).
Exemple
Soit le document XML suivant, situé à l'URL http://www.example.com/ et nommé exemple.xml :
<employes>
<employe>
<nom>Durant</nom>
<prenom>Albert</prenom>
<date_naissance>23/09/1958</date_naissance>
</employe>
<employe>
<nom>Dupont</nom>
<prenom>Alphonse</prenom>
<date_naissance>23/12/1975</date_naissance>
</employe>
<employe>
<nom>Dupont</nom>
<prenom>Isabelle</prenom>
<date_naissance>12/03/1967</date_naissance>
</employe>
...
</employes>
La requĂȘte FLWOR suivante :
for $b in document ("http://example.com/exemple.xml")//employe
where $b/nom = "Dupont"
return
<dupont>{
$b/prenom,
$b/date_naissance
}</dupont>
va renvoyer le résultat suivant :
<dupont>
<prenom>Alphonse</prenom>
<date_naissance>23/12/1975</date_naissance>
</dupont>
<dupont>
<prenom>Isabelle</prenom>
<date_naissance>12/03/1967</date_naissance>
</dupont>
Composantes du langage
XQuery est un langage spĂ©cifiĂ© de façon modulaire : le cĆur du langage peut ĂȘtre augmentĂ© par des modules optionnels.
- Le langage minimal se base sur la norme XPath 2 (qui spĂ©cifie le langage de requĂȘte XML proprement dit), augmentĂ©e par les principales fonctionnalitĂ©s suivantes :
- L'expression FLWOR (For Let Where Order by Return), une puissante instruction de boucle, avec de nombreuses fonctionnalitĂ©s, qui est assez similaire au SELECT de SQL. GrĂące au where, il est possible d'Ă©crire des jointures internes ou externes. XQuery version 1.1 ajoute le group by, et le "fenĂȘtrage" (possibilitĂ© de dĂ©couper la sĂ©quence d'entrĂ©e selon des conditions boolĂ©ennes). Il existe d'autres constructions telles que if et typeswitch qui peuvent se composer avec le FLWOR.
- Les constructeurs, des instructions permettant de reconstruire des fragments XML, avec une syntaxe trĂšs proche de XML lui-mĂȘme (un fragment bien formĂ© de XML est de fait une expression XQuery valide). Ceci permet d'Ă©crire des modĂšles (templates) comportant des expressions Ă©valuĂ©es dynamiquement, Ă la maniĂšre des nombreux langages (exemple : PHP) de gĂ©nĂ©ration de pages web.
- Les fonctions définies par l'utilisateur.
- Un ensemble de fonctions et opérateurs prédéfinis communs à XPath2, XQuery et XSLT 2.
Modules optionnels :
- Le module optionnel Full Axis (Axes Ă©tendus) permet de bĂ©nĂ©ficier des "axes" de requĂȘte ancestor, ancestor-or-self, following, following-sibling, preceding, et preceding-sibling dans une expression XPath.
- Les modules XQuery permettent d'importer des bibliothĂšques de fonctions ou de variables XQuery dans un programme XQuery.
- Le module optionnel Schema Import permet de spĂ©cifier les schĂ©mas XML auxquels rĂ©pondent les donnĂ©es manipulĂ©es, permettant ainsi d'infĂ©rer les types de certaines expressions, et Ă©ventuellement d'optimiser les requĂȘtes.
- Le module optionnel Schema Validation permet d'utiliser le mécanisme de validation de fragments XML par rapport à des schémas.
- Le module optionnel "Typage Statique" supporte des vérifications de type avant exécution plus poussées.
Extensions :
- XQuery Update est une norme en cours d'Ă©laboration (norme prĂ©liminaire de 2010) Ă©tendant XQuery par des instructions de modification de nĆuds XML :
insert node, delete node, rename node, replace node, replace value, copy/modify
.
- XQuery Full-Text est une extension en cours d'élaboration (norme préliminaire en 2008) spécifiant la recherche textuelle intégrée à XQuery. Elle permet la recherche contextuelle de mots et de phrases, c'est-à -dire restreinte par exemple au contenu d'un élément XML particulier.
- XQuery Scripting, en cours d'élaboration (Working Draft d'), modifie le modÚle de programmation pour ajouter des instructions impératives (blocs séquentiels,
while
,exit
) garantissant l'ordre d'exécution.
Caractéristiques du langage
- XQuery est un langage fonctionnel (oĂč toute construction retourne une valeur) donc sans effet de bord, c'est-Ă -dire ne modifiant pas directement les donnĂ©es sur lesquelles il travaille. XQuery Scripting est une exception Ă ce principe.
- Contrairement Ă la plupart des langages fonctionnels, XQuery ne possĂšde pas de fonctions de second ordre (pouvant ĂȘtre argument d'autres fonctions). Ceci change dans XQuery 1.1.
- XQuery peut optionnellement ĂȘtre fortement typĂ© (au sens des SchĂ©mas XML) Ă la compilation et Ă l'exĂ©cution.
- Ces aspects sont partagés avec XSLT 2, qui est un langage proche de XQuery dans ses fonctionnalités.
- La programmation en XQuery est en gĂ©nĂ©ral d'un style plus "impĂ©ratif" qu'en XSLT, c'est-Ă -dire qu'elle nĂ©cessite la connaissance a priori de la structure des donnĂ©es XML manipulĂ©es. Inversement XSLT spĂ©cifie de façon dĂ©clarative des traitements sur chaque type de nĆuds XML, indĂ©pendamment les uns des autres. La programmation en XQuery est donc plus naturelle, mais un peu moins puissante et modulaire qu'en XSLT.
- L'extension XQuery Scripting offre un modĂšle de programmation plus classique.
ModÚle de données
- Toutes les valeurs manipulées par XQuery (ainsi que XPath2 et XSLT 2) sont des séquences (ou listes) d'items. Il n'y a pas de séquences imbriquées : une séquence de séquences est toujours "mise à plat".
- Les items se répartissent en deux grands groupes :
- les nĆuds XML, qui eux-mĂȘmes sont de six espĂšces diffĂ©rentes : document, Ă©lĂ©ment, attribut, texte, commentaire, processing-instruction.
- Les types de base (empruntés aux Schémas XML) au nombre de 48, comprenant notamment les types numériques (entiers, décimaux, flottants), les chaines de caractÚres et dérivés, les dates, instants et durées.
- Les types de bases peuvent ĂȘtre Ă©tendus par l'importation de SchĂ©mas (fonctionnalitĂ© optionnelle).
Exemples :
- L'expression 1 to 5 retourne la séquence d'items de type entier : 1 2 3 4 5.
- L'expression for $i in 1 to 5 return $i * $i retourne la séquence d'items de type entier : 1 4 9 16 25.
- L'expression for $i in 1 to 3 return <X>{ $i }</X> retourne la sĂ©quence de nĆuds Ă©lĂ©ments : <X>1</X> <X>2</X> <X>3</X>.
- Une séquence n'est pas obligatoirement d'un type homogÚne. Par exemple l'expression (1, 2), 2.5, (true(), "du texte") retourne la séquence d'items 1 2 2.5 true() "du texte" de types respectivement entier (2 fois), décimal, booléen, chaine de caractÚres.
Voir aussi
Articles connexes
- XPath
- XSLT
- SPARQL, langage de requĂȘte pour RDF
- Langage de transformation XML
Implémentations
- BaseX, open source. RequĂȘtes en direct
- eXist, open source.
- (en) Galax, implémentation en Ocaml
- (en) Qizx/open, interpréteur open source écrit en Java
- (en) Saxon, processeur open source XQuery et XSLT 2, réalisé par Michael Kay, concepteur de la norme XSLT 2.0.
- (en) QuiXQuery, réalisé par Innovimax et INRIA écrit en Java.
Le portail XQuery du W3C liste une cinquantaine d'implémentations de XQuery, open-source ou commerciales, ou de produits ou projets de recherche basés sur XQuery.
Les bases de données XML natives supportant XQuery sont (en 2009) au nombre d'une quinzaine, dont environ le tiers sont open-source.
Liens externes
- (en) en anglais
- (en) XQuery 1.0: An XML Query Language, recommandation W3C, 23 janvier 2007
- (en) Portail XQuery du W3C
- (en) Open Source XQuery Implementations