49
XSL avancé XSL-FO INFO0406 Luiz Angelo Steffenel Luiz Angelo Steffenel (URCA) XSL avancé XSL-FO 1 / 49

XSL avancé XSL-FO - INFO0406 - cosy.univ-reims.frcosy.univ-reims.fr/~lsteffenel/cours/Licence/Info0406/0910/cours4... · Plan 1 XSL et XSLT Rappel Instructions évoluées Les transformations

Embed Size (px)

Citation preview

Page 1: XSL avancé XSL-FO - INFO0406 - cosy.univ-reims.frcosy.univ-reims.fr/~lsteffenel/cours/Licence/Info0406/0910/cours4... · Plan 1 XSL et XSLT Rappel Instructions évoluées Les transformations

XSL avancéXSL-FOINFO0406

Luiz Angelo Steffenel

Luiz Angelo Steffenel (URCA) XSL avancé XSL-FO 1 / 49

Page 2: XSL avancé XSL-FO - INFO0406 - cosy.univ-reims.frcosy.univ-reims.fr/~lsteffenel/cours/Licence/Info0406/0910/cours4... · Plan 1 XSL et XSLT Rappel Instructions évoluées Les transformations

Plan

1 XSL et XSLTRappelInstructions évoluéesLes transformations client et serveur

2 XSL-FO

Luiz Angelo Steffenel (URCA) XSL avancé XSL-FO 2 / 49

Page 3: XSL avancé XSL-FO - INFO0406 - cosy.univ-reims.frcosy.univ-reims.fr/~lsteffenel/cours/Licence/Info0406/0910/cours4... · Plan 1 XSL et XSLT Rappel Instructions évoluées Les transformations

Plan

1 XSL et XSLTRappelInstructions évoluéesLes transformations client et serveur

2 XSL-FO

Luiz Angelo Steffenel (URCA) XSL avancé XSL-FO 3 / 49

Page 4: XSL avancé XSL-FO - INFO0406 - cosy.univ-reims.frcosy.univ-reims.fr/~lsteffenel/cours/Licence/Info0406/0910/cours4... · Plan 1 XSL et XSLT Rappel Instructions évoluées Les transformations

Rappel de XSL

eXstensible Stylesheet Languagelangage de transformation de de document XMLtransformation vers :

XMLHTMLRTF...

Luiz Angelo Steffenel (URCA) XSL avancé XSL-FO 4 / 49

Page 5: XSL avancé XSL-FO - INFO0406 - cosy.univ-reims.frcosy.univ-reims.fr/~lsteffenel/cours/Licence/Info0406/0910/cours4... · Plan 1 XSL et XSLT Rappel Instructions évoluées Les transformations

Notre premier exemple

<?xml vers ion=" 1.0 " encoding="UTF−8" standalone=" no " ?><?xml−s t y l eshee t href=" video . x s l " type=" t e x t / x s l " ?><videotheque>

< f i l m >< t i t r e > Pulp f i c t i o n < / t i t r e >< r e a l i s a t e u r > Quentin Tarant ino < / r e a l i s a t e u r ><annee> 1994 < / annee><acteurs>

<acteur> John Travo l ta < / ac teur><acteur> Uma Thurman < / ac teur><acteur> Bruce W i l l i s < / ac teur><acteur> Samuel L . Jackson < / ac teur>

< / acteurs>< / f i l m >

. . .< f i l m >

< t i t r e > Imp i toyab le < / t i t r e >< r e a l i s a t e u r > C l i n t Eastwood < / r e a l i s a t e u r ><annee> 1992 < / annee><acteurs>

<acteur> C l i n t Eastwood < / ac teur><acteur> Gene Hackman < / ac teur><acteur> Morgan Freeman < / ac teur>

< / acteurs>< / f i l m >

< / videotheque>

Luiz Angelo Steffenel (URCA) XSL avancé XSL-FO 5 / 49

Page 6: XSL avancé XSL-FO - INFO0406 - cosy.univ-reims.frcosy.univ-reims.fr/~lsteffenel/cours/Licence/Info0406/0910/cours4... · Plan 1 XSL et XSLT Rappel Instructions évoluées Les transformations

Un XSL associé

<?xml vers ion=" 1.0 " encoding="UTF−8" ?>< x s l : s t y l eshee t vers ion=" 1.0 " xmlns : x s l = " h t t p : / / www.w3 . org /1999/XSL / Transform ">< x s l : template match=" / videotheque "><html>

<head>< t i t l e > XSL < / t i t l e >< / head><body>< table border=" 1 ">

< t r ><td> T i t r e < / td><td> Réa l i sa teu r < / td>

< / t r >< x s l : for−each select=" f i l m ">

< t r ><td> < x s l : value−of select=" t i t r e " / > < / td><td> < x s l : value−of select=" r e a l i s a t e u r " / > < / td>

< / t r >< / x s l : for−each>

< / table>< / body>

< / html>< / x s l : template>< / x s l : s t y l eshee t >

Luiz Angelo Steffenel (URCA) XSL avancé XSL-FO 6 / 49

Page 7: XSL avancé XSL-FO - INFO0406 - cosy.univ-reims.frcosy.univ-reims.fr/~lsteffenel/cours/Licence/Info0406/0910/cours4... · Plan 1 XSL et XSLT Rappel Instructions évoluées Les transformations

Résultat

Affichage dans le navigateur

Traitementsur le navigateurcode source : fichier XML !

