1.
INTRODUCTION
2.
XPATH: LE LANGAGE DE NAVIGATION
Si
un document XML contient en même temps des données
et des informations permettant d'identifier la structure
et le sens de ces données, il est alors utile de pouvoir
s'appuyer sur cette information pour désigner une
partie d'un document XML.
Deux
choses importantes dans l'utilisation des expressions
XPath :
-
La recherche d'une correspondance à un motif est contextuelle
-
Tous les éléments correspondants sont renvoyés
2.1.
La sélection d'objets
XPath
permet d'exprimer la sélection des différents objets
d'un document XML
§
Sélection
des éléments
-
/
racine du document
-
.
nœud courant
-
repertoire
tous les éléments <repertoire> enfant du nœud
courant
-
racine/fichier
tous les éléments <fichier> avec <racine>
comme parent
-
repertoire//fichier
tous les éléments <fichier> avec <repertoire>
comme ancêtre
-
//repertoire
tous les éléments <repertoire> avec racine comme
ancêtre
-
*
tous les noeuds de type éléments
-
repertoire | fichier
tous les éléments <repertoire> ou <fichier>
Ces expressions sont des 'écritures
abrégées des écritures directes contenant la spécification
des axes nodaux. Les écritures directes
sont plus verbeuses
§
Recherche
d'attribut
-
@ Nom
l'attribut nom du nœud (élément) courant
- @ *
tous les attributs de l'élément courant
§
Sélection
des commentaires, textes, et processing instructions
-
comment()
les commentaires
-
text()
les nœuds texte
-
pi()
les nœuds processing instruction
-
node()
les nœuds autres que racine
§
Les
tests
-
repertoire[fichier]
les éléments <repertoire> contenant un sous-élément
<fichier>
-
*[@taille]
les éléments contenant un attribut taille
-
//repertoire[@nom = "XML"]
les éléments <repertoire> de la racine ayant
pour attribut nom = "XML"
2.2
Les axes nodaux
XPath
permet au travers de la notion d’axes nodaux, de référencer
des sous-arbres complexes type frères, parent, ….
L’expression
d’un axe dans une expression XPath doit être suivie
du symbole double :: .
Quelques
exemples
| child::repertoire |
tous les éléments <repertoire> enfant
du nœud contextuel |
| child::* |
tous
les éléments enfant du nœud contextuel |
| child::text() |
tous les nœuds textuels du nœud contextuel |
| child::node() |
tous les enfants du nœud contextuel, quelque
soit leur type |
| attribute::name |
l'attribut
name du nœud contextuel |
| attribute::* |
tous les attributs du nœud contextuel |
| descendant:: repertoire |
tous
les descendants <repertoire> du nœud contextuel |
| ancestor::fichier |
tous les ancêtres <fichier> du nœud contextuel |
| ancestor-or-self::fichier |
tous
les ancêtres <fichier> du nœud contextuel
et le nœud contextuel lui-même si c'est un <fichier> |
| descendant-or-self::repertoire |
tous les descendants <repertoire> du nœud
contextuel et le nœud contextuel
lui-même si c'est un <repertoire> |
| self::repertoire |
le nœud contextuel si c'est un élément <repertoire>,
et rien dans le cas contraire |
| child::*/child::repertoire |
tous
les petits enfants <repertoire> du noeud
contextuel |
| /descendant:: repertoire |
tous les éléments <repertoire> descendants
du document contenant le nœud contexuel |
Quand
cela est possible, c'est à dire dans les cas simples,
préférez l'écriture abrégée associée
-
self::node()
.
-
parent::node()
..
-
child::nom
nom
-
attribute::nom
@nom
-
/descendant-or-self::node()
//
3.
LES LIENS XML: XLINK ET XPOINTER
Il
existe deux types de liens XML:
•
le lien XLink permet de relier des ressources entre
elles,
•
le lien XPointer permet de mettre en oeuvre un mécanisme
d'adressage dans une structure de document.
Les
liens XML offrent les possibilités suivantes :
•
faire référence à des fragments d'un document sans
être obligé d'y insérer quelques informations que
ce soit,
•
créer des liens ayant plusieurs cibles,
•
créer des liens typés,
•
créer des liens vers des positions absolues ou relatives
(les pointeurs),
3.1
LES LIENS XLINK
XLink
est le résultat d’une volonté d’obtenir des
outils de liaisons entre deux documents XML, plus
puissants que ceux de HTML.
Xlink
définit deux types de liens :
-
Liens simples associant deux
ressources, donc compatibles HTML : ces liens
sont de type unidirectionnel ;
-
Liens étendus, associant plus
de deux ressources : ces liens peuvent être bi-directionnels,
multi-directionnels et externes aux ressources liées.
Xlink
ne définit pas la façon de traiter ces liens. Ce sont
les applications, qui exploitent ces liens, qui devront
en définir le rendu.
3.1.1
Les liens simples
Les
liens simples sont des liens associant exactement
deux ressources dont l’une est locale et l’autre est
distante.
Xlink
permet de décrire le comportement du lien au travers
d’attributs facultatifs :
§
xlink :show={"replace"
| "new"| "embed"}
-
replace
la cible du lien remplace le contenu actuel
-
new
ouverture d’une nouvelle instance pour afficher la
cible du lien
-
embed
la cible du lien est incluse dans le document actuel
§
xlink :actuate={"onRequest" | "onLoad"}
-
onRequest
lien traversé lors d’une demande explicite (Lien HTML)
-
onLoad
lien traversé au chargement du document (image HTML)
Lien
Type HTML
<descriptif xmlns :xlink
= http://www.w3.org/1999/xlink/
xlink :type= "simple"
xlink :href="XDV Detail.xml"
xlink :title="Descriptif détaillé"
Descriptif détaillé du cours XDV
</descriptif>
Lien
type référencement d’image
<image xmlns : xlink
= http://www.w3.org/1999/xlink/
xlink :type=
"simple"
xlink :href= "images/logo.gif"
xlink :show= "embed"
xlink :actuate=
"onLoad"/>
3.1.1
Les liens étendus
Un
lien étendu est un lien qui associe un nombre arbitraire
de ressources. Ces ressources pouvant être locales
ou distantes.
Exemple :
<go
xlink : type= « arc» xlink:from= "A"
xlink:to= "B" />
•
Un lien étendu est représenté par plusieurs éléments
XML avec des rôles qui peuvent être différents :
-
xlink:type="locator"
décrit les ressources éloignées participant dans la
liaison
-
xlink:type="ressource"
décrit les ressources locales qui participent à la
liaison
-
xlink:type="arc"
décrit les règles de parcours entre les ressources
-
xlink:type="title"
décrit de manière lisible la liaison
•
La cible du lien est distante car elle est située
en dehors de celui-ci, que ce soit dans le même document
ou non.
Un
lien en ligne possède
au moins une ressource locale.
Un
lien hors ligne (out-of-line)
n'a aucun élément local.
•
C'est la puissance des liens XML, permettant de lier
des ressources dans un document externe et qui permet
par exemple :
-
L'ajout de lien de et vers des documents en lecture
seule
-
Plusieurs enchaînements d'un même diaporama
-
Page de synthèse de l'actualité provenant des différents
sites
Pour
définir un lien étendu, il faut définir
•
La ressource interne au document qui définit ce lien
-
xlink :type="ressource"
décrit les ressources
locales qui participent à la liaison
-
xlink:label="nomlabel"
identifiant nommé de la ressource locale
•
La localisation de chacune des ressources associées
à ce lien
-
xlink: type=" locator"
décrit les ressources locales qui participent à la
liaison
-
xlink:href="URI'
URI de la ressource liée
-
xlink:label="nomlabel"
identifiant nommé de la ressource locale
•
L'association entre source et destination
-
xlink:type="arc"
décrit les ressources locales qui participent à la
liaison
-
xlink:from="nomiabel"
identifiant nommé du départ du lien
-
xlink:to="nomiabel" identifiant nommé de l'arrivé
du lien
Un
lien en ligne possède
au moins une ressource locale.
Association
en ligne des URI des sites FAQ XML
<faq-xml xmlns:xlink=http://www.w3.org/1999/xlink/namespace/
xlink:type="extended"
xlink:title="Liens vers les sites FAQ XML étrangers">
<nomlien
xlink:type="resource"
xlink:label="local">
Sites
FAQ XML
</nomlien>
<site xlink:type="local"
xlink:href=http://www.xml.fr/FAQ.xml
xlink:label="fr"
xlink:title="Version française"/>
<site xlink:type="local"
xlink:href=http://www.xml.us/FAQ.xml
xlink:label="us"
xlink:title="Version américaine"/>
<site xlink:type="local"
xlink:href=http://www.xml.ca/FAQ.xml
xlink:label="ca"
xlink:title="Version canadienne"/>
<site xlink:type="arc"
xlink :from="local"
xlink:to="fr"/>
<site xlink:type="arc"
xlink :from="local"
xlink:to="us"/>
<site xlink:type="arc"
xlink :from="local"
xlink:to="ca"/>
</faq-xml>
Les valeurs pour la description du lien, xlink :from
et xlink :to
doivent être des labels
Exemple
de définition de lien étendu hors ligne
Fichier
de lien externe
<doc_base
xmlns:xlink=http://www.w3.org/1999/xlink
xlink:type="extended">
<doc
xmlns:xlink=http://www.w3.org/1999/xlink
xlink:type="locator"
xlink:href="mondoc.xml"
xlink:label="label_doc">
</doc>
<base
xmlns:xlink=http://www.w3.org/1999/xlink
xlink:type="locator"
xlink:href="mabase.xml"
xlink:label="label_base">
</base>
<loadbase
xmlns:xlink=http://www.w3.org/1999/xlink
xlink:type="arc"
xlink:arcrole="http://www.w3.org/1999/xlink/properties/linkbase"
xlink:from="label_doc"
xlink:to="label_base"
</loadbase>
</doc_base>
3.2.
LES POINTEURS XML: XPOINTER
En
plus de la notation offerte par XPath, il y a différentes
façons de repérer un emplacement au sein d'un document
XML. Un pointeur est constitué d'une référence absolue
suivie ou non d'une série de renvois relatifs.
Les
références absolues
La
référence absolue est indiquée par le préfixe # ou
|. Elle peut prendre les valeurs suivantes :
•
root() : la racine du document
•
origin() : le document en cours. Cette référence doit
être suivie d'autres références.
•
id(valeur) : l'élément dont l'attribut de type ID
à la valeur indiquée.
Les
références relatives
La
référence relative suit une référence absolue et elle
en est séparée par un point (.).C'est une expression
XPath.
Exemple
: Lien sur le document en cours
#id
("XML") .child (1, session) à
renvoie la 1ère occurrence de l'élément
session situé sous l'élément identifié par "XML".
L'élément session doit être un élément de niveau immédiatement
inférieur.
#id
("XML") .descendant (1, session) à
renvoie la 1ère occurrence de l'élément
session situé à un niveau quelconque sous l'élément
identifié par "XML"
#root
() .string (1, "XML") .following (l, session) à renvoie la 1 ère occurrence de session
qui suit l'élément contenant la chaîne de caractère
"XML"
Exemple
: Lien sur un autre document :
http://monsite.fr/page.xml#id("XML").child(l,session)
http://monsite.fr/page.xml|id("XML").child(l,session)
|