0% ont trouvé ce document utile (0 vote)
139 vues54 pages

Introduction et Syntaxe de XQuery

Transféré par

Hajji Youssef
Copyright
© © All Rights Reserved
Nous prenons très au sérieux les droits relatifs au contenu. Si vous pensez qu’il s’agit de votre contenu, signalez une atteinte au droit d’auteur ici.
Formats disponibles
Téléchargez aux formats PDF, TXT ou lisez en ligne sur Scribd
0% ont trouvé ce document utile (0 vote)
139 vues54 pages

Introduction et Syntaxe de XQuery

Transféré par

Hajji Youssef
Copyright
© © All Rights Reserved
Nous prenons très au sérieux les droits relatifs au contenu. Si vous pensez qu’il s’agit de votre contenu, signalez une atteinte au droit d’auteur ici.
Formats disponibles
Téléchargez aux formats PDF, TXT ou lisez en ligne sur Scribd

XQuery

Ahmed ZELLOU

ISI, ISRT & ISEM SupMTI, 2021-2022.


XQuery

Plan
!Historique
!Introduction
!Syntaxe XQuery
!L’expression FLOWR
!Expressions conditionnelles
!Fonctions XQuery
!Les fonctions utilisateurs
!XQUF : XQuery Update Facility
!Atelier
[Link]
XQuery

Limites de SQL
! SQL à 40 ans !
! Fait partie des langage assertionnel : QUEL (Berkeley,
système INGRES 77), QBE 77 et SQL IBM82.
! Trouve ces origine en algèbre relationnel en 1970
! Langage normalisé [ISO89, ISO92].
! Le SQL2 [ISO92] est divisé en trois niveaux :
! Le niveau entrée est une amélioration de SQL1.
! Les niveaux intermédiaire supporte complètement le
modèle relationnel.
! SQL3 trop complexe
! Fonctionnalités objets et déductives.
! Requêtes imbriquées difficiles
[Link]
XQuery

Historique
! Objectif
! Interroger des données semi-structurées.
! Plusieurs langages
! OQL, OEM-QL, XPath, XML-QL [Deutsch 1998]
d'AT&T, XQL [Robie 1998] de Microsoft, QUILT
[Robie 2000] d’IBM, XMAS [Luascher 1999] et
XQuery.
! Choix
! 2005, W3C a opté pour XQuery avec la version 1.0.
! C’une dérivée du langages Quilt, basé aussi sur les
langages XPath 1.0, XQL, XML-QL, SQL, et OQL.

[Link]
XQuery

Introduction
! Xquery
! Un langage de requête XML fortement typé, à base
d'expression de chemins, de boucles, de tests et
d'éléments de construction de documents XML.
! Compatible avec plusieurs normes du W3C tels que
XML, espaces de noms, XSLT, XPath et XML Schema.
! XQuery XSLT et XPath partagent le même modèle de
données et supportent les mêmes fonctions et
opérateurs.
! Une Recommandation du W3C
! Version 1.0 : Janvier 23, 2007.
! Version 2.0 : 17 Mars 2011.
! Version 3.0 : 17 Mars 2014.
[Link]
XQuery

XQuery
! Une requête XQuery est bâtie sur une
expression XPath.
! Il offre deux services :
! interroger des documents XML
! construire les résultats en format semi-structuré.
! La génération des résultats s’effectue sous
forme de fragments XML.
! Certaines règles de base:
! Une variable XQuery est défini avec $
! Les commentaires XQuery sont délimitées par
!(: XQuery Commentaire:)

[Link]
XQuery

Syntaxes XQuery
! La fonction doc() est utilisée pour accéder au
fichier de données à doc ("[Link]")
! Usage de Xpath pour naviguer à travers des
éléments dans un document XML.
! Exemple : doc("[Link]")/bookstore/book/title
! Permet de sélectionner tous les éléments title dans le
fichier "[Link]":
! Usage des prédicats pour raffiner l'extraction de
données.
! doc("[Link]")/bookstore/book[price<30]

[Link]
XQuery

Syntaxe Xquery : FLOWR