Luiz Angelo Steffenel (URCA) XSL avancé XSL-FO 7 / 49

Page 8: XSL avancé XSL-FO - INFO0406 - cosy.univ-reims.frcosy.univ-reims.fr/~lsteffenel/cours/Licence/Info0406/0910/cours4... · Plan 1 XSL et XSLT Rappel Instructions évoluées Les transformations

Structure de notre document XSL

Déclaration et en-têtedéfinition d’un fichier XML

<?xml vers ion=" 1.0 " encoding="UTF−8" ?>

Définition du type de fichier< x s l : s t y l eshee t vers ion=" 1.0 " xmlns : x s l = " h t t p : / / www.w3 . org /1999/XSL / Transform ">. . .< / x s l : s t y l eshee t >

Luiz Angelo Steffenel (URCA) XSL avancé XSL-FO 8 / 49

Page 9: XSL avancé XSL-FO - INFO0406 - cosy.univ-reims.frcosy.univ-reims.fr/~lsteffenel/cours/Licence/Info0406/0910/cours4... · Plan 1 XSL et XSLT Rappel Instructions évoluées Les transformations

Structure de notre document XSL (suite)

Transformationdéfinition de la transformation

< x s l : template match=" / videotheque ">. . .< / x s l : template>

Attention : l’expression XPATH ne définit pas 1 élément unique,mais tous les éléments qui peuvent être adressés !

match="/" la racinematch="/videotheque" accès à videothequematch="/videotheque/film" tous les films !

Luiz Angelo Steffenel (URCA) XSL avancé XSL-FO 9 / 49

Page 10: XSL avancé XSL-FO - INFO0406 - cosy.univ-reims.frcosy.univ-reims.fr/~lsteffenel/cours/Licence/Info0406/0910/cours4... · Plan 1 XSL et XSLT Rappel Instructions évoluées Les transformations

Structure de notre document XSL (fin)

Code des transformationscode HTMLcode spécifique XSL

< x s l : for−each select=" f i l m ">< t r >

<td> < x s l : value−of select=" t i t r e " / > < / td><td> < x s l : value−of select=" r e a l i s a t e u r " / > < / td>

< / t r >< / x s l : for−each>

Luiz Angelo Steffenel (URCA) XSL avancé XSL-FO 10 / 49

Page 11: XSL avancé XSL-FO - INFO0406 - cosy.univ-reims.frcosy.univ-reims.fr/~lsteffenel/cours/Licence/Info0406/0910/cours4... · Plan 1 XSL et XSLT Rappel Instructions évoluées Les transformations

Accèsaccès et affichage de la valeur associée à une expression XPATH

< x s l : value−of select=" expressionXPATH " / >

Itérationsbalayage successif des éléments d’une expression XPATH

< x s l : for−each select=" expressionXPATH ">. . .< / x s l : for−each>

Luiz Angelo Steffenel (URCA) XSL avancé XSL-FO 11 / 49

Page 12: XSL avancé XSL-FO - INFO0406 - cosy.univ-reims.frcosy.univ-reims.fr/~lsteffenel/cours/Licence/Info0406/0910/cours4... · Plan 1 XSL et XSLT Rappel Instructions évoluées Les transformations

Choixcomparaison avec une expression XPATH

< x s l : i f t e s t = " expressionXPATH ">. . .< / x s l : i f >

Triutilisation d’une instruction de triattention aux types des données

< x s l : s o r t select=" expressionXPATH "[ data−type=" t e x t | number " ][ order= " ascending | descending " ] / >

. . .

Luiz Angelo Steffenel (URCA) XSL avancé XSL-FO 12 / 49

Page 13: XSL avancé XSL-FO - INFO0406 - cosy.univ-reims.frcosy.univ-reims.fr/~lsteffenel/cours/Licence/Info0406/0910/cours4... · Plan 1 XSL et XSLT Rappel Instructions évoluées Les transformations

Plan

1 XSL et XSLTRappelInstructions évoluéesLes transformations client et serveur

2 XSL-FO

Luiz Angelo Steffenel (URCA) XSL avancé XSL-FO 13 / 49

Page 14: XSL avancé XSL-FO - INFO0406 - cosy.univ-reims.frcosy.univ-reims.fr/~lsteffenel/cours/Licence/Info0406/0910/cours4... · Plan 1 XSL et XSLT Rappel Instructions évoluées Les transformations

Les instructions évoluées

Transformation d’un document complexePrincipe : Diviser pour régner

1 Identifier les blocs de donnéesrègles "match"

2 Attribuer des transformations différentes selon le contextetemplates avec mode

3 Appeler les transformations adéquates (structure dynamique)xsl :apply-templatesxsl :call-template

Possibilité de reutilisation de templates

Luiz Angelo Steffenel (URCA) XSL avancé XSL-FO 14 / 49

Page 15: XSL avancé XSL-FO - INFO0406 - cosy.univ-reims.frcosy.univ-reims.fr/~lsteffenel/cours/Licence/Info0406/0910/cours4... · Plan 1 XSL et XSLT Rappel Instructions évoluées Les transformations

Un autre XML

Code XML

<?xml vers ion=" 1.0 " encoding="UTF−8" ?><?xml−s t y l eshee t href=" exercice3_1 . x s l " type=" t e x t / x s l " ?>< l i s t e >

< l i v r e >< t i t r e genre=" jeu ">Le Texas Hold ’Em Poker on l i ne < / t i t r e ><auteur>Mark Stohan< / auteur><auteur>Robert Bluman< / auteur>

