Vous êtes sur la page 1sur 23

XSLT

eXtensible Stylesheet Language: Transformations

Langage de feuilles de style extensible :


Transformations
XSL – Feuilles de style pour XML

 HTML : langage de présentation


 Balises prédéfinies dans la DTD et dont le sens et l’affichage
sont facilement interprétés par les navigateurs : <p>, <h1>…
 Présence d’éléments de mise en forme : <b>, <i>…
Affichage de l’information dans les navigateurs en
format convivial

 XML : langage de description de données


 Balisage libre  non interprétable par les navigateurs
 Absence de tout élément de mise en forme
Pas d’affichage convivial (sur le Web !)

2
XSL – Feuilles de style pour XML?

Un document XML tel que :


<?xml version="1.0"?>
<exemple>
<voeux>Bonne année</voeux>
</exemple>

est affiché dans le navigateur IE uniquement sous le format suivant :

3
XSL – Feuilles de style pour XML

 L’affichage d’un document XML nécessite un mécanisme de


description du format d’affichage désiré.
 Deux possibilités :
 Le langage CSS (Cascading style sheet)
 (voir librairie-valide.xml et lib.css)
 Mais CSS est défini surtout pour afficher des documents
HTML
 Le langage XSL (eXtensible Style sheet Language)
 Plus performant que CSS.

 XSL est à XML ce qu’est CSS à HTML

4
XSL – Plus qu’un langage de style

 XSL est constitué de 3 langages :


Validés par le W3C depuis novembre 1999

 XSLT (T pour Transformations) :


pour la transformation des documents XML
Ajout de XSL-FO depuis octobre 2001

 Xpath : pour la définition et l’adressage des


différentes parties d’un document XML

 XSL-FO (FO pour Formatting Objects) :


pour le formatage des documents XML

5
XSL – Plus qu’un langage de style

 XSL :
 Langage de feuilles de style pour XML
 Langage de programmation implémenté comme sémantique XML.
 Issu de DSSSL (Document Style Semantics and Specification
Language),
 Norme internationale ISO 10179 de feuilles de style pour les documents
SGML (introduite dans les années 90).
 XSLT :
 XSLT, version 1.0 : http://www.w3.org/TR/1999/REC-xslt-19991116
 "W3C Recommendation" depuis 16 novembre 1999
 XSLT, version 1.1 : http://www.w3.org/TR/xsl
 "W3C Recommendation" depuis 05 déccembre 2006
 XSLT, version 2.0 : http://www.w3.org/TR/xslt20/
 "W3C Recommendation" depuis 23 janvier 2007
 XSLT, version 3.0 :

https://www.w3.org/TR/2017/REC-xslt-30-20170608/
 "W3C Recommendation" depuis 08 juin 2017

6
XSL – Plus qu’un langage de style

 C’est le langage de feuilles de style qui permet:


 Le formatage des données XML pour leur publication sur le Web
 La transformation d’un document XML en un autre document xml,
HTML ou texte).
 La prise en compte de différents types de supports et de média
d’affichage des données XML : screen, print…
 Le traitement d’un ensemble de documents

(multiple-Input XML documents).


 Dans ce cas, un document XML en tant qu’input principal est associé à
une feuille XSL dans laquelle d’autres documents XML sont référencés
en tant qu’input.
 La modularisation d’un ensemble de feuilles de style XSL.
 Dans une feuille de style principale, on fait appel à d’autres feuilles de
style grâce à l’élément XSLT import ou include

7
XSL – quelques règles de syntaxe

 Étant une application XML, la syntaxe de XSLT reprend toutes


les règles de syntaxe de XML (bien formé)

 Rappel de quelques-unes de ces règles :


 Sensibilité des balises à la casse
 Toutes les balises s’écrivent en minuscule

(comme dans XHTML)


 Fermeture obligatoire de toute Balise ouverte
 Ceci s’applique même aux balises vides
 Respect des règles d’imbrication des balises
 Utilisation des guillemets pour délimiter les valeurs des
attributs
 Absence de toute erreur de syntaxe
 Le document XSL doit être bien formé (Well-formed)

8
XSL – quelques fonctionnalités

Feuille de style XSL

Input tree Output tree


Document XML Résultat :
Processeur XSLT
XML, HTML, Text

9
XSLT – quelques fonctionnalités

l Une feuille de style XSLT est constituée d'un ensemble de


commandes (règles) qu'une application appelée processeur ou
engin de transformation XSLT (MSXML ou Saxon) applique
sur un arbre source (input tree) pour produire un arbre résultat
(output tree).

l Chaque commande XSLT décrit comment un élément ou un


groupe d'éléments du document source sera transformé.

l Le document produit à la sortie (output) est soit:


l
un autre document XML (dont le vocabulaire peut être
différent du document XML source) ou HTML
l
ou n’importe quel type de document basé sur le format texte
À défaut de le spécifier, le produit de la transformation sera un
document HTML (version 4).
http://xmlfr.org/w3c/TR/xslt

