I. XML exemple▲
Le xml qui servira principalement d'exemple pour la suite du cours :
<?xml version="1.0" encoding="UTF-8"?>
<?xml-stylesheet type="text/xsl" href="xml-xpath.xslt"?>
<employes>
<employe
num
=
"1"
>
<nom>
Dupont</nom>
<prenom>
Robert</prenom>
<sexe>
M</sexe>
<service>
ressources humaines</service>
<tel>
0645</tel>
<!--poste interne-->
<date_arrivée>
03-04-2004</date_arrivée>
<!--arrivée dans la société-->
</employe>
<employe
num
=
"2"
>
<nom>
Dupond</nom>
<prenom>
Maurice</prenom>
<sexe>
M</sexe>
<service>
Ingénierie</service>
<tel>
0842</tel>
<date_arrivée>
02-07-2004</date_arrivée>
</employe>
<employe
num
=
"3"
>
<nom>
Bertold</nom>
<prenom>
Lucie</prenom>
<sexe>
F</sexe>
<service>
ressources humaines</service>
<tel>
0675</tel>
<date_arrivée>
01-04-2005</date_arrivée>
</employe>
<employe
num
=
"5"
>
<nom>
Faubert</nom>
<prenom>
Jerome</prenom>
<sexe>
M</sexe>
<service>
Conception</service>
<tel>
0856</tel>
<date_arrivée>
30-11-2000</date_arrivée>
</employe>
<employe
num
=
"6"
>
<nom>
Geraltt</nom>
<prenom>
Jerome</prenom>
<sexe>
M</sexe>
<service>
ingénierie</service>
<tel>
0956</tel>
<date_arrivée>
23-11-2000</date_arrivée>
</employe>
</employes>
II. Syntaxe et vocabulaire d'une expression Xpath 1.0▲
Une expression Xpath est composée de trois parties un axe, un test et un prédicat.
- Un axe : permet de se déplacer dans l'arbre des nœuds xml : parents , fils ,ancêtres, etc.
Par exemple : Child, parent, ancestor,self… - Un test : permet d'identifier le type du nœud recherché:attribut, racine, etc. il suit l'axe et doit être précédé de :: .
Par exemple : parent::*, child::comment(), etc. - Un prédicat : il sera étudié dans un autre cours , il consiste en condition sur les nœuds parcourus. Il est encadré par [ ].
III. Les différents types de nœuds en Xpath 1.0▲
- nœud parent : le ou les types de nœud qui peuvent contenir celui-ci ;
- nœud fils : le ou les types de nœuds que l'ont peut retrouver dans ce nœud ;
- expression xpath : les expressions xpath permettant de cibler ce type de nœud : test et/ou axe ;
- valeur textuelle : la valeur utilise lors d'un affichage ou d'une comparaison.
III-A. Nœud racine (root)▲
- nœud parent : aucun
- nœud fils : element,comment,processing-instruction
- expression xpath : node() (test), / (axe)
- valeur textuelle : ensemble des contenus nœuds textes qui sont ses descendants
Si nous utilisons le xml exemple, sa valeur textuelle est : DupontRobertMressources humaines06 4503-04-2004DupondMauriceMIngénierie08 4202-07-2004BertoldLucieFressources humaines06 7501-04-2005FaubertJeromeMConception08 5630-11-2000GeralttJeromeMingénierie09 5623-11-2000, guère utilisable tel quel.
Le nœud racine (root) est l'élément hiérarchique le plus haut du document, c'est le nœud « invisible » qui contient tous les autres.Il faut le différencier du root element (élément racine) qui est l'unique nœud (et donc le premier) de type element qu'il peut avoir comme fils.
III-B. Nœud élément (element)▲
- nœud parent : root,element
- nœud fils : attribute,namespace,element,comment,text
- expression xpath : node()(test), * (test) (par défaut sauf derrière namespace et attribute)
- valeur textuelle : ensemble des contenus nœuds textes qui sont ses descendants
Les nœuds de type element sont les plus évidents, ce sont les balises qui permettent de structurer l'information. Dans l'exemple nous avons : employes, employe, nom, prenom, sexe, service, tel, date_arrivée. Le nœud employes est le root element (élément racine).
III-C. Nœud texte (text)▲
- nœud parent : element
- nœud fils : aucun
- expression xpath : node() (test), text()(test)
- valeur textuelle : chaînes de caractères contenues
Les chaînes contenues entre les balises d'un xml sont en réalité elles aussi vue comme des nœuds. Ici par exemple Dupont est le nœud text fils du premier nœud element nom.
III-D. Nœud attribut (attribute)▲
- nœud parent : element
- nœud fils : aucun
- expression xpath : @*,attribute::* (axe+test) .La norme devrait permettre node() seul mais des limites de parseur l'empêche en général.C'est donc * précède de l'axe qui fixe le type recherché
- valeur textuelle : chaîne de caractères entre les quotes après le =
<employe
num
=
"1"
>
<nom>
Dupont</nom>
<prenom>
Robert</prenom>
<sexe>
M</sexe>
<service>
ressources humaines</service>
<tel>
06 45</tel>
<!--poste interne-->
<date_arrivée>
03-04-2004</date_arrivée>
<!--arrivée dans la société-->
</employe>
ici la valeur textuelle du nœud attribute num du nœud element employe est 1.
Ne pas oublier qu'une seule occurrence de « nom » d'attribut par nœud est autorisée. Attention aussi à l'emploi des " et ' .
III-E. Nœud commentaire (comment)▲
- nœud parent : element,root
- nœud fils : aucun
- expression xpath node() (test), comment() (test)
- valeur textuelle : La chaîne entre <--et -->
Même syntaxe que pour le HTML, le commentaire est la pour « expliquer ».Néanmoins Xpath permet de le cibler et donc d'utiliser son contenu.
<employe num="1">
<nom>Dupont</nom>
<prenom>Robert</prenom>
<sexe>M</sexe>
<service>ressources humaines</service>
<tel>06 45</tel>
<!--poste interne-->
<date_arrivée>03-04-2004</date_arrivée>
<!--arrivée dans la société-->
</employe>
Ici deux nœuds de type comment fils du nœud employe. le premier ayant pour valeur textuelle : poste interne le second : arrivée dans la société.
III-F. Nœud espace de noms (namespace)▲
- nœud parent : element
- nœud fils :aucun
- expression xpath : namespace::* (axe+test). La norme devrait permettre node() seule, mais des limites de parseur l'empêche en général. C'est donc * précède de l'axe qui fixe le type recherché.
- valeur textuelle : l'URI de l'espace de noms qui est associé au préfixe de l'espace de noms.
Les namespace permettent d'associer certains nœuds via leur nom expansé à leur URI à un traitement particulier. Prenons par exemple une feuille xslt :
<?xml version="1.0" encoding="UTF-8"?>
<
xsl
:
stylesheet
version
=
"1.0"
xmlns
:
xsl
=
"http://www.w3.org/1999/XSL/Transform"
>
<
xsl
:
output
method
=
"xml"
version
=
"1.0"
encoding
=
"UTF-8"
indent
=
"yes"
/>
<
xsl
:
template
match
=
"/"
>
<test>
<
xsl
:
value-of
select
=
"."
></
xsl
:
value-of>
</test>
</
xsl
:
template>
</
xsl
:
stylesheet>
le nœud namespace est xmlns:xsl, sa valeur textuelle : http://www.w3.org/1999/XSL/Transform. Tous les nœuds commençant par xsl : (le nom expansé) comme indiqué par xmlns:xsl seront associé à l'URI et, dans ce cas, si lus par un processeur XSLT seront considérés comme des instructions au lieu d'être du simple texte.
III-G. Nœud d'instructions de traitement (processing-instruction)▲
- nœud parent : root
- nœud fils : aucun
- expression xpath : node()(test),processing-instruction() (test)
- valeur textuelle : ce qui est contenu entre <? et ?>
Ces nœuds sont des instructions de traitement au processeur. Exemple :
<?xml-stylesheet type="text/xsl" href="xml-xpath.xslt"?>
Qui ordonne d'associer le xslt contenu mon fichier.xslt avec le xml traité. Ici par exemple la valeur textuelle est : xml-stylesheet type=« text/xsl » href=« xml-xpath.xslt »
ATTENTION
<?xml version="1.0" encoding="......"?>
L'entête du fichier ne peut jamais être atteint par Xpath , elle est hors du nœud racine.
III-H. CDATA, l'exception▲
Les zones CDATA ne sont pas des nœuds, mais une zone de caractères « protégés ».Tout caractère d'une zone de type CDATA est traité comme caractère de données.
Quand le parseur, passe dessus il considérera que tous les signes < et > sont respectivement remplacés par < et > .Enfin au niveau du traitement Xpath <![CDATA[ et ]]> sont ignorés
<?xml version="1.0" encoding="UTF-8"?>
<test>
ceci est test sur <![CDATA[
les valeurs < et >
]]>
.</test>
Ici la valeur textuelle de test (celle de son nœud texte) sera donc : ceci est test sur les valeurs < et > .