xslt le langage les éléments. plan introduction exemple template xslt

Post on 03-Apr-2015

124 Views

Category:

Documents

0 Downloads

Preview:

Click to see full reader

TRANSCRIPT

XSLTXSLT

le langage

les éléments

PlanPlan

introduction

exemple

template

XSLT

Le langage XSLTLe langage XSLT

Une feuille de style XSLT est composée d'une série de règles modèles.

Chaque règle décrit la manière dont un type d'élément doit être traité.

XSLT est un langage déclaratifOn spécifie la sortie à produire pour un motif d'entrée

l'ordre des règles n'a pas d'importance

TransformationTransformation

date

La feuille de styleLa feuille de style

L'entête

les règles modèles

La feuille de styleLa feuille de style

L'entête

les règles modèles

L'entêteL'entête

L'entête standard : <xsl:stylesheet

xmlns:xsl="http://www.w3.org/1999/XSL/Transform"

version="1.0">

Les espaces de noms constitue une partie essentielle de la recommendation XML.

Ils permettent de mélanger les balises de plusieurs vocabulaires dans une même feuille.

1. Ils sont identifiés par un URI

2. Utilisation en qualité de préfixe de noms d'élément et d'attribut

xmlns:prefix = "namespace-URI"

La feuille de styleLa feuille de style

L'entête

les règles modèles

Les règles Les règles

Pour chaque type d'élément est établie une règle modèle

Les règles Les règles

<poem><xsl:template match="poem">

<html>

<head>

</head>

<body>

</body>

</html>

</xsl:template>

Création du squelette HTML,

Les règles Les règles

<poem><xsl:template match="poem">

<html>

<head>

<title><xsl:value-of select="title"/></title>

</head>

<body>

</body>

</html>

</xsl:template>

Les règles Les règles

<poem><xsl:template match="poem">

<html>

<head>

<title><xsl:value-of select="title"/></title>

</head>

<body>

1. <xsl:apply-templates select="title"/>

2. <xsl:apply-templates select="author"/>

3. <xsl:apply-templates select="stanza"/>

4. <xsl:apply-templates select="date"/>

</body>

</html>

</xsl:template>

définition de l'ordre des éléments

Exemple de règle modèleExemple de règle modèle

<xsl:template match="stanza">

<p>

<xsl:apply-templates select="line"/>

</p>

</xsl:template>

<xsl:template match="line">

<xsl:if test="position() mod 2 = 0">&#160;</xsl:if>

<xsl:value-of select="." />

<br />

</xsl:template>

Exemple de règle modèleExemple de règle modèle

<xsl:template match="stanza">

<p>

<xsl:apply-templates select="line"/>

</p>

</xsl:template>

<xsl:template match="line">

<xsl:if test="position() mod 2 = 0">&#160;</xsl:if>

<xsl:value-of select="." />

<br />

</xsl:template>

Changement du nœud courant

ComportementComportement

<stanza>

<line> And suddenly the wind comes soft, </line>

<line> And Spring is here again; </line>

<line> And the hawthorn quickens with buds of green </line>

<line>And my heart with buds of pain. </line>

</stanza>

<xsl:template match="stanza"><p> <xsl:apply-templates

select="line"/></p>

</xsl:template>

<xsl:template match="stanza"><p> <xsl:apply-templates

select="line"/></p>

</xsl:template>

ComportementComportement

<stanza>

<line> And suddenly the wind comes soft, </line>

<line> And Spring is here again; </line>

<line> And the hawthorn quickens with buds of green </line>

<line>And my heart with buds of pain. </line>

</stanza>

<xsl:template match="stanza"><p> <xsl:apply-templates

select="line"/></p>

</xsl:template>

<xsl:template match="stanza"><p> <xsl:apply-templates

select="line"/></p>

</xsl:template>

ComportementComportement

<stanza>

<line> And suddenly the wind comes soft, </line>

<line> And Spring is here again; </line>

<line> And the hawthorn quickens with buds of green </line>

<line>And my heart with buds of pain. </line>

</stanza>

<p>

