Vous êtes sur la page 1sur 37

Données semi-structurées

XPath et XSLT

Pour les étudiants en Licence 3 Informatique SI


Enseignante : S. Zebboudj
Réalisé en collaboration avec S. Bouchelaghem

2021/2022
Dernière mise à jour : 06 Mai 2022
Publication de documents XML
La mise en forme d’un document XML est gérée par un langage créé spécialement à cet effet : le
langage XSL (eXtensible Stylesheet Language).
XSL s’occupe essentiellement de décrire comment les éléments d’un document XML devraient être
affichés. Il se compose de quatre (04) parties :
● XSLT : pour transformer un document XML d’un vocabulaire à un autre;
● XPath : utilisé par XSLT pour parcourir les éléments d’un document XML;
● XSL-FO : utilisé pour le formatage de documents XML (remplacé par CSS3 depuis 2013);
● XQuery : langage utilisé pour interroger des documents XML.
Nous nous intéressons dans cette partie du cours à XPath et XSLT.
2
Qu’est-ce que XPath ?

XPath est un langage qui offre le moyen d’identifier et de sélectionner des parties d’un document
XML.
XPath n’est pas un langage autonome; il est utilisé au sein d’autres langages hôtes comme XSLT.
Il utilise une syntaxe formé d’expressions de chemin ressemblant aux expressions utilisées avec les
systèmes de fichiers Unix.
Ces expressions de chemin décrivent des ensembles de nœuds de l’arborescence d’un document
XML qu’il est ainsi possible de manipuler.

3
Arborescence d’un document XML
Un document XML possède une structure arborescente appelée arbre du document (XML Tree).
Cette structure inclut les éléments et leurs contenus, les attributs, les instructions de traitement et les
commentaires. C’est sous cette forme d’arbre que le document XML est manipulé par XPath.
Dans XPath, il existe sept (07) types de nœuds : élément, attribut, texte, espace de noms, instruction de
traitement, commentaire et nœud de document.
L’ordre d’apparition des éléments, attributs, etc. dans le document XML est important pour déterminer
quel nœud se trouve à gauche ou à droite d’un autre nœud.

4
Arborescence d’un document XML (suite)
Relations entre les nœuds
● Parent : chaque élément et attribut a un parent. Le nœud parent d’un attribut est l’élément
ayant cet attribut. La valeur de cet attribut est contenue dans le nœud attribut.
● Enfants : les nœuds éléments peuvent avoir zéro, un ou plusieurs enfants.
● Frères : les nœuds qui ont le même parent.
○ Frères gauches : nœuds qui sont placés avant l’élément considéré dans le document XML;
○ Frères droits : nœuds qui sont placés après l’élément considéré dans le document XML.
● Ancêtres : le parent d'un nœud, le parent du parent, etc.
● Descendants : les enfants d'un nœud, les enfants des enfants, etc.

5
Arborescence d’un document XML (suite)
Exemple :
<?xml version="1.0" encoding="UTF−8"?>
<!−−Ceci est un commentaire−−> <livre>
<?xml-stylesheet href="tree.xsl" type="text/xsl"?> <titre lang="fr">XML étape par étape</titre>
<catalogue> <auteur>
<livre> <prenom id="premier">Michael</prenom>
<titre lang="en">Réseaux informatiques</titre> <nom>Young</nom>
<auteur> </auteur>
<prenom id="premier">Yann</prenom> <prix>59.99</prix>
<nom>Bardot</nom> </livre>
</auteur> </catalogue>
<prix>29.99</prix>
</livre>
6
Arborescence d’un document XML (suite)
Syntaxe de XPath
XPath utilise des expressions de chemin pour sélectionner des nœuds ou des ensembles de nœuds
de l’arbre d’un document XML. Le nœud est sélectionné en suivant un chemin ou des étapes.
La forme générale d’une expression XPath ressemble fortement aux chemins Unix. Ces expressions
peuvent être :
● Relatives au nœud courant : selecteur1/selecteur2/…
● Absolues : /selecteur1/selecteur2/...
Un sélecteur sélectionne un ensemble de nœuds en fonction du résultat du sélecteur précédent.
L’évaluation d’une expression de chemin peut retourner une valeur numérique, alphanumérique ou
un sous-ensemble de nœuds de l’arbre.
8
Expressions XPath
Les filtres (1)
Un filtre indique le type de nœuds retournés par l’évaluation d’une expression.

Filtre Description

node Sélectionner tous les nœuds avec le nom “node”

/node Sélectionner le nœud “node” à partir du nœud racine

//node Sélectionner tous les nœuds nommés “node” à partir du nœud courant (oula racine), peu importe
leur position dans le document