! Une requête est basée sur l’instruction FLOWR =
"For-Let-Where-Order-Return".
! Chaque expression FLOWR est délimitée par
{ ... }.
! La forme générale d'une requête FLOWR est la
suivante :
! for $variable in expression_recherche_Xpath
! let $variable := expressions_Xpath
! where expression_logique
! order by $variable
! return expression
[Link]
XQuery

FLOWR
! Exemple d'expression FLWOR :
! for $x in doc("[Link]")/bookstore/book
where $x/price>30
order by $x/title
return $x/title
! for - (facultatif) lie une variable à chaque élément
retourné par l'expression
! let - (facultatif) pour donner un autre nom à la
variable
! where - (facultatif) spécifie un critère de sélection
! order by - (optionnel) spécifie le type d'ordre du
résultat
! return - spécifie ce que retourne le résultat
[Link]
XQuery

FLOWR
! Les conditions
! doc("[Link]")/bookstore/book[price>30]/title
! L'expression FLWOR équivalente est :
! for $x in doc("[Link]")/bookstore/book
where $x/price>30
return $x/title
! for : sélectionne tous les éléments book des éléments
bookstore dans une variable appelée $x.
! where : filtre sur les éléments book avec price>30
! order by : pour le trie
! return : spécifie ce que retourne la requête.

[Link]
XQuery

La clause FOR
! Permet d’itérer sur une liste de fragments XML.
! Elle associe à chaque $variable un fragment de
chemin XML défini par Xpath.
! Une seule clause for est insérée dans une
expression FLWOR.
! Pour boucler un nombre fini de fois avec FOR,
utiliser to :
! for $x in (1 to 5) Ce qui donne:
<test>1</test>
return <test>{$x}</test> <test>2</test>
<test>3</test>
<test>4</test>
<test>5</test>

[Link]
XQuery

La clause FOR
! Permet de mettre plusieurs expressions de
chemins dans une clause FOR.
! Utilisez une virgule pour séparer les expressions
de chemins :
! for $x in (10,20), $y in (100,200)
return <test>x={$x} and y={$y}</test>
! Ce qui donne:
! <test>x=10 and y=100</test>
<test>x=10 and y=200</test>
<test>x=20 and y=100</test>
<test>x=20 and y=200</test>

[Link]
XQuery

La clause FOR
! Le mot clé at est utilisé pour compter le nombre
d'itérations:
! for $x at $i in doc("[Link]")/bookstore/book/title
return <book>{$i}. {data($x)}</book>
! Ce qui donne:
! <book>1. Concepts Client/Serveur</book>
<book>2. Services Web</book>
<book>3. Relationnel DataBases</book>
<book>4. Learning XML</book>

[Link]
XQuery

La clause let
! La clause let est optionnelle, elle permet
d’associer le résultat d’une expression Xpath à
une variable.
! Objectif : éviter de répéter la même expression.
! let ne se traduit pas par une itération.
! let $x := (1 to 5)
return <test>{$x}</test>
! Ce qui donne :
! <test>1 2 3 4 5</test>

[Link]
XQuery

La clause where
! La clause where permet de définir une condition
de sélection pour construire la réponse.
! La sélection se fait par une expression logique de
prédicats élémentaires.
! where $x/price>30 and $x/price<100

! where contains($x/title,"XML") or not


contains($x/author,"zellou")

[Link]
XQuery

La clause order by
! La clause order permet de trier les résultats
(croissant au décroissant).
! Pour ordonner le résultat par category et title:
!for $x in doc("[Link]")/bookstore/book
order by $x/@category, $x/title
return $x/title
! Ce qui donne:
! <title lang="fr"> Concepts Client/Serveur </title>
<title lang="fr"> Services Web </title>
<title lang="en"> Relationnel DataBases </title>
<title lang="en"> Learning XML </title>

[Link]
XQuery

