• Aucun résultat trouvé

[PDF] Cours de formation d'initiation à XSL fransform en PDF | Cours informatique

N/A
N/A
Protected

Academic year: 2021

Partager "[PDF] Cours de formation d'initiation à XSL fransform en PDF | Cours informatique"

Copied!
21
0
0

Texte intégral

(1)

XSLT (eXtensible Stylesheet Language

Transforma-tion)

Table des mati`

eres

1

Introduction

2

1.1

efinition de XSL . . . .

2

1.2

Structure d’une feuille de style . . . .

2

2

Les r`

egles de transformation

3

2.1

eclaration d’une r`

egle . . . .

3

2.2

Une r`

egle pour plusieurs ´

el´

ements . . . .

3

2.3

Traitement des ´

el´

ements fils . . . .

4

2.4

election des ´

el´

ements fils . . . .

4

2.5

Notre exemple . . . .

5

2.6

Une feuille sans r`

egle . . . .

5

2.7

Traitement de l’exemple (2) . . . .

5

2.8

Exemple de feuille de style

. . . .

6

2.9

Utilisation de la feuille de style . . . .

6

2.10 S´

election des r`

egles par paquets . . . .

6

3

Construction de l’arbre r´

esultat

7

3.1

Noeud textuel constant . . . .

7

3.2

Noeud texte par XPATH

. . . .

7

3.3

Noeud ´

el´

ement et attribut . . . .

8

3.4

Noeud ´

el´

ement et attribut dynamique

. . . .

8

3.5

Copie de noeuds . . . .

9

3.6

Copie du noeud courant sans le contenu . . . .

10

3.7

Noeud commentaire . . . .

10

3.8

Noeud instruction de traitement

. . . .

10

4

Les ´

el´

ements de structure

11

4.1

Les sections conditionnelles . . . .

11

4.2

Boucle sur des ensembles de noeuds . . . .

12

4.3

Tri d’un ensemble de noeuds . . . .

12

5

Les variables XSL

13

5.1

efinition de variables . . . .

13

5.2

efinition de variables (suite) . . . .

13

(2)

6

R`

egles nomm´

ees et param`

etres

14

6.1

Param`

etres de r`

egle . . . .

14

6.2

R`

egles nomm´

ees . . . .

15

6.3

Param`

etres d’une feuille XSL . . . .

15

7

Traitement des espaces de noms

15

8

Indexation et utilitaires

16

8.1

Indexation du document XML

. . . .

16

8.2

Utilitaires

. . . .

17

9

Formatage des nombres

17

10 Extension d’XPATH par XSL

18

11 Les d´

eclarations

19

11.1 Format de sortie . . . .

19

11.2 Importation de feuilles XSL . . . .

19

11.3 Priorit´

e des r`

egles import´

ees

. . . .

19

11.4 Inclusion de feuille XSL . . . .

20

11.5 Liste d’attributs r´

eutilisable . . . .

20

11.6 Gestion des espaces . . . .

20

12 ´

Etendre XSLT

21

12.1 ´

Etendre XSL avec JAVA . . . .

21

12.2 Utiliser son extension . . . .

21

12.3 Extension standard pour XSLT . . . .

22

1

Introduction

1.1

efinition de XSL

XSL (

eXtensible Stylesheet Language

) c’est

• XSLT (

XSL Transformation

),

• FO (

Formatting Object

)

XSLT est un langage permettant de produire un document XML ou texte `

a partir d’un autre document par

application de r`

egles de transformation.

C’est donc un outil

essentiel

dans une chaˆıne de traitement XML.

FO est une DTD XML qui d´

efinie la pr´

esentation d’un texte sur un document papier (PS, GV, PDF, DPS).

1.2

Structure d’une feuille de style

(3)

<xsl:stylesheet xmlns:xsl="http://www.w3.org/1999/XSL/Transform" version="1.0" > ... d´eclarations globales ... (?) ... r`egles de transformation ... (?) </xsl:stylesheet>

Le symbole (?) indique le caract`

ere optionnel d’un attribut ou d’un ´

el´

ement.

2

Les r`

egles de transformation

2.1

eclaration d’une r`

egle

L’attribut match indique les noeuds trait´

es par cette r`

egle :

<xsl:template match="expression_XPATH" >

... contenu de remplacement ... (?) </xsl:template>

Fonctionnement