. Sélectionner le nœud courant

.. Sélectionner le parent du nœud courant

9
Expressions XPath (suite)
Les filtres (2)

Filtre Description

@ Sélectionner un attribut

* Sélectionner tous les nœuds de type élément et attribut

text() Sélectionner tous les nœuds de type texte

comment() Sélectionner tous les nœuds de type commentaire

processing-instruction() Sélectionner tous les nœuds de type instruction de traitement

node() Sélectionner tous les nœuds sans distinction du type

@* Sélectionner tous les attributs du noeud courant

10
Expressions XPath (suite)
Exemple :
<?xml version="1.0" encoding="UTF−8"?>
<!−−Date : 05 Juin 2021 − 09:30−−> <livre>
<catalogue> <titre lang="fr">XML étape par étape</titre>
<livre> <!−−Ce livre a un auteur−−>
<titre lang="en">Réseaux informatiques</titre> <auteur>Michael Young</auteur>
<!−−Ce livre a deux auteurs−−> <prix>59.99</prix>
<auteur>Yann Bardot</auteur> </livre>
<auteur>José Dordoigne</auteur> </catalogue>
<prix>29.99</prix>
</livre>

11
Expressions XPath (suite)
Expression Résultat

/catalogue L’expression /catalogue donnera l’élément :


<catalogue>

</catalogue>

/catalogue/livre L’expression /catalogue/livre donnera tous les éléments nommés livre, nœud fils de l’élément catalogue :
<livre> <livre>
<titre lang="en"> <titre lang="fr">
Réseaux informatiques XML étape par étape
</titre> </titre>
... ...
</livre> </livre>

12
Expressions XPath (suite)
Expression Résultat

//titre L’expression //titre donnera tous les éléments titre du document :


<titre lang="en"> <titre lang="fr">
Réseaux informatiques XML étape par étape
</titre> </titre>

//comment() L’expression //comment() retournera tous les commentaires du document :


<!−−Date : 05 Juin 2021 − 09:30−−>
<!−−Ce livre a deux auteurs−−>
<!−−Ce livre a un auteur−−>

/catalogue//comment() L’expression /catalogue//comment() retournera tous les commentaires qui descendent du nœud
catalogue :
<!−−Ce livre a deux auteurs−−>
<!−−Ce livre a un auteur−−>
13
Expressions XPath (suite)
Les conditions
Elles expriment des propriétés que doivent satisfaire les nœuds retenus à l’issue du filtrage pour
être finalement inclus dans le résultat.
Il existe trois formes d’expression pour les conditions :
● filtre[pos] : sélectionne un nœud en fonction de sa position;
● filtre[expression XPath] : sélectionne les nœuds pour lesquels la sous-expression renvoie un
ensemble de nœuds non vide;
● filtre[condition1][condition2]... : sélectionne les nœuds identiques par filtre si et seulement
si les conditions sont respectées.

14
Expressions XPath (suite)
Exemple :
<?xml version="1.0" encoding="UTF−8"?>
<!−−Date : 05 Juin 2021 − 09:30−−>
<catalogue> <livre>
<livre> <titre lang="fr">XML étape par étape</titre>
<titre lang="en">Réseaux informatiques</titre> <!−−Ce livre a un auteur−−>
<!−−Ce livre a deux auteurs−−> <auteur>Michael Young</auteur>
<auteur>Yann Bardot</auteur> <prix>59.99</prix>
<auteur>José Dordoigne</auteur> </livre>
<prix>29.99</prix> </catalogue>
</livre>

15
Expressions XPath (suite)
Expression Résultat

/catalogue/livre[1] L’expression /catalogue/livre[1] donne le 1er élément livre, nœud fils du nœud élément catalogue :
<livre>
<titre lang="en">Réseaux informatiques</titre>
<!--Ce livre a deux auteurs-->
<auteur>Yann Bardot</auteur>
<auteur>José Dordoigne</auteur>
<prix>29.99</prix>
</livre>

/catalogue/livre[1]/auteur L’expression /catalogue/livre[1]/auteur donne tous les éléments auteur fils du premier élément livre,
nœud fils de catalogue :
<auteur>Yann Bardot</auteur>
<auteur>José Dordoigne</auteur>

16
Expressions XPath (suite)
Expression Résultat

/catalogue/livre[last()-1]/ L’expression /catalogue/livre[last()-1]/auteur[last()] donne le dernier élément auteur, de


auteur[last()] l’avant dernier élément livre :
<auteur>José Dordoigne</auteur>