<paru t i on >2006< / pa ru t i on >< / l i v r e >< l i v r e >

< t i t r e genre=" jeu ">Sudoku Manga< / t i t r e ><auteur>Sudoku f a c t o r y < / auteur><paru t i on >2007< / pa ru t i on >

< / l i v r e >< l i v r e >

< t i t r e genre=" jeu ">Kakoku< / t i t r e ><auteur> H i z i Kagochi< / auteur><paru t i on >2005< / pa ru t i on >

< / l i v r e >< l i v r e >

< t i t r e genre=" photo ">Manuel de l a photo< / t i t r e ><auteur>Jack ie Cont iboeuf< / auteur><auteur>A la in Mocney< / auteur><paru t i on >2006< / pa ru t i on >

< / l i v r e >< / l i s t e >

Luiz Angelo Steffenel (URCA) XSL avancé XSL-FO 15 / 49

Page 16: XSL avancé XSL-FO - INFO0406 - cosy.univ-reims.frcosy.univ-reims.fr/~lsteffenel/cours/Licence/Info0406/0910/cours4... · Plan 1 XSL et XSLT Rappel Instructions évoluées Les transformations

Objectif

Reutilisation de templatesDefinir des templates différents pour

L’affichage des auteursL’affichage des titresLa description d’un livreUn tableau de livres

et les associer selon le besoin

Sortie

Luiz Angelo Steffenel (URCA) XSL avancé XSL-FO 16 / 49

Page 17: XSL avancé XSL-FO - INFO0406 - cosy.univ-reims.frcosy.univ-reims.fr/~lsteffenel/cours/Licence/Info0406/0910/cours4... · Plan 1 XSL et XSLT Rappel Instructions évoluées Les transformations

Solution

Définition de templates et appel avec xsl :apply-templates

<?xml vers ion=" 1.0 " encoding=" ISO−8859−1" ?>< x s l : s t y l eshee t vers ion=" 1.0 " xmlns : x s l = " h t t p : / / www.w3 . org /1999/XSL / Transform ">< x s l : template match=" / ">

<html><head>

< t i t l e > L i b r a i r e < / t i t l e >< / head><body>< table border=" 1 ">< t r ><th> T i t r e < / th><th>Auteurs< / th>< / t r >

< x s l : apply−templates / >< / table>< / body>< / html>

< / x s l : template>

< x s l : template match=" l i v r e ">< t r >

<td>< x s l : apply−templates select=" t i t r e " / >< / td><td>< x s l : apply−templates select=" auteur " / >< / td>

< / t r >< / x s l : template>

< x s l : template match=" t i t r e ">< x s l : value−of select=" . " / >

< / x s l : template>

< x s l : template match=" auteur ">< x s l : value−of select=" . " / >< x s l : text> < / x s l : text>

< / x s l : template>< / x s l : s t y l eshee t >

Luiz Angelo Steffenel (URCA) XSL avancé XSL-FO 17 / 49

Page 18: XSL avancé XSL-FO - INFO0406 - cosy.univ-reims.frcosy.univ-reims.fr/~lsteffenel/cours/Licence/Info0406/0910/cours4... · Plan 1 XSL et XSLT Rappel Instructions évoluées Les transformations

Encore plus loin

Appel de templates "nommés"Si une même opération est utilisé pour différents modèles, nouspouvons les regrouperSimilaire à des fonctions en programmation

Code source

<?xml vers ion=" 1.0 " encoding="UTF−8" ?><?xml−s t y l eshee t href="exemplenomme . x s l " type=" t e x t / x s l " ?>< b i b l i o >

< l i v r e >< t i t r e >Les Misérables< / t i t r e ><auteur> V i c t o r Hugo< / auteur><nb_tommes>3< / nb_tommes>< l o c a l i s a t i o n t ravee=" 1 " armoire=" 4 " etagere=" 2 " / >

< / l i v r e >. . .

< / b i b l i o >

Luiz Angelo Steffenel (URCA) XSL avancé XSL-FO 18 / 49

Page 19: XSL avancé XSL-FO - INFO0406 - cosy.univ-reims.frcosy.univ-reims.fr/~lsteffenel/cours/Licence/Info0406/0910/cours4... · Plan 1 XSL et XSLT Rappel Instructions évoluées Les transformations

Objectif

Rendre les noms des auteurs et des oeuvres en gras

<?xml vers ion=" 1.0 " encoding=" ISO−8859−1" ?>< x s l : s t y l eshee t vers ion=" 1.0 " xmlns : x s l = " h t t p : / / www.w3 . org /1999/XSL / Transform ">< x s l : template match=" b i b l i o ">

<html><head>< t i t l e >Exemple d ’ appels nommés< / t i t l e >< / head>

<body>< x s l : apply−templates select=" l i v r e " / >< / body>< / html>

< / x s l : template>

< x s l : template match=" t i t r e ">< x s l : c a l l−template name=" gras " / ><BR/ >

< / x s l : template>

< x s l : template match=" auteur ">< x s l : c a l l−template name=" gras " / ><BR/ >

< / x s l : template>

< x s l : template match=" nb_tomes ">< / x s l : template>

< x s l : template name=" gras "><B>< x s l : value−of select=" . " / >< /B>

< / x s l : template>< / x s l : s t y l eshee t >

