Title: Tutoriel%20XSLT
1Tutoriel XSLT
F. Sajous ERSS 01/04/2005
2Plan
- Rappels
- XML
- XPath
- XSLT
- Principes
- Templates et moteur
- Structures de contrôle
- XSLT Advanced
3Rappel superflu XML
Exemple Morphalou
lt?xml version"1.0" encoding"iso-8859-1"?gt ltlexic
alDatabasegt lttitle level"resource"gtMorphalou
Lexique morphologiquelt/titlegt
ltlexicalEntry lemma"linguistique"
grammaticalCategory"commonNoun"
grammaticalGender"feminine"gt
ltinflectionGroupgt ltinflection
orthography"linguistique" grammaticalNumber"sing
ular"/gt ltinflection
orthography"linguistiques" grammaticalNumber"plu
ral"/gt lt/inflectionGroupgt
lt/lexicalEntrygt lt/lexicalDatabasegt
4XPath 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_at_orthography'linguistique'/_at_grammat
icalNumber - //inflection_at_orthography'linguistique'/../../_at_g
rammaticalCategory - //lexicalEntrycount(.//inflection_at_orthography..
/../_at_lemma) count(.//inflection)
5XSLT acteurs
XSL
comment
quoi
XML source
à partir de quoi
Processeur XSLT
Processeur XSLT
XML résultat
sériali-sateur
6Sélection Transformation
XML
7Et concrètement les templates
XML
lt?xml version"1.0" encoding"iso-8859-1"?gt ltxsls
tylesheet xmlnsxsl'http//www.w3.org/1999/XSL/Tr
ansform'gt ltxsltemplate match"expression
xpath1"gt lt!-- construire sortie
correspondant à l'élément (aux
éléments filtré(s) --gt lt/xsltemplategt
ltxsltemplate match"expression xpath2"gt
lt!-- construire sortie
correspondant à l'élément (aux
éléments) filtré(s) --gt
lt/xsltemplategt lt/xslstylesheetgt
patrons
XML
8Templates un exemple
XML source
ltanalysegt ltsentgt lttaggertoken
form"Il" pos"PRO"/gt lttaggertoken
form"était" pos"VERsg"/gt lttaggertoken
form"une" pos"DETfemisg"/gt
lttaggertoken form"fois" pos"NOMfemisg"/gt
... lt/sentgt ltsentgt ...
lt/sentgt lt/analysegt
9Moteur !
? template correspondant ?
Non !
Oui !
analyse
sent
sent
...
taggertokenform"il" pos"PRO"
taggertokenform"était" pos"VERsg"
taggertokenform"une" pos"DETfemisg"
...
ltxsltemplate match"sent"gt
... lt/xsltemplategt ltxsltemplate
match"taggertoken"gt ... lt/xsltemplategt
ltxsltemplate match"sent"gt
ltsnumgtltxslvalue-of select"position()"/gtlt/snumgt lt
/xsltemplategt ltxsltemplate match"taggertoken"gt
... lt/xsltemplategt
ltsentgt ltsnumgt1lt/snumgt lt/sentgt
10Pour éviter les infanticides...
XML source
ltanalysegt ltsentgt lttaggertoken
form"Il" pos"PRO"/gt lttaggertoken
form"était" pos"VERsg"/gt lttaggertoken
form"une" pos"DETfemisg"/gt
lttaggertoken form"fois" pos"NOMfemisg"/gt
... lt/sentgt ltsentgt ...
lt/sentgtlt/analysegt
ltanalysegt
lt/analysegt
ltxsltemplate match"sent"gt ltsentgtltsnumgt
ltxslvalue-of select"position()"/gtlt/snumgt
ltxslapply-templates/gtlt/sentgt lt/xsltemplategt ltxsl
template match"taggertoken"gt
lttokengtltxslvalue-of select"_at_form"/gtlt/tokengt lt/xs
ltemplategt
XSL
11Patrons par défaut
réalisons un sommaire...
ltlivregt ltchapitregt lttitregtXMLlt/titregt
ltcontenugtXML un lang. de
balises extensibles...lt/contenugt lt/chapitregt
ltchapitregt lttitregtXSLTlt/titregt
ltcontenugtXSLT est un lang. de
tranforma...lt/contenugt ltchapitre/gt lt/livregt
ltxsltemplate match"titre"gt ltxslvalue-of
select"position()"/gt ltxslvalue-of
select"titre"/gt lt/xsltemplategt
Résultat
1 XMLXML un lang.de balises extensibles.. 2
XSLTXSLT estun lang. de tranforma...
Le processeur XSLT pacourt l'arbre - "en
profondeur d'abord" (racine vers feuilles) - puis
de gauche à droite
12Dé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
ltlivregt ltchapitregt lttitregtXMLlt/titregt
ltcontenugtXML un lang. de
balises extensibles...lt/contenugt lt/chapitregt
ltchapitregt lttitregtXSLTlt/titregt
ltcontenugtXSLT est un lang. de
tranforma...lt/contenugt ltchapitre/gt lt/livregt
ltxsltemplate match"titre"gt ltxslvalue-of
select"position()"/gt ltxslvalue-of
select"."/gt lt/xsltemplategt
1 XML
XML un lang.de balises extensibles...
2 XSLTXSLT estun lang. de tranforma...
13En attendant le grand soir...
ltlivregt ltchapitregt lttitregtXMLlt/titregt
ltcontenugtXML un lang. de
balises extensibles...lt/contenugt lt/chapitregt
ltchapitregt lttitregtXSLTlt/titregt
ltcontenugtXSLT est un lang. de
tranforma...lt/contenugt ltchapitre/gt lt/livregt
XML
ltxsltemplate match"titre"gt ltxslvalue-of
select"position()"/gt ltxslvalue-of
select"."/gt lt/xsltemplategt
14Priorités du patronat...
ltlivregt ltchapitregt lttitregtXMLlt/titregt
ltcontenugtXML un lang. de
balises extensibles...lt/contenugt lt/chapitregt
ltchapitregt lttitregtXSLTlt/titregt
ltcontenugtXSLT est un lang. de
tranforma...lt/contenugt ltchapitre/gt lt/livregt
ltxsltemplate match"titre"gt ltxslvalue-of
select"position()"/gt ltxslvalue-of
select"."/gt lt/xsltemplategt ltxsltemplate
match"/text()"gtlt/xsltemplategt
règle du "plus spécifique"
MAIS !si on ajoute
ltxsltemplate match""gtlt/xsltemplategt
ltxsltemplate match"titre"gt Titre
ltxslvalue-of select"."/gt lt/xsltemplategtltxslte
mplate match"//position()1"gt Pos1
ltxslvalue-of select"."/gt lt/xsltemplategt
génère une sortie vide
?
et / "matchent"
règle du "plus englobant"
élément rencontré en 1er
c'est toujours les plus grospatrons qui gagnent !
15Priorités du patronat...
ltlivregt ltchapitregt lttitregtXMLlt/titregt
ltcontenugtXML un lang. de
balises extensibles...lt/contenugt lt/chapitregt
ltchapitregt lttitregtXSLTlt/titregt
ltcontenugtXSLT est un lang. de
tranforma...lt/contenugt ltchapitre/gt lt/livregt
ltxsltemplate match"titre"gt ltxslvalue-of
select"position()"/gt ltxslvalue-of
select"."/gt lt/xsltemplategt ltxstemplate
match"/text()"gtlt/xsltemplategt
ltxsltemplate match"titre"
priority"2"gt Titre ltxslvalue-of
select"."/gt lt/xsltemplategtltxsltemplate
match"//position()1"
priority"1"gt Pos1 ltxslvalue-of
select"."/gt lt/xsltemplategt
ltxsltemplate match"titre"gt Titre
ltxslvalue-of select"."/gt lt/xsltemplategtltxslte
mplate match"//position()1"gt Pos1
ltxslvalue-of select"."/gt lt/xsltemplategt
?
16Structures de contrôles
Itération
ltxslfor-each select"xpath1"gt ltxslsort
select"xpath2" order"ascending
descending"/gt lt!-- instruction
--gt lt/xslfor-eachgt
pas de else !
? xpath absolu ou relatifà l'élément courant
? une liste de noeuds sélecionnésà chaque
itération, un noeuddevient l'élément courant
? instruction sort facultativemais non
nécessairement unique
17Action !
- Lancer ltoXygen/gt 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 ltoXygen/gt
- (panneau de configuration, Ajout/Suppression de
programmes)
18En vrac...
- Quelques éléments pour aller plus loin
19Variables
- ltxslvariable name"nom_var" instr XSLT
dont le résultat deviendra la valeur de la
variablelt/xslvariablegt - Une fois une variable définie, elle est constante
!!! (i i 1 impossible) - ltxslvalue-of select'nom_var'/gt
- sortie HTML lta href'nom_var'gtlienlt/agt
20Créer des éléments XML
- ltxslelement name"nom élément"gt
ltxslattribute name"nom_attr"gt
instructions XSLT lt/xslattributegt
instructions XSLT lt/xslelementgt
21Copier des éléments XML
- ltxslcopygt instructions XSLT lt/xslcopygt
- Cette instruction ne copie que les balises
ouvrantes et fermantes de l'élément courant(ne
copie ni attributs, ni enfants) - ltxslcopygt instructions XSLT
ltxslapply-templates/gtlt/xslcopygt
22Copier des éléments XML (2)
- ltxslcopy-of select"XPath"gt instructions
XSLT lt/xslcopygt - copie toute la structure de l'élément sélectionné
(y compris attributs et descendance) - utilisation conjointe avec xslcopy ltxslcopygt
ltxslcopy-of select"_at_"/gt instructions
XSLT ltxslapply-templates/gtlt/xslcopygt
23Plusieurs documents XML
- Pour accéder à un docuement autre que celui en
cours de transformation document('cheminFichier'
)/XPath
ltxslvalue-of select"document('autre')/monElt_at_
id'63'"gt
XSL
XML (autre) lt...gt ... ltmonElt id'63'gt
... lt/monEltgt ...
XML source
Résultat
Processeur XSLT