//titre[@lang=’fr’] L’expression //titre[@lang=’fr’] donne tous les éléments titre où l’attribut lang=’fr’ :
<titre lang="fr">XML étape par étape</titre>

/catalogue/livre/prix[text()>30.00] L’expression /catalogue/livre/prix[text()>30.00] donne tous les éléments prix dont le


texte affiche une valeur supérieure à 30.00 :
<prix>59.99</prix>

/catalogue/livre/auteur[position()<2] L’expression /catalogue/livre/auteur[position()<2][../prix>30.00] donne tous les premiers


[../prix>30.00] éléments auteur où l’élément frère prix est supérieur à 30.00 :
<auteur>Michael Young</auteur>

17
Expressions XPath (suite)
Les axes
Un axe définit le sens de parcours des nœuds à partir du nœud courant. Il est utilisé pour localiser
les nœuds relatifs à ce nœud dans l'arborescence.
Les axes qu’il est possible d’utiliser dans les expressions XPath sont les suivants :
● self ● ancestor-or-self
● child ● following-siblings
● parent ● preceding-siblings
● descendant ● following
● descendant-or-self ● preceding
● ancestor ● namespace
18
Expressions XPath (suite)
Exemple : <chapitre>
<?xml version="1.0" encoding="UTF−8"?> <titre>Adresses IP</titre>
<!−−Date : 05 Juin 2021 − 09:30−−> <pages>30</pages>
<catalogue> </chapitre>
<livre> <chapitre>
<titre lang="en">Réseaux informatiques</titre> <titre>Conclusion</titre>
<!−−Ce livre a deux auteurs−−> <pages>10</pages>
<auteur>Yann et José</auteur> </chapitre>
<prix>29.99</prix> </livre>
<chapitre> <livre>
<titre>Introduction</titre> <titre lang="fr">XML étape par étape</titre>
<pages>20</pages> <!−−Ce livre a un auteur−−>
</chapitre> <auteur>Michael Young</auteur>

19
Expressions XPath (suite)
Exemple (suite) :
<prix>59.99</prix>
<chapitre>
<titre>Introduction</titre>
<pages>10</pages>
</chapitre>
<chapitre>
<titre>XPath</titre>
<pages>15</pages>
</chapitre>
</livre>
</catalogue>

20
Expressions XPath (suite)
Expression Résultat

child::catalogue L’expression child::catalogue est équivalente à l’expression /catalogue. Elle donne l’élément :
<catalogue>

</catalogue>

/catalogue/livre[1]/child::chapitre L’expression /catalogue/livre[1]/child::chapitre donne tous les nœuds fils nommés chapitre
du premier nœud livre :
<chapitre> <chapitre> <chapitre>
<titre>Introduction</titre> <titre>Adresses IP</titre> <titre>Conclusion</titre>
<pages>20</pages> <pages>30</pages> <pages>10</pages>
</chapitre> </chapitre> </chapitre>

21
Expressions XPath (suite)
Expression Résultat

/catalogue/descendant::titre L’expression /catalogue/descendant::titre donne tous les éléments titre appartenant aux
descendants du nœud catalogue :
<titre lang="en">Réseaux informatiques</titre>
<titre>Introduction</titre> (a)
<titre>Adresses IP</titre>
<titre>Conclusion</titre>
<titre lang="fr">XML étape par étape</titre>
<titre>Introduction</titre> (b)
<titre>XPath</titre>

Les éléments (a) et (b) sont complètement différents.

22
Expressions XPath (suite)
Expression Résultat

/catalogue/livre[1]/following::titre L’expression /catalogue/livre[1]/following::titre donne tous les éléments titre qui


viennent après le premier nœud livre fils du nœud catalogue :
<titre lang="fr">XML étape par étape</titre>
<titre>Introduction</titre>
<titre>XPath</titre>

/catalogue/livre[1]/chapitre[2]/ L’expression /catalogue/livre[1]/chapitre[2]/following::chapitre donne tous les éléments


following::chapitre chapitre qui viennent après le deuxième élément chapitre du premier élément livre dans
catalogue :
<chapitre> <chapitre> <chapitre>
<titre>Conclusion</titre> <titre>Introduction</titre> <titre>XPath</titre>
<pages>10</pages> <pages>10</pages> <pages>15</pages>
</chapitre> </chapitre> </chapitre>

23
XSLT : Principes de base
Les transformations faites sur des documents XML sont décrites par des règles contenues dans une
feuille de style XSLT.
Un processeur XSLT est une application (commande, intégrée dans un navigateur, dans un serveur)
chargée de réaliser ces transformations sur un document XML. Il construit un arbre à partir du
document XML source, il applique des règles de transformation aux noeuds et construit un nouvel
arbre. De ce dernier, est obtenu le nouveau document XML transformée.
Du fait que la feuille de style XSLT ne modifie pas le document source, il est possible d'appliquer
plusieurs feuilles de style différentes pour produire des documents avec des formats différents.