Luiz Angelo Steffenel (URCA) XSL avancé XSL-FO 19 / 49

Page 20: XSL avancé XSL-FO - INFO0406 - cosy.univ-reims.frcosy.univ-reims.fr/~lsteffenel/cours/Licence/Info0406/0910/cours4... · Plan 1 XSL et XSLT Rappel Instructions évoluées Les transformations

Encore plus loin

Les modesLes éléments <xsl :template> et <xsl :apply-templates> possèdentun attribut modepermet la différentiation du traitement selon la "position" dans ledocument rendu

Code source

<?xml vers ion=" 1.0 " encoding=" ISO−8859−1" ?><?xml−s t y l eshee t href=" exemplemode . x s l " type=" t e x t / x s l " ?>< chap i t r e t i t r e = " Les f e u i l l e s de s t y l e XSLT">

<sec t ion >< t i t r e > I n t r o d u c t i o n < / t i t r e ><paragraphe>Un des problèmes majeurs de ces dern iè res années est l ’ i n t e r o p é r a b i l i t é desapp l i ca t i ons , c ’ est−à−d i r e l a p o s s i b i l i t é de f a i r e communiquer ent re e l l e s des a p p l i c a t i o n sd iverses e t var iées . < / paragraphe>

< / sec t ion ><sec t ion >

< t i t r e >Première approche de XSLT< / t i t r e ><paragraphe>Le langage de t rans fo rma t i on XSLT est u t i l i s é pour t rans fo rmer un document XMLen d i ve rs documents au format XML, HTML, RTF ( Rich Text Format ) ou aut res formats tex tes .< / paragraphe>

< / sec t ion >< / chap i t r e >

Luiz Angelo Steffenel (URCA) XSL avancé XSL-FO 20 / 49

Page 21: XSL avancé XSL-FO - INFO0406 - cosy.univ-reims.frcosy.univ-reims.fr/~lsteffenel/cours/Licence/Info0406/0910/cours4... · Plan 1 XSL et XSLT Rappel Instructions évoluées Les transformations

Objectif

Créer une table de matières et le corps du texte

<?xml vers ion=" 1.0 " encoding=" ISO−8859−1" ?>< x s l : s t y l eshee t vers ion=" 1.0 " xmlns : x s l = " h t t p : / / www.w3 . org /1999/XSL / Transform ">< x s l : template match=" / "><html> <body><h1>Table des mat ières< / h1><ul>< x s l : apply−templates select=" chap i t r e / sec t ion / t i t r e " mode=" tdm " / >< / ul><h1>< x s l : value−of select=" chap i t r e / @t i t re " / >< / h1>< x s l : apply−templates select=" chap i t r e / sec t ion / t i t r e " mode=" corps " / >< / body>< / html>< / x s l : template>

< x s l : template match=" chap i t r e / sec t ion / t i t r e " mode=" tdm ">< l i ><a href=" { concat ( ’ # ’ , p o s i t i o n ( ) ) } ">< x s l : value−of select=" . " / >< / a>< / l i >< / x s l : template>

< x s l : template match=" chap i t r e / sec t ion / t i t r e " mode=" corps "><h2><a name=" { p o s i t i o n ( ) } ">< x s l : value−of select=" . " / >< / a>< / h2>< x s l : apply−templates select=" . . / paragraphe " / >< / x s l : template>

< x s l : template match=" chap i t r e / sec t ion / paragraphe "><p>< x s l : value−of select=" . " / >< / p>< / x s l : template>< / x s l : s t y l eshee t >

Luiz Angelo Steffenel (URCA) XSL avancé XSL-FO 21 / 49

Page 22: XSL avancé XSL-FO - INFO0406 - cosy.univ-reims.frcosy.univ-reims.fr/~lsteffenel/cours/Licence/Info0406/0910/cours4... · Plan 1 XSL et XSLT Rappel Instructions évoluées Les transformations

Résultat

Luiz Angelo Steffenel (URCA) XSL avancé XSL-FO 22 / 49

Page 23: XSL avancé XSL-FO - INFO0406 - cosy.univ-reims.frcosy.univ-reims.fr/~lsteffenel/cours/Licence/Info0406/0910/cours4... · Plan 1 XSL et XSLT Rappel Instructions évoluées Les transformations

Plan

1 XSL et XSLTRappelInstructions évoluéesLes transformations client et serveur

2 XSL-FO

Luiz Angelo Steffenel (URCA) XSL avancé XSL-FO 23 / 49

Page 24: XSL avancé XSL-FO - INFO0406 - cosy.univ-reims.frcosy.univ-reims.fr/~lsteffenel/cours/Licence/Info0406/0910/cours4... · Plan 1 XSL et XSLT Rappel Instructions évoluées Les transformations

Utilisations de XSL

Luiz Angelo Steffenel (URCA) XSL avancé XSL-FO 24 / 49

Page 25: XSL avancé XSL-FO - INFO0406 - cosy.univ-reims.frcosy.univ-reims.fr/~lsteffenel/cours/Licence/Info0406/0910/cours4... · Plan 1 XSL et XSLT Rappel Instructions évoluées Les transformations

Les transformations

Types de transformationssur le client

requête vers le fichier XMLrequête vers le fichier XSLtraitement sur le navigateur

sur le serveurrequête vers un fichier PHPlecture des fichiers XML et XSL sur le serveurtraitement sur le serveur

Luiz Angelo Steffenel (URCA) XSL avancé XSL-FO 25 / 49

