Sie sind auf Seite 1von 33

Techno - Web

eXtended Stylesheet Language


Nicolas Malandain
Nicolas.Malandain@insa-rouen.fr

as
Architecture des Systmes dInformation

as
Architecture des Systmes dInformation

Techno - Web p. 1/3

Plan
Prsentation Modles (rgles) modles basiques appliquer des modles utilisation de modes nommage de modles Paramtres et variables

as
Architecture des Systmes dInformation

Techno - Web p. 2/3

Prsentation

as
Architecture des Systmes dInformation

Techno - Web p. 3/3

eXtended Stylesheet Language


XSL est divis en deux parties : XSL Transformations (XSLT)

Application XML spciant des rgles de transformation dun document en un autre. Une feuille de style XSLT compare les lments dun document XML aux modles de la feuille de style. Pour chaque modle correspondant son contenu est plac en sortie du nouveau document

XSL Formatting Objects (XSL-FO)


Application XML pour dcrire la mise en page prcise de texte.
as
Architecture des Systmes dInformation

Techno - Web p. 4/3

Squelette dune feuille XSLT

Cest un document XML


<?xml version="1.0" encoding="ISO-8859-1"?>

Llment racine du document est :


<xsl:stylesheet version="..." xmlns:xsl="http://www.w3.org/1999/XSL/Transform"> </xsl:stylesheet>

as
Architecture des Systmes dInformation

Techno - Web p. 5/3

Contenu possible de llment xsl:styleshee


Liste non exhaustive :
<xsl:import href="..."/> <xsl:include href="..."/> Instructions dimportation ou dinclusion dautres feuilles XSLT <xsl:strip-space elements="noeuds"/> <xsl:preserve-space elements="noeuds"/> Spcie si les caractres despacement doivent tre conservs ou non pour certains noeuds

<xsl:output method="..." indent="yes|no" .../> Spcie le type de document en sortie (method = xml, html, ...), si la sortie doit tre indente ou non, ... <xsl:variable name="..."> ... </xsl:variable> <xsl:param name="..."> ... </xsl:param> Dnition de variables et de paramtres <xsl:template match="..."> ... </xsl:template> <xsl:template name="..."> ... </xsl:template> Dclaration de rgles (modles) de transformation

as

Architecture des Systmes dInformation

Techno - Web p. 6/3

Modles (rgles)

as
Architecture des Systmes dInformation

Techno - Web p. 7/3

Modles
Les modles (rgles) sont les lments principaux dune feuille XSLT Syntaxe de base
<xsl:template match="pattern xpath"> instructions XSLT et/ou donnes littrales </xsl:template>

Le processeur XSLT lit (parcours en profondeur) un document source XML et applique une rgle chaque fois que son motif (pattern) correspond un noeud XML.
as
Architecture des Systmes dInformation

Techno - Web p. 8/3

Document de dmonstration : demoA.xml


<?xml version="1.0" encoding="ISO-8859-1" standalone="yes" ?> <personnes> <personne naissance="1912" mort="1954"> <identite> <prenom>Alan</prenom> <nom>Turing</nom> </identite> <profession>informaticien</profession> <profession>mathmaticien</profession> <profession>cryptographe</profession> </personne> <personne naissance="1969" mort="?"> <identite> <prenom>Linus</prenom> <nom>Torvalds</nom> </identite> <profession>informaticien</profession> <loisir>construire un OS</loisir> </personne> </personnes>

as

Architecture des Systmes dInformation

Techno - Web p. 9/3

Feuille XSLT demo1.xsl

<?xml version="1.0" encoding="ISO-8859-1" standalone="yes" ?> <xsl:stylesheet version="1.1" xmlns:xsl="http://www.w3.org/1999/XSL/Transform"> <xsl:output encoding="ISO-8859-1"/> </xsl:stylesheet>

Rsultat:
<?xml version="1.0" encoding="ISO-8859-1"?> Alan Turing informaticien mathmaticien cryptographe Linus Torvalds informaticien construire un OS

as
Architecture des Systmes dInformation

Techno - Web p. 10/3

Commentaires demo1.xsl

Deux rgles de transformation cables

Si aucun modle ne correspond aux noeuds du source alors le parcours rcursif descend jusquaux terminaux

