Vous êtes sur la page 1sur 39

+

+
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

XSL : Principe de Fonctionnement

XSLT : Utilisation
Mcanisme :
Dfinir des rgles qui disent comment transformer un "noeud" (element, tag) et ses sous-lments Organiser lapplication de ces rgles

Les feuilles de style XSLT


Une feuille de style XSLT est un document spar qui contient des rgles de transformation XSLT On peut associer une feuille de style XSL(T) un (ou plusieurs) documents XML Marche soit en "batch" dans un diteur ou en ligne de commande), soit avec la plupart des clients Web modernes (Mozilla, IE6, etc.)

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: "

Association dun fichier XSLT un fichier XML


Lassociation peut se faire dans le fichier XML: <?xml version="1.0" encoding="ISO-8859-1"?> <?xml-stylesheet href="project.xsl" type="text/xsl"?> <votre_xml> ...... </votre_xml>
6

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>

Fichier HTML a gnrer ( cible )


<html> <head><title> Titre de la page </title></head> <body bgcolor="#ffffff"> <h1 align="center"> Titre de la page </h1> <p align="center"> Ceci est le contenu du fichier </p> <br/> Commentaire : Ici un commentaire </body> </html>

10

XSLT : Premier Exemple


<?xml version="1.0" encoding="iso-8859-1"?> <xsl:stylesheet xmlns:xsl="http://www.w3.org/1999/XSL/Transform"> <xsl:template match="page"> <html> <head> <title> <xsl:value-of select="titre"/> </title> </head> <body bgcolor="#ffffff"> <xsl:apply-templates/> </body> </html> </xsl:template>

<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> <xsl:template match="comment"> <br/> <xsl:apply-templates/> </xsl:template> </xsl:stylesheet>
11

XSLT : Notions de base

XSLT : Notions de base


Dfinir pour chaque balise une rgle qui traduit la balise et son contenu
Organiser lapplication de ces rgles, c.a.d. indiquer comment traiter le contenu. XSL est du XML Respecter les principes de validit Bien form

13

XSLT : Notions de base


Dfinition dune rgle ("template") avec xsl:template

Une rgle applicable toutes les balises "project":

14

XSLT : Anatomie dune feuille XSLT

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 des valeurs

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

Extraction des valeurs <xsl:copy/>


Sert copier "tel quel" un lment source vers le document produit Copie les balises et le contenu

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)

XPath : Location Path


Contexte
/ : racine (Chemin Absolu) . : contexte courant (Chemin Relatif)

[ Expression ]
Quelques expressions
position()=3 position()=last()-1 attribute::type=warning

Xpath : Symboles de base


Symbole Rle Exemple Rsultat

/a/b

Liste des lments dont le chemin dans larborescence correspond la requte

/annuaire/entree/ nom

<nom> Kamal IDRISSI </nom> <nom> Steve JOBS </nom>

//

On ne tient pas compte de la profondeur de llment dans larborescence

//nom

Idem

Tous les lments fils de la slection

//entree/*

<nom> Kamal IDRISSI </nom> <telephone></teleph one> <nom> Steve JOBS</nom> <telephone></teleph one>

Xpath : Symboles de base


Symbole descendant Rle Fils dun nud et leurs descendants Exemple /A/D/descendant::* Rsultat <G> <H/> </G> <A> <B att="Fr"> <C>Bonjour</C> <D /> </B> <B att="Eng"> <C>Hello</C> </B> ... </A> <G> <H/> </G> <D id= 10> <D id=12>

ascendant

Pre dun nud et ses anctres

//A/B/D/ancestor::*

Child

Fils dun nud

/A/D/child::*

attribute (ou@)

Attributs dun noeud

//D/attribute::*

parent ou ..

Parent dun nud

/A/D/G/H/parent::*

<G><H/></G>

XPATH : Expressions
Rcapitulatif des expression XPath

30

Xpath : Fonctions

XSLT : Avanc

XSLT : Les Templates


<xsl:template
match = regle (XPath location) name = nom (pour Appeler un template) priority = number (rgles dordre) mode = qname (Pls traitements / Elt> <!-- Contenu -->

</xsl:template>

XSLT : Fonctions de cration


Cration dun lment
<xsl:element name = qname>

Cration dun attribut


<xsl:attribute name = qname> valeur

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:

<xsl:template match=/> <xsl:for-each select=eleve>

XSLT : Traitement conditionnel


XSLT propose deux instructions conditionnel
<xsl:if test = boolean-exp> Contenu </xsl:if> <xsl:choose> <xsl:when test =boolean-expr> </xsl:when> <xsl:when test =boolean-expr> </xsl:when> <xsl:otherwise> </xsl:otherwise> </xsl:choose>

XSLT : Autres fonctions


Possibilit de trier les lments de la liste. Utilis aprs un xsl:apply-templates ou un xsl:for-each
<xsl:sort select=string-expr >

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 >

Autres fonctions XSLT


Opration sur les nombres Opration sur les chanes de caractres Envoi de messages Copy,

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

Un template nomm peut tre appel par <xsl:call-template name=qname>

Vous aimerez peut-être aussi