10
Modèle de traitement

 L'arbre résultat est construit par traitement du noeud racine.


 Une liste de noeuds sources est traitée par rajout successif des
arbres résultants du traitement successif de chaque noeud de la
liste.
 Un noeud est traité en trouvant toutes les règles modèle dont les
motifs correspondent au noeud, et en choisissant le meilleur
parmi elles; la règle modèle retenue est alors instanciée en
considérant le noeud comme noeud courant et la liste de noeuds
source comme liste courante de noeuds.
 Typiquement, un modèle contient des instructions traitant une
liste de noeuds source sélectionnés.
 Le processus de correspondance, instanciation et sélection se
poursuit récursivement et se termine lorsque aucun nouveau
noeud source n'est sélectionné pour traitement.
http://xmlfr.org/w3c/TR/xslt

11
Motifs

 Les règles modèle identifient les noeuds auxquels


elles s'appliquent en utilisant un motif.
 Un motif spécifie un ensemble de conditions sur un
noeud.
 Un noeud qui satisfait les conditions correspond au motif;
 un noeud qui ne satisfait pas les conditions ne correspond
pas au motif.
 La syntaxe pour les motifs est un sous-ensemble de la
syntaxe pour les expressions (XPATH).
 En particulier, les chemins de localisation soumis à
certaines restrictions peuvent être utilisés comme des
motifs.
http://xmlfr.org/w3c/TR/xslt/#rules

12
XSLT – quelques fonctionnalités

 XSLT peut définir comment un document XML doit être affiché en le


transformant dans un format compréhensible par un navigateur.
 Un tel format est le format (X)HTML.

 Pour cela, chaque élément XML est transformé en un élément (X)HTML

 XSLT peut aussi créer des éléments nouveaux dans le fichier résultat
(output tree), ou encore supprimer des éléments du document source
(input tree)

 XSLT peut réaliser plusieurs autres types de transformation :


 réarrangement,
 Tri,
 filtrage des éléments selon certains critères,
 choix de quelques éléments et de leur transformation en s’appuyant sur des
tests conditionnels,
 etc.

13
Structure d’un document XSLT

Voir exemple voeux.xsl qui a permis de générer voeux.xml


Un document XSL simple est composé des éléments suivants :
 <?xml version="1.0"?>
Étant dérivé de XML, il est normal qu’un document XSL commence
par la déclaration de document XML
 <xsl:stylesheet
version="2.0" xmlns:xsl="
http://www.w3.org/1999/XSL/Transform/">
Sur la seconde ligne d’un document XSL, on déclare que ce
document est une feuille de style (XSLT).
L'élément racine <xsl:stylesheet> comporte deux attributs, soit:
- version : qui réfère à la version de XSLT.
- xmlns:xsl : qui fait référence au namespace (espace nominatif) utilisé
(xslt) et à son adresse URL "http://www.w3.org/1999/XSL/Transform

14
Structure d’un document XSLT

Ce qui suit constitue le contenu de l’élément racine


 <xsl:template match="/">

L'élément xsl:template constitue une règle modèle.


Cet élément spécifie un modèle dans lequel quelques éléments
(noeux) du fichier XML seront transformés sous une forme que le
navigateur pourra interpréter et afficher.
Ces noeux sont déterminés par un motif (valeur de l’attribut
match="/">).
 Ceci nous rappelle les sélecteurs CSS: indiquer à quel
élément ou groupe d'éléments la règle s'appliquera.

Dans notre exemple, la barre oblique entre guillemets "/" signale que
sont concernées toutes les balises du document XML associé et ceci à
partir de la racine (root).

15
Structure d’un document XSLT

 À l'intérieur de l'élément <xsl:template match="/"> </xsl:template> :


 Les commandes XSLT (tout ce qui débute par la chaîne xsl:)
constituent des instructions à l'intention de l'engin (processeur) XSLT.
 Le contenu n'appartenant pas au dialecte XSLT sera copié et versé
dans le document résultant.

 Il y a 2 principales commandes XSLT qui permettent à l’engin de


récupérer du contenu à partir du document sources :

 xsl:value-of : le contenu textuel de l’élément est inséré dans le


document généré sans traitement supplémentaire

 xsl:apply-templates :
 les éléments concernés peuvent subir un traitement supplémentaire et
pour cela un nouveau gabarit (template) est créé pour chaque élément.
Il sera créé à l’extérieur du premier template.
 Sinon, le contenu textuel de l’élément en question sera versé

16
Structure d’un document XSLT
 <html>
 <body>
Début de la partie HTML qui servira de support pour l’affichage du document
dans le navigateur.
Diverses balises HTML et XSL, par exemple :
 <xsl:apply-templates select="exemple/voeux"/>