Si un lment contient du texte (#PCDATA) alors celui ci est recopi par dfaut dans le noeud courant de larbre produit

as
Architecture des Systmes dInformation

Techno - Web p. 11/3

Feuille XSLT demo2.xsl


<?xml version="1.0" encoding="ISO-8859-1" standalone="yes" ?> <xsl:stylesheet version="1.1" xmlns:xsl="http://www.w3.org/1999/XSL/Transform"> <xsl:output encoding="ISO-8859-1"/> <xsl:strip-space elements="*"/> <xsl:template match="personne"> <p>Quelquun</p> </xsl:template> </xsl:stylesheet>

Rsultat:
<?xml version="1.0" encoding="ISO-8859-1"?> <p>Quelquun</p><p>Quelquun</p>

as
Architecture des Systmes dInformation

Techno - Web p. 12/3

Commentaires demo2.xsl
<xsl:strip-space elements="*"/> Lorsquun noeud textuel ne contient que des caractres despacement alors ceux-ci sont ignors <xsl:template match="personne"> Pour chaque lment personne rencontr, le contenu a t ignor et remplac par <p>Quelquun</p>

La feuille de style devant tre bien forme, cela implique que le balisage produit doit lui aussi tre bien form.
as
Architecture des Systmes dInformation

Techno - Web p. 13/3

Obtenir la valeur dun noeud

En rgle gnral le texte de sortie est li au texte dentre, il faut donc pouvoir rcuprer des valeurs.

Syntaxe

<xsl:value-of select="pattern xpath"/>

as
Architecture des Systmes dInformation

Techno - Web p. 14/3

Feuille XSLT demo3.xsl


<?xml version="1.0" encoding="ISO-8859-1" standalone="yes" ?> <xsl:stylesheet version="1.1" xmlns:xsl="http://www.w3.org/1999/XSL/Transform"> <xsl:output encoding="ISO-8859-1"/> <xsl:template match="personne"> <p><xsl:value-of select="identite"/></p> </xsl:template> </xsl:stylesheet>

Rsultat:
<?xml version="1.0" encoding="ISO-8859-1"?> <p> Alan Turing </p> <p> Linus Torvalds </p>

as
Architecture des Systmes dInformation

Techno - Web p. 15/3

Appliquer des modles


Chaque modle associ un noeud est activ avant les modles de ses ls. Un modle peu changer lordre de parcours avec linstruction suivante Syntaxe
<xsl:apply-templates select="pattern xpath"/>

Seuls les modles correspondant au pattern seront activs, si lattribut select est omis alors seuls les modles correspondants aux ls du noeud contextuel sont traits. Cette instruction permet de choisir lendroit o seront placs les rsultats de lactivation de modles (demo5.xsl).
as
Architecture des Systmes dInformation

Techno - Web p. 16/3

Feuille XSLT demo4.xsl


<?xml version="1.0" encoding="ISO-8859-1" standalone="yes" ?> <xsl:stylesheet version="1.1" xmlns:xsl="http://www.w3.org/1999/XSL/Transform"> <xsl:output encoding="ISO-8859-1"/> <xsl:template match="personne"> <xsl:apply-templates select="identite"/> </xsl:template> <xsl:template match="identite"> <xsl:value-of select="prenom"/>, <xsl:value-of select="nom"/> </xsl:template> </xsl:stylesheet>

Rsultat:
<?xml version="1.0" encoding="ISO-8859-1"?> Alan, Turing Linus, Torvalds

as
Architecture des Systmes dInformation

Techno - Web p. 17/3

Feuille XSLT demo5.xsl

1/2

<?xml version="1.0" encoding="ISO-8859-1" standalone="yes" ?> <xsl:stylesheet version="1.1" xmlns:xsl="http://www.w3.org/1999/XSL/Transform"> <xsl:output encoding="ISO-8859-1"/> <xsl:strip-space elements="*"/> <xsl:template match="personnes"> <html> <head><title>Liste de personnes</title> </head> <body> <xsl:apply-templates/> </body> </html> </xsl:template> <xsl:template match="personne"> <p><xsl:value-of select=".//prenom"/>, <xsl:value-of select=".//nom"/></p> </xsl:template> </xsl:stylesheet>

as
Architecture des Systmes dInformation

Techno - Web p. 18/3

Feuille XSLT demo5.xsl


Rsultat:

2/2

<html> <head> <META http-equiv="Content-Type" content="text/html; charset=ISO-8859-1"> <title>Liste de personnes</title> </head> <body> <p>Alan, Turing</p> <p>Linus, Torvalds</p> </body> </html>

Remarque : la dclaration de texte <?xml ... ?> a disparu, le processeur XSLT a de lui mme dtect quil sagissait dun document HTML par llment racine
as
Architecture des Systmes dInformation

Techno - Web p. 19/3

Modles implicites
Il existe 7 types de noeudsa dans un document XML. XSLT prdnit un modle par dfaut pour chaque type de noeuds.
<xsl:template match="text()|@*"> <xsl:value-of select="."/> </xsl:template>

Pour tout noeud de texte ou dattribut copie sa valeur dans le document de sortie
<xsl:template match="*|/"> <xsl:apply-templates/> </xsl:template>

Pour tout noeud dlment et le noeud racine applique les rgles leurs noeuds ls. Les noeuds dattribut et despace de noms ne sont pas considrs comme des ls (dshrits).
<xsl:template match="processing-instruction()|comment()"/>

Pour tout noeud de commentaire ou dinstruction de traitement ne produit rien


a

cf. cours XPath

as

Architecture des Systmes dInformation

Techno - Web p. 20/3

Modes et modles

Un mme contenu en entre doit apparatre plusieurs fois en sortie mais avec un formatage diffrent

Lattribut mode
<xsl:template match="pattern xpath" mode="nomDuMode"> instructions XSLT et/ou donnes littrales </xsl:template>

et

<xsl:apply-templates select="pattern xpath" mode="nomDuMode

as
Architecture des Systmes dInformation

Techno - Web p. 21/3

Feuille XSLT demo6.xsl


<?xml version="1.0" encoding="ISO-8859-1" standalone="yes" ?> <xsl:output encoding="ISO-8859-1"/> <xsl:template match="personnes"> <html> <head><title>Liste de personnes</title> </head> <body> <h1>Index</h1> <ul><xsl:apply-templates select="personne" mode="index"/></ul> <h1>Dtail</h1> <xsl:apply-templates select="personne"/> </body> </html> </xsl:template> <xsl:template match="personne" mode="index">

1/2

<xsl:stylesheet version="1.1" xmlns:xsl="http://www.w3.org/1999/XSL/Transform">

<li><xsl:value-of select=".//prenom"/>, <xsl:value-of select=".//nom"/></li> </xsl:template> <xsl:template match="personne"> <p><xsl:value-of select=".//prenom"/><xsl:text> </xsl:text><xsl:value-of select=".//nom"/> n(e) en <xsl:value-of select="@naissance"/></p>

</xsl:template> </xsl:stylesheet>

as

Architecture des Systmes dInformation

Techno - Web p. 22/3

Feuille XSLT demo6.xsl


Rsultat:

2/2

<html> <head> <META http-equiv="Content-Type" content="text/html; charset=ISO-8859-1"> <title>Liste de personnes</title> </head> <body> <h1>Index</h1> <ul> <li>Alan, Turing</li> <li>Linus, Torvalds</li> </ul> <h1>D&eacute;tail</h1> <p>Alan Turing n&eacute;(e) en 1912</p> <p>Linus Torvalds n&eacute;(e) en 1969</p> </body> </html>

as
Architecture des Systmes dInformation

Techno - Web p. 23/3

Nommage de rgles (modles)

Faciliter la rutilisation de rgles

<xsl:template name="nomDeLaRegle" ...> instructions XSLT et/ou donnes littrales </xsl:template> et <xsl:call-template name="nomDeLaRegle"/>

as
Architecture des Systmes dInformation

Techno - Web p. 24/3

Modles de valeur dattribut


Inclure une valeur lattribut dun lment rsultat littral Syntaxe {pattern xpath} Exemple (demo7.xsl) :
<xsl:template match="personne"> <identite nom="{.//nom}" prenom="{.//prenom}" naissance="{@naissance}"/> </xsl:template>

Rsultat :
<identite naissance="1912" prenom="Alan" nom="Turing"/> <identite naissance="1969" prenom="Linus" nom="Torvalds"/>

as
Architecture des Systmes dInformation

Techno - Web p. 25/3

Dclaration de paramtres
<xsl:param name="nom paramtre" select="pattern xpath"/>

ou
<xsl:param name="nom paramtre"> instructions XSLT et/ou donnes littrales </xsl:param>

La valeur spcie est considre comme valeur par dfaut du paramtre La dclaration peut se placer deux endroits : dans une rgle xsl:template an de la paramtrer au premier niveau (dans xsl:stylesheet), cest alors au processeur XSLT de dterminer la valeur par la ligne de commande option -PARAM par le protocole HTTP (GET, POST) quand le processeur est intgr au serveur (Cocoon)
as
Architecture des Systmes dInformation

Techno - Web p. 26/3

Utilisation de paramtres

<xsl:with-param name="nom paramtre" select="patternxpath/>


le type du paramtre est lun des quatres types xpath : boolean, number, string ou node-set (idem la dclaration)

ou
<xsl:with-param name="nom paramtre"> instructions XSLT et/ou donnes littrales </xsl:with-param>
est alors impossible deffectuer une slection sur ce fragment (pour rsoudre ce problme, voir XSLT 2.0 ou fonction dextension nodeset(...)) (idem la dclaration)

le type du paramtre est un result tree fragment = chane de caractre rsultant de la srialisation du fragment calcul, i

Lutilisation peut se faire dans 3 instructions XSLT :


<xsl:call-template>, <xsl:apply-template>, <xsl:apply-imports>

as
Architecture des Systmes dInformation

Techno - Web p. 27/3

Document de dmonstration : demoB.xml


<?xml version="1.0" encoding="ISO-8859-1" standalone="yes" ?> <personnes> <personne naissance="1912" mort="1954"> <identite> <prenom>Alan</prenom> <nom>Turing</nom> </identite> <liste puce="Lettre"> <profession>informaticien</profession> <profession>mathmaticien</profession> <profession>cryptographe</profession> </liste> </personne> <personne naissance="1969" mort="?"> <identite> <prenom>Linus</prenom> <nom>Torvalds</nom> </identite> <liste puce="chiffre"> <profession>informaticien</profession> <loisir>construire un OS</loisir> </liste> </personne>

as
Architecture des Systmes dInformation

</personnes>

Techno - Web p. 28/3

Feuille XSLT demo8.xsl


<xsl:template match="//personne"> <xsl:text> </xsl:text> <xsl:apply-templates select="liste"/> </xsl:template> <xsl:template match="liste[@puce=chiffre]"> <xsl:call-template name="constructionliste"> <xsl:with-param name="formatpuce" select="1. "/> </xsl:call-template> </xsl:template> <xsl:template match="liste[@puce=Lettre]"> <xsl:call-template name="constructionliste"> <xsl:with-param name="formatpuce">A. </xsl:with-param> </xsl:call-template> </xsl:template> <xsl:template match="liste"> <xsl:call-template name="constructionliste"/> </xsl:template> <xsl:template name="constructionliste"> <xsl:param name="formatpuce" select="I. "/> <xsl:for-each select="profession|loisir">

1/2

<xsl:value-of select="identite/prenom"/><xsl:text> </xsl:text><xsl:value-of select="identite/nom"/>

<p><xsl:number value="position()" format="{$formatpuce}"/><xsl:value-of select="."/></p> </xsl:for-each>

as

</xsl:template>

Architecture des Systmes dInformation

Techno - Web p. 29/3

Feuille XSLT demo8.xsl

2/2

Rsultat :
<?xml version="1.0" encoding="ISO-8859-1"?> Alan Turing <p>A. informaticien</p> <p>B. mathmaticien</p> <p>C. cryptographe</p> Linus Torvalds <p>1. informaticien</p> <p>2. construire un OS</p>

as
Architecture des Systmes dInformation

Techno - Web p. 30/3

Dclaration et utilisation de variables


<xsl:variable name="nom variable" select="pattern xpath/>

ou
<xsl:variable name="nom variable"> instructions XSLT et/ou donnes littrales </xsl:variable>
Les types des variables sont les mmes que pour les paramtres

La dclaration peut se placer deux endroits :

au premier niveau (dans xsl:stylesheet) : variable globale visible dans toute la feuille XSLT dans une rgle : variable locale visible dans tous les frres droits de la dclaration Les variables sont utilisables nimporte o dans le document, via $nomvariable
as
Architecture des Systmes dInformation

Techno - Web p. 31/3

Autres instructions XSLT

Il existe bien dautres instructions XSLT permettant :

la numrotation et le tri des lments le traitement conditionnel litration la cration dynamique dlments et dattributs de copier des noeuds

as
Architecture des Systmes dInformation

Techno - Web p. 32/3

Association dun document XML et dune feuille de style XSLT


Dclaration interne au document XML Il suft dajouter une instruction de traitement du type :
<?xml-stylesheet type="text/xsl" href="URI de la feuille" ?>

Dans cocoon Cocoon fonctionne par un systme de pipelines se dclenchants sur des patterns de requtes Exemple de conguration : pour toute requte un chier *.html, il associe un chier {1}.xml et une feuille de style {1}2html.xsl
as
Architecture des Systmes dInformation

Techno - Web p. 33/3

Verwandte Interessen