: Dans le corps d’une r`

egle

• les noeuds ´

el´

ements XSL sont

interpr´

et´

es

• les autres noeuds (texte et ´

el´

ement) sont

recopi´

es

Dans une r`

egle, le

noeud par d´

efaut

est celui sur lequel s’applique la r`

egle.

<xsl:template match="section[nom]" >

<p> <!-- recopi´e --> nom : <!-- recopi´e --> <xsl:value-of select="nom"/> <!-- interpr´et´e --> </p> <!-- recopi´e --> </xsl:template>

2.2

Une r`

egle pour plusieurs ´

el´

ements

L’attribut match peut contenir plusieurs expressions XPATH connect´

ees par un | (

union des ensembles de

noeuds

) :

<xsl:template match="expr1|expr2|..." >

... ´el´ement(s) de remplacement ...

</xsl:template>

Exemple

:

<xsl:template match="section|chapitre|definition"> <p>nom : <xsl:value-of select="nom"/></p> </xsl:template>

(4)

2.3

Traitement des ´

el´

ements fils

Dans une r`

egle, l’´

el´

ement xsl:apply-templates traite les fils du noeud courant :

Feuille XSL

<xsl:template match="/"> <liste> <xsl:apply-templates /> </liste> </xsl:template> <xsl:template match="a|b"> <xsl:apply-templates /> </xsl:template> <xsl:template match="c"> <c> <xsl:value-of select="." /> </c> </xsl:template>

Donn´

ees XML

<a> <b> <c>Hello</c> </b> <b/> <a/> </a>

esultat

<liste> <c>Hello</c> </liste>

2.4

election des ´

el´

ements fils

Nous

pouvons

directement

electionner

les

´

elements

`

a

traiter

avec

l’attribut

select

de

xsl:apply-templates :

<xsl:template match="/"> <liste> <xsl:apply-templates select="//c" /> </liste> </xsl:template> <xsl:template match="c"> <c> <xsl:value-of select="." /> </c> </xsl:template>

(5)

2.5

Notre exemple

<?xml version="1.0" encoding="utf-8" ?> <!DOCTYPE stock SYSTEM "essai.dtd">

<stock> <produit>

<nom> Livre </nom>

<prix monnaie="Francs"> 50 </prix>

<comment> Un article tr`es recherch´e </comment> </produit>

<produit>

<nom> CD </nom>

<prix monnaie="Euros"> 23 </prix> </produit>

</stock>

2.6

Une feuille sans r`

egle

Une feuille de style contient toujours deux r`

egles

par d´

efaut

:

• La premi`

ere code le

parcours en profondeur

:

<xsl:template match="*|/"> <!-- R1 --> <xsl:apply-templates/>

</xsl:template>

• La seconde extrait les noeuds de

type texte

:

<xsl:template match="text()"> <!-- R2 --> <xsl:value-of select="."/>

</xsl:template>

2.7

Traitement de l’exemple (2)

L’application d’une feuille de style vide donne :

Livre 50 Un article très recherché CD 23 <?xml version="1.0" encoding="UTF−8"?> R1 R2 R2 R2 R2 R2 R1 R1 R1 XSL

(6)

Le texte est cod´

e en UTF-8.

2.8

Exemple de feuille de style

<xsl:stylesheet xmlns:xsl="http://www.w3.org/1999/XSL/Transform" version="1.0"> <xsl:output method="html" doctype-system="http://www.w3.org/TR/REC-html40/loose.dtd" /> <xsl:template match="/"> <!-- R1 --> <html><body> <xsl:apply-templates/> </body></html> </xsl:template> <xsl:template match="stock"> <!-- R2 --> <h1>Stock de la soci´et´e</h1>

<xsl:apply-templates/> </xsl:template>

<xsl:template match="produit"> <!-- R3 --> <h2>Produit <xsl:value-of select="nom"/></h2>

<p>Prix : <xsl:value-of select="prix"/> en <xsl:value-of select="prix/@monnaie"/></p> <xsl:if test="comment"> <p><xsl:value-of select="comment"/></p> </xsl:if> </xsl:template> </xsl:stylesheet>

2.9

Utilisation de la feuille de style

L’application de la feuille de style pr´

ec´

edente donne :

<p> Un article tr&egrave;s recherch&eacute; </p> <p>Prix : 50 en Francs</p> <h2>Produit Livre </h2> <h1>Stock de la soci&eacute;t&eacute;</h1> <body> <html> <!DOCTYPE HTML SYSTEM "http://www..."> </html> </body> <p>Prix : 23 en Euros</p> <h2>Produit CD </h2> XSL R1 R2 R3 R3