<xsl:template match="stanza"><p> <xsl:apply-templates

select="line"/></p>

</xsl:template>

<xsl:template match="stanza"><p> <xsl:apply-templates

select="line"/></p>

</xsl:template>

ComportementComportement

<xsl:template match="stanza"><p> <xsl:apply-templates

select="line"/></p>

</xsl:template>

<xsl:template match="stanza"><p> <xsl:apply-templates

select="line"/></p>

</xsl:template>

<p>…

ComportementComportement

<stanza>

<line> And suddenly the wind comes soft, </line>

<line> And Spring is here again; </line>

<line> And the hawthorn quickens with buds of green </line>

<line>And my heart with buds of pain. </line>

</stanza>

<xsl:template match="stanza"><p> <xsl:apply-templates

select="line"/></p>

</xsl:template>

<xsl:template match="stanza"><p> <xsl:apply-templates

select="line"/></p>

</xsl:template>

ComportementComportement

<stanza>

<line> And suddenly the wind comes soft, </line>

<line> And Spring is here again; </line>

<line> And the hawthorn quickens with buds of green </line>

<line>And my heart with buds of pain. </line>

</stanza>

<xsl:template match="line"> <xsl:if test="position() mod 2 = 0">&#160;</xsl:if> <xsl:value-of select="." /> <br /> </xsl:template>

<xsl:template match="line"> <xsl:if test="position() mod 2 = 0">&#160;</xsl:if> <xsl:value-of select="." /> <br /> </xsl:template>

<xsl:template match="line"> <xsl:if test="position() mod 2 = 0">&#160;</xsl:if> <xsl:value-of select="." /> <br /> </xsl:template>

<xsl:template match="line"> <xsl:if test="position() mod 2 = 0">&#160;</xsl:if> <xsl:value-of select="." /> <br /> </xsl:template>

ComportementComportement

<stanza>

<line> And suddenly the wind comes soft, </line>

<line> And Spring is here again; </line>

<line> And the hawthorn quickens with buds of green </line>

<line>And my heart with buds of pain. </line>

</stanza>

And suddenly the wind comes soft,

<xsl:template match="line"> <xsl:if test="position() mod 2 = 0">&#160;</xsl:if> <xsl:value-of select="." /> <br /> </xsl:template>

<xsl:template match="line"> <xsl:if test="position() mod 2 = 0">&#160;</xsl:if> <xsl:value-of select="." /> <br /> </xsl:template>

ComportementComportement

And suddenly the wind comes soft,

<p>And suddenly the wind comes soft,…

<xsl:template match="line"> <xsl:if test="position() mod 2 = 0">&#160;</xsl:if> <xsl:value-of select="." /> <br /> </xsl:template>

<xsl:template match="line"> <xsl:if test="position() mod 2 = 0">&#160;</xsl:if> <xsl:value-of select="." /> <br /> </xsl:template>

ComportementComportement

<stanza>

<line> And suddenly the wind comes soft, </line>

<line> And Spring is here again; </line>

<line> And the hawthorn quickens with buds of green </line>

<line>And my heart with buds of pain. </line>

</stanza>

<br/>

<xsl:template match="line"> <xsl:if test="position() mod 2 = 0">&#160;</xsl:if> <xsl:value-of select="." /> <br /> </xsl:template>

<xsl:template match="line"> <xsl:if test="position() mod 2 = 0">&#160;</xsl:if> <xsl:value-of select="." /> <br /> </xsl:template>

ComportementComportement

<p>

And suddenly the wind comes soft,<br/>…

<xsl:template match="line"> <xsl:if test="position() mod 2 = 0">&#160;</xsl:if> <xsl:value-of select="." /> <br /> </xsl:template>

<xsl:template match="line"> <xsl:if test="position() mod 2 = 0">&#160;</xsl:if> <xsl:value-of select="." /> <br /> </xsl:template>

ComportementComportement

<stanza>

<line> And suddenly the wind comes soft, </line>

<line> And Spring is here again; </line>

<line> And the hawthorn quickens with buds of green </line>

<line>And my heart with buds of pain. </line>

