Un document XSL étant un document XML, il commence obligatoirement par la balise suivante:
<?xml version="1.0" encoding="ISO-8859-1"?>
D'autre part, toute feuille de style XSL est comprise entre les balises <xsl:stylesheet ...> et </xsl:stylesheet>.
La balise xsl:stylesheet encapsule des balises xsl:template définissant les transformations à faire subir à certains éléments du document XML.
<?xml version="1.0" encoding="ISO-8859-1"?>
<xsl:stylesheet
xmlns:xsl="http://www.w3.org/TR/WD-xsl"
xmlns="http://www.w3.org/TR/REC-html40"
result-ns="">
<xsl:template ... >
<!-- traitements à effectuer -->
</xsl:template >
</xsl:stylesheet>
Une feuille de style XSL (enregistré dans un fichier dont l'extension est .xsl) peut être liée à un document XML (de telle manière à ce que le document XML utilise la feuille XSL) en insérant la balise suivante au début du document XML:
<?xml version="1.0" encoding="ISO-8859-1"?> <?xml-stylesheet href="fichier.xsl" type="text/xsl"?>
Les template rules sont des balises XSL permettant de définir des opérations à réaliser sur certains éléments du document XML utilisant la page XSL, c'est-à-dire généralement de transformer un tag XML en au moins un tag HTML (généralement plusieurs).
Ainsi le tag XML suivant:
<personne> <nom>Pillou</nom> <prenom>Jean-François</prenom> </personne> <personne> <nom>VanHaute</nom> <prenom>Nico</prenom> </personne> <personne> <nom>Andrieu</nom> <prenom>Seb</prenom> </personne>
pourra être transformé en les tags HTML suivants:
<ul> <li>Pillou - Jean-François</li> <li>VanHaute - Nico</li> <li>Andrieu - Seb</li> </ul>
L'attribut "match" de la balise <xsl:template> permet de définir (grâce à la notation XPath) le ou les éléments du document XML sur lesquels s'applique la transformation.
La notation Xpath permet de définir des patterns, c'est-à-dire des chaînes de caractères permettant de repérer un noeud dans le document XML. Les principaux patterns sont :
|
Pattern |
Exemple |
Signification |
|---|---|---|
|
|
Gauche|Milieu |
Indique une alternative (un noeud ou bien l'autre (ou les deux)) |
|
/ |
personne/nom |
Chemin d'accès aux éléments (personne/bras/gauche) |
|
* |
* |
Motif "joker" désignant n'importe quel élément |
|
// |
//personne |
Indique tous les descendants d'un noeud |
|
. |
. |
Caractérise le noeud courant |
|
|
|
Désigne le noeud parent |
|
@ |
@valeur |
Indique un attribut caractéristique |
La transformation peut être réalisée :
<?xml version="1.0" encoding="ISO-8859-1"?>
<xsl:stylesheet
xmlns:xsl="http://www.w3.org/TR/WD-xsl"
xmlns="http://www.w3.org/TR/REC-html40"
result-ns="">
<xsl:template match="/">
<HTML>
<HEAD>
<TITLE>Titre de la page</TITLE>
</HEAD>
<BODY BGCOLOR="#FFFFFF">
<xsl:apply-templates/>
</BODY>
</HTML>
</xsl:template >
<xsl:template match="personne" >
<ul>
<li>
<xsl:value-of select="nom"/>
-
<xsl:value-of select="prenom"/>
</li>
</ul>
</xsl:template >
</xsl:stylesheet>
Voici la signification de cette feuille XSL :