La clause return
! Spécifie ce qui retourne la requête.
! Chaque itération doit retourner un seul fragment
XML (pas une collection).
! for $x in doc("[Link]")/bookstore/book
return $x/title
! Ce qui donne :
! <title lang="fr"> Concepts Client/Serveur </title>
<title lang="fr"> Services Web </title>
<title lang="en"> Relationnel DataBases </title>
<title lang="en"> Learning XML </title>

[Link]
XQuery

Expressions conditionnelles

! Avec if/else.
! for $x in doc("[Link]")/bookstore/book
return if ($x/@category="web")
then <web>{data($x/title)}</web>
else <DB>{data($x/title)}</DB>
! Ce qui donne:
! <DB> Concepts Client/Serveur </DB>
<web> Services Web </web>
<DB> Relationnel DataBases </DB>
<web> Learning XML </web>

[Link]
XQuery

Généralités
! Les expressions de requêtes peuvent être
arbitrairement imbriquées.
! Il est possible d'imbriquer des requêtes au
niveau de for, de where, et de return.
! Fonctions d'agrégations : count, min, max...
! Recherche textuelle : = , contains .

[Link]
XQuery

Fonctions XQuery
! XQuery, XPath et XSLT partagent la même
bibliothèque de fonctions.
! Exemple 1: dans le prédicat d'une expression de
chemin »
! doc("[Link]")/bookstore/book[substring(title,1,3)
='XML']
! Exemple 2: dans une clause let
! let $name := (max($price))
! Exemple 3: dans un élément
! <name>{upper-case($booktitle)}</name>

[Link]
XQuery

Fonctions Utilisateurs
! Définir des fonctions avec XQuery.
Utilisez le mot-clé function
pour la déclaration

Le nom de la fonction
declare function prefix:function_name
($parameter as datatype)
as returnDatatype Les paramètres et le
{ type de retour.

...function code here...


}

Le corps de la fonction

[Link]
XQuery

Fonctions Utilisateurs
! Exemple :
! declare function local:minPrice($a as xs:decimal,$b as
xs:decimal)
AS xs:decimal
{
if ($a > $b) let $res := $b
else let $res := $a
return ($res)
}
! L’appel à la fonction :
! <minPrice>{local:minPrice($book/price,$book/discou
nt)}</minPrice>

[Link]
Exemples
XQuery

Exemple : Schéma d’étude

[Link]
XQuery

Exemple : requête simple


! Les noms des étudiants:
xquery version "1.0";
for $x in doc("[Link]")/ecole/etudiants/etudiant
return $x/Nom

! Les noms et prénoms des étudiants:


xquery version "1.0";
for $x in doc("[Link]")/ecole/etudiants/etudiant
return <res>{$x/Nom}{$x/Prenom}</res>

[Link]
XQuery

Exemple : sélection 1/2


! Les conditions :
xquery version "1.0";
for $x in
doc("[Link]")/ecole/etudiants/etudiant[NoFilier
e=14]
return <res>{$x/Nom}{$x/Prenom}</res>

! Les conditions :
xquery version "1.0";
for $x in doc("[Link]")/ecole/etudiants/etudiant
where $x/NoFiliere=14
return <res>{$x/Nom}{$x/Prenom}</res>
[Link]
XQuery

Exemple : sélection 2/2


! Plusieurs conditions :
xquery version "1.0";
for $x in doc("[Link]")/ecole/etudiants/etudiant
where $x/NoFiliere=14 and $x/Sexe="F"
return <res>{$x/Nom}{$x/Prenom}</res>

! Une condition sur l’attribut :


xquery version "1.0";
for $x in doc("[Link]")/ecole/etudiants/etudiant
where $x/@numero=71034
return <res>{$x/Nom}{$x/Prenom}</res>

[Link]
XQuery

Exemple : Imbrication 1/2


! Au niveau de where :
xquery version "1.0";
for $x in doc("[Link]")/ecole/etudiants/etudiant
where $x/@numero in
for $y in
doc("[Link]")/ecole/listemodulesetudies/listemodulesetudie
where $y/Semestre="S1"
return {$y/NoEtudiant/text()}
return <res>{$x/Nom}{$x/Prenom}</res>

[Link]
XQuery

Exemple : Imbrication 2/2