Page 26: XSL avancé XSL-FO - INFO0406 - cosy.univ-reims.frcosy.univ-reims.fr/~lsteffenel/cours/Licence/Info0406/0910/cours4... · Plan 1 XSL et XSLT Rappel Instructions évoluées Les transformations

Transformation sur le client

Fonctionnementrapatriement de tous les fichiers sur le clientutilisation du parser / moteur XSL du clientpas de charge d’exécution sur le serveur

Problèmesaccès à la totalité du XML sur le clientproblèmes de compatibilité entre les parser des navigateurs

Luiz Angelo Steffenel (URCA) XSL avancé XSL-FO 26 / 49

Page 27: XSL avancé XSL-FO - INFO0406 - cosy.univ-reims.frcosy.univ-reims.fr/~lsteffenel/cours/Licence/Info0406/0910/cours4... · Plan 1 XSL et XSLT Rappel Instructions évoluées Les transformations

Transformation sur le serveur

Fonctionnementexécution dirigée de la transformation par un script PHPutilisation de l’extension php5-xsl de PHPenvoie au client du résultat HTML produit

Avantagesémission juste du HTML générépas de problème de compatibilité entre les navigateurs

Luiz Angelo Steffenel (URCA) XSL avancé XSL-FO 27 / 49

Page 28: XSL avancé XSL-FO - INFO0406 - cosy.univ-reims.frcosy.univ-reims.fr/~lsteffenel/cours/Licence/Info0406/0910/cours4... · Plan 1 XSL et XSLT Rappel Instructions évoluées Les transformations

Principe de la transformation sur le serveur

Chaîne de développement1 création d’objet XML (DOMDocument) pour le fichier XSL2 création d’objet XML (DOMDocument) pour le fichier XML3 création d’un objet processeur XSLT (XSLTProcessor)4 intégration de la feuille de style XSL dans le processeur XSLT5 application du processeur XSLT aux données (objet XML)

Luiz Angelo Steffenel (URCA) XSL avancé XSL-FO 28 / 49

Page 29: XSL avancé XSL-FO - INFO0406 - cosy.univ-reims.frcosy.univ-reims.fr/~lsteffenel/cours/Licence/Info0406/0910/cours4... · Plan 1 XSL et XSLT Rappel Instructions évoluées Les transformations

Exemple

Script PHP

<?php

$xslDoc = new DOMDocument ( ) ;$xslDoc−>load ( " v ideo . x s l " ) ;

$xmlDoc = new DOMDocument ( ) ;$xmlDoc−>load ( " videotheque . xml " ) ;

$proc = new XSLTProcessor ( ) ;$proc−>impor tS ty leshee t ( $xslDoc ) ;echo $proc−>transformToXML ( $xmlDoc ) ;

?>

Luiz Angelo Steffenel (URCA) XSL avancé XSL-FO 29 / 49

Page 30: XSL avancé XSL-FO - INFO0406 - cosy.univ-reims.frcosy.univ-reims.fr/~lsteffenel/cours/Licence/Info0406/0910/cours4... · Plan 1 XSL et XSLT Rappel Instructions évoluées Les transformations

Plan

1 XSL et XSLTRappelInstructions évoluéesLes transformations client et serveur

2 XSL-FO

Luiz Angelo Steffenel (URCA) XSL avancé XSL-FO 30 / 49

Page 31: XSL avancé XSL-FO - INFO0406 - cosy.univ-reims.frcosy.univ-reims.fr/~lsteffenel/cours/Licence/Info0406/0910/cours4... · Plan 1 XSL et XSLT Rappel Instructions évoluées Les transformations

Présentation

XSL-FO (XSL Formatting Objects) permet d’exprimer de manièretrès précise le rendu d’un document

gestion de la pagination d’un document, les notes de bas de page,les marges, ...possible de préciser avec exactitude l’emplacement des différentsobjets sur la page, les polices des caractères, l’affichage detableaux, etc.

Un document XSL-FO est assez pénible à réaliser à la main.on utilise XSLT dans le but de générer du XSL-FO à partir dedonnées au format XML

Luiz Angelo Steffenel (URCA) XSL avancé XSL-FO 31 / 49

Page 32: XSL avancé XSL-FO - INFO0406 - cosy.univ-reims.frcosy.univ-reims.fr/~lsteffenel/cours/Licence/Info0406/0910/cours4... · Plan 1 XSL et XSLT Rappel Instructions évoluées Les transformations

Génération d’un PDF

ÉtapesLes données à présenter sont en XML.A partir d’une feuille de style XSLT, on génère un documentXSL-FO, à l’aide d’un processeur XSLT.On utilise ensuite un processeur FOP pour convertir le documentXSL-FO en PDF.

Luiz Angelo Steffenel (URCA) XSL avancé XSL-FO 32 / 49

Page 33: XSL avancé XSL-FO - INFO0406 - cosy.univ-reims.frcosy.univ-reims.fr/~lsteffenel/cours/Licence/Info0406/0910/cours4... · Plan 1 XSL et XSLT Rappel Instructions évoluées Les transformations

Démarrage

Un document XML de base

<?xml vers ion=" 1.0 " encoding=" ISO−8859−1" ?><?xml−s t y l eshee t href=" r e c e t t e f o . x s l " type=" t e x t / x s l " ?><?cocoon−process type=" x s l t " ?>< !DOCTYPE r e c e t t e SYSTEM " r e c e t t e . dtd ">< r e c e t t e >

