Académique Documents
Professionnel Documents
Culture Documents
2018-2019
Sommaire
Introduction
Interpréteur pour XQuery
Concept de base XQuery
Les expressions
Application : Recherche de composants
Bibliographie
<?xml version="1.0"?>
<cours>
<titre>Fondamentaux XML</titre>
Confusion sur le sens <auteur>
de l’élément <titre> <nom>Poulard</nom>
<prénom>Philippe</prénom>
<titre>Baron</titre>
</auteur>
<contenu>
…/…
</contenu>
</cours>
K. M. BROU Technologies XML : Langage XQuery 16
III. Concepts de base de XQuery
Déclaration des espaces de <?xml version="1.0"?>
nommage : <co:cours xmlns:co="http://www.foo.com/cours">
Ils se déclarent dans un élément, <co:titre>Fondamentaux XML</co:titre>
avec le préfixe spécial xmlns <pe:auteur xmlns:pe="http://www.bar.com/individus">
<pe:nom>Poulard</pe:nom>
Exemple 1 : <pe:prénom>Philippe</pe:prénom>
Porté de co : balise <co:cours> <pe:titre>Baron</pe:titre>
Porté de pe : balise <pe:auteur> </pe:auteur>
<co:contenu>
…/…
</co:contenu>
</co:cours>
types définis dans les schémas element(title, xs:string) Nœud élément de nom title et de type
importés dans le prologue de cette xs:string
requête. element(description, *) Nœud élément de nom description et de
type quelconque
Exprimer un type en XQuery
element(*, xs:string) Nœud élément de nom quelconque et
On utilise une notation appelée de type xs:string
type de séquence
node()* Séquence de longueur quelconque
Une valeur en XQuery est une nœud de type quelconque
séquence.
item()+ Séquence d’au moins un item
Requête Résultat
1+2 3
<add>{1 + 2}</add> <add>3</add>
<div>{6 div 2}</div> <div>3</div>
Requête Résultat
1 + 5, 4 - 2, 7 * 3 6, 2, 21
((9, 1), 5, (8, 2)) 9, 1, 5, 8, 2
2 to 5 2, 3, 4, 5
5 to 2 ()
Rq4.xq
Requête
<phrase>1 + 1 = {1 + 1}</phrase>
<titre>{"Le ", "langage ", "XML"}</titre>
<personne num="n1" >toto</personne>
let $x := <p><n>Toto</n>
<v>Yakro</v>
</p>
return <personne nom="{$x/n}"
ville="{$x/v}"/>
Résultat
<phrase>1 + 1 = 2</phrase>
<titre>Le langage XML</titre>
Requête Résultat
element eleve <eleve mat="2">
{attribute mat {2}, <classe codecl="3">
element classe <nomCl>INFO3</nomCl>
{attribute codecl {3}, </classe>
element nomCl {"Info3"} </eleve>
}
}
Résultat
<livres>
<title>TCP/IP Illustrated</title>
<title>Advanced Programming in the
Unix environment</title>
</livres>
Requête Résultat
<livres>
{for $b in document("bib.xml")//book <livres>
where $b/author/last = "Abiteboul" <livre recent="true">
return <title>TCP/IP Illustrated</title>
if ($b/@year gt "1994") then </livre>
<livre recent="true"> {$b/title} </livre> <livre>
else <title>Advanced Programming in
<livre> {$b/title} </livre> the Unix environment</title>
} </livre>
</livres> </livres>
Syntaxe <livres>
{for $b in document("bib.xml")//book
Expr1 order by (Expr2)ascending |
order by ($b/@year)descending return
descending
<livre>
Trier les éléments de Expr1 par les { $b/@year, $b/title }
valeurs retournées par Expr2.
</livre>
Exemple : titre et année d’édition }
des livres triés par année </livres>
décroissante (Rq11.xq).
Résultat
<livres>
<livre><title>Comprendre XSLT</title> </livre>
<livre year="2001">
<title>Spatial Databases</title></livre>
<livre year="2000"><title>Data on the Web</title></livre>
<livre year="1999">
<title>The Technology and Content for Digital TV</title>
</livre>
<livre year="1994"><title>TCP/IP Illustrated</title></livre>
<livre year="1992">
<title>Advanced Programming in the Unix environment</title>
</livre>
</livres>
Requête
Exemple 1 : prix moyen <prixMoyen>
des livres d’un éditeur {for $p in distinct-values(document("bib.xml")//publisher)
let $l: = document("bib.xml")//book[publisher = $p]
(AVG) return element publisher {attribute name {string($p)},
attribute avgPrice { avg($l/price) }}
Rq13.xq }
</prixMoyen>
Résultat
<prixMoyen>
<publisher name="Addison-Wesley" avgPrice="68.45"/>
<publisher name="Morgan Kaufmann Publishers" avgPrice="37.475"/>
<publisher name="Kluwer Academic Publishers" avgPrice="129.95"/>
<publisher name="OReilly" avgPrice="28.95"/>
</prixMoyen>
Résultat Résultat
<lesPrix>
<nbAuteurs>
<books><title>TCP/IP
3 Illustrated</title><price>65.95</price></books>
</nbAuteurs> <books>
<title>Advanced Programming in the Unix
environment</title>
<price>70.95</price>
</books>
…
</lesPrix>
K. M. BROU Technologies XML : Langage XQuery 56
IV. Les expressions
Exemple 4 : prix d’un livre connaissant
son titre (Rq14c.xq).
Requête Résultat
declare function local:prix($nom) <lesPrix>
{document("bib.xml")//book[title = <books><title>TCP/IP
$nom]/price}; Illustrated</title><price>65.95</price>
</books>
(: appel de la fonction :) <books>
<lesPrix> <title>Advanced Programming in the
{let $d := document("bib.xml")//book Unix environment</title>
for $m in $d/title <price>70.95</price>
let $p := local:prix($m) </books>
return (<books>{$m, $p}</books>) …
} </lesPrix>
</lesPrix>
<profondeur>
{let $x := document("bib.xml")//book
return local:depth($x)
}
</profondeur>
Résultat
<profondeur> 3</profondeur>
Commande Produit
Client passe
0,n 1,1 numCom 1,n detailCom 0,n numProd
numCl dateCom qteCom designation
Nom prix
Tel qtéStock
Adresse
fax
1, 1 norue
1,1 Rue
possede ville
codepostal
1. XML
Créer les documents XML
correspondants (2 documents).
Ajouter 5 produits, 3 clients, 2
commandes par client, 2 produits par
commande.
K. M. BROU Technologies XML : Langage XQuery 60
IV. Les expressions
2. Requêtes : Rq7 : numéros, nom, adresse du client
Toto avec ses commandes (numCom,
Rq1 : Liste des clients.
dateCom) et le détail de ses
Rq2 : Liste des clients (numCl, nom). commandes (numProd, désignation,
Rq3 : Liste des clients avec leur qteCom, prix, qteCom*prix).
adresse (numCl, nom, adresse). Rq8 : numéro, nom, adresse du client
Rq4 : Liste des clients (numCl, nom, Toto avec ses commandes (numCom,
adresse) avec leurs commandes dateCom) et le détail de sa commande
(numCom, dateCom). de numéro 1 (numProd, désignation,
Rq5 : Lister tous les numéros, nom, qteCom, prix, qteCom*prix)
adresse des clients avec leurs Rq9 : Ecrire une fonction qui détermine
commandes (numCom, dateCom) et le nombre de commande d’un client
le détail des commandes. donné.
Rq6 : Lister tous les numéros, nom, Rq10 : Ecrire une fonction qui liste le
adresse du client Toto avec ses numéros, nom, adresse du client Toto
commandes (numCom, dateCom) et avec sa commande numéro 1
le détail de ses commandes (numCom, dateCom) et le détail de
(numProd, qteCom). cette commandes (numProd,
désignation, qteCom, prix,
qteCom*prix).
K. M. BROU Technologies XML : Langage XQuery 61
IV. Les expressions
Rq11 : Montant total d’une commande
d’un client donné.
Rq12 : Montant total de toutes les
commandes d’un client donné.
Rq13 : Créer un module contenant les
fonctions issues des requêtes Rq9
àRq12.
(: Déclaration de module :)
Relation
Bibliothèque
-nature :
-nomB :
-URL :
0..n utilise 0..n
-domaine :
-langage :
1..1
-description :
Composant
-version : 1..n 1..n
Mots-clés
1..n 1..n 1..1 -nomC :
-domaine :
1..n -nomM :
1..n 1..n -langage :
-organisme :
-réutilisation :
-sujet :
Auteur Documentation -version :
-description :
-nomA : -nomD :
-organisme : -tailleDoc : 1..n 1..n
-formatDoc : 1..n
1..n
-dateDoc :
1..n -URLDoc :
Service
FichierSrc 0..n
PlateForme -nomS :
-nomF : référence
-signature :
-taille :
-nomP : -code :
-date : 0..n
-systemExpl : -description :
-URL :
-adresse :
In te rfa c e
u t ilis a t e u r
C o n s t r u c t io n d e la C o n s t r u c t io n d e la
D e s c r ip t e u r s D e s c r ip t e u r s re q u ê te X Q u e ry ré p o n s e : X S L + C S S
s ig n a lé t iq u e s s é m a n tiq u e s G e s t io n n a i r e d e
re q u ê te X Q u e ry
E x p e rt E x é c u t io n d e la R é s u lt a t s X M L
re q u ê te X Q u e ry
G é n é ra te u r d u M o te u r X Q u e ry
R e p o s it o r y d ’ in f o s -
c o m p o sa n ts
R e p o s it o r y d ’ in f o s - c o m p o s a n t s e t T h é s a u r u s