24
Structure d’une feuille de style XSLT
Une feuille de style XSLT est un document XML.
Elle est contenue dans l’élément racine <xsl:stylesheet> ou <xsl:transform>.
L’entête d’une feuille de style XSLT peut prendre la forme suivante ::
Syntaxe 1 :
<xsl:stylesheet version="1.0" xmlns:xsl="http://www.w3.org/1999/XSL/Transform">
<xsl:output method="xml | html | text" …/>
...
</xsl:stylesheet>
Syntaxe 2 :
<xsl:transform version="1.0" xmlns:xsl="http://www.w3.org/1999/XSL/Transform">
<xsl:output method="xml | html | text" …/>
...
</xsl:transform> 25
Règles de transformations
L’élément racine <xsl:stylesheet> (ou <xsl:transform>) contient plusieurs règles déclarées par des
éléments <xsl:template> dont l’attribut match précise sur quels nœuds la règle doit être appliquée.
Les nœuds concernés par la règle sont sélectionnés via le langage XPath.
Si aucune règle n’est définie pour un noued, des règles par défaut lui sont appliquées.
La déclaration d’une règle XSLT prend la forme générale suivante :
Syntaxe :
<xsl:template match= "uneExpressionXPath">
<!--Éléments littéraux qui seront copiés tels quels dans le document résultat-->
...
<!--Application des règles-->
...
26
</xsl:template>
Règles de transformation par défaut
● Noeuds Comment et Processing-Instruction : Ne rien faire

● Noeuds Text et Attribute : afficher leur valeur <xsl:value-of select="."/>

● Noeuds Root et autres : appliquer les règles par défaut des noeuds fils

27
Ordre d’application des transformations (1)
Les règles de transformations sont appliquées en parcourant l’arbre en profondeur et de gauche à
droite.
<?xml version="1.0" encoding="UTF-8"?>
<xsl:stylesheet version="1.0"
<?xml version="1.0" encoding="UTF-8"?> xmlns:xsl="http://www.w3.org/1999/XSL/Transform">
<?xml-stylesheet type="text/xsl" href="catalogueStyle.xsl"?> <xsl:output method = "text"/>
<catalogue>
<livre> </xsl:stylesheet>
<titre>XML étape par étape</titre>
<auteur>Young</auteur>
<prix>10.99</prix>
</livre>
<livre>
<auteur>Bardot</auteur> XML étape par étape
<prix>20.50</prix> Young
<titre>Réseaux Informatiques</titre> 10.99
</livre>
Bardot
</catalogue> 20.50 28
Réseaux Informatiques
Ordre d’application des transformations (2)
Les règles de transformations sont appliquées en parcourant l’arbre en profondeur et de gauche à
droite. <?xml version="1.0" encoding="UTF-8"?>
<xsl:stylesheet version="1.0"
xmlns:xsl="http://www.w3.org/1999/XSL/Transform">
<?xml version="1.0" encoding="UTF-8"?> <xsl:output method = "text"/>
<?xml-stylesheet type="text/xsl" href="catalogueStyle.xsl"?> <xsl:template match="titre">
<catalogue> Titre : <xsl:value-of select = "."/>
<livre> </xsl:template>
<titre>XML étape par étape</titre> </xsl:stylesheet>
<auteur>Young</auteur>
<prix>10.99</prix>
</livre>
<livre>
Titre : XML étape par étape
<auteur>Bardot</auteur>
Young
<prix>20.50</prix>
10.99
<titre>Réseaux Informatiques</titre>
</livre> Bardot
</catalogue> 20.50 29
Titre : Réseaux Informatiques
Ordre d’application des transformations (3)
<?xml version="1.0" encoding="UTF-8"?>
<?xml version="1.0" encoding="UTF-8"?> <xsl:stylesheet version="1.0" xmlns:xsl=
<?xml-stylesheet type="text/xsl" href="catalogueStyle.xsl"?> "http://www.w3.org/1999/XSL/Transform">
<catalogue> <xsl:output method = "text"/>
<livre> <xsl:template match="livre">
<titre>XML étape par étape</titre> Livre : <xsl:value-of select = "titre"/>
<auteur>Young</auteur> </xsl:template>
<prix>10.99</prix> <xsl:template match="auteur">
</livre> Auteur : <xsl:value-of select = "."/>
<livre> </xsl:template>
<auteur>Bardot</auteur> </xsl:stylesheet>
<prix>20.50</prix>
<titre>Réseaux Informatiques</titre>
</livre>
</catalogue>
Livre : XML étape par étape