< t i t r e >Les Bonnes Recettes de Cuis ine< / t i t r e ><gateau photo=" gateau . g i f ">

<type>Gâteau aux Noix e t au Chocolat blanc< / type>< i n g r e d i e n t s >

< i n g r e d i e n t >250g de choco la t blanc< / i n g r e d i e n t >< i n g r e d i e n t >60g de noix< / i n g r e d i e n t >.< i n g r e d i e n t >10g de levure chimique< / i n g r e d i e n t >

< / i n g r e d i e n t s >

<prepara t ion>Fa i tes r a m o l l i r l e beurre dans un p e t i t bol , l u i même dans un grand bo l d ’ eau t r è s chaude .f oue t t ez l e beurre énergiquement e t y a jou tez les sucres . a jou tez l ’ oeuf e n t i e r .< / p repara t ion>

< i n t e r n e t > h t t p : / / www. medi1 . com/ s c r i p t s / r ece t t es . php3? r =616< / i n t e r n e t >< / gateau>

< / r e c e t t e >

Luiz Angelo Steffenel (URCA) XSL avancé XSL-FO 33 / 49

Page 34: XSL avancé XSL-FO - INFO0406 - cosy.univ-reims.frcosy.univ-reims.fr/~lsteffenel/cours/Licence/Info0406/0910/cours4... · Plan 1 XSL et XSLT Rappel Instructions évoluées Les transformations

Démarrage

l’entête d’un document XSL-FO

<?xml vers ion=" 1.0 " encoding=" ISO−8859−1" ?>< x s l : s t y l eshee t vers ion=" 1.0 "xmlns : x s l = " h t t p : / / www.w3 . org /1999/XSL / Transform "xmlns : fo= " h t t p : / / www.w3 . org /1999/XSL / Format ">

< x s l : template match=" r e c e t t e ">< x s l : processing−i n s t r u c t i o n name=" cocoon−format ">type=" t e x t / x s l f o "< / x s l : processing−i n s t r u c t i o n >< fo : roo t xmlns : fo= " h t t p : / / www.w3 . org /1999/XSL / Format ">

La racine FOSous la racine fo :root il y a toujours :

un fo :layout-master-set qui définit un ou plusieurs page layoutdéfinis avec fo :simple-page-masterdes déclarations à option fo :declarationsune séquence d’un ou plusieurs fo :page-sequences quicontiennent du texte (littéralement ou fournis par XSLT) et desinstructions de formatage

Luiz Angelo Steffenel (URCA) XSL avancé XSL-FO 34 / 49

Page 35: XSL avancé XSL-FO - INFO0406 - cosy.univ-reims.frcosy.univ-reims.fr/~lsteffenel/cours/Licence/Info0406/0910/cours4... · Plan 1 XSL et XSLT Rappel Instructions évoluées Les transformations

Éléments du layout d’une page

Luiz Angelo Steffenel (URCA) XSL avancé XSL-FO 35 / 49

Page 36: XSL avancé XSL-FO - INFO0406 - cosy.univ-reims.frcosy.univ-reims.fr/~lsteffenel/cours/Licence/Info0406/0910/cours4... · Plan 1 XSL et XSLT Rappel Instructions évoluées Les transformations

Démarrage

Squelette XSL-FO de base

< x s l : template match=" page ">< fo : roo t >

< fo : layout−master−set>

< !−− D e f i n i t i o n o f a s i n g l e master page . I t i s s imple ( no headers etc . ) −−><fo : simple−page−master master−name=" f i r s t " >

< !−− requ i red element body −−><fo : region−body / >< / fo : simple−page−master>< / fo : layout−master−set>

< !−− D e f i n i t i o n o f a page sequence −−><fo : page−sequence master−name=" f i r s t ">

< fo : f l ow f low−name=" xs l−region−body " font−size=" 14 pt " l i n e−height=" 14 pt ">< x s l : apply−templates / >

< / fo : f l ow>< / fo : page−sequence>

< / fo : roo t >< / x s l : template>

Luiz Angelo Steffenel (URCA) XSL avancé XSL-FO 36 / 49

Page 37: XSL avancé XSL-FO - INFO0406 - cosy.univ-reims.frcosy.univ-reims.fr/~lsteffenel/cours/Licence/Info0406/0910/cours4... · Plan 1 XSL et XSLT Rappel Instructions évoluées Les transformations

Notre page

Pagination

<fo : layout−master−set>

< fo : simple−page−master master−name=" f i r s t "page−height=" 29.7cm"page−width=" 21cm"margin−top=" 1cm"margin−bottom=" 2cm"margin−l e f t = " 2.5cm"margin−r i g h t = " 2.5cm">

< fo : region−body margin−top=" 1cm" / >< fo : region−before ex ten t= " 1cm" / >< fo : region−a f t e r ex ten t= " 1.5cm" / >

< / fo : simple−page−master>

< fo : simple−page−master master−name=" r i g h t "page−height=" 29.7cm"page−width=" 21cm"margin−top=" 1cm"margin−bottom=" 2cm"margin−l e f t = " 2.5cm"margin−r i g h t = " 2.5cm">

< fo : region−body margin−top=" 1cm" / >< fo : region−before ex ten t= " 1cm" / >< fo : region−a f t e r ex ten t= " 1.5cm" / >

< / fo : simple−page−master>

Luiz Angelo Steffenel (URCA) XSL avancé XSL-FO 37 / 49

