AccueilđŸ‡«đŸ‡·Chercher

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

Implémentations

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

Cet article est issu de wikipedia. Text licence: CC BY-SA 4.0, Des conditions supplĂ©mentaires peuvent s’appliquer aux fichiers multimĂ©dias.