*** La nrme : XQuery *** 1. Intrductin 1.1 Principe XQuery est un langage de "prgrammatin" puissant pur extraire des dnnées XML. Type de dnnées: un seul "dcument" u encre des cllectins sus frme de : Fichiers. bases de dnnées XML. XML "en mémire" (abres DOM). n peut manipuler un résultat btenu et y ajuter. 1.2 Exemple de sensibilisatin Chercher tus les nœuds avec le chemin //tpic/title dans "catalg.xml" fr $t in dcument ("catalg.xml") //tpic/title return $t 1.3 Cntextes d'utilisatin: Il faut un prcesseur XQuery, par exemple : un util "standalne", par exemple le prcessuer XSLT/XQuery "saxn". un util intégré dans un "service Web", une base de dnnées XML, etc une librairie intégre dans un lgiciel (par ex. un éditeur XML). Ensuite, même principe que pur les bases de dnnées SQL : En ligne de cmmande. Avec un util d'administratin (Web u en lcal). Avec une applicatin Web (dnc il faut prgrammer une interface). 2. XQuery de base : 2.1. La ntin d'expressin de recherche : XQuery est bâti sur des éléments XPath, par exemple : 1. psitin dans un arbre ex: returne tus les neuds <card-prpvalue> sus <c3mssft-desc>... //c3msbrick//c3mssft-desc//card-prpvalue 1
1. pératins de cmparaisn ex: returne seulement le fragment pur une id particulière //c3msbrick//c3mssft[@id="epbl"] 1. functins ex: qui returne juste le cntenu d'un neud //c3msbrick/title/text() 2.2 Les expressins FLWOR : FLOWR = "Fr-Let-Where-Order-Return" rappelle l'idée du select-frm-where-..-rder-by de SQL Vici un survl: 1. fr = iteratin sur une liste de fragments xml et 2. let = assciatin du résultat d'une expressin à une variable 3. where = cnditin de sélectin 4. rder = tri des résultats 5. return = expressin à returner a. "fr" "fr" asscie à chaque $variable une valeur (fragment XML) truvé pur l'expressin XQuery. b. let "let" permet de d'assigner une valeur à une variable. c. where permet de définir une cnditin de sélectin une seule par requête. d. rder permet de trier les résultats. e. return cnstruit l'expressin à returner à chaque itératin qui dit returner un seul fragment XML (pas une cllectin). 2
Vici un exemple qui résume tutes les expressins de FLWOR tel que pur chaque élément $t truvé dans la bucle "fr" n cmpte le nmbre de certains sus-éléments et n affiche les titres de t$, mais n affiche seulement les cas ù n est en présence d'au mins 2 avec un tri dans l'rdre crissant : fr $t in dcument("catalg09.xml")//c3msbrick let $n := cunt($t//c3mssft) where ($n > 1) rder by $n return {$t/title/text()} pssède {$n} briques 2.3 Cnstructin de fragments XML : Le résultat d'une requête devrait nrmalement se présenter sus une frme apprpriée pur être réutilisée... A. Versin multi-fragment (cllectin) : il faudrait encre la traiter pur l affichage L'expressin suivante de base fr $t in //c3msbrick/title return $t Returne une liste (une cllectin) : 1<title class ="- tpic/title " > TECFA Seed Catalg </ title > 2<title class ="- tpic/title " > Intrductin </ title > 3<title class ="- tpic/title " > Cnceptual and technical framewrk </ title > 4<title class ="- tpic/title " > The sci-cnstructivist apprach </ title >... Autrement dit, n reçit une cllectin de fragments xml. 3
B. Versin un seul fragment : L'expressin suivante: { fr $t in //tpic/title/text() return <titre>{$t}</titre> } Dnne : <result > <titre > TECFA Seed Catalg </ titre > <titre > Intrductin </ titre > <titre > Cnceptual and technical framewrk </ titre > <titre > The sci-cnstructivist apprach </ titre >... On remarque que les balises "title" snt remplacées par "titre" et tutes les expressins entre {...} snt évaluées, mais à l'intérieur des ces expressins tutes les <balises> snt cpiés "tels quels". 2.4 Fr dans fr : n peut imbriquer des bucles dans des bucles cmme l exemple suivant le mntre : <title>list f C3MSBricks and assciated Sftware</title> { fr $t in dcument("catalg09.xml")//c3msbrick let $brick_sfts := $t//c3mssft let $n := cunt($brick_sfts) where ($n > 0) rder by $n descending return <brick> Pur {$t/title/text()} n a les {$n} mdules suivants : { fr $sft in $brick_sfts return <sft> {$sft//title/text()}</sft> } </brick> } 4
Chaque expressin FLWOR u variable se truve dans des {... } Le "return" de la grande bucle cntient une bucle qui décrtique encre $brick_sfts cntient une cllectin de $sfts dnc n srt les titres. On trie dans l'rdre descendant. Vici le résultat: <result > <title > List f C3MSBricks and assciated Sftware </ title > <brick > Gallery pssède les 5 briques suivants : <sft > PhtShare </ sft > <sft > Phtshare cmbined with PageSetter </ sft > <sft > My_eGallery </ sft > <sft > Cppermine </ sft > <sft > Gallery </ sft > </ brick > <brick > User statistics pssède les 5 briques suivants : <sft > cmmart </ sft > <sft > pncuserpints </ sft > <sft > pncsimplestats </ sft > <sft > Statistics mdule </ sft > <sft > NS-User_Pints </ sft > </ brick >... 3. XQuery avec Saxn Permet d'apprendre XQuery sans avec accès à un serveur u éditeur XML. 4. XQuery avec exist exist est une base de dnnée XML (et qui vient aussi à ptin avec un prtail). Pur l'utiliser, il faut avir un lgin et les drits d'écrire u de lire des cllectins. Une cllectin cntient des fichiers XML (et qui nrmalement représentent une applicatin, un dmaine, etc ). Il existe plusieurs API pur accéder à exist. 5. Cnclusin générale : Nus vus avns présenté, de façn synthétique, cmment appliquer des instructins XQuery au type XML dans SQL Server. Nus n'avns fait qu'effleurer la puissance de XQuery. Expérimentez, apprfndissez, vus verrez que ce langage regrge de suplesse et de surprises. 5