</stanza>

<xsl:template match="line"> <xsl:if test="position() mod 2 = 0">&#160;</xsl:if> <xsl:value-of select="." /> <br /> </xsl:template>

<xsl:template match="line"> <xsl:if test="position() mod 2 = 0">&#160;</xsl:if> <xsl:value-of select="." /> <br /> </xsl:template>

ComportementComportement

<stanza>

<line> And suddenly the wind comes soft, </line>

<line> And Spring is here again; </line>

<line> And the hawthorn quickens with buds of green </line>

<line>And my heart with buds of pain. </line>

</stanza>

And Spring is here again;

<xsl:template match="line"> <xsl:if test="position() mod 2 = 0">&#160;</xsl:if> <xsl:value-of select="." /> <br /> </xsl:template>

<xsl:template match="line"> <xsl:if test="position() mod 2 = 0">&#160;</xsl:if> <xsl:value-of select="." /> <br /> </xsl:template>

ComportementComportement

<p>And suddenly the wind comes soft,<br/> And Spring is here again;…

<xsl:template match="line"> <xsl:if test="position() mod 2 = 0">&#160;</xsl:if> <xsl:value-of select="." /> <br /> </xsl:template>

<xsl:template match="line"> <xsl:if test="position() mod 2 = 0">&#160;</xsl:if> <xsl:value-of select="." /> <br /> </xsl:template>

ComportementComportement

<stanza>

<line> And suddenly the wind comes soft, </line>

<line> And Spring is here again; </line>

<line> And the hawthorn quickens with buds of green </line>

<line>And my heart with buds of pain. </line>

</stanza>

<br/>

<xsl:template match="line"> <xsl:if test="position() mod 2 = 0">&#160;</xsl:if> <xsl:value-of select="." /> <br /> </xsl:template>

<xsl:template match="line"> <xsl:if test="position() mod 2 = 0">&#160;</xsl:if> <xsl:value-of select="." /> <br /> </xsl:template>

ComportementComportement

<p>And suddenly the wind comes soft,<br/>

And Spring is here again;<br/>…

ComportementComportement

<stanza>

<line> And suddenly the wind comes soft, </line>

<line> And Spring is here again; </line>

<line> And the hawthorn quickens with buds of green </line>

<line>And my heart with buds of pain. </line>

</stanza>

<xsl:template match="stanza"><p> <xsl:apply-templates

select="line"/></p>

</xsl:template>

<xsl:template match="stanza"><p> <xsl:apply-templates

select="line"/></p>

</xsl:template>

ComportementComportement

<stanza>

<line> And suddenly the wind comes soft, </line>

<line> And Spring is here again; </line>

<line> And the hawthorn quickens with buds of green </line>

<line>And my heart with buds of pain. </line>

</stanza>

</p>

<xsl:template match="stanza"><p> <xsl:apply-templates

select="line"/></p>

</xsl:template>

<xsl:template match="stanza"><p> <xsl:apply-templates

select="line"/></p>

</xsl:template>

ComportementComportement

<xsl:template match="stanza"><p> <xsl:apply-templates

select="line"/></p>

</xsl:template>

<xsl:template match="stanza"><p> <xsl:apply-templates

select="line"/></p>

</xsl:template>

<p>And suddenly the wind comes soft,<br/> And Spring is here again;<br/>And the hawthorn quickens with buds of green<br/> And my heart with buds of pain.<br/>

</p>

RésultatRésultat

<html>

<head>

</head>

<body>…

<p>And suddenly the wind comes soft,<br>

And Spring is here again;<br>

And the hawthorn quickens with buds of green<br>

And my heart with buds of pain.<br>

</p>

…</body>

</html>

Retour sur les étapesRetour sur les étapes

poem

author

date

title

Stanza

stanza

stanza

line

line

line

line

line

line

line

line

line

line

line

line

line

line

line

line

poem

authordatetitle Stanza stanza stanza

line line line line line line line line line line line line

Retour sur les étapesRetour sur les étapes

Retour sur les étapesRetour sur les étapes

poem

author date title Stanza stanza stanza

