UP PREVIOUS NEXT   Technologies Internet et Education, © TECFA
  3. Les Chemins de localisation

3. Les Chemins de localisation

Début de la définition formelle des chemins de localisation ....

[1] LocationPath::= RelativeLocationPath | AbsoluteLocationPath

[2] AbsoluteLocationPath ::= '/' RelativeLocationPath?

| AbbreviatedAbsoluteLocationPath

[3] RelativeLocationPath ::= Step | RelativeLocationPath '/' Step

| AbbreviatedRelativeLocationPath

[4] Step ::= AxisSpecifier NodeTestPredicate* | AbbreviatedStep

[5] AxisSpecifier ::= AxisName '::' | AbbreviatedAxisSpecifier

[6] AxisName ::= 'ancestor' | 'ancestor-or-self' | 'attribute' | 'child' | 'descendant' | 'descendant-or-self' | 'following' | 'following-sibling' | 'namespace' | 'parent' | 'preceding' | 'preceding-sibling' | 'self'

Note

3.1 Le modèle du document de XPath

Noeuds que XPath peut voir:

Noeuds que XPath ne peut pas voir:

La notion de contexte:

3.2 Quelques chemins de localisation avec la syntaxe courte

A. Quelques chemins simples: éléments enfants, parents, cousins

Noeud racine: /

retourne le premier noeud trouvé dans un arbre (pas forcément l'élément racine XML !)

Elément enfant direct:

nom_element_XML

Elément enfant direct du noeud racine:

/nom_element_XML

Enfant d'un enfant:

nom_element_XML/nom_element_XML

Descendant arbitraire du noeud racine:

//nom_element_XML

Descendant arbitraire d'un noeud:

nom_element_XML//nom_element_XML

Un parent d'un noeud:

../

Un cousin lointain d'un noeud:

../../nom_element_XML/nom_element_XML/nom_element_XML

Illustrations avec un document XML exemple et quelques règles XSLT:

 

<project>

<title>Mon project</title>

<problem>

<title>Voici un problème></title>

<description>Je ne connais pas XPATH</description>

</problem>

<solutions>

<item val="moyenne">Vous pouvez acheter un livre sur XSLT</item>

<item val="forte">Vous pouvez suivre un cours et faire des exercices</item>

</solutions>

</project>

 

Règle (1) XSLT pour la racine XML

 

<xsl:template match=" /project ">

<xsl:apply-templates select=" title " />

</xsl:template>

 

    • xsl:template est une règle XSLT (voir XSLT pour plus d'informations !)
    • L'attribut "match" dit que cette règle s'applique à l'élément project sous la racine
    • Le contexte d'exécution est donc l'élément " project "
    • xsl:apply-templates permet de déclencher une autre règle. Donc le " title " référencé par l'attribut sélect est "Mon projet" (parce que ce title est un enfant de project)

Règle (2) XSLT pour l'élément problem

<xsl:template match=" /project ">

<xsl:apply-templates />

</xsl:template>

 

<xsl:template match= "problem" >

<xsl:apply-templates select="title" />

</xsl:template>

    • La deuxième règle sera déclenchée par la première règle, car problem est un élément enfant de project . Autrement dit, quand on se place dans le contexte " project ", problem est un descendant direct.
    • Une fois quand la règle est déclenchée on se retrouve dans le contexte " problem ".
      Donc " title " se réfère à "Voici un problème".

B. Chemins pour chercher des attributs

Chercher un attribut d'un élément (contexte courant)

@nom_attribut

Chercher tous les attributs "bla"

//@bla

C. Chemins avec Wildcards

Chercher tous les noeuds de type élément

*

Chercher tous les noeuds (y compris commentaires, etc.)

node()

Chercher tous les attributs

@*

D. Chemin avec prédicats

Chercher un élément qui a un attribut

nom_element_XML [ @nom_attribut ]

Chercher un élément qui a un attribut avec une certaine valeur

nom_element_XML [ @nom_attribut = 'valeur']

Chercher un élément qui a un autre élément comme enfant

nom_element_XML [ nom_element_XML ]

Règle (3) XSLT pour définir un chemin en fonction de la valeur d'un attribut

<xsl:template match=" //item[@val='forte'] ">

<xsl:value-of select="." />

</xsl:template>

    • Cette règle se déclenche dans le contexte racine
    • Elle sélectionne n'importe quel élément "item" qui a comme attribut "val=forte"

3.3 Récapitulatif de chemins simples de localisations

 

Elément
syntaxique

(Type de chemin)

Exemple d'un chemin

Exemple d'un match réussi par rapport au chemin indiqué à gauche

balise

nom d'élément

project

<project> ...... </project>

/

sépare enfants directs

project/title

<project> <title> ... </title>

 

/

(correspond à l'élément racine)

//

descendant

project//title

<project><problem> <title>....</title>

 

//title

<racine>... <title>..</title> (n'mporte où)

*

"wildcard"

*/title

<bla> <title>..</title> et <bli> <title>...</title>

|

opérateur "ou"

title|head

<title>...</title> ou <head> ...</head>

 

*|/|@*

(tous les éléments: les enfants, la racine et les attributs de la racine)

.

élément courant

.

 

../

élément supérieur

../problem

<project>

@

nom d'attribut

@id

<xyz id="test">...</xyz>

 

project/@id

<project id="test" ...> ... </project>

@attr='type'

 

list[@type='ol']

<list type="ol"> ...... </list>

 

 

 


UP PREVIOUS NEXT -- TIE