6 XSLT
6 XSLT
6 XSLT
Transformation
Ahmed ZELLOU
[email protected]
ISI, ISRT & ISEM SupMTI, 2021-2022.
XSLT
XSL
3
@ A.ZELLOU, Technologie XML
XSLT
Introduction
n XSLT Permet de :
n Ajouter/supprimer des éléments et des attributs du fichier
résultant.
n Réorganiser les éléments dans le fichier résultant.
n Effectuer des tests sur le fichier source
n Boucler sur les éléments et les attributs
n Trier les éléments dans le fichier résultant.
n Créer des nouveaux éléments, attributs, variables,
commentaires,…
4
@ A.ZELLOU, Technologie XML
XSLT
Transformation XSLT
n Espace de noms
n xmlns:xsl="http://www.w3.org/1999/XSL/Transform"
7
@ A.ZELLOU, Technologie XML
XSLT
Transformation XSLT
9
@ A.ZELLOU, Technologie XML
XSLT
L'élément <xsl:template>
n Entrée
<note>enseigne <mat>XML</mat></note>
n Script
<xsl:template match="note">
<xsl:value-of select="."/>
</xsl:template>
n Arbre de Sortie
enseigne XML
11
@ A.ZELLOU, Technologie XML
XSLT
L'élément text()
n Entrée
<note>enseigne <mat>XML</mat></note>
n Script
<xsl:template match="note">
<xsl:value-of select="text()"/>
</xsl:template>
n Arbre de Sortie
enseigne
n Permet d’injecter des espaces, des tabulations ou
sortie
14
@ A.ZELLOU, Technologie XML
XSLT
L'élément <xsl:for-each>
17
@ A.ZELLOU, Technologie XML
XSLT
Les tests
n Filtrer le résultat
n Pour filtrer le résultat, on ajoute un critère pour
n Exemple :
n <xsl:for-each select="Biblio/Livre[auteur='Bob Sam']">
n ! = (Différent)
n < inférieur à
n > supérieur à
18
@ A.ZELLOU, Technologie XML
XSLT
Les tests
n Syntaxe
<xsl:if test="expression">
... résultat si le test est vrai ...
</xsl:if>
n Où le mettre ?
n A l'intérieur de l'élément <xsl:for-each> dans le fichier
XSL.
20
@ A.ZELLOU, Technologie XML
XSLT
L'élément <xsl:if>
Exemple
<?xml version="1.0" encoding="ISO-8859-1"?>
<xsl:stylesheet version="1.0"
xmlns:xsl="http://www.w3.org/1999/XSL/Transform">
<xsl:template match="/">
<html>
<body>
<h2>Ma Collection de Livres </h2>
<table border="1">
<tr bgcolor="#9acd32">
<th>Titre</th> <th>Auteur</th> Cet exemple ajoute un fond rose à la
</tr> colonne "Auteur" lorsque le prix du livre est
<xsl:for-each select="Biblio/Livres"> supérieur à 10.
<tr>
<td><xsl:value-of select="titre"/></td>
<xsl:if test="prix > 10">
<td bgcolor="#ff00ff"><xsl:value-of select="auteur"/></td>
</xsl:if>
<xsl:if test="prix ≤ 10">
<td bgcolor="#00ff00"><xsl:value-of select="auteur"/></td>
</xsl:if>
</tr>
</xsl:for-each>
22
</table> </body> </html>
@ A.ZELLOU, Technologie XML
</xsl:template> </xsl:stylesheet>
XSLT
L'élément <xsl:choose>
n Syntaxe
<xsl:choose>
<xsl:when test="expression">
... Éléments de sortie ...
</xsl:when>
<xsl:otherwise>
... Éléments de sortie ....
</xsl:otherwise>
</xsl:choose>
23
@ A.ZELLOU, Technologie XML
XSLT
L'élément <xsl:choose>
n html :
<xsl:output method="html">
25
@ A.ZELLOU, Technologie XML
XSLT
L'élément <xsl:element>
n Permet créer un élément (Transformation)
<xsl:template match="chemin">
<xsl:element name="nom">
<xsl:value-of select="valeur"/>
</xsl:element>
</xsl:template>
26
@ A.ZELLOU, Technologie XML
XSLT
L'élément <xsl:attribute>
n Permet de créer un attribut
<xsl:output method="xml" indent="yes"/>
<xsl:template match="chemin">
<xsl:element name="nom">
<xsl:value-of select="valeur"/>
<xsl:attribute name="nom">
<xsl:value-of select="valeur"/>
</xsl:attribute>
</xsl:element>
</xsl:template>
27
@ A.ZELLOU, Technologie XML
XSLT
L'élément { }
n Entrée
<a href="fic.txt"/>
n Script
<xsl:template match="a">
<b id="{@href}"/>
</xsl:template>
n Arbre de Sortie
<b id="fic.txt"/>
n Autre script
<xsl:template match="a">
<b><xsl:attribut name="id">
<xsl:value-of select="@href"/>
</xsl:attribut></b> 28
</xsl:template> @ A.ZELLOU, Technologie XML
XSLT
L'élément name()
n Entrée
<note>enseigne
<mat>XML</mat>
</note>
n Script
<xsl:template match=".">
<xsl:value-of select="name()"/>
</xsl:template>
n Arbre de Sortie
note
29
@ A.ZELLOU, Technologie XML
XSLT
L'élément <xsl:variable>
n Déclaration de variable 1
<xsl:variable name="backcolor" select="'#FFFFCC'" />
n Déclaration de variable 2
<xsl:variable
name="backcolor">#FFFFCC</xsl:variable>
31
@ A.ZELLOU, Technologie XML
XSLT
Passage de paramètres
<xsl:stylesheet>
<xsl:param name="dir" select="'mondir'"/>
...
</xsl:stylesheet>
n Equivalent à
dir='monDir'
32
@ A.ZELLOU, Technologie XML
XSLT
L'élément <xsl:number>
33
@ A.ZELLOU, Technologie XML
XSLT
L'élément <xsl:message>
n Déclaration
<xsl:message>
code = <xsl:value-of select="$code"/>
</xsl:message>
n La Sortie
code = 25
34
@ A.ZELLOU, Technologie XML
XSLT
L'élément <xsl:copy-of>
n Crée une copie d’un noeud
<?xml version="1.0" encoding="ISO-8859-1"?>
<xsl:stylesheet version="1.0" xmlns:xsl="http://www.w3.org/1999/XSL/Transform">
<xsl:variable name="header">
<tr bgcolor="#9acd32">
<th align="left">Title</th>
<th align="left">Artist</th>
</tr>
</xsl:variable>
<xsl:template match="/">
<html>
<body>
<h2>Ma Collection de livres</h2>
<table border="1">
<xsl:copy-of select="$header"/>
<xsl:for-each select="Biblio/Livre/titre">
35
@ A.ZELLOU, Technologie XML
XSLT
<xsl:comment> & <xsl:import>
n Pour sortir les commentaires
<xsl:template match="comment()">
<xsl:comment>
<xsl:value-of select="."/>
</xsl:comment>
</xsl:template>
n Modulariser sa stylesheet
n <xsl:include>
n Inclut textuellement la stylesheet référencée.
n <xsl:include href = "uri-reference" />
n Même niveau de précédence : les templates se
comportent comme ceux de la stylesheet.
37
@ A.ZELLOU, Technologie XML
XSLT
Divers
n <xsl:key>
n permet d'associer un identifiant à un nœud
n <xsl:decimal-format>
n permet de définir un modèle de représentation des
nombres décimaux (utile si internationalisation)
n <xsl:attribute-set>
n déclare un ensemble d'attributs réutilisables
38
@ A.ZELLOU, Technologie XML
XSLT
Les Templates
n Récursive
<xsl:apply-templates>
n Déclaration
<xsl:template name="...">
...
</xsl:template>
n Appel
<xsl:call-template> ou <xsl:apply-templates>
39
@ A.ZELLOU, Technologie XML
XSLT
L'élément <xsl:apply-templates>
n L'élément <xsl:apply-templates> applique un modèle.
40
A.ZELLOU
XSLT
Les Templates
n Exemple
<xsl:template name="navbar">
<a href="index.htm">Home</a> |
<a href="help.htm">Help</a> |
<a href="toc.htm">Contents</a>
</xsl:template>
<xsl:template match="mainblock">
<body>
<xsl:call-template name="navbar"/>
<xsl:apply-templates/>
<xsl:call-template name="navbar"/>
</body>
</xsl:template>
41
@ A.ZELLOU, Technologie XML
XSLT
L'élément <xsl:apply-templates>
n Prenons l'exemple suivant:
<?xml version="1.0" encoding="ISO-8859-1"?>
<xsl:stylesheet version="1.0" Ce qui donne comme résultat
xmlns:xsl="http://www.w3.org/1999/XSL/Transform">
<xsl:template match="/">
<html>
<body>
<h2>Ma Collection de Livres </h2>
<xsl:apply-templates/>
</body>
</html>
</xsl:template>
<xsl:template match="catalogue/cd">
<p>
<xsl:apply-templates select="titre"/>
<xsl:apply-templates select="artiste"/>
</p>
</xsl:template>
<xsl:template match="titre">
Title: <span style="color:#ff0000">
<xsl:value-of select="."/></span>
<br />
</xsl:template>
<xsl:template match="artiste">
Artist: <span style="color:#00ff00">
<xsl:value-of select="."/></span>
42
<br />
</xsl:template></xsl:stylesheet> A.ZELLOU
XSLT
XSLT - référence
Élément Description IE FF
apply-imports Applique une règle modèle à partir d'une feuille de style importé 6.0 1.0
apply-templates Applique une règle modèle à l'élément courant ou au nœud fils de 5.0 1.0
l'élément courant
attribute Ajoute un attribut 5.0 1.0
attribute-set Définit un ensemble nommé d'attributs 6.0 1.0
call-template Appelle un modèle nommé 6.0 1.0
choose Utilisé en conjonction avec <when> et <otherwise> pour exprimer 5.0 1.0
des tests conditionnels multiples
comment Crée un nœud de commentaire dans l'arbre résultat 5.0 1.0
copy Crée une copie du noeud courant (sans nœud fils et sans attributs) 5.0 1.0
copy-of Crée une copie du noeud courant (avec nœud fils et attributs) 6.0 1.0
decimal-format Définit les caractères et les symboles à utiliser pour convertir les 6.0 1.0
nombres en chaînes de caractères avec la fonction format-number()
element Crée un nœud d'élément dans le document résultant 5.0 1.0
fallback Spécifie un code alternatif à exécuter si le processeur ne supporte pas 6.0
un élément XSLT 43
A.ZELLOU
XSLT
XSLT - référence
Élément Description IE FF
for-each Boucle sur chaque noeud dans un ensemble de noeud spécifié 5.0 1.0
if Contient un modèle qui sera appliqué si une condition spécifiée est 5.0 1.0
vraie
import Importe le contenu d'une feuille de style dans une autre. Remarque: 6.0 1.0
Une feuille de style importée est moins prioritaire que la feuille de
style principale
include Inclut le contenu d'une feuille de style dans une autre. Remarque: Une 6.0 1.0
feuille de style incluse à la même priorité que la feuille de style
principale
key Déclare une clef nommée qui peut être utilisé dans la feuille de style 6.0 1.0
avec la fonction key ()
message Écrit un message à la sortie (utilisé pour signaler les erreurs) 6.0 1.0
namespace-alias Remplace un espace de noms dans la feuille de style par un autre 6.0
espace de noms dans le résultat
number Détermine la position du noeud courant (retourne un nombre) 6.0 1.0
otherwise Indique une action par défaut pour l'élément <choose> 5.0 1.0
44
output Définit le format du document de résultat 6.0 1.0
A.ZELLOU
XSLT
XSLT - référence
Élément Description IE FF
param Déclare un paramètre 6.0 1.0
preserve-space Définit les éléments pour lesquels les espaces doivent être préservées 6.0 1.0
processing- Écrit une instruction de traitement 5.0 1.0
instruction
sort Trie 6.0 1.0
strip-space Définit les éléments pour lesquels les espaces blancs doivent être 6.0 1.0
supprimés
stylesheet Définit l'élément racine de la feuille de style 5.0 1.0
template Règles à appliquer quand un noeud spécifié est trouvé 5.0 1.0
text Ecrit un texte littéral 5.0 1.0
transform Définit l'élément racine de la feuille de style 6.0 1.0
value-of Extrait la valeur d'un nœud sélectionné 5.0 1.0
variable Déclare une variable 6.0 1.0
when Spécifie une action pour l'élément <choose> 5.0 1.0
45
with-param Définit la valeur d'un paramètre à passer à un modèle 6.0 1.0
A.ZELLOU
XSLT
Nom Description
current() Retourne le noeud courant
document() Utilisé pour accéder aux nœuds dans un document XML externe
element- Teste si un élément est supporté par le processeur XSLT
available()
format-number() Convertit un nombre en chaîne de caractères
function- Teste si une fonction est supportée par le processeur XSLT
available()
generate-id() Retourne une chaîne de caractères qui identifie de manière unique un
noeud spécifié
key() Retourne un ensemble de nœuds on utilisant l'index spécifié par un élément
<xsl:key>
system-property() Retourne les propriétés du système
unparsed-entity- Retourne l'URI d'une entité non analysée
uri() 46
A.ZELLOU
XSLT
Conclusion
n XSLT est un langage pour transformer des documents XML en
XHTML ou en d'autres documents XML.
n Le standard le plus important de XSL
n Utilise XPath pour naviguer dans des documents XML
n Permet d’afficher, masquer, réorganiser, trier, effectuer des tests
sur les éléments et des attributs du fichier résultant.
n XSLT est un vrai langage de programmation
n XSLT n’a pas son équivalent pour la transformation d’arbre
n Mais, la mise au point de programmes XSLT peut s’avérer
« délicate »
47
A.ZELLOU
Merci