La formulation d'un X-Pointeur peut être élaborée selon deux types : la forme standard avec sa construction xpointer(expression) ou une forme abrégée dénommée child sequence ou Bare name.
Cette dernière fonctionne par rapport au nombre d'éléments dans chaque étage de l'arborescence ou par rapport à la valeur de l'attribut d'identification id.
La première séquence, ci-dessous, est une succession de slash (/) avec un entier n indiquant le niveau de l'élément à atteindre.
<!-- Child sequence --> /n/n/n... <!-- Correspond à --> xpointer(/*[n]/*[n]/*[n]...)
La seconde formule, citée plus bas, est équivalente à xpointer(id(valeur_attribut_id)), elle permet de rechercher la valeur de l'attribut id dans l'arborescence d'un document XML et cela quelque soit son niveau de profondeur.
<!-- Bare name --> valeur_attribut_id <!-- Correspond à --> xpointer(id('valeur_attribut_id')S)
Considérons le document XML ci-dessous, afin de pointer des éléments précisément à l'aide des XPointers sous formes abrégées.
<!-- http://www.site.com/bibliotheque.xml --> <?xml version="1.0" encoding="ISO-8859-1"?> <!DOCTYPE bibliotheque SYSTEM "../dtd/bibliotheque.dtd"> <biblitotheque> <categorie nom="roman"> <livre isbn="2744110558"> <titre>Napoléon - Le chant du départ</titre> <auteur>Max Gallo</auteur> <chapitres> <ouverture> C'était le 4 avril 1805, peu après l'aube... </ouverture> <chapitre id="chap1"> Il n'avait pas encore dix ans,... </chapitre> <chapitre id="chap2"> L'enfant est seul. Il a dû se contraindre... </chapitre> ... <chapitre id="chap39"> C'est aujourd'hui, le 19 brumaire an VIII... </chapitre> </chapitres> </livre> ... </categorie> ... </biblitotheque> |
En premier lieu, nous allons tenter d'atteindre le premier livre, de la première catégorie de la bibliothèque. Pour cela, il suffit d'écrire ceci :
<index xlink:type="locator" xlink:href="bibliotheque.xml#/1/1/1"> Napoléon - Tome I </index>
Il est également possible d'utiliser l'identificateur isbn de l'élément <livre> de la manière suivante.
<index xlink:type="locator" xlink:href="bibliotheque.xml#2744110558"> Napoléon - Tome I </index>
Une autre expression permet encore une fois d'atteindre le premier élément <livre>.
<index xlink:type="locator" xlink:href="bibliotheque.xml#roman/1"> Napoléon - Tome I </index>
L'avant-dernière méthode utilise un XPointeur particulier appelé bare name. L'exemple ci-dessus montre que l'on peut combiner sans problèmes les deux formes abrégées.
Néanmoins, nous pouvons remarquer que les deux identificateurs utilisés précédemment sont isbn et nom. Si le document n'indique pas au processeur XML que ces deux attributs identificateurs ne sont pas du type id, alors ces exemples ne pourront guère fonctionner.
Il est impératif, de correctement déclarer les attributs d'identification sous peine de dysfonctionnement.
<!ATTLIST livre isbn ID #REQUIRED> <!ATTLIST categorie nom ID #REQUIRED> <!ATTLIST chapitre id ID #REQUIRED>
Maintenant, nous allons cibler le trente neuvième élément <chapitre> en utilisant en premier lieu la formulation bare name,
<index xlink:type="locator" xlink:href="bibliotheque.xml#chap39"> Napoléon - Tome I - Capitre 39 </index>
ou par la forme abrégée dite child sequence :
<index xlink:type="locator" xlink:href="bibliotheque.xml#/1/1/1/3/40"> Napoléon - Tome I - Capitre 39 </index>
ou encore en utilisant une combinaison des deux pour finir.
<index xlink:type="locator" xlink:href="bibliotheque.xml#2744110558/3/40"> Napoléon - Tome I - Capitre 39 </index>
Il ne faut pas oublier que les nombres entiers dans la forme child sequence doivent comptabiliser le nombre d'éléments à chaque niveau de l'arborescence. Ainsi, il existe trois éléments enfants sous <livre> et <chapitres> est le troisième, de même pour le trente-neuvième chapître, en réalité il se situe à la position quarante, puisqu'un élément <ouverture> se situe à la première position.