Académique Documents
Professionnel Documents
Culture Documents
+
FST SETTAT / IT-LEARNING : ZKIADHIRI
XML
Transformations XSLT
2011
#1
XSLT : Introduction
XSLT : Dfinition
XSLT est un langage de transformations dz fichiers XML
XSLT est crit en XML XSLT permet la gnration dautres contenus partir dun fichier XML, par exemple:
du HTML
du XML
SVG
XSLT : Utilisation
Mcanisme :
Dfinir des rgles qui disent comment transformer un "noeud" (element, tag) et ses sous-lments Organiser lapplication de ces rgles
XSLT : Utilisation
Dfinition dun fichier XSLT
<xsl:stylesheet version="1.0" xmlns:xsl="http://www.w3.org/1999/XSL/Transform"> .... </xsl:stylesheet>
les fichiers XSLT ont lextension *.xsl xmlns:xsl="URL" dfinit un "namespace" pour les balises XSL Les balises XSL commencent par "xsl: "
XSLT : Utilisation
Association dun fichier XSLT un fichier XML
Il existe dautres mthodes dassociations. Dans un traitement "batch" : "saxon -o fichier.html fichier.xml fichier.xsl" utilise tel fichier ".xsl" pour tel fichier ".xml" pour produire tel fichier ".html".
XSLT : Principe
XSLT est un vritable langage de programmation
La transformation du document source (XML) se fait selon des rgles (facteurs conditionnels) Une feuille de style XSL contient un jeu de rgles qui dclarent comment traduire des lments XML (selon leur contexte). Le but dune feuille de style XML serait de dfinir une transformation pour chaque balise XML
8
XSLT : Principe
Une simple rgle de traduction (appele "template" en XSLT)
Exemple
Source XML traduire:
<title>Salut LICDA</title>
La rgle XSLT
XSLT : Exemple
Fichier XML de contenu
<?xml version="1.0"?> <page> <titre> Titre de la page </titre> <contenu> Ceci est le contenu du fichier </contenu> <comment> Ici un commentaire </comment> </page>
10
13
14
15
XSLT : Templates
Application de templates aux sous-lments
Ici on dfinit une simple rgle pour la racine qui se dclenche (normalement) en premier): <xsl:template match="/"> <html> <body> <xsl:apply-templates/> </body> </html> </xsl:template> Un simple apply-templates (sans attributs) examine tous les noeuds enfants dans lordre du fichier XML et Si une rgle qui correspond un noeud est dtecte, elle sera applique. <page> <titre> Titre de la page </titre> <contenu> Ceci est le contenu du fichier </contenu> <comment> Ici un commentaire </comment> </page>
16
XSLT : Templates
Application de templates aux sous-lments
Pour le XML ci-dessus, les 2 rgles pour "titre" et "contenu" se dclencheraient! <xsl:template match="titre"> <h1 align="center"><xsl:apply-templates/></h1> </xsl:template> <xsl:template match="contenu"> <p align="center"><xsl:apply-templates/></p> </xsl:template>
17
XSLT : Templates
Lattribut select de apply-templates
permet de spcifier un lment dfini par un XPath (au lieu de tous les enfants), Autrement dit, select donne lordre explicite de chercher et dappliquer toutes les rgles disposition pour un seul type dlment identifi par un XPath Dans lexemple ci-dessous la rgle dclenche pour un lment <page> lance seulement la rgle qui sapplique au sous-lment <titre> <xsl:template match="page"> <xsl:apply-templates select="titre"/> </xsl:template>
18
XSLT : Templates
Droulement de lexcution des rgles
Le "moteur" XSLT cherche dabord excuter la premire rgle quil trouve pour llment racine.
Cette rgle normalement fait appel dautres rgles soit implicitement : <xsl:apply-templates/> soit en faisant appel des rgles prcises: <xsl:applytemplates select="regle"/>
Chacune des sous-rgles qui peuvent sappliquer sera excute dans lordre et ainsi de suite Le processeur ne trouve que les rgles qui sappliquent aux enfants du contexte actuel.
19
XSLT : Templates
Droulement de lexcution des rgles
Pour le fichier de contenu XML : <?xml version="1.0"?> <page> <titre> Titre de la page </titre> <contenu> <p> Ceci est le contenu du fichier </p></contenu> <comment> Ici un commentaire </comment> </page> La rgle suivante ne marche pas, car comment nest pas un enfant de content <xsl:template match="contenu"> <xsl:apply-templates select="comment"/> </xsl:template> La rgle suivante marche: <xsl:template match="content"> <xsl:apply-templates select="p"> </xsl:template>
20
XSLT : Extraction
Extraction des valeurs <xsl:value-of select="chemin"/>
Permet de rcuprer les valeurs des lments ou des attributs du document XML source Slectionne le rsultat dun chemin XPath et le copie vers le document "sortie
22
XSLT : Extraction
Scnarios dusage <xsl:copy/>
Utile pour reproduire loriginal (ici un tag <p>...</p>) <xsl:template match="p"> <xsl:copy><xsl:apply-templates/></xsl:copy> </xsl:template>
23
XSLT : XPATH
XSLT : XPATH
XPATH et extraction de valeurs
XPath permet didentifier un ou plusieurs fragments dun document XML
Exemple :
<xsl:template match="contenu"> <xsl:apply-templates select="/page/comment"/> </xsl:template>
"/page/comment" est une expression XPath Avec XPath vous pouvez par exemple dire "Identifiez le 4me mot du 2me paragraph qui suit un titre qui commence par le mot fst
25
XPath : XML Path Language Adressage dune partie dun document XML Syntaxe non XML Possibilit de faire des tests (Pattern)
[ Expression ]
Quelques expressions
position()=3 position()=last()-1 attribute::type=warning
/a/b
/annuaire/entree/ nom
//
//nom
Idem
//entree/*
<nom> Kamal IDRISSI </nom> <telephone></teleph one> <nom> Steve JOBS</nom> <telephone></teleph one>
ascendant
//A/B/D/ancestor::*
Child
/A/D/child::*
attribute (ou@)
//D/attribute::*
parent ou ..
/A/D/G/H/parent::*
<G><H/></G>
XPATH : Expressions
Rcapitulatif des expression XPath
30
Xpath : Fonctions
XSLT : Avanc
</xsl:template>
Cration de texte
<xsl:text > texte
Cration de commentaires
<xsl-comment> text
XSLT : Rptition
Il est possible dappliquer un template un ensemble dlments.
<xsl:for-each select = node-expr> Contenu </xsl:for-each>
Ex:
XSLT permet de crer des variables qui pourrons tre utilises dans la feuille de style. Une variable peut tre un objet de nimporte quel type.
<xsl:variable name=qname select=expr >
XSLT : Modes
Les modes permettent un lment dtre trait plusieurs fois, en produisant un rsultat diffrent chaque fois.
<xsl:template match=fils mode=m1> <xsl:template match=fils mode=m2> <xsl:apply-templates mode=m2>
Template nomm
Lutilisation de lattribut name de llment xsl:template permet de spcifier un nom de modle.
Un template nomm peut ne pas avoir dattribut match