Introduction
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 est une spécification du W3C dont la version 1.0 finale date de Janvier 2007, 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.
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).
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 librairies 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 plein-texte 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'avril 2010), modifie le modèle de programmation pour ajouter des instructions impératives (blocs séquentiels, while, exit) garantissant l'ordre d'exécution.