line line line line line line line line line line line line

<xsl:template match="poem"><html> <head>

<title><xsl:value-of select="title"/></title></head><body>

<xsl:apply-templates select="title"/><xsl:apply-templates select="author"/><xsl:apply-templates select="stanza"/><xsl:apply-templates select="date"/>

</body></html></xsl:template>

Retour sur les étapesRetour sur les étapes

poem

author date title Stanza stanza stanza

line line line line line line line line line line line line

<xsl:template match="poem"><html> <head>

<title><xsl:value-of select="title"/></title></head><body>

<xsl:apply-templates select="title"/><xsl:apply-templates select="author"/><xsl:apply-templates select="stanza"/><xsl:apply-templates select="date"/>

</body></html></xsl:template>

template : titletemplate : title

<xsl:template match="title">

<div align="center">

<h1>

<xsl:value-of select="." />

</h1>

</div>

</xsl:template>

Retour sur les étapesRetour sur les étapes

poem

author date title Stanza stanza stanza

line line line line line line line line line line line line

<xsl:template match="poem"><html> <head>

<title><xsl:value-of select="title"/></title></head><body>

<xsl:apply-templates select="title"/><xsl:apply-templates select="author"/><xsl:apply-templates select="stanza"/><xsl:apply-templates select="date"/>

</body></html></xsl:template>

tempalte : authortempalte : author

<xsl:template match="author">

<div align="center">

<h2>By

<xsl:value-of select="." />

</h2>

</div>

</xsl:template>

Retour sur les étapesRetour sur les étapes

poem

author date title Stanza stanza stanza

line line line line line line line line line line line line

<xsl:template match="poem"><html> <head>

<title><xsl:value-of select="title"/></title></head><body>

<xsl:apply-templates select="title"/><xsl:apply-templates select="author"/><xsl:apply-templates select="stanza"/><xsl:apply-templates select="date"/>

</body></html></xsl:template>

Retour sur les étapesRetour sur les étapes

poem

author date title Stanza stanza stanza

line line line line line line line line line line line

<xsl:template match="poem"><xsl:apply-templates select="stanza"/>

</xsl:template>

<xsl:template match="stanza"><p> <xsl:apply-templates select="line"/></p>

</xsl:template>

Retour sur les étapesRetour sur les étapes

poem

author date title Stanza stanza stanza

line line line line line line line line line line line line

<xsl:template match="poem"><html> <head>

<title><xsl:value-of select="title"/></title></head><body>

<xsl:apply-templates select="title"/><xsl:apply-templates select="author"/><xsl:apply-templates select="stanza"/><xsl:apply-templates select="date"/>

</body></html></xsl:template>

Retour sur les étapesRetour sur les étapes

poem

author date title Stanza stanza stanza

line line line line line line line line line line line line

<xsl:template match="poem"><xsl:apply-templates select="stanza"/>

</xsl:template>

<xsl:template match="stanza"><p> <xsl:apply-templates select="line"/></p>

</xsl:template>

Retour sur les étapesRetour sur les étapes

poem

author date title Stanza stanza stanza

line line line line line line line line line line line line

<xsl:template match="poem"><html> <head>

<title><xsl:value-of select="title"/></title></head><body>

<xsl:apply-templates select="title"/><xsl:apply-templates select="author"/><xsl:apply-templates select="stanza"/><xsl:apply-templates select="date"/>

</body></html></xsl:template>

Retour sur les étapesRetour sur les étapes

poem

author date title Stanza stanza stanza

line line line line line line line line line line line line

<xsl:template match="poem"><xsl:apply-templates select="stanza"/>

</xsl:template>

<xsl:template match="stanza"><p> <xsl:apply-templates select="line"/></p>

</xsl:template>

Retour sur les étapesRetour sur les étapes

poem

author date title Stanza stanza stanza

line line line line line line line line line line line line

<xsl:template match="poem"><html> <head>

<title><xsl:value-of select="title"/></title></head><body>

<xsl:apply-templates select="title"/><xsl:apply-templates select="author"/><xsl:apply-templates select="stanza"/><xsl:apply-templates select="date"/>

