Académique Documents
Professionnel Documents
Culture Documents
Dan VODISLAV
Université de Cergy-Pontoise
Plan
• XPath
– Expressions de chemin
– Axes, filtres et prédicats
– Fonctions XPath
• XQuery
– Modèle de données
– Expressions simples et complexes
– Expressions de chemin XPath 2.0
– Construction de noeuds
– Expressions FLOWR
2
XPath
• Langage de sélection d’un ensemble de nœuds dans un document XML
– Utilise des expressions de chemin pour désigner des nœuds dans l’arbre
– Les expressions XPath sont utilisées dans d’autres langages: XSLT, XQuery, …
• Une expression de chemin XPath
– S’évalue en fonction d’un nœud contexte
– Désigne un ou plusieurs chemins dans l’arbre du document à partir du nœud
contexte
– A pour résultat un ensemble de nœuds de l’arbre (qui se situent au bout des
chemins)
• Types de nœuds
– Document, Element, Attribute, Text, Comment, ProcessingInstruction
• XPath offre aussi des expressions littérales (texte, numérique, booléen)
• Ex: 1 + 2
3
Syntaxe XPath
4
Axes XPath
5
Filtres et prédicats
6
Fonctions XPath
• Pour nœuds
– count(expr): nombre de nœuds dans l’ensemble produit par l’expression
– name(): nom du nœud contexte
• Pour chaînes de caractères
– concat(ch1, ch2, …): concaténation
– contains(ch1, ch2): vérifie si ch1 contient ch2
– substring(ch, pos, l): extrait la sous-chaîne de ch de longueur l, commençant à la
position pos (les positions démarrent à 1)
– string-length(ch): longueur de la chaîne
• Pour booléens
– true(), false(): les valeurs vrai/faux
– not(expr): négation de l’expression logique
• Pour numériques
– sum(expr): somme des valeurs des nœuds produits par l’expression
– avg(expr): moyenne des valeurs des nœuds produits par l’expression
7
Exemples
• D
• D/text()
• descendant::node()
• ..
• following::node()
• preceding-sibling::node()
• //@att1
• /A//D
• /comment()
• ../*
• /A/B//text()[1]
• /A//text()[1]
• //B[@att1="a2"]/D
• /A/B[last()]
• //B[count(D)>1]
• /A/C[not(D)]
• /A[B[D="Texte1"]/@att1]/C/@att2
8
XQuery
valeur item
*
item noeud valeur atomique
9
Séquences
10
Expressions XQuery simples
11
Expressions XQuery complexes
12
Exemple
• Document bib.xml
<bib>
<book title="Comprendre XSLT">
<author><la>Amann</la><fi>B.</fi></author>
<author><la>Rigaux</la><fi>P.</fi></author>
<publisher>O’Reilly</publisher>
<price>28.95</price>
</book>
<book year="2001" title="Spatial Databases">
<author><la>Rigaux</la><fi>P.</fi></author>
<author><la>Scholl</la><fi>M.</fi></author>
<author><la>Voisard</la><fi>A.</fi></author>
<publisher>Morgan Kaufmann Publishers</publisher>
<price>35.00</price>
</book>
<book year="2000" title="Data on the Web">
<author><la>Abiteboul</la><fi>S.</fi></author>
<author><la>Buneman</la><fi>P.</fi></author>
<author><la>Suciu</la><fi>D.</fi></author>
<publisher>Morgan Kaufmann Publishers</publisher>
<price>39.95</price>
</book>
</bib>
13
Expressions de chemin
• XPath 2.0
– Modèle XDM, basé sur des séquences, au lieu d'ensembles de nœuds
– Utilisation de tous les types XML Schema
– Étape: toute expression qui retourne une séquence de nœuds
– Nouveaux opérateurs (for, if, some, every), utilisation de variables
• Exemples
– document("bib.xml")/bib//book[1]/publisher
• L’éditeur du premier livre
– document("bib.xml")//(book union author union publisher)
• tous les livres, auteurs et éditeurs
– document("bib.xml")//book/(* except price)
• pour chaque livre tous les éléments fils sauf le prix.
– document("bib.xml")//book[every $a in author satisfies
contains($a/la,'a')]
• tous les livres dont tous les auteurs ont la lettre ’a’ dans leur nom de famille
14
Construction de nœuds XML
15
Construction de nœuds XML (suite)
– Requête:
element { document("bib.xml")//book[1]/name(@*[1]) } {
attribute { document("bib.xml")//book[1]/name(*[3]) }
{ document("bib.xml")//book[1]/*[3] }
}
– Résultat:
<title publisher="O’Reilly"/>
16
Expressions FLOWR
17
Affectation d’ensembles: let
• Requête:
for $b in document("bib.xml")//book[1]
let $al := $b/author
return <livre nb_auteurs="{count($al)}">
{ $al }
</livre>
• Résultat:
<livre nb_auteurs="2">
<author><la>Amann</la><fi>B.</fi></author>
<author><la>Rigaux</la><fi>P.</fi></author>
</livre>
18
Sélection : where
• where exp
– permet de filtrer le résultat par rapport au résultat booléen de l’expression
exp
• Requête:
<livre>
{ for $a in document("bib.xml")//book
where $a/author[1]/la = "Abiteboul"
return $a/@title
}
</livre>
• Résultat:
<livre title="Data on the Web"/>
19
Trier : order by
• Résultat:
<livres>
<livre title="Comprendre XSLT"/>
<livre title="Data on the Web" year="2000"/>
<livre title="Spatial Databases" year="2001"/>
</livres>
20
Tests: if-then-else
• Requête:
<livres>
{ for $b in document("bib.xml")//book
where $b/author/la = "Rigaux"
return if ($b/@year > 2000)
then <livre recent="true"> {$b/@title}
</livre>
else <livre> {$b/@title} </livre>
}
</livres>
• Résultat:
<livres>
<livre title="Comprendre XSLT"/>
<livre recent="true" title="Spatial Databases"/>
</livres>
21
Quantification
• Résultat:
Scholl, Voisard, Abiteboul, Buneman, Suciu
22