logo Mkadmi
Accueil            ISD            Equipe de recherche           Laboratoire Paragraphe            Enssib         ECP           Contact  

Accueil

 

 
 
 
 
   

 
 

webmaster

 
 
Chapitre 3 :XPath et XLL

1. INTRODUCTION

Il existe une grande variété de spécifications liées à XML, dont XPath et XLL sont deux composantes connexes :

• XPath qui permet d'exprimer la navigation dans un arbre XML avec des expressions sous forme de patterns utilisées par XSLT et XPointer.

• XLL (XML Linking Language) qui est un ensemble de deux spécifications :

       - XLink pour décrire les liens entre documents

       - XPointer pour définir un endroit précis dans un document cible d'un lien, en utilisant XPath.

XPath a un statut de recommandation du 16 Novembre 1999, dont les spécifications sont disponibles à :

http://www.w3.or-g/TR/1999/REC-xpath-19991116

XLink a un statut de recommandation du 27 Juin 2001, dont les spécifications sont disponibles à :  

http://www.w3.orp-/TR/2001/REC-xlink-20010627

XPointer a un statut de candidate recommandation du 11 Septembre 2001, dont les spécifications sont disponibles à :

http://www.w3.org/TR/2001/CR-xptr-20010911

 

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.

C'est utile lorsque l'on réalise des applications de présentation, par exemple, pour faire une table des matières où l'on ne veut sélectionner que des titres. C'est également utile lorsqu’on veut réaliser des hyperliens sur des documents que l'on ne peut pas modifier pour leur ajouter des ancres et que l'on souhaite pourtant désigner (par exemple, le deuxième alinéa du troisième chapitre d'un document).

Du coup, il est nécessaire d'avoir un langage de désignation d'objets dans un document ; c’est  l'objectif de XPath. Du point de vue du W3C, l'objectif de XPath est aussi de devenir un standard de base, réutilisable dans des recommandations de plus haut niveau.

XPath exploite la structure d'un document dans la navigation par :

§         Une écriture de type "chemins d'accès", comme les URL

§         Des axes de parcours

§         Des tests sur les valeurs des objets de l'arbre (élément, attribut,...)

§         Des fonctions prédéfinies sur les nœuds et les chaînes de caractères

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

   - fichier/ @Nom        l'attribut nom de l'élément <fichier> fils

   - @ *                          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") à renvoie la 1ère occurrence contenant la chaîne de caractère "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