</body></html></xsl:template>

PlanPlan

Introduction

Template

xsl:templatexsl:template

<xsl:template> http://www.w3.org/TR/xslt.html#rules

Définit un modèle permettant de produire un résultat. il peut être appelé par la comparaison des nœuds avec un motif ou explicitement par son nom.

Format

<!-- Category: top-level-element --><xsl:template  match = pattern   name = qname   priority = number   mode = qname>  <!-- Content: (xsl:param*, template) --></xsl:template>

formatformat

<xsl:template  match = pattern   name = qname   priority = number   mode = qname >  </xsl:template>

match : le motif est utilisé pour définir les nœuds auxquels s'applique cette règle modèle.

en l'absence de cet attribut, il doit y avoir un attribut name.

formatformat

<xsl:template  match = pattern   name = qname   priority = number   mode = qname >  </xsl:template>

name : le nom du modèle

en l'absence de cet attribut, il doit y avoir un attribut match.

priority : nombre dénotant la priorité de ce modèle

mode : seuls les modèles dont le mode correspond sont considérés

Instanciation d'un modèleInstanciation d'un modèle

Une fois qu'un élément <xsl:template> a été sélectionné pour le traitement :1. en cas d'appel avec <xsl:apply-templates>, le nœud courant et la liste

des nœuds courants sont définis selon les exigences.

2. un nouvel espace est alloué dans la pile afin de contenir une nouvelle instance de chaque variable locale définie dans le modéle.

3. le corps du modèle est instancié, ce qui signifie que les nœuds enfants de l'élément <xsl:template> sont eux aussi instanciés.

4. l'espace alloué est suprimé

xsl:apply-templatexsl:apply-template

<xsl:apply-template>http://www.w3.org/TR/xslt.html#section-Applying-Template-Rules

Définit un ensemble de nœuds à traiter et obtient que le système les traite en sélectionnant une règle modèle appropriée pour chacun de ces nœuds. L'ensemble des nœuds est déterminé par l'attribut select.

Format

<!-- Category: instruction --><xsl:apply-templates  select = node-set-expression   mode = qname>  <!-- Content: (xsl:sort | xsl:with-param)* --></xsl:apply-templates>

xsl:apply-templatexsl:apply-template

<xsl:apply-templates  select = node-set-expression   mode = qname></xsl:apply-templates>

select : ensemble de nœuds à traiter.

Si aucun n'est spécifié, tous les enfants du nœud courant sont traités.

mode :Mode traitement. Les règles modèles utilisées pour traiter les nœuds

sélectionnés doivent disposer d'un mode de comparaison.

Attribut selectAttribut select

Expression si Select est présent, Expression (XPath) définit les nœuds à traiter.

Il peut s'agir de nœuds associés au nœud courant ou être une sélection depuis le nœud racine (ref. absolue).

Si l'attribut select est omis, les nœuds sont les enfants du nœud courant,

• nœud élément, • texte, • commentaire, • instruction de traitement.• Les nœuds attribut et espace de noms ne sont pas traités.

– omettre select est équivalent à child::node() : selection de tous les enfants du nœud courant.

ExempleExemple

<xsl:apply-template>traite tous les enfants du nœud courant

<xsl:apply-template select="para"/>les éléments <para> enfant du nœud courant sont traités

<xsl:apply-template select="//*" mode="toto">traite chaque élément du document en mode "toto"

tri, with-paramtri, with-param

<xsl:sort> permet de trier avant le traitement des enfants.

<xsl:with-param>définit les paramètres mis à disposition des règles.

ExempleExemple

<xsl:apply-template select="para"><xsl:with-param name="indent" select="$i"/>

</xsl:apply-template>traite tous les <para>, enfant du nœud courant, en définissant dans chaque modèle appelé, la valeur du paramètre indent selon la valeur de la variable $i

<xsl:apply-template select="//book"><xsl:sort select="@isbn"/>

</xsl:apply-template>traite les <book> en les triant par ordre croissant de leur attribut isbn

EOFEOF

top related