! Au niveau de return avec let :
xquery version "1.0";
for $x in doc("[Link]")/ecole/etudiants/etudiant
let $y := $x/@numero
where $x/@numero=70288
return <res>
{
for $z in
doc("[Link]")/ecole/listemodulesetudies/listemodulesetudie
where $z/Semestre="S1" and $z/NoEtudiant=$y
return $z/Désignation
}
</res>
[Link]
XQuery

Exemple : Jointure 1/2


! Sur un même fichier :
xquery version "1.0";
for $x in doc("[Link]")/ecole/etudiants/etudiant
for $y in
doc("[Link]")/ecole/listemodulesetudies/listemo
dulesetudie
where $x/@numero=$y/NoEtudiant
return <res>
{ $x/Nom}{ $y/Désignation}
{ $y/NoteModule}{ $y/Decision}
</res>

[Link]
XQuery

Exemple : Jointure 2/2


! Sur plusieurs fichiers :
xquery version "1.0";
for $x in doc("[Link]")/ecole/etudiants/etudiant
for $y in doc("[Link]")/ecole/listemodulesetudie
where $x/@numero=$y/NoEtudiant
return <res>
{ $x/Nom}{ $y/Désignation}
{ $y/NoteModule}{ $y/Decision}
</res>

[Link]
XQuery

Exemple : Agrégat simple


! Count (Pas de for) :
xquery version "1.0";
let $x := doc("[Link]")/ecole/etudiants/etudiant
return
<Nombreetudiants> {count($x)} </Nombreetudiants>
! Max (Pas de for) :
xquery version "1.0";
let $x :=
doc("[Link]")/ecole/listemodulesetudies/listemodul
esetudie/NoteModule
return
<Notemaximal> {max($x)} </Notemaximal>
[Link]
XQuery

Exemple : Agrégat partitionné


! Avg :
xquery version "1.0";
for $x in doc("[Link]")//modules/Désignation
let $y :=
avg(doc("[Link]")//listemodulesetudie[Désignati
on = $x]/NoteModule)
return
<resultat>
{$x/Désignation}
<notemoyenne>{$y}</notemoyenne>
</resultat>

[Link]
XQuery

Exemple : Recherche
! contains :
xquery version "1.0";
for $x in doc("[Link]")//etudiant
where contains ($x/Nom,'AD')
or contains ($x/Prenom, 'YASS')
return <res>{$x/Nom}{$x/Prenom}</res>

[Link]
XQuery

Exemple : ordre
! contains (Pas de for) :
xquery version "1.0";
for $x in doc("[Link]")//etudiant
where contains ($x/Nom,'AD')
or contains ($x/Prenom, 'YASS')
return <res>{$x/Nom}{$x/Prenom} sort by {$x/Nom
descending}</res>

[Link]
XQUF

Ahmed ZELLOU

ISI, ISRT & ISEM SupMTI, 2021-2022.


XQuery

XQuery Update

! XQuery Update est une extension de XQuery.


! C’est une recommandation W3C du 17 Mars
2011.
! Il permet de mettre à jour un fichier XML.
! L’Extensions XQuery Update : insert, replace, value,
delete et rename
! Une déclaration update peut se faire dans
n'importe quelle partie d’une requête XQuery.

[Link]
XQuery

XQuery Update

! XQUF permet de :
! supprimer un ou plusieurs éléments ;
! insérer un ou plusieurs éléments, avant/après/à
l’intérieur d’un élément ;
! remplacer un élément (avec tout son sous-arbre) par
une séquence d’éléments ;
! remplacer les fils d’un élément par une séquence
d’éléments ;
! remplacer la valeur d’un élément par une valeur
textuelle ;
! renommer un élément.

[Link]
XQuery

1. Insert

!Syntaxe :
! insert (node | nodes) items into expr
! insert (node | nodes) items as first into expr
! insert (node | nodes) items as last into expr
! insert (node | nodes) items before expr
! insert (node | nodes) items after expr
!expr doit désigner un élément cible.

[Link]
XQuery

1. Insert

