Académique Documents
Professionnel Documents
Culture Documents
M. Sassolas
L3Pro
Mathieu Sassolas Cours 5 1 Pourquoi un langage de requêtes ?
Motivation
IUT de Sénart Fontainebleau
Département Informatique Syntaxe
2 Syntaxe de XQuery
Exemples
5 Mise en application
2 / 21
XQuery XQuery
I On peut le faire par XSLT :
M. Sassolas I On peut voir un document XML comme une base de M. Sassolas
L3Pro L3Pro
Cours 5
donnée : Cours 5
Mise en
application
<age>55</age> Mise en
application
<hobby>Conclure</hobby>
</person>
... (Mais ce n’est pas très beau.)
I Ça ne devient utile que si on fait vraiment des traitements
I On veut pouvoir extraire des informations de cette base :
dessus.
équivalent de
SELECT * FROM personne WHERE hobby="Conclure";
3 / 21 4 / 21 On veut de vraies requêtes comme en SQL.
Expressions FLWOR for $variable in expression
Partie I
M. Sassolas M. Sassolas
L3Pro L3Pro
éléments sélectionnés par l’expression.
Cours 5 for $variable in expression Cours 5 I L’expression est en général une requête XPATH (simple).
Motivation let $variable := expression Motivation
Remarques
Récupération de la racine d’un arbre XML
I Seul le return est obligatoire.
doc("chemin/vers/le/fichier.xml")
I On peut imbriquer des expressions dans d’autres.
Exemple
5 / 21 6 / 21 For $p in doc("../films/lesBronzes.xml")/personne
XQuery XQuery
M. Sassolas M. Sassolas
L3Pro L3Pro
I Assignation de variable.
Syntaxe Syntaxe
for $noeud at $i in doc("arbre.xml")/truc.
Exemples Exemples
Utilisation
I Produits cartésiens : Utilisation I Exemple : let $persId := $p/@id
Mise en
for $x in (1 to 5), $y in (4 to 21). Mise en I La variable peut aussi avoir comme valeur un (bout
application application
d’)arbre XML.
Remarque
Les nœuds sélectionnés pourraient l’être finement avec une
requête XPath adaptée. La philosophie de XQuery est de plutôt
laisser cela aux conditions du where.
7 / 21 8 / 21
where condition order by expression
XQuery XQuery
M. Sassolas M. Sassolas
Cours 5 Cours 5
Motivation I Les conditions sont les mêmes que les tests XPath. Motivation I Définit le critère pour ordonner le parcours d’une boucle
Syntaxe
I Exemple : where number($p/age) > 42 Syntaxe for.
I On peut inverser l’ordre avec descending ; le cas
Exemples Exemples
Utilisation
I Remarque : la requête n’est pas du XML on utilise les Utilisation
chevrons et non les entités. ascending est implicite.
Mise en Mise en
application application
I On peut donner plusieurs critères en les mettant à la suite.
Condition quantifiée I Exemple : order by number($p/age) descending,
I where every $x in $ensemble satisfies cond_x $p/nom.
I where some $x in $ensemble satisfies cond_x
9 / 21 10 / 21
XQuery XQuery
M. Sassolas M. Sassolas
L3Pro
I C’est là qu’est réelement produit quelque-chose. L3Pro
Exemples I Pour évaluer des expressions, on les met entre accolades. Exemples Exemple
Utilisation Utilisation
<nouvel_arbre>{
Mise en Exemple Mise en
application application for $x in doc("vieil_arbre.xml")/noeud
return <personnage>{concat($p/prenom," ",$p/nom," return <truc>{$x/contenu}</truc>
(",$p/age," ans)")}</personnage> }</nouvel_arbre>
I Commentaires XQuery : (: Du commentaire :).
On manipule toujours des bouts d’arbre XML.
11 / 21 12 / 21
Fonctions Exemple complet
M. Sassolas
L3Pro
I Fonctions sur les chaı̂nes de caractères : concat, M. Sassolas
L3Pro
I XQuery est fait pour extraire les données plus que pour les
XQuery XQuery
...
<Course Number="CS106A">
Exemple de jointure simple Exemple de jointure simple
<Title>Programming Methodology</Title>
<Description>
Introduction to the engineering of computer
XQuery XQuery applications emphasizing modern software
<Course_Catalog_With_Stats>{ <Course_Catalog_With_Stats>{
engineering principles.
M. Sassolas M. Sassolas
</Description>
L3Pro for $d in doc("courses-noID.xml")//Department L3Pro for $d in ctors>
doc("courses-noID.xml")//Department
<Instru
Cours 5
return Cours 5
return <Lecturer>
Motivation <Department>{$d/@Code} Motivation <First_Name>Jerry</First_Name>
<Department>{$d/@Code}
<Middle_Initial>R.</Middle_Initial>
Syntaxe {$d/Title} Syntaxe {$d/Title} <Last_Name>Cain</Last_Name>
Exemples {$d/Chair} Exemples {$d/Chair} rer>
</Lectu
Utilisation Utilisation <Professor>
{ { <First_Name>Eric</First_Name>
Mise en Mise en
application for $c in $d/Course, application for $c in ame>Roberts</Last_Name>
$d/Course,
<Last_N
</Professor>
$stat in doc ("courses-noID-stats.xml")//Course $stat in doc ("courses-noID-stats.xml")//Course
<Professor>
where $c/@Number = $stat/@Number (: jointure :) where $c/@Number
<First_Name>Me=hran</F
$stat/@Number
irst_Name> (: jointure :)
<Last_N ame>Sah ami</Last_Name>
return return
</Professor>
<Course>{$c/@Number}{$c/*}{$stat/*}</Course> <Course>{$c/@Number}{$c/*}{$stat/*}</Course>
</Instructors>
} } <Enrolled>147</Enrolled>
<Passed>68</Passed>
</Department> </Department>
<Credits>3</Credits>
19 / 21 }</Course_Catalog_With_Stats> 19 / 21 }</Course_Catalog_With_Stats>
</Course>
...
Compilation Fin du cours
XQuery XQuery
M. Sassolas M. Sassolas
L3Pro L3Pro
Cours 5 Cours 5
Motivation
Syntaxe Motivation
Syntaxe Syntaxe
ë C’est l’heure du TP ê
saxon-xquery -o:fichierProduit.xml requete.xq
Exemples Exemples
Utilisation Utilisation
Mise en Mise en
application Rappel application
20 / 21 21 / 21