Page 38: XSL avancé XSL-FO - INFO0406 - cosy.univ-reims.frcosy.univ-reims.fr/~lsteffenel/cours/Licence/Info0406/0910/cours4... · Plan 1 XSL et XSLT Rappel Instructions évoluées Les transformations

Notre page

Pagination (cont)

<fo : simple−page−master master−name=" l e f t "page−height=" 29.7cm"page−width=" 21cm"margin−top=" 1cm"margin−bottom=" 2cm"margin−l e f t = " 2.5cm"margin−r i g h t = " 2.5cm">

< fo : region−body margin−top=" 1cm" / >< fo : region−before ex ten t= " 1cm" / >< fo : region−a f t e r ex ten t= " 1.5cm" / >

< / fo : simple−page−master>

< fo : page−sequence−master master−name=" run ">< fo : repeatable−page−master−a l t e r n a t i v e s maximum−repeats=" no−l i m i t " >< fo : c o n d i t i o n a l−page−master−re ference master−re ference=" l e f t " odd−or−even=" even " / >< fo : c o n d i t i o n a l−page−master−re ference master−re ference=" r i g h t " odd−or−even=" odd " / >< fo : c o n d i t i o n a l−page−master−re ference master−re ference=" t i t l e " / >

< / fo : repeatable−page−master−a l t e r n a t i v e s >< / fo : page−sequence−master>

< / fo : layout−master−set>

< !−− end : de f ines page layou t −−>

Luiz Angelo Steffenel (URCA) XSL avancé XSL-FO 38 / 49

Page 39: XSL avancé XSL-FO - INFO0406 - cosy.univ-reims.frcosy.univ-reims.fr/~lsteffenel/cours/Licence/Info0406/0910/cours4... · Plan 1 XSL et XSLT Rappel Instructions évoluées Les transformations

Notre page

Pagination (fin)

< !−− ac tua l l ayou t −−>

<fo : page−sequence master−re ference=" run " i n i t i a l −page−number=" 1 ">

< fo : s t a t i c−content f low−name=" xs l−region−before ">< fo : b lock text−al ign=" end " font−size=" 10 pt " font−f a m i l y = " sans−s e r i f " l i n e−height=" 11 pt "

color=" l i g h t s l a t e g r a y " >< x s l : value−of select=" t i t r e " / > −

<fo : page−number / >< / fo : b lock>< / fo : s t a t i c−content>

<fo : f l ow f low−name=" xs l−region−body " font−size=" 12 pt " l i n e−height=" 11 pt ">

< x s l : apply−templates / >< / fo : f l ow>< / fo : page−sequence>

< / fo : roo t >< / x s l : template>

Luiz Angelo Steffenel (URCA) XSL avancé XSL-FO 39 / 49

Page 40: XSL avancé XSL-FO - INFO0406 - cosy.univ-reims.frcosy.univ-reims.fr/~lsteffenel/cours/Licence/Info0406/0910/cours4... · Plan 1 XSL et XSLT Rappel Instructions évoluées Les transformations

Les Listes

Création de listes (bullets, numérotées, etc.)

fo :list-block : contient la liste et contient quelques définitions pour la géométrie

fo :list-item : enfants de fo :list-item, c.a.d. des items qui contiennent un label etun body (voir ci-dessous)

fo :list-item-label : contient le contenu du label (typiquement un fo :block avecun nombre, un caractère dingbat, etc.)

Le fo :list-item-body contient le corps d’un item, un ou plusieurs fo :block

Luiz Angelo Steffenel (URCA) XSL avancé XSL-FO 40 / 49

Page 41: XSL avancé XSL-FO - INFO0406 - cosy.univ-reims.frcosy.univ-reims.fr/~lsteffenel/cours/Licence/Info0406/0910/cours4... · Plan 1 XSL et XSLT Rappel Instructions évoluées Les transformations

Exemple

Une liste d’items

< x s l : template match=" i n g r e d i e n t s ">< fo : b lock color=" navy " font−size=" 12 pt " text−al ign=" j u s t i f y " space−before . optimum=" 15 pt "background−color=" lavender "> Ing réd ien t s : < / fo : b lock>< x s l : apply−templates select=" i n g r e d i e n t " / >< / x s l : template>< x s l : template match=" i n g r e d i e n t ">< fo : l i s t−block space−before . optimum=" 4 pt ">< fo : l i s t−i tem space−before . optimum=" 4 pt ">< fo : l i s t−i tem−label end−i nden t= " labe l−end ( ) ">< fo : b lock> ·< / fo : b lock>< / fo : l i s t−i tem−label><fo : l i s t−i tem−body s t a r t−i nden t= " body−s t a r t ( ) ">< fo : b lock text−al ign=" j u s t i f y " font−size=" 10 pt ">

< x s l : value−of select=" . " / >< / fo : b lock>< / fo : l i s t−i tem−body>< / fo : l i s t−i tem>< / fo : l i s t−block>< / x s l : template>

Luiz Angelo Steffenel (URCA) XSL avancé XSL-FO 41 / 49

Page 42: XSL avancé XSL-FO - INFO0406 - cosy.univ-reims.frcosy.univ-reims.fr/~lsteffenel/cours/Licence/Info0406/0910/cours4... · Plan 1 XSL et XSLT Rappel Instructions évoluées Les transformations

Luiz Angelo Steffenel (URCA) XSL avancé XSL-FO 42 / 49

