Mise en forme à l'aide de
feuilles de style XSL
(XSLT)
1
XSL
XSL signifie eXtensive Stylesheet Langage,
ou langage extensible de feuille de style.
XSLT signifie eXtensible Stylesheet
Langage Transformation.
2
XSL
XSL est un:
- Un langage de feuille de style.
- Un très puissant manipulateur d'éléments.
- Il permet de transformer un document
XML source en un autre, permettant ainsi,
à l'extrême, d'en bouleverser la structure.
3
XSL
Pourquoi transformer ?
1. visualiser ces données du
document Xml
2. créer un nouveau
document visualisable (par
exemple au format HTML) à
partir du document XML
(arbre XML sera transformé
en arbre HTML).
4
XSL
Un fichier XSL étant un fichier XML, il doit
respecter les normes de syntaxe de ce
format.
5
Structure d'un document XSL
La structure de base d'un document XSL commence par
un prologue, puis un élément <xsl:stylesheet pouvant
contenir quelques attributs, notamment une déclaration
d'espace de noms ainsi que le numéro de version.
L'exemple suivant présente un document XSL :
<?xml version="1.0" encoding="UTF-8"?>
<xsl:stylesheet xmlns:xsl="[Link]
version="1.0"> …
</xsl:stylesheet>
6
Structure d'un document XSL
L'élément <xsl:stylesheet> est l'élément racine du
document XSL.
C'est lui qui contient tous les modèles, y compris celui
qui est associé à la racine du document XML, modèle
que l'on note <xsl:template match="/">. L'attribut
match="/" indique que ce modèle s'applique à la racine
du document XML.
<?xml version="1.0" encoding="UTF-8"?>
<xsl:stylesheet xmlns:xsl="[Link]
version="1.0">
<xsl:template match="/">
…
</xsl:template>
</xsl:stylesheet>
7
Exemple
Exemple d'un document XML lié à une feuille de style XSL simple :
<?xml version="1.0" encoding="ISO-8859-1"?>
<?xml-stylesheet type="text/xsl" href="[Link]"?>
<bouteille xmlns:xsi ="[Link]
xsi:noNamespaceSchemaLocation="[Link]">
<marque>IFRI</marque>
<composition>calcium 71mg/l, magnésium 5,5mg/l, chlorure 20mg/l,
nitrate 1mg/l, traces de fer. </composition>
<code_barre>3274080005003</code_barre>
<contenance>150cl</contenance>
<ph>7.45</ph>
<source>
<ville>IFRI</ville>
<departement> Bejaia </departement>
</source>
</bouteille>
8
Exemple
Et voici la feuille de style XSL associée :
<?xml version="1.0" encoding="UTF-8"?>
<xsl:stylesheet version="1.0" xmlns:xsl="[Link]
<xsl:template match="/">
<html>
<head>
<title>Exemple de sortie HTML</title>
</head>
<body>
<h1>Bouteille de marque <xsl:value-of select="/bouteille/marque"/></h1>
<h2>Composition:</h2>
<p><xsl:value-of select="/bouteille/composition"/></p>
<h2>Lieu d'origine:</h2>
<p>Ville de <b><xsl:value-of select="/bouteille/source/ville"/></b>, dans le
département <b><xsl:value-of select="/bouteille/source/departement"/></b></p>
<h2>Autres informations</h2>
<ul>
<li>Contenance: <xsl:value-of select="/bouteille/contenance"/></li>
<li>pH: <xsl:value-of select="/bouteille/ph"/></li>
</ul>
</body>
</html>
</xsl:template>
</xsl:stylesheet>
9
Valeur d'une expression
Le document résultat contient deux sortes d'informations:
1. des balises + chaînes de caractères informatives (<h2>Liste des livres</h2>)
2. des données du document XML ou calculées à partir d'elles
Donc il faut un moyen d'accéder aux données du document XML
<xsl:value-of select="expression XPath" />
Cet élément :
• évalue l'expression XPath,
• convertit son résultat en une chaîne de caractères,
• intègre la chaîne de caractères dans le document résultat
Par exemple le code XSLT
<td><xsl:value-of select="./@cote"/></td>
<td><xsl:value-of select="./titre"/></td>
<td>681.321 A9-CHA</td>
<td>Programmation HTML et JavaScript</td>
10
règle
C’est quoi une "règle" en XSLT ?
En XSLT, une règle est un bloc de transformation qui décrit comment traiter un élément
XML particulier.
Cette règle est définie avec l’élément :
<xsl:template match="motif">
<!-- Ce que tu veux produire en sortie -->
</xsl:template>
Une règle en XSLT = un modèle + une action
2. L’action (le corps de la règle)
1. Le modèle (le "match") C’est ce que on veut faire ou produire quand
C’est ce qui définit à quel élément l’élément est trouvé.
XML s’applique la règle. Cela peut être :
match="élément_xml" •Afficher du texte
•Générer du HTML
<xsl:template match="produit"> •Appliquer d'autres règles
•Extraire des valeurs...
<p>
<xsl:value-of select="nom"/>
</p> 11
Définition et déclenchement de règles
Définition d'une règle
Chaque règle est définie par l'élément xsl:template
xsl:template : est utilisé pour définir des modèles de transformation.
La valeur de l'attribut match désigne les nœuds aux quels
<xsl:template match="motif">
la règle s’applique (à tous les nœuds qui satisfont au motif)
Corps de la règle
le corps (ce qu'elle fait) soit à produire un fragment du
</xsl:template>
document résultat, soit à appeler d'autres règles.
se déclenche chaque fois que les chemins sur
<xsl:template match="livre"> ... </xsl:template> lesquels elle est lancée aboutissent à un
élément livre.
<xsl:template match="/"> ... </xsl:template> se déclenche pour l'élément racine.
12
Définition et déclenchement de règles
Déclenchement des règles
<xsl:apply-templates select="expression XPath"/> Appliquer une (ou plusieurs) règle(s)
C’est une instruction qui dit au moteur :
"Applique la ou les règles (<xsl:template>) aux éléments enfants."
L'élément xsl:apply-templates déclenche toutes les règles possibles sur les nœuds
spécifiés par l'expression Xpath
déclenche des règles sur tous les
<xsl:apply-templates select="//livre"/> éléments livre du document XML.
L’élément < xsl : apply-templates > est utilisé dans la balise <xsl:template/>
Le "moteur" XSLT cherche d’abord à exécuter la première règle qu’il trouve pour l’élément
racine. Cette règle normalement fait appel à d’autres règles :
• soit implicitement : <xsl:apply-templates/> Applique toutes règles
• soit en faisant appel à des règles précises: <xsl:apply-templates select="regle"/>
Chacune des sous règles qui peuvent s’appliquer sera exécutée dans l’ordre et ainsi de suite
13
Définition et déclenchement de règles
<?xml version="1.0" encoding="UTF-8"?>
<stock> <xsl:stylesheet version="1.0"
<produit> xmlns:xsl="[Link]
<nom> Livre </nom> <xsl:template match="/stock"><!-- Règle principale : point d’entrée -->
<prix monnaie="Dinar"> 50 </prix> <html>
<comment> coment</comment> <body>
</produit> <h2>Liste des produits</h2>
<produit> <ul>
<nom> CD </nom> <xsl:apply-templates select="produit"/>
<prix monnaie="Dollar"> 23 </prix> <xsl:apply-templates/>
</produit> </ul>
</stock> </body>
</html>
</xsl:template>
<xsl:template match="produit"><!-- Règle pour chaque produit -->
Métaphore simple : <li>
<xsl:apply-templates> = Une table des
<xsl:value-of select="nom"/> :
matières qui dit : "Va lire les chapitres
suivants".
<xsl:value-of select="prix"/>
<xsl:text> </xsl:text>
<xsl:template> = Les chapitres du livre, <xsl:value-of select="prix/@monnaie"/>
chacun expliquant quelque chose. </li>
</xsl:template>
</xsl:stylesheet>
14
Autres composants du langage XSLT
Instructions de contrôle
Répétitive
La répétition s'applique successivement à chaque noeud de l'ensemble désigné
par l'expression.
<xsl:for-each select="expression"> corps de règle
</xsl:for-each>
<!-- Itération sur tous les produits -->
<xsl:for-each select="produit">
<li>
<xsl:value-of select="nom"/> : <xsl:value-of select="prix"/>
</li>
</xsl:for-each>
ou
<xsl:for-each select="produit[prix > 20 and prix != 50]">
(!= (not equal); < less than; > greater than)
15
Autres composants du langage XSLT
Instructions de contrôle
The <xsl:sort> element is used to sort the output. Add an <xsl:sort> element inside
the <xsl:for-each> element
<xsl:for-each select="produit"> The select attribute indicates what
<xsl:sort select="prix" order="asc"/> XML element to sort on.
<li>
<xsl:value-of select="nom"/> : <xsl:value-of select="prix"/>
</li>
</xsl:for-each>
16
Autres composants du langage XSLT
Instructions de contrôle
Instruction conditionnelle
<xsl:if test="expression">
...some output if the expression is true...
</xsl:if>
To add a conditional test, add the <xsl:if> element inside the <xsl:for-each>
<xsl:for-each select="produit">
<li>
<xsl:value-of select="nom"/> : <xsl:value-of select="prix"/>
<!-- Condition pour afficher un message spécial si le prix > 20 --
>
<xsl:if test="prix > 20">
<br/><strong>Ce produit coûte plus de 20 !</strong>
</xsl:if>
</li>
</xsl:for-each>
17
Autres composants du langage XSLT
Instructions de contrôle
Instruction à choix multiples
<xsl:choose>
<xsl:when test="expression">
... some output ... <xsl:for-each select="produit">
</xsl:when>
<xsl:value-of select="nom"/> : <xsl:value-of select="prix"/>
<xsl:otherwise>
... some output .... <!-- Structure conditionnelle avec xsl:choose -->
</xsl:otherwise> <xsl:choose>
</xsl:choose> <xsl:when test="prix > 40">
<br/><strong>C'est un produit cher !</strong>
The <xsl:choose> element is </xsl:when>
used in conjunction with <xsl:when test="prix > 20">
<xsl:when> and <br/><strong>C'est un produit de prix moyen.</strong>
<xsl:otherwise> to express </xsl:when>
multiple conditional tests. <xsl:otherwise>
<br/><strong>C'est un produit bon marché.</strong>
</xsl:otherwise>
</xsl:choose>
</xsl:for-each
18
XSLT Examples
[Link]
19