1
Présenté par : Dr. Kamel Boukhalfa boukhalk@gmail.com, kboukhalfa@usthb.dz
Ecole Doctorale Promotion 2012-2013
يللآا ملاعلإل ايلعلا ةينطولا ةسردملا Ecole nationale Supérieure d’Informatique
Source :
Serge Abiteboul, George Gardarin
XQueryest un langage de requête permettant d'extraire des informations d'un document XML.
XQueryest à XMLce que SQLest aux bases de données relationnelles.
Il existe deux syntaxes distinctes pour Xquery:
la syntaxe XQueryX(XML Syntax for XQuery)
la syntaxe "naturelle" non-XML dite aussi FLWOR (For, Let, Where, Order byet Return) 2
14/09/2013
3 3
1998: W3C organise un séminaire sur interrogation de XML
1999: W3C crée « XML Query working group » contenant 39 membres, représentent 25 entreprises
2003: Draft XQuery
2007: XQuery 1.0
4
5 5
Xpath
XPath permet d'exprimer des requêtes de filtrage sur des arbres
Il n'est pas possible:
de créer des nœuds
de construire des arbres/des documents nouveaux
de trier des noeuds, ...
Il est difficile d'exprimer des jointures (pas de variables) Xquery
XQuery est un langage de requêtes complet qui permet :
de créer des noeuds et de construire des arbres nouveaux
de définir et d'instancier des variables
de définir des fonctions, ...
6
14/09/2013
7 Book.xml:
<bookstore>
<book category="COOKING">
<title lang="en">Everyday Italian</title>
<author>Giada De Laurentiis</author>
<year>2005</year>
<price>30.00</price>
</book>
<book category="CHILDREN">
<title lang="en">Harry Potter</title>
<author>J K. Rowling</author>
<year>2005</year>
<price>29.99</price>
</book>
</bookstore>
XQuery requête:
doc("books.xml")/bookstore/book/ti tle
7
Résultat:
<title lang="en">Everyday Italian</title>
<title lang="en">Harry Potter</title>
Requête XQuery
Book.xml:
<bookstore>
<book category="COOKING">
<title lang="en">Everyday Italian</title>
<author>Giada De Laurentiis</author>
<year>2005</year>
<price>30.00</price>
</book>
<book category="CHILDREN">
<title lang="en">Harry Potter</title>
<author>J K. Rowling</author>
<year>2005</year>
<price>29.99</price>
</book>
XQuery:
doc("books.xml")/bookstore/book[p rice<30]
8
Résultat:
<book category="CHILDREN">
<title lang="en">Harry Potter</title>
<author>J K. Rowling</author>
<year>2005</year>
<price>29.99</price>
</book>
Requête XQuery
9 9
1 FOR itération sur une liste de fragments XML
2 LET association du résultat d'une expression à une variable
3 WHERE condition de sélection 4 ORDER tri des résultats 5 RETURN expression à retourner
FLOWR FOR – LET – WHERE – ORDER - RETURN
SQL SELECT – FROM – WHERE – ORDER BY
A. "for"
Syntaxe: for $variable in expression_recherche RETURN
"for" associe à chaque $variable une valeur (fragment XML) trouvé pour l’expression Xquery
Exemple: for $t in //topic/title B. let
"let" permet de d’assigner une valeur à une variable
Exemple:
for $t in document("catalog09.xml")//c3msbrick let $n := count($t//c3mssoft)
return <result> {$t/title/text()} possède {$n} briques </result>
10
14/09/2013
11 C. Where
Permet de définir une condition de sélection (une seule par requête)
Exemple:
for $t in document("catalog09.xml")//c3msbrick let $n := count($t//c3mssoft)
where ($n > 1)
return <result> {$t/title/text()} possède {$n} briques </result>
D. order
Permet de trier les résultats
Exemple:
for $t in //topic/title order by $t return $t 11
E. return
• Construit l’expression à retourner à chaque itération
• Chaque itération doit retourner un seul fragment XML (pas une collection)
Exemle:
for $t in document("catalog09.xml")//c3msbrick let $n := count($t//c3mssoft)
return <result>
{$t/title/text()} possède {$n} briques
</result>
12
13
Book.xml:
<bookstore>
<book category="COOKING">
<title lang="en">Everyday Italian</title>
<author>Giada De Laurentiis</author>
<year>2005</year>
<price>30.00</price>
</book>
<book category="CHILDREN">
<title lang="en">Harry Potter</title>
<author>J K. Rowling</author>
<year>2005</year>
<price>29.99</price>
</book>
</bookstore>
13
Xquery - FLWOR:
for$x in
doc("books.xml")/bookstore/book where$x/price>20
return$x/title
Résultat:
<title lang="en">Harry Potter</title>
<title lang="en">Everyday Italian</title>
Book.xml:
<bookstore>
<book category="COOKING">
<title lang="en">Everyday Italian</title>
<author>Giada De Laurentiis</author>
<year>2005</year>
<price>30.00</price>
</book>
<book category="CHILDREN">
<title lang="en">Harry Potter</title>
<author>J K. Rowling</author>
<year>2005</year>
<price>29.99</price>
14
Xquery - FLWOR:
for$x in
doc("books.xml")/bookstore/book where$x/price>20
order by $x/title return$x/title
Résultat:
<title lang="en">Everyday Italian</title>
<title lang="en">Harry Potter</title>
14/09/2013
15
Si on souhaite retourner un code HTML comme résultat de la requête.
15
Xquery-avancé: Résultat:
<html> <html>
<body> <body>
<h1>Bookstore</h1> <h1>Bookstore</h1>
<ul> <ul>
{ for$x in
doc("books.xml")/bookstore/book order by $x/title
return<li>{data($x/title)} - Category:
{data($x/@category)}</li>}
<li>Everyday Italian - Category:
COOKING</li>
<li>Harry Potter - Category:
CHILDREN</li>
</ul> </ul>
</body> </body>
</html> </html>