Page 43: XSL avancé XSL-FO - INFO0406 - cosy.univ-reims.frcosy.univ-reims.fr/~lsteffenel/cours/Licence/Info0406/0910/cours4... · Plan 1 XSL et XSLT Rappel Instructions évoluées Les transformations

Les Tables

fo :table-and-captionfo :table-caption : La caption d’une table

fo :table : la table proprement dite. Contient un header et un footer à option etun body.

fo :table-column : permet de specifier la longeur d’une colonne

fo :table-header : Ligne entête, contient des lignes ou cellules

fo :table-footer : Ligne "footer", contient des lignes ou cellules

fo :table-body : contient des lignes ou cellules

fo :table-row : contient des fo :table-cell qui contiennent des fo :blocks

Luiz Angelo Steffenel (URCA) XSL avancé XSL-FO 43 / 49

Page 44: XSL avancé XSL-FO - INFO0406 - cosy.univ-reims.frcosy.univ-reims.fr/~lsteffenel/cours/Licence/Info0406/0910/cours4... · Plan 1 XSL et XSLT Rappel Instructions évoluées Les transformations

Exemple

Un tableau à deux colonnes

< x s l : template match=" gateau ">< fo : table table−l ayou t = " f i x e d " space−before . optimum=" 15 pt ">< fo : table−column column−number=" 1 " column−width=" 5cm" / >< fo : table−column column−number=" 2 " column−width=" 10cm" / >

< fo : table−body><fo : table−row>

<fo : table−c e l l column−number=" 1 ">< fo : b lock space−before . optimum=" 12 pt ">

< fo : ex te rna l−graph ic src=" { @photo } " / >< / fo : b lock>

< / fo : table−c e l l >< fo : table−c e l l column−number=" 2 ">

< fo : b lock color=" navy " font−size=" 16 pt " text−al ign=" center "space−before . optimum=" 15 pt ">

< x s l : apply−templates select=" type " / >< / fo : b lock>

< / fo : table−c e l l >< / fo : table−row>

< / fo : table−body>< / fo : table>

< / x s l : template>

Luiz Angelo Steffenel (URCA) XSL avancé XSL-FO 44 / 49

Page 45: XSL avancé XSL-FO - INFO0406 - cosy.univ-reims.frcosy.univ-reims.fr/~lsteffenel/cours/Licence/Info0406/0910/cours4... · Plan 1 XSL et XSLT Rappel Instructions évoluées Les transformations

Luiz Angelo Steffenel (URCA) XSL avancé XSL-FO 45 / 49

Page 46: XSL avancé XSL-FO - INFO0406 - cosy.univ-reims.frcosy.univ-reims.fr/~lsteffenel/cours/Licence/Info0406/0910/cours4... · Plan 1 XSL et XSLT Rappel Instructions évoluées Les transformations

Exemple

Insertion d’un lien

< x s l : template match=" i n t e r n e t ">< fo : b lock color=" navy " font−size=" 12 pt " text−al ign=" j u s t i f y " space−before . optimum=" 12 pt "background−color=" lavender ">S i t e I n t e r n e t :< / fo : b lock>< fo : b lock color=" navy " font−size=" 12 pt " text−al ign=" j u s t i f y " space−before . optimum=" 15 pt ">< fo : basic−l i nk ex te rna l−d e s t i n a t i o n =" { . } ">< x s l : value−of select=" . " / >< / fo : basic−l i nk >< / fo : b lock>< / x s l : template>

Luiz Angelo Steffenel (URCA) XSL avancé XSL-FO 46 / 49

Page 47: XSL avancé XSL-FO - INFO0406 - cosy.univ-reims.frcosy.univ-reims.fr/~lsteffenel/cours/Licence/Info0406/0910/cours4... · Plan 1 XSL et XSLT Rappel Instructions évoluées Les transformations

La moulinette

Comment créer une PDF avec FOPNous avons besoin des sources xml et xslfop.sh -xml name.xml -xsl name2fo.xsl -pdfname.pdfAutres formats : PS, PCL, PNG, RTF et TXT.

Luiz Angelo Steffenel (URCA) XSL avancé XSL-FO 47 / 49

Page 48: XSL avancé XSL-FO - INFO0406 - cosy.univ-reims.frcosy.univ-reims.fr/~lsteffenel/cours/Licence/Info0406/0910/cours4... · Plan 1 XSL et XSLT Rappel Instructions évoluées Les transformations

Luiz Angelo Steffenel (URCA) XSL avancé XSL-FO 48 / 49

Page 49: XSL avancé XSL-FO - INFO0406 - cosy.univ-reims.frcosy.univ-reims.fr/~lsteffenel/cours/Licence/Info0406/0910/cours4... · Plan 1 XSL et XSLT Rappel Instructions évoluées Les transformations

Les processeurs XSL-FO

Quelques outils free ou commerciauxApache Group : FOP

Formating Object ProcessorGénère du PDF http ://xmlgraphics.apache.org/fop/

Antenna HouseXSL Formatter http ://www.antennahouse.com

RenderXGénère du PDF http ://www.renderx.com

AltovaStyleVision http ://www.altova.com/products_xsl.html

XML Mind FO ConverterGénère du RTF http ://www.xmlmind.com/foconverter

AutresArbortext, Adobe, Scriptura, XMLPDF, APOC, XSL-FO to TeX

Luiz Angelo Steffenel (URCA) XSL avancé XSL-FO 49 / 49