2.10

election des r`

egles par paquets

(7)

Deux r`

egles et deux modes

<xsl:template match="produit">

<h2>Produit <xsl:value-of select="nom"/></h2>

<xsl:apply-templates select="." mode="seulement-prix" /> <xsl:apply-templates select="." mode="seulement-comment" /> </xsl:template>

<xsl:template match="produit" mode="seulement-prix"> <p>Prix : <xsl:value-of select="prix"/>

en <xsl:value-of select="prix/@monnaie"/></p> </xsl:template>

<xsl:template match="produit" mode="seulement-comment"> <xsl:if test="comment">

<p><xsl:value-of select="comment"/></p> </xsl:if>

</xsl:template>

3

Construction de l’arbre r´

esultat

3.1

Noeud textuel constant

Ins´

erer un noeud texte

<xsl:text>

... texte `a ins´erer ... </xsl:text>

Exemple

: pour obtenir Soleil & nuages :

<xsl:text>Soleil &amp; nuages</xsl:text>

<xsl:text><![CDATA[Soleil & nuages]]></xsl:text>

Par d´

efaut

, les noeuds de texte sont ´

egalement recopi´

es :

<xsl:template match="prix">

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

Pour ´

eviter les

espaces superflus

il est pr´

ef´

erable d’utiliser :

<xsl:template match="prix"> <xsl:text>Prix : </xsl:text> <xsl:value-of select="."/> </xsl:template>

Remarque

: Les noeuds constitu´

es

uniquement

d’espaces ( &x20; , &x9; , &xD; , &xA; ) ne sont pas r´

ecopi´

es.

3.2

Noeud texte par XPATH

(8)

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

Exemples

:

<xsl:value-of select="/stock/produit[nom=’Livre’]/prix" />

<!-- le fils "nom" du noeud courant --> <xsl:value-of select="./nom" />

Seul le

premier noeud

renvoy´

e est utilis´

e (appel implicite de la fonction string ).

3.3

Noeud ´

el´

ement et attribut

• Pour ins´

erer un

noeud de type ´

el´

ement

dont on connait le nom il suffit de le placer dans la r`

egle :

<xsl:template match="produit">

<h2>Produit <xsl:value-of select="nom"/></h2> </xsl:template>

• Une expression

XPATH

peut ˆ

etre utilis´

ee dans la valeur d’un attribut si elle est entour´

ee

d’accolades

(utilisez {{ pour { et }} pour } ).

<xsl:template match="produit">

<h2 id="{@id}" title="Description : {comment}"> <xsl:value-of select="nom"/>

</h2>

</xsl:template>

On consid`

ere dans cet exemple que l’´

el´

ement produit poss`

ede un attribut id et un sous-´

el´

ement comment .

3.4

Noeud ´

el´

ement et attribut dynamique

Quand on ne connait pas le nom de l’´

el´

ement `

a ins´

erer, on utilise :

<xsl:element

name="nom_local" (!) namespace="espace_de_nom" (?) >

... contenu de cet ´el´ement ... </xsl:element>

eme chose pour un attribut :

<xsl:attribute

name="nom_local" (!) namespace="espace_de_nom" (?) >

... valeur de cet attribut ... </xsl:attribute>

(9)

<prix monnaie="Euros"> 10 ==> <Euros prix="10"/> </prix>

avec la r`

egle

<xsl:template match="prix"> <xsl:element name="{@monnaie}"> <xsl:attribute name="prix"> <xsl:value-of select="."/> </xsl:attribute> </xsl:element> </xsl:template>

Exemple 2

: La notation

<section id="{une-expression-xpath}"> ... d´efinition du contenu ... </section>

est ´

equivalente `

a

<section> <!-- attribut --> <xsl:attribute name="id"> <xsl:value-of select="une-expression-xpath"/> </xsl:attribute> <!-- contenu --> ... d´efinition du contenu ... </section>

On peut donc commencer par

efinir

un ´

el´

ement, puis lui

ajouter des attributs

et enfin lui

ajouter du contenu

.

3.5

Copie de noeuds

Copie directe d’un ensemble de noeuds :

<xsl:copy-of select="expression_XPATH" />

Exemple 1

: ne garder que le nom et le prix :

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

<xsl:copy-of select="nom|prix"/> </produit>

</xsl:template>

Exemple 2

: copie fid`