Livre : Réseaux Informatiques


30
Ordre d’application des transformations (4)
<?xml version="1.0" encoding="UTF-8"?>
<xsl:stylesheet version="1.0" xmlns:xsl= "http://www.w3.org/1999/XSL/Transform">
<xsl:output method = "text"/>

<xsl:template match = "/">


Mes livres Mes livres
</xsl:template>

<xsl:template match="livre">
Livre : <xsl:value-of select = "titre"/>
</xsl:template>

<xsl:template match="auteur">
Auteur : <xsl:value-of select = "."/>
</xsl:template>

</xsl:stylesheet>

31
Ordre d’application des transformations (5)
<?xml version="1.0" encoding="UTF-8"?>
<xsl:stylesheet version="1.0" xmlns:xsl= "http://www.w3.org/1999/XSL/Transform">
<xsl:output method = "text"/>
Mes livres
<xsl:template match = "/">
Mes livres
Livre : XML étape par étape
<xsl:apply-templates select = "catalogue/livre"/>
Livre : Réseaux Informatiques
<xsl:apply-templates select = "catalogue/livre/auteur"/>
Auteur : Young
</xsl:template>
Auteur : Bardot
<xsl:template match="livre">
Livre : <xsl:value-of select = "titre"/>
</xsl:template>

<xsl:template match="auteur">
Auteur : <xsl:value-of select = "."/>
</xsl:template>
</xsl:stylesheet>
32
Ordre d’application des transformations (6)
<?xml version="1.0" encoding="UTF-8"?>
<xsl:stylesheet version="1.0" xmlns:xsl= "http://www.w3.org/1999/XSL/Transform">
<xsl:output method = "text"/>
Mes livres
<xsl:template match = "/">
Mes livres
Livre : XML étape par étape
<xsl:apply-templates select = "catalogue/livre"/>
Auteur : Young
</xsl:template>
Livre : Réseaux Informatiques
<xsl:template match="livre">
Auteur : Bardots
Livre : <xsl:value-of select = "titre"/>
<xsl:apply-templates select = "auteur"/>
</xsl:template>

<xsl:template match="auteur">
Auteur : <xsl:value-of select = "."/>
</xsl:template>

</xsl:stylesheet>
33
Ordre d’application des transformations (7)
<?xml version="1.0" encoding="UTF-8"?>
<xsl:stylesheet version="1.0" xmlns:xsl= "http://www.w3.org/1999/XSL/Transform">
Mes livres
<xsl:output method = "text"/>
<xsl:template match = "/">
Livre : XML étape par étape
Mes livres
XML étape par étape
<xsl:apply-templates select = "catalogue/livre"/>
Auteur : Young
</xsl:template>
10.99
<xsl:template match="livre">
Livre : Réseaux Informatiques
Livre : <xsl:value-of select = "titre"/>
Auteur : Bardot
<xsl:apply-templates/>
20.50
</xsl:template>
Réseaux Informatiques
<xsl:template match="auteur">
Auteur : <xsl:value-of select = "."/>
</xsl:template>

</xsl:stylesheet>
34
Exercice
Produire à l’aide d’une feuille de style XSLT un document texte qui affiche le noms et numéro de téléphone de
chaque contact.

<?xml version="1.0" encoding="UTF-8"?>


<?xml-stylesheet type="text/xsl" <contact>
href="repertoireStyle.xsl"?> <nom>Toad</nom>
<repertoire> <telephone>676767</telephone>
<contact> </contact>
<nom>Mario</nom> <contact>
<telephone>232323</telephone> <nom>Peach</nom>
</contact> <telephone>898989</telephone>
<contact> </contact>
<nom>Luigi</nom> </repertoire>
<telephone>454545</telephone>
</contact>
35
Autres élément XSLT
Voici une liste de quelques éléments XSLT :
● <xsl:value-of select="unElement"> : est utilisé pour extraire un contenu XML spécifique;
● <xsl:for-each> : pour traiter un ensemble d’éléments;
● <xsl:sort> : pour trier le résultat obtenu;
● <xsl:if> : pour un traitement conditionnel;
● <xsl:choose>, <xsl:when> et <xsl:otherwise> : semblables à l’instruction if..else dans les
langages de programmation.

36
Autres élément XSLT
Exemples : Voir fichiers xml et xslt partagés sur la page du cours.

37

Vous aimerez peut-être aussi