| Accueil ISD Equipe de recherche Laboratoire Paragraphe Enssib ECP Contact |
Accueil
Chapitre 3 :XPath et XLL
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)
Accueil ISD Equipe de recherche Laboratoire Paragraphe Enssib ECP Contact