ele :

<xsl:template match="/" > <xsl:copy-of select="/" /> </xsl:template>

(10)

3.6

Copie du noeud courant sans le contenu

Cr´

eer un ´

el´

ement de mˆ

eme nom que le noeud

cou-rant :

<xsl:copy>

... contenu ... </xsl:copy>

Examples

<!-- Tout recopier (ou presque) --> <xsl:template match="*"> <xsl:copy> <xsl:xsl:copy-of select="@*" /> <xsl:apply-templates /> </xsl:copy> </xsl:template> <!-- Enlever le prix --> <xsl:template match="cadeau"> <xsl:copy> <xsl:copy-of select="*[not(self::prix)]"/> </xsl:copy> </xsl:template>

3.7

Noeud commentaire

Ins´

erer un commentaire :

<xsl:comment>

... texte du commentaire ... </xsl:comment>

3.8

Noeud instruction de traitement

L’instruction XSL

<xsl:processing-instruction name="cible" >

arg1=’val1’ arg2=’val2’

</xsl:processing-instruction>

donne dans le document produit

(11)

4

Les ´

el´

ements de structure

4.1

Les sections conditionnelles

<xsl:if test="expression_XPATH"> ...

</xsl:if>

Comportement

: Le corps de l’´

el´

ement xsl:if est trait´

e

si et seulement si

boolean(expression XPATH)

est vraie.

Remarque

: Il n’y a pas de structure

sinon

.

Exemple

:

<xsl:template match="produit">

<h2>Produit <xsl:value-of select="nom"/></h2>

<xsl:if test="comment[ (normalize-space(.) != ’’) ]"> <p><xsl:value-of select="comment"/></p> </xsl:if> </xsl:template>

Le choix multiple

<xsl:choose> <xsl:when test="expression_XPATH_1"> ... </xsl:when> <xsl:when test="expression_XPATH_2"> ... </xsl:when> ... <xsl:otherwise> ... </xsl:otherwise> </xsl:choose>

La partie otherwise est optionnelle. Les ´

el´

ements when peuvent ˆ

etre vides.

Exemple

de choix multiple :

(12)

<xsl:template match="produit"> <xsl:choose> <xsl:when test="not(comment)"> <p>Pas de commentaire.</p> </xsl:when> <xsl:when test="(normalize-space(comment) = ’’)"> <p>Commentaire vide.</p> </xsl:when> <xsl:otherwise> <p><xsl:value-of select="comment" /></p> </xsl:otherwise> </xsl:choose> </xsl:template>

4.2

Boucle sur des ensembles de noeuds

L’instruction XSL for-each modifie le noeud courant :

<xsl:for-each select="expression_XPATH"> ...

</xsl:for-each>

Exemple

:

<xsl:template match="/"> <h1>Liste des noms</h1> <xsl:for-each select="//nom">

<p>nom : <xsl:value-of select="."/></p> </xsl:for-each>

</xsl:template>

4.3

Tri d’un ensemble de noeuds

L’instruction xsl:sort associ´

ee `

a xsl:for-each et xsl:apply-templates

modifie

l’ordre des noeuds :

<xsl:sort

select="expression_XPATH" (.) data-type="text|number" (text) order="ascending|descending" (ascending) case-order="upper-first|lower-first" (upper-first) lang="nom_de_langue" (langue syst`eme) />

Exemple 1

:

<xsl:template match="/">

<h1>Liste des produits</h1> <xsl:for-each select="//produit">

<xsl:sort select="nom"/>

<p>nom : <xsl:value-of select="nom"/></p> </xsl:for-each>

(13)

Exemple 2

:

<xsl:template match="/">

<h1>Liste des produits</h1>

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

<xsl:sort select="prix" order="descending" /> <xsl:sort select="nom" order="descending" /> </xsl:apply-templates>

</xsl:template>

Plusieurs clauses xsl:sort sont utilisables.

5

Les variables XSL

5.1

efinition de variables

Les variables contenants un fragment de

l’arbre resultat

. Elles peuvent ˆ

etre

globales

ou

locales

.

<xsl:variable name="nom_de_la_variable"> ... contenu ... </xsl:variable>

Exemple

<xsl:variable name="head"> <head>

<link rel="stylesheet" type="text/css" href="style.css" /> </head> </xsl:variable> <xsl:template match="/"> <html> <xsl:copy-of select="$head"/> <body>...</body> </html> </xsl:template>

5.2

efinition de variables (suite)

Les variables contenants un fragment de

l’arbre d’entr´

ee

:

<xsl:variable

name="nom_de_la_variable" select="expression_XPATH" />

(14)

Exemple

<xsl:variable name="produits" select="//produit" /> <xsl:variable name="pas.cher" select="$produits[prix &lt; 10]" /> <xsl:variable name="gratuit" select="$pas.cher[prix = 0]" />

<xsl:template match="/"> ...

<xsl:for-each select="$pas.cher[ comment ]"> ...

</xsl:for-each> ...

</xsl:template>

5.3

Priorit´

es fix´

ees entre les r`

egles

L’attribut priority permet

d’augmenter

(si > 0) ou de

diminuer

(si < 0) la priorit´

e d’une r`

egle :

<!-- traiter les produits dont le prix est sup´erieur `a 10 --> <xsl:template match="produit[ (prix &gt; 10) ]" priority="100" >

...

</xsl:template>

<!-- traiter les produits -->

<xsl:template match="produit" priority="0" > <!-- d´efaut --> ...

</xsl:template>

<!-- traiter les ´el´ements -->

<xsl:template match="*" priority="-1000" > ...

</xsl:template>

6

R`

egles nomm´

ees et param`

etres

6.1

Param`

etres de r`

egle

R`

egle avec param`

etres

<xsl:template match="produit">

<xsl:param name="avecPrix" select="false()" /> <xsl:param name="prix" select="prix" />

<h2><xsl:value-of select="nom" /></h2> <xsl:if test="$avecPrix">

<p>Prix : <xsl:value-of select="$prix" /></p> </xsl:if>

</xsl:template>

Passage des param`

etres

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

<xsl:with-param name="avecPrix" select="true()" />

<xsl:with-param name="prix" select="(prix * 0.9)" /><!-- r´eduction --> </xsl:apply-templates>

(15)

6.2

R`

egles nomm´

ees

R`

egle accompagn´

ee d’un nom

<xsl:template name="faire-le-site-du-master"> <xsl:apply-templates select="//parcours" /> <xsl:apply-templates select="//enseignement" /> <xsl:apply-templates select="//intervenant" /> </xsl:template>

Appel de r`

egle nomm´

ee

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

<xsl:call-template name="faire-le-site-du-master" /> <xsl:call-template name="faire-autre-chose" /> </xsl:apply-templates>

Remarque

: le noeud courant de la r`

egle

appelante

devient le noeud courant de la r`

egle

appel´

ee

.

Remarque

: vous pouvez utiliser des

param`

etres

.

6.3

Param`

etres d’une feuille XSL

Il est possible d’ajouter des

param`

etres `

a une feuille XSL

afin de changer son fonctionnement :

Feuille XSL avec param`

etre

<xsl:stylesheet

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

<xsl:param name="debug" select="false()" />

... r`egles ...

</xsl:stylesheet>

Les param`

etres s’utilisent comme des variables :

<xsl:if test="($debug)"> MODE DEBUG

</xsl:if>

7

Traitement des espaces de noms

Il est possible de travailler sur

plusieurs espaces de noms

:

<stock xmlns="http://www.luminy.univ-mrs.fr"> ...

(16)

Feuille de style

<xsl:stylesheet xmlns:xsl="http://www.w3.org/1999/XSL/Transform" xmlns:lum="http://www.luminy.univ-mrs.fr" xmlns:dil="http://www.dil.univ-mrs.fr" version="1.0"> <xsl:template match="/"> <dil:prix> <xsl:value-of select="//lum:produit[1]/lum::prix" /> </dil:prix> </xsl:template> </xsl:stylesheet>

L’application de la feuille de style donne :

<dil:prix xmlns:dil="http://www.dil.univ-mrs.fr" xmlns:lum="http://www.luminy.univ-mrs.fr" > 50

</dil:prix>

L’espace de nom

lum

est d´

efini mais pas utilis´

e. Nous pouvons demander sa suppression avec

exclude-result-prefixes :

<xsl:stylesheet xmlns:xsl="http://www.w3.org/1999/XSL/Transform" xmlns:lum="http://www.luminy.univ-mrs.fr" xmlns:dil="http://www.dil.univ-mrs.fr" exclude-result-prefixes="lum" version="1.0"> ... m^eme r`egle ... </xsl:stylesheet>

8

Indexation et utilitaires

8.1

Indexation du document XML

Cr´

eation de cl´

es :

<programme> <module> <cours> <nom>XML</nom> <enseignant>Jean-Luc Massat</enseignant> ... <xsl:key name="lesCours" (!) match="/programmes/module/cours" (!) use="nom" (!) />

(17)

key(’lesCours’, ’XML’)/enseignant

Exemple 2

:

...

<produit code="756200"> ... </produit> <produit code="563980"> ... </produit> ... <commande> <code-produit>756200</code-produit> <code-produit>563980</code-produit> ... </commande> ...

<xsl:key name="commandesParCode" match="//commande" use="code-produit" />

<xsl:template match="/">

<h2>Les commandes des produits en stock</h2>

<xsl:variable name="enStock" select="//produit[ (stock &gt; 0) ]" /> <xsl:apply-templates select="key(’commandesParCode’, $enStock/@code)" /> </xsl:template>

8.2

Utilitaires

´

Emission d’un

message d’erreur

:

<xsl:message

terminate="yes|no" (?) />

... texte du message ... </xsl:message>

Pour

imprimer

un message sur la sortie d’erreur standard et ´

eventuellement

arrˆ

eter

le processeur XSL.

9

Formatage des nombres

La fonction format-number(nombre,format) renvoie une chaˆıne issue du formatage d’un nombre :

format-number(500100, "###,###.00") = 500,100.00

Nous pouvons ´

egalement d´

efinir un format et l’utiliser :

<xsl:decimal-format name="mesNombres" (?) decimal-separator="," (.) grouping-separator="." (,) infinity="" (infinity) NaN="" (NaN) percent="%" (%) per-mille="M" (?) />

(18)

format-number(34.567, "0,##", "mesNombres") = 34,57 format-number(.6, "0%", "mesNombres") = 6% format-number(.6, "0M", "mesNombres") = 60M

10

Extension d’XPATH par XSL

XPATH est

´

etendu

:

• ajout de la fonction generate-id(noeud) qui renvoie un identifiant unique :

<!-- test de noeuds identiques -->

<xsl:if test="generate-id($n1) = generate-id($n2)"> ...

</xsl:if>

• ajout de la fonction current() qui renvoie le noeud courant

<xsl:template ...>

<xsl:variable name="p" select="//article[@id = current()/@id]"/> ...

</xsl:template ...>

• ajout de la fonction key(index,clef) ,

• ajout du ou | dans les expressions.

• ajout de la fonction format-number(nombre,format)

• ajout de la fonction document(URI) qui renvoie le document XML identifi´e par l’URI

<xsl:value-of select="document(’stock.xml’)//produit[prix > 10]" />

Deux documents li´

es

<xsl:variable name="stock" select="document(’/chemin/vers/stock.xml’)" /> <xsl:variable name="achats" select="document(’achat.xml’, $stock)" />

Attention

: l’utilisation des noeuds issus d’un autre arbre entraˆıne un

changement de contexte

qui

s’applique a toutes les

expressions XPATH

(nouvelle d´

efinition de la racine / ).

11

Les d´

eclarations

11.1

Format de sortie

(19)

<xsl:output method="xml|html|text|..." (xml) version="nu_de_version" (1.0) encoding="encodage" (UTF-8) indent="yes|no" (yes) xml-declaration="yes|no" (yes) doctype-system="URL_de_la_DTD" (?) doctype-public="FPI_de_la_DTD" (?) cdata-section-elements="liste d’´el´ements" (?) ...

/>

11.2

Importation de feuilles XSL

Importation de feuilles XSL avec gestion de la priorit´

e :

<xsl:import href="URL_de_la_feuille_XSL" />

Les r`

egles import´

ees sont moins prioritaires que les r`

egles d´

efinies dans la feuille courante.

Cette d´

eclaration doit figurer en tˆ

ete d’une feuille de style.

11.3

Priorit´

e des r`

egles import´

ees

Les r`

egles

internes

sont

plus prioritaires

que les r`

egles

import´

ees

. La clause <xsl:apply-imports/> permet

de choisir les r`

egles import´

ees.

Feuille base.xsl

<!-- r`egle R1 --> <xsl:template match="pre"> <xsl:copy-of select="."/> </xsl:template>

Feuille mise-en-forme.xsl

<xsl:import href="base.xsl" /> <!-- r`egle R2 --> <xsl:template match="pre"> <center><xsl:apply-imports /></center> </xsl:template>

L’application de mise-en-forme.xsl

<center> <!-- g´en´er´e par la r`egle R2 --> <pre> ... </pre> <!-- g´en´er´e par la r`egle R1 --> </center>

11.4

Inclusion de feuille XSL

Inclusion de feuilles XSL (aucun impact sur la priorit´

e) :

(20)

11.5

Liste d’attributs r´

eutilisable

Forme g´

en´

erale :

<xsl:attribute-set name="nom-de-liste" (!) use-attribute-sets="nom-de-liste" (?) > ... d´efinitions d’attributs ... </xsl:attribute-set>

Utilit´

e

: regrouper les d´

efinitions d’attributs pour les r´

eutiliser associ´

ees `

a plusieurs ´

el´

ements (tableaux,

para-graphes, images, etc.)

Les listes sont d´

efinies en

dehors

des r`

egles.

Exemple

:

<xsl:attribute-set name="classeTableau" >

<xsl:attribute name="class">tableau</xsl:attribute> </xsl:attribute-set>

<xsl:attribute-set name="tableauAvecBords" use-attribute-sets="classeTableau" > <xsl:attribute name="border">1</xsl:attribute> </xsl:attribute-set> <xsl:template match="/"> <table xsl:use-attribute-sets="tableauAvecBords" > ... contenu du tableau ... </table> </xsl:template>

nous donne

<table class="tableau" border="1"> ... contenu du tableau ... </table>

11.6

Gestion des espaces

Politique par d´

efaut de gestion des blancs pour les noeuds de type texte.

<xsl:preserve-space

elements="liste_d’´el´ements" (!) />

<xsl:strip-space

elements="liste_d’´el´ements" (!) />

12

Etendre XSLT

´

12.1

´

Etendre XSL avec JAVA

(21)

Avec la classe Java

import java.util.Date; import java.util.Calendar;

public class GetDate {

public static Date getDate(String full) { Date d = Calendar.getInstance().getTime(); if (! full.equals("true")) { d.setMinutes(0); d.setHours(0); } return d; } }

12.2

Utiliser son extension

et la feuille de style :

<xsl:stylesheet xmlns:xsl="http://www.w3.org/1999/XSL/Transform" version="1.0" xmlns:java="http://xml.apache.org/xslt/java" exclude-result-prefixes="java"> <xsl:output method="html"/> <xsl:template match="/"> <xsl:value-of select="java:GetDate.getDate(’true’)" /> <xsl:value-of select="java:GetDate.getDate(’false’)" /> </xsl:template>

nous obtenons

Tue Jan 21 17:48:03 CET 2015 Tue Jan 21 00:00:03 CET 2015

12.3

Extension standard pour XSLT

Vous pouvez ´

etudier la librairie EXSLT :

Références

Documents relatifs

Moreover, even though they were generally species-poor, unique peatlands, in both study regions, generally had a species composition of high conservation value, with a

Le réseau international pour le suivi démographique des populations et de leur santé (INDEPTH Network) a été lancé en 1998 pour développer et exploiter le potentiel collectif de

E n s ec ond [ieu, il faudrait imp6rati vemen t des rdgions frangaises plus grandes et, donc, moins nom- breuses car I'attractivit6 et les capacit6s de d6vblop-

En effet, aucune des autorités administratives auxquelles s’est substitué le Défenseur des droits n’avait bénéficié de la part du législateur, du droit de demander un avis

3.20 Fluctuations de vitesse longitudinale et verticale mesurées par (a) 1’ADV et (b) le PC-ADP pour les mesures de vitesses dii 25 juillet ((1 70cms1) du faisceau 3 tIn PC-ADP à 21

A partir des enquêtes nationales SUMER 2003 et 2010, nous examinons l’influence d’une instance représentative du personnel en charge de la santé-sécurité, le Comité

The work in [3] uses a methodology called Pseudo-Subjective Quality Assessment (PSQA) [10], which is based on Random Neural Network (RNN), a family of Artificial Neural Networks

A mancha americana é chamada na cafeicultura da América Central, onde causa sérios danos, por “Ojo de Gallo” ou “Gotera “ e, no ano passado, em viagem à Costa Rica,