Cette instruction indique à l’engin XSLT qu'il doit maintenant traiter à cet endroit
l’élément voeux, enfant de l’élément exemple.
La balise <xsl:apply-templates> est fréquemment utilisée car elle permet de
sélectionner un élément du fichier XML associé pour le traiter dans le fichier
XSL.
À l’aide de l’attribut select, on détermine le chemin d’accès vers la balise XML
souhaitée (ici, l’élément voeux).
 <hr />
Ici, c’est un élément HTML <hr /> qui est inséré.
 </html>
 </body>
Fin de la partie en HTML
 </xsl:template>
Fermeture de la balise de template (modèle). C’est la fin du "output tree".

17
Structure d’un document XSLT

 L’instruction <xsl:apply-templates select="exemple/voeux"/> 


Implique que l’engin XSLT doit appliquer un traitement supplémentaire à l’élément
vœux (fils de l’élément exemple). 
Pour cela, un nouveau modèle (template) est créé pour spécifier les règles de
traitement de cet élément :
<xsl:template match="voeux"> 
<xsl:value-of select="."/>
<xsl:text>2022</xsl:text> 
</xsl:template>
<xsl:value-of select="." /> permet de verser le contenu textuel de l’élément
voeux. 
Et <xsl:text>2023</xsl:text> permet d’insérer le contenu textuel "2020"
Ce versement s’effectue à la position dans laquelle est insérée la commande
<xsl:apply-templates select="exemple/voeux"/>. (juste avant le <hr />)

 </xsl:stylesheet>
Fermeture de la balise de déclaration de document XSL. 
C’est la fin du document XSL.

18
Structure d’un document XSLT

 Pour que cette feuille de style XSL ait un effet sur le


fichier XML qu’on veut traiter, il faut y faire appel dans
le fichier XML
 Pour cela, on ajoute, après la déclaration XML de ce
fichier, l’instruction de traitement suivante :
<?xml-stylesheet type="text/xsl" href="voeux.xsl"?>

Cette balise indique au processeur qu’une feuille de style (de type


XSL) est associée au fichier XML et qu’il doit aller la chercher à
l’adresse indiquée par l’attribut href.

19
XSLT – quelques exemples

 Premier exemple :
Voir exemple xsl : biblio-1.xsl
Voir exemple xml : biblio-1.xml

 Afficher toutes les données :


<xsl:for-each select="bibliotheque/livre">
Voir exemple xsl : biblio-2a.xsl
Voir exemple xml : biblio-2a.xml

20
XSLT – quelques exemples

 Trier :
<xsl:for-each select="bibliotheque/livre">
<xsl:sort select="titre" order="ascending" />
Voir exemple xsl : biblio-2b.xsl
Voir exemple xml : biblio-2b.xml
 Filtrer :
<xsl:for-each select="bibliotheque/livre[auteur='Molière']">
Voir exemple xsl : biblio-3.xsl
Voir exemple xml : biblio-3.xml

21
XSLT – quelques exemples
 Choisir : <xsl:if test="@type='P'">
Voir exemple biblio-4.xsl
Voir exemple biblio-4.xml

 Nous voudrions produire une liste des livres avec, pour chaque
livre, une mention "Policier" ou "Fiction" selon le type du livre.
Pour ce faire, nous disposons de l'attribut type associé à
chaque élément livre qui contient soit la valeur "p" pour le type
Policier, soit "f" pour le type Fiction.
 Remarquez que l'attribut test contient l'expression:
@type='P'
@type='F'
@type='T'
où l'on compare la valeur de l'attribut type à la chaîne de
caractères 'P', 'F' ou 'T'.
 Il est à noter que l'élément xsl:if est utilisé seulement à l'intérieur
d'un template.

22
Quelques références
 [Comprendre XSLT]
 Lazinier, Emmanuel. Comprendre XSLT.
http://www.chez.com/xml/xslt/
 http://xml.chez.com/liens/liens-en-3.htm#XSL
 Miloslav Nic. Tutoriel XSLT (Traduit par Eric Le Carre)

http://www.zvon.org/xxl/XSLTutorial/Output_fre/index.html
 w3schools. XSLT Elements Reference.
 https://www.w3schools.com/xml/xsl_languages.asp
 [XSLT 1.0]
 W3C. XSL Transformations (XSLT) Version 1.0. W3C
Recommendation 16 November 1999.
http://www.w3.org/TR/xslt
 [XSLT 1.0 (fr)]
 W3C. Transformations XSL (XSLT) Version 1.0. W3C
Recommendation 16 November 1999 (traduction française).
http://xmlfr.org/w3c/TR/xslt/
 [XSLT 2.0]
 W3C. XSL Transformations (XSLT) Version 3.0

W3C Recommendation 08 June 2017


https://www.w3.org/TR/2017/REC-xslt-30-20170608/

23

Vous aimerez peut-être aussi