! Exemple 1:
! for $x in /biblio/livre
where contains ($x/titre,‘XML')
return insert node
<resume>un doc XML</resume>
into $x
! Exemple 2 :
! for $x in //livre[DateEdition = 1998]
return insert node
<reduction> 10% </reduction>
after (or befor) $x
[Link]
XQuery

2. Replace

! Syntaxe :
! replace node expr with items
! expr peut être un élément, un attribut ou du
texte.
! Exemple 1:
! for $x in //livre/resume
return replace node $x
with <RESUME> {data($x)} </RESUME>

[Link]
XQuery

2. Replace
! return replace node $x
! Exemple 2:
! for $x in //livre/RESUME
return replace node $x
with <summary>XQUF</summary>

! Exemple 3:
! for $x in /biblio/livre[2]/prix
return replace node $x
with <prix> {data($x) *0.8 }</prix>

[Link]
XQuery

3. Replace Value

! Syntaxe
! replace value of node expr with exprSingle
! Mette à jour le contenu de tous les nœuds expr
avec les éléments de exprSingle.
! Exemple 1:
! for $x in /biblio/livre/prix
return replace value of node $x
with 30

[Link]
XQuery

4. delete
! Syntaxe
! delete (node | nodes) expr
! Supprime tous les nœuds dans expr du
document.
! Exemple:
! for $x in /biblio/livre
return delete node $x/prix

! for $x in //livre[prix >30]


return delete node $x

[Link]
XQuery

5. Rename
! Syntaxe
! rename node expr as exprSingle
! Renomme les nœuds dans expr en utilisant la
valeur de exprSingle.
! expr peut être un ensemble d'éléments ou
d'attributs.
! Exemple:
! for $x in /biblio/livre/resume
return rename node $x
as "abstract"

[Link]
XQuery

Remarques

! Il y a 2 façons d’utiliser XQUF :


! Pour mettre à jour une base de données : insert,
delete, rename, replace
! Sans effet sur la base, avec fabrication d’un arbre
XML : copy ... modify ... return.

! Quelques implémentations: Monet DB (CWI),


Qizx (XMLmind), Oracle Berkeley DB XML
(Oracle), Xqilla, baseX, eXist, altova 2018, …

[Link]
XQuery

BaseX

! BaseX est un SGBD XML native


! SGBDS représentatif, open-sources, multi-plate-
formes, et support des standard.
! Plusieurs modes de visualisation : tableau,
arbre, 3D, etc.
! Moteur de recherche en texte intégral
! Evaluation des requêtes Xquery et XUF
! BaseX ne permet pas l'édition du fichier XML
source en cours d'exploitation.
! API supportées : XQuery for PHP (XQP), XQuery
for Java (XQJ) and XML:DB (XAPI).
[Link]
XQuery

BaseX

[Link]
XQuery

eXist

! eXist est un SGBD open source, Multi plates-


formes avec usage format Desktop ou Web.
! Se déploie comme une application Web sous le
contrôle d'un moteur de Servlets : Tomcat ou
autre.
! Possibilités d’administration avancée (triggers,
indexation, etc.)
! Plusieurs API (Java, PHP, C#, etc.) pour
interrogation à distance
! Support des standards (Xquery et XUF)

[Link]
XQuery

eXist

[Link]
XQuery

eXist

[Link]
XQuery

eXist

[Link]
XQuery

Atelier

! Prenons le fichier cd_Catalog.xml, écrivez les requêtes


XUF suivantes :
1. Insérez le CD ayant le titre "Davinchi", réalisé en 2001 par
l’artiste anglais Bob Swirt de la compagnie Columbia avec un
prix de 13.
2. Insérez l’élément <reduction> avec comme valeur 10% pour
les CD réalisés par l’éditeur Columbia et Polydor.
3. Remplacez le nœud compagnie par editeur pour les CD réalisé
en France.
4. Fixez le prix du CD "Still got the blues” à 30.
5. Renommer <prix> de tous les Cd réalisé en France. par
<promotion>
6. Effacer le CD "Maggie May".

[Link]
Merci

Vous aimerez peut-être aussi