Top Banner
Tutoriel XSLT F. Sajous ERSS – 01/04/2005
23

Tutoriel XSLT F. Sajous ERSS – 01/04/2005. 2 Plan Rappels XML XPath XSLT Principes Templates et moteur Structures de contrôle XSLT Advanced.

Apr 03, 2015

Download

Documents

Welcome message from author
This document is posted to help you gain knowledge. Please leave a comment to let me know what you think about it! Share it to your friends and learn new things together.
Transcript
Page 1: Tutoriel XSLT F. Sajous ERSS – 01/04/2005. 2 Plan Rappels XML XPath XSLT Principes Templates et moteur Structures de contrôle XSLT Advanced.

Tutoriel XSLT

F. SajousERSS – 01/04/2005

Page 2: Tutoriel XSLT F. Sajous ERSS – 01/04/2005. 2 Plan Rappels XML XPath XSLT Principes Templates et moteur Structures de contrôle XSLT Advanced.

2

Plan

• Rappels• XML• XPath

• XSLT• Principes• Templates et moteur• Structures de contrôle

• XSLT Advanced

Page 3: Tutoriel XSLT F. Sajous ERSS – 01/04/2005. 2 Plan Rappels XML XPath XSLT Principes Templates et moteur Structures de contrôle XSLT Advanced.

3

Rappel superflu : XML

<?xml version="1.0" encoding="iso-8859-1"?><lexicalDatabase> <title level="resource">Morphalou : Lexique morphologique</title>

<lexicalEntry lemma="linguistique" grammaticalCategory="commonNoun" grammaticalGender="feminine">

<inflectionGroup> <inflection orthography="linguistique" grammaticalNumber="singular"/> <inflection orthography="linguistiques" grammaticalNumber="plural"/> </inflectionGroup> </lexicalEntry></lexicalDatabase>

Exemple : Morphalouen-tête

balise de fin

élément vide

@ribut

balise de début texte

Page 4: Tutoriel XSLT F. Sajous ERSS – 01/04/2005. 2 Plan Rappels XML XPath XSLT Principes Templates et moteur Structures de contrôle XSLT Advanced.

4

XPath : rappel... superflu ?

• langage pour adresser des parties de documents XML• parties de documents = ensemble de noeuds de la

structure arborescente• sélection par

• type et la valeur des éléments• type et la valeur des attributs• place occupée dans l'arbre• typologie des voisins, parents, descendants...• fonctions XPath

• exemples• //inflection[@orthography='linguistique']/@grammaticalNumber• //inflection[@orthography='linguistique']/../../@grammaticalCategory• //lexicalEntry[count(.//inflection[@orthography=../../@lemma]) = count(.//inflection)]

Page 5: Tutoriel XSLT F. Sajous ERSS – 01/04/2005. 2 Plan Rappels XML XPath XSLT Principes Templates et moteur Structures de contrôle XSLT Advanced.

5

XSLT : acteurs

ProcesseurXSLT

XMLrésultat

XMLrésultat sériali-

sateur

XSLXSL

ProcesseurXSLT

XMLsource

XMLsource X

HTMLPDFTexte...

à partir de quoi

comment

quoi

Page 6: Tutoriel XSLT F. Sajous ERSS – 01/04/2005. 2 Plan Rappels XML XPath XSLT Principes Templates et moteur Structures de contrôle XSLT Advanced.

6

Sélection + Transformation

/XML

filtrage(patrons ou templates)

règles de transformation

XML résultat

Page 7: Tutoriel XSLT F. Sajous ERSS – 01/04/2005. 2 Plan Rappels XML XPath XSLT Principes Templates et moteur Structures de contrôle XSLT Advanced.

7

Et concrètement : les templates

<?xml version="1.0" encoding="iso-8859-1"?><xsl:stylesheet xmlns:xsl='http://www.w3.org/1999/XSL/Transform'> <xsl:template match="expression xpath1"> <!-- construire sortie correspondant à l'élément (aux éléments filtré(s) --> </xsl:template>

<xsl:template match="expression xpath2"> <!-- construire sortie correspondant à l'élément (aux éléments) filtré(s) --> </xsl:template></xsl:stylesheet>

en-tête

racine

patrons

XML

XML

Page 8: Tutoriel XSLT F. Sajous ERSS – 01/04/2005. 2 Plan Rappels XML XPath XSLT Principes Templates et moteur Structures de contrôle XSLT Advanced.

8

Templates : un exemple

<analyse> <sent> <taggertoken form="Il" pos="PRO"/> <taggertoken form="était" pos="VER:sg"/> <taggertoken form="une" pos="DET:femi:sg"/> <taggertoken form="fois" pos="NOM:femi:sg"/> ... </sent> <sent> ... </sent></analyse>

XML source

<analyse> <sent> <snum>1</snum> <token>Il</token> <token>était</token> <token>une</token> <token>fois</token> </sent> ...</analyse>

Résultat souhaité

<xsl:template match="sent"> <sent><snum> <xsl:value-of select="position()"/></snum></sent></xsl:template><xsl:template match="taggertoken"> <token><xsl:value-of select="@form"/></token></xsl:template>XSL

<sent> <snum>1</snum></sent>...

Résultat obtenu

Page 9: Tutoriel XSLT F. Sajous ERSS – 01/04/2005. 2 Plan Rappels XML XPath XSLT Principes Templates et moteur Structures de contrôle XSLT Advanced.

9

Moteur !

analyse

sent sent

taggertokenform="il"pos="PRO"

taggertokenform="était"pos="VER:sg"

taggertokenform="une"pos="DET:femi:sg"

...

...

template correspondant ?Non !

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

</xsl:template>

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

</xsl:template>

<xsl:template match="sent"> <snum><xsl:value-of select="position()"/></snum></xsl:template>

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

</xsl:template>

Oui !

<sent> <snum>1</snum></sent>

Page 10: Tutoriel XSLT F. Sajous ERSS – 01/04/2005. 2 Plan Rappels XML XPath XSLT Principes Templates et moteur Structures de contrôle XSLT Advanced.

10

Pour éviter les infanticides...

<analyse> <sent> <taggertoken form="Il" pos="PRO"/> <taggertoken form="était" pos="VER:sg"/> <taggertoken form="une" pos="DET:femi:sg"/> <taggertoken form="fois" pos="NOM:femi:sg"/> ... </sent> <sent> ... </sent></analyse>

XML source

<sent> <snum>1</snum> <token>Il</token> <token>était</token> <token>une</token> <token>fois</token> </sent> ...

Résultat

<xsl:template match="sent"> <sent><snum> <xsl:value-of select="position()"/></snum> <xsl:apply-templates/></sent></xsl:template><xsl:template match="taggertoken"> <token><xsl:value-of select="@form"/></token></xsl:template>XSL

<xsl:template match="/"> <analyse> <xsl:apply-templates/> </analyse></xsl:template>

...et les parenticides !

<analyse>

</analyse>

Page 11: Tutoriel XSLT F. Sajous ERSS – 01/04/2005. 2 Plan Rappels XML XPath XSLT Principes Templates et moteur Structures de contrôle XSLT Advanced.

11

Patrons par défaut<livre> <chapitre> <titre>XML</titre> <contenu>XML : un lang. de balises extensibles...</contenu> </chapitre> <chapitre> <titre>XSLT</titre> <contenu>XSLT est un lang. de tranforma°...</contenu> <chapitre/></livre>

<xsl:template match="titre"> <xsl:value-of select="position()"/> <xsl:value-of select="titre"/></xsl:template>

réalisons un sommaire...

1 XMLXML : un lang.de balises extensibles.. 2 XSLTXSLT estun lang. de tranforma°...

Résultat

Le processeur XSLT pacourt l'arbre :- "en profondeur d'abord" (racine vers feuilles)- puis de gauche à droite

Pour chaque élément rencontré :- patron défini : on l'applique- patron défini : patron par défaut !

Page 12: Tutoriel XSLT F. Sajous ERSS – 01/04/2005. 2 Plan Rappels XML XPath XSLT Principes Templates et moteur Structures de contrôle XSLT Advanced.

12

Défaut des patrons

• 3 patrons par défaut :• éléments textuels : générer le texte en sortie• commentaires : ignorer• autres noeuds : appliquer les patrons (définis ou par

défaut) aux enfants

<livre> <chapitre> <titre>XML</titre> <contenu>XML : un lang. de balises extensibles...</contenu> </chapitre> <chapitre> <titre>XSLT</titre> <contenu>XSLT est un lang. de tranforma°...</contenu> <chapitre/></livre>

<xsl:template match="titre"> <xsl:value-of select="position()"/> <xsl:value-of select="."/></xsl:template>

1 XMLXML : un lang.de balises extensibles...2 XSLTXSLT estun lang. de tranforma°...

Page 13: Tutoriel XSLT F. Sajous ERSS – 01/04/2005. 2 Plan Rappels XML XPath XSLT Principes Templates et moteur Structures de contrôle XSLT Advanced.

13

En attendant le grand soir...<livre> <chapitre> <titre>XML</titre> <contenu>XML : un lang. de balises extensibles...</contenu> </chapitre> <chapitre> <titre>XSLT</titre> <contenu>XSLT est un lang. de tranforma°...</contenu> <chapitre/></livre>

<xsl:template match="titre"> <xsl:value-of select="position()"/> <xsl:value-of select="."/></xsl:template>

XML

1 XML2 XSLT

Résultat attendu

<xsl:template match="contenu"></xsl:template>+

template défini pour contenu qui génère une sortie vide

<xsl:template match="*/text()"></xsl:template>ou

(joue sur les priorités)

<xsl:template match="/"> <xsl:for-each select="//titre"> <xsl:value-of select="position()"/> <xsl:value-of select="."/> </xsl:for-each></xsl:template>

ou

template défini pour la racineet... structure de contrôle...

Page 14: Tutoriel XSLT F. Sajous ERSS – 01/04/2005. 2 Plan Rappels XML XPath XSLT Principes Templates et moteur Structures de contrôle XSLT Advanced.

14

Priorités du patronat...<livre> <chapitre> <titre>XML</titre> <contenu>XML : un lang. de balises extensibles...</contenu> </chapitre> <chapitre> <titre>XSLT</titre> <contenu>XSLT est un lang. de tranforma°...</contenu> <chapitre/></livre>

<xsl:template match="titre"> <xsl:value-of select="position()"/> <xsl:value-of select="."/></xsl:template>

<xsl:template match="*/text()"></xsl:template>

règle du "plus spécifique"

<xsl:template match="titre"> Titre : <xsl:value-of select="."/></xsl:template><xsl:template match="/*/*[position()=1]"> Pos1 : <xsl:value-of select="."/> </xsl:template>

?

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

règle du "plus englobant"

MAIS !si on ajoute

génère une sortie vide* et / "matchent"

élément rencontré en 1er

c'est toujours les plus grospatrons qui gagnent !

Page 15: Tutoriel XSLT F. Sajous ERSS – 01/04/2005. 2 Plan Rappels XML XPath XSLT Principes Templates et moteur Structures de contrôle XSLT Advanced.

15

Priorités du patronat...<livre> <chapitre> <titre>XML</titre> <contenu>XML : un lang. de balises extensibles...</contenu> </chapitre> <chapitre> <titre>XSLT</titre> <contenu>XSLT est un lang. de tranforma°...</contenu> <chapitre/></livre>

<xsl:template match="titre"> <xsl:value-of select="position()"/> <xsl:value-of select="."/></xsl:template>

<xs:template match="*/text()"></xsl:template>

<xsl:template match="titre"> Titre : <xsl:value-of select="."/></xsl:template><xsl:template match="/*/*[position()=1]"> Pos1 : <xsl:value-of select="."/> </xsl:template>

?

<xsl:template match="titre" priority="2"> Titre : <xsl:value-of select="."/></xsl:template><xsl:template match="/*/*[position()=1]" priority="1"> Pos1 : <xsl:value-of select="."/> </xsl:template>

Page 16: Tutoriel XSLT F. Sajous ERSS – 01/04/2005. 2 Plan Rappels XML XPath XSLT Principes Templates et moteur Structures de contrôle XSLT Advanced.

16

<xsl:choose> <xsl:when test="cond1"> <!-- instr si con1 vraie --> </xsl:when> <xsl:when test="cond2"> <!-- instr si cond1 fausse et cond2 vraie --> </xsl:when> <xsl:otherwise> <!-- instr si toutes les cond sont fausses --> </xsl:otherwise></xsl:choose>

Choix multiple (switch case default)

Structures de contrôles

<xsl:if test='fct xpath booléenne'> <!-- instr. si vrai --></xsl:if>

Conditionnelle

● instruction sort facultativemais non nécessairement unique

pas de else !

<xsl:for-each select="xpath1"> <xsl:sort select="xpath2" order="ascending | descending"/> <!-- instruction --></xsl:for-each>

Itération

● xpath : absolu ou relatifà l'élément courant

● une liste de noeuds sélecionnésà chaque itération, un noeud

devient l'élément courant

Page 17: Tutoriel XSLT F. Sajous ERSS – 01/04/2005. 2 Plan Rappels XML XPath XSLT Principes Templates et moteur Structures de contrôle XSLT Advanced.

17

Action !

• Lancer <oXygen/> 5.1• Fichiers XML et XSL dans C:\ERSS-XSLT

• Exercices/Session 1

• Avant de partir, SVP :• supprimer le répertoire C:\ERSS-XSLT• désinstaller <oXygen/>

• (panneau de configuration, Ajout/Suppression de programmes)

Page 18: Tutoriel XSLT F. Sajous ERSS – 01/04/2005. 2 Plan Rappels XML XPath XSLT Principes Templates et moteur Structures de contrôle XSLT Advanced.

18

En vrac...

Quelques éléments pour aller plus loin

Page 19: Tutoriel XSLT F. Sajous ERSS – 01/04/2005. 2 Plan Rappels XML XPath XSLT Principes Templates et moteur Structures de contrôle XSLT Advanced.

19

Variables

• <xsl:variable name="nom_var" [ instr XSLT dont le résultat deviendra la valeur de la variable]</xsl:variable>

• Une fois une variable définie, elle est constante !!! (i = i + 1 impossible)

• <xsl:value-of select='$nom_var'/>• sortie HTML : <a href='{$nom_var}'>lien</a>

Page 20: Tutoriel XSLT F. Sajous ERSS – 01/04/2005. 2 Plan Rappels XML XPath XSLT Principes Templates et moteur Structures de contrôle XSLT Advanced.

20

Créer des éléments XML

• <xsl:element name="nom élément"> <xsl:attribute name="nom_attr"> [ instructions XSLT ] </xsl:attribute> [ instructions XSLT ] </xsl:element>

Page 21: Tutoriel XSLT F. Sajous ERSS – 01/04/2005. 2 Plan Rappels XML XPath XSLT Principes Templates et moteur Structures de contrôle XSLT Advanced.

21

Copier des éléments XML

• <xsl:copy> [ instructions XSLT ]</xsl:copy>

• Cette instruction ne copie que les balises ouvrantes et fermantes de l'élément courant(ne copie ni attributs, ni enfants)

• <xsl:copy> [ instructions XSLT ] <xsl:apply-templates/></xsl:copy>

Page 22: Tutoriel XSLT F. Sajous ERSS – 01/04/2005. 2 Plan Rappels XML XPath XSLT Principes Templates et moteur Structures de contrôle XSLT Advanced.

22

Copier des éléments XML (2)

• <xsl:copy-of select="XPath"> [ instructions XSLT ]</xsl:copy>

• copie toute la structure de l'élément sélectionné (y compris attributs et descendance)

• utilisation conjointe avec xsl:copy :<xsl:copy> <xsl:copy-of select="@*"/> [ instructions XSLT ] <xsl:apply-templates/></xsl:copy>

Page 23: Tutoriel XSLT F. Sajous ERSS – 01/04/2005. 2 Plan Rappels XML XPath XSLT Principes Templates et moteur Structures de contrôle XSLT Advanced.

23

Plusieurs documents XML

• Pour accéder à un docuement autre que celui en cours de transformation :document('cheminFichier')/XPath

XSLXSL

ProcesseurXSLT

XMLsource

XMLsource Résultat

XML (autre)<...> ... <monElt id='63'> ... </monElt> ...

XML (autre)<...> ... <monElt id='63'> ... </monElt> ...

<xsl:value-of select="document('autre')/monElt[@id='63']">