XSL-FO I
Transcription
XSL-FO I
Ingénierie Documentaire Langages de publication paginée http://doc.crzt.fr STÉPHANE CROZAT Paternité - Partage des Conditions Initiales à l'Identique : http://creativecommons.org/licenses/by-sa/2.0/fr/ 16 octobre 2014 Table des matières I - Introduction à XSL-FO 5 A. Qu'est ce que XSL-FO ?..................................................................................5 B. Structure d'un fichier XSL-FO..........................................................................6 C. Exemple XSL-FO...........................................................................................6 II - Introduction à XHTML+CSS pour la publication PDF 9 A. Principe.......................................................................................................9 B. Exemple.....................................................................................................10 C. Flying Saucer..............................................................................................11 III - Exercices 13 A. Travaux pratiques FO et Flying Saucer...........................................................13 1. Exercice.........................................................................................................................13 2. Exercice.........................................................................................................................14 3. Exercice.........................................................................................................................16 Solution des exercices 19 Bibliographie 21 Contenus annexes 23 Stéphane Crozat (Contributions : David Rivron) 3 Introduction à XSL-FO I I- Qu'est ce que XSL-FO ? 5 Structure d'un fichier XSL-FO 6 Exemple XSL-FO 6 A. Qu'est ce que XSL-FO ? Définition : XSL Formatting Objects XSL-FO (on parle généralement plus simplement de FO) est la seconde partie du langage XSL, qui définit un langage de présentation en vue de la publication de documents imprimables. C'est un langage XML permettant d'obtenir un fichier PDF une fois traité par un moteur de rendu FO. Remarque : FO est un langage de publication Le langage FO n'est pas destiné à être écrit manuellement, mais plutôt à être obtenu automatiquement après une transformation XSL-XSLT. XML source (format métier) Xalan XSL-FO XSL-XSLT Fop PDF Graphique 1 Chaîne de publication FO (Technologies Apache) Complément : Moteurs FO Apache FOP , moteur open source, ne supportant pas la totalité du standard XEP2, moteur commercial, plus complet Antenna House Formatter3 1 1 - http://xmlgraphics.apache.org/fop/ 2 - http://www.renderx.com/ 3 - http://www.antennahouse.com/ Stéphane Crozat (Contributions : David Rivron) 5 Introduction à XSL-FO Introduction à XSL-FO B. Structure d'un fichier XSL-FO Un fichier XSL-FO est composé de deux parties : La mise en page générale ou layout Le contenu et sa mise en forme Syntaxe 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 <?xml version="1.0" encoding="utf-8"?> <fo:root xmlns:fo="http://www.w3.org/1999/XSL/Format"> <fo:layout-master-set> <fo:simple-page-master master-name="..."> <!--mise en page --> </fo:simple-page-master> </fo:layout-master-set> <fo:page-sequence master-reference="..."> <!--contenu --> </fo:page-sequence> </fo:root> Syntaxe : Balisage de bloc 1 2 3 <fo:block attributs de stylage> Contenu </fo:block> Syntaxe : Balisage inline 1 <fo:inline attributs de stylage>Contenu</fo:inline> C. Exemple XSL-FO 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 <?xml version="1.0" encoding="utf-8"?> <fo:root xmlns:fo="http://www.w3.org/1999/XSL/Format"> <fo:layout-master-set> <fo:simple-page-master master-name="A4" page-height="297mm" pagewidth="210mm" margin-top="1cm" margin-bottom="1cm" margin-left="1cm" margin-right="1cm"> <fo:region-body margin="3cm"/> <fo:region-before extent="2cm"/> <fo:region-after extent="2cm"/> <fo:region-start extent="2cm"/> <fo:region-end extent="2cm"/> </fo:simple-page-master> </fo:layout-master-set> <fo:page-sequence master-reference="A4"> <fo:flow flow-name="xsl-region-body"> <fo:block> <fo:inline font-weight="bold">Hello world!</fo:inline> </fo:block> </fo:flow> Stéphane Crozat (Contributions : David Rivron) Stéphane Crozat (Contributions : David Rivron) 6 6 Introduction à XSL-FO 18 19 </fo:page-sequence> </fo:root> region-body region-end region-start region-before region-after Graphique 2 Exemple de structure de page FO Complément : Pour aller plus loin "Publier à partir de XML : Formatting Objects" (par Bruno Bachimont) (cf. "Publier à partir de XML : Formatting Objects" (par Bruno Bachimont)) XML : Cours et exercice [Brillant07], pp157-167 Complément Stylesheet Tutorial, Sample Files of Formatting Objects and Sample Stylesheets http://www.antennahouse.com/XSLsample/XSLsample.htm4 4 - http://www.antennahouse.com/XSLsample/XSLsample.htm Stéphane Crozat (Contributions : David Rivron) 7 Introduction à XHTML+CSS pour la publication PDF II - II Principe 9 Exemple 10 Flying Saucer 11 A. Principe CSS introduit avec CSS 2.1 puis prolonge avec CSS3 des extensions pour gérer les médias paginés. En effet les pages XHTML destinées à l'écran ne sont pas paginées : le scrolling permet d'étendre la taille d'une page à l'infini. À l'inverse, lors d'une impression typiquement, la taille de la page est fixe. Ces extensions recouvrent typiquement la gestion : des format de papiers des marges d'impression des sauts de pages manuels et automatiques des paragraphes solidaires des veuves et orphelins des numérotations de pages des tables de matières des entêtes et pieds de page ... Schéma de principe XML source (format métier) XHTML Xalan XSL-XSLT Flying Saucer CSS PDF Chaîne de publication CSS (Technologies Apache et Flying Saucer) Stéphane Crozat (Contributions : David Rivron) 9 Introduction à XHTML+CSS pour Introduction la publicationàPDF XHTML+CSS pour la publication PDF Exemple : Exemples de moteurs XHTML+CSS PrinceXML Référence commerciale (version d'évaluation disponible). http://www.princexml.com/5 Flying Saucer Moteur Open Source. http://code.google.com/p/flying-saucer/6 Antenna House Formatter http://www.antennahouse.com/7 Complément : Standards associés CSS3 Module: Paged Media, W3C Working Draft, 10 October 2006. http://www.w3.org/TR/css3-page/8 CSS Paged Media Module Level 3, Editor's Draft, 6 October 2011. http://dev.w3.org/csswg/css3-page/9 CSS Generated Content for Paged Media Module, W3C Working Draft, 08 June 2010. http://www.w3.org/TR/css3-gcpm/10 CSS Fonts Module Level 3, W3C Working Draft, 4 October 2011. http://www.w3.org/TR/css3-fonts/11 Cascading Style Sheets Level 2 Revision 1 (CSS 2.1) Specification, W3C Recommendation, 07 June 2011. http://www.w3.org/TR/CSS21/12 Rappel Structure générale XHTML - p.23 Balises de base XHTML - p.23 Introduction à CSS - p.24 B. Exemple Exemple 1 2 3 4 5 : XHTML <html> <head> <title>Document</title> <link href="exemple.css" type="text/css" rel="stylesheet"/> </head> 5 - http://www.princexml.com/ 6 - http://code.google.com/p/flying-saucer/ 7 - http://www.antennahouse.com/ 8 - http://www.w3.org/TR/css3-page/ 9 - http://dev.w3.org/csswg/css3-page/ 10 - http://www.w3.org/TR/css3-gcpm/ 11 - http://www.w3.org/TR/css3-fonts/ 12 - http://www.w3.org/TR/CSS21/ Stéphane Crozat (Contributions : David Rivron) Stéphane Crozat (Contributions : David Rivron) 10 10 Introduction à XHTML+CSS pour la publication PDF 6 7 8 9 10 11 12 13 14 15 16 17 18 <body> <h1>Document</h1> <div id="chapter1" class="part chapter"> <h2>Chapitre 1</h2> <p>...</p> <p>...</p> </div> <div id="chapter2" class="part chapter"> <h2>Chapitre 2</h2> <p>...</p> </div> </body> </html> Exemple 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 : CSS @page { size: A4 portrait; margin: 2cm; @bottom-right { content: counter(page); font-size: 8pt; font-family: "Computer Modern"; text-align: right; } } div.part { page-break-before: always; } h1, h2 { text-align: center; } p { text-align: justify; orphans: 0; widows: 0; } Complément Introduction to page composition with CSS http://www.antennahouse.com/CSSInfo/index.html13 C. Flying Saucer Flying Saucer est un moteur de rendu permettant de générer du PDF à partir d'une source XHTML+CSS. Il exploite les possibilités de CSS 2.1 et quelques fonctions CSS3. Il est Open Source. Fondamental : Programme Flying Saucer Syntaxe : Ligne de commande Flying Saucer (Linux et Mac) 1 java -cp lib/core-renderer.jar:lib/iText-2.1.7.jar 13 - http://www.antennahouse.com/CSSInfo/index.html Stéphane Crozat (Contributions : David Rivron) 11 Introduction à XHTML+CSS pour Introduction la publicationàPDF XHTML+CSS pour la publication PDF org.xhtmlrenderer.simple.PDFRenderer <input.xhtml> <output.pdf> Syntaxe : Ligne de commande Flying Saucer (Windows) 1 java -cp lib/core-renderer.jar;lib/iText-2.1.7.jar org.xhtmlrenderer.simple.PDFRenderer <input.xhtml> <output.pdf> Remarque FS prend en entrée du XHTML, le fichier HMTL doit donc être un XML valide FS échoue quelques fois à générer un nouveau PDF lorsque le fichier de destination est ouvert (le supprimer en cas de problème). Complément http://code.google.com/p/flying-saucer/14 14 - http://code.google.com/p/flying-saucer/ Stéphane Crozat (Contributions : David Rivron) Stéphane Crozat (Contributions : David Rivron) 12 12 III - Exercices III Travaux pratiques FO et Flying Saucer 13 A. Travaux pratiques FO et Flying Saucer 1. Exercice [45 min] Soit les fichiers DITA ci-après. 1 2 3 4 5 6 7 8 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 <?xml version="1.0" encoding="utf-8"?> <!-- wheelbarrow.xml --> <concept id="wheelbarrow" xml:lang="en-us"> <title>Wheel barrow</title> <conbody> <p>A good wheel barrow will save your back from extensive trauma when you garden.</p> </conbody> </concept> <?xml version="1.0" encoding="utf-8"?> <!-- takinggarbage.xml --> <task id="takinggarbage" xml:lang="en-us"> <title>Taking out the garbage</title> <taskbody> <steps> <step><cmd>Find out from the town what day of the week garbage is collected in your neighborhood.</cmd></step> <step><cmd>The night before collection, place the garbage cans on the curb.</cmd></step> <step><cmd>After the garbage has been collected, move the cans back into your garage.</cmd></step> </steps> </taskbody> <related-links> <link href="../concepts/lawnmower.xml" format="dita" type="concept"><linktext>Lawnmower</linktext></link> </related-links> </task> Question 1 [Solution n°1 p 19] En utilisant Oxygen, produire une XSLT qui permet de publier en PDF via FO le fichier de type concept. Stéphane Crozat (Contributions : David Rivron) 13 Exercices Exercices Indices : Oxygen : Transformations XSLT - p.25 Scénario de publication XSLT->FO->PDF avec Oxygen Penser à la gestion des namespaces. 1 <xsl:stylesheet xmlns:xsl="http://www.w3.org/1999/XSL/Transform" version="1.0" xmlns:fo="http://www.w3.org/1999/XSL/Format"> Question 2 Traiter de la même façon le fichier de type task. 2. Exercice [45 minutes] La réalisation de ce tutoriel porte sur la publication progressivement améliorée du fichier XHTML disponible en exemple. Installer et tester Flying Saucer. Question 1 Lancer Flying Saucer en ne précisant aucune feuille de style (désactiver la feuille de style dans le fichier XHTML) pour observer le stylage de base appliqué aux éléments XHTML (FS contient une feuille de style par défaut). Question 2 Appliquer un style simple sur les éléments (h1, h2, p) et observer les changements dans le PDF : centrer les titres et justifier les paragraphes par exemple. Question 3 Préciser un style de page qui réduit la taille des pages et augmente leurs marges. Indice : CSS3 Module: Paged Media Section : "3. Page Boxes: the @page Rule" Stéphane Crozat (Contributions : David Rivron) Stéphane Crozat (Contributions : David Rivron) 14 14 Exercices http://www.w3.org/TR/css3-page/#page-box-page-rule15 Question 4 Modifier la police du document, en utilisant la police Computer Modern spécifiée dans le fichier polices/cmunrm.ttf du dossier de l'exemple. Indices : CSS Fonts Module Level 3 Section : "4 Font resources > 4.1 The @font-face rule" http://www.w3.org/TR/css3-fonts/#font-face-rule16 Il faut déclarer un @font-face pour les 4 types de polices (normal, bold, italic, bold/italic). La propriété -fs-pdf-font-embed est spécifique à FS et permet d'embarquer la police dans le PDF. Question 5 Insérer des sauts de page avant chaque partie du document (div de classe part) et éviter les veuves et les orphelins (adapter le document pour visualiser la gestion des veuves et orphelins). Indice : CSS3 Module: Paged Media Section : "5. Page Breaks" http://www.w3.org/TR/css3-page/#page-breaks17 Question 6 Numéroter automatiquement les parties en utilisant un compteur personnalisé. Indices : Cascading Style Sheets Level 2 Revision 1 (CSS 2.1) Specification Section : "Syntax and basic data types > 4.3.5 Counters" http://www.w3.org/TR/CSS21/syndata.html#counter 18 La pseudo-classe :before permet d'insérer le compteur avant le contenu inline de l'élément Question 7 Insérer des numéros de page en marge, dont la position dépend si l'on se situe sur une page paire ou impaire. On utilisera le compteur page géré en interne par le moteur. Indices : CSS Generated Content for Paged Media Module Section : "2. Running headers and footers" http://www.w3.org/TR/css3-gcpm/#running-headers-and-footers19 Les @bottom-left, @bottom-right n'hérite de rien : il faut dupliquer les règles de mise en forme (police, taille) 15 - http://www.w3.org/TR/css3-page/#page-box-page-rule 16 - http://www.w3.org/TR/css3-fonts/#font-face-rule 17 - http://www.w3.org/TR/css3-page/#page-breaks 18 - http://www.w3.org/TR/CSS21/syndata.html#counter 19 - http://www.w3.org/TR/css3-gcpm/#running-headers-and-footers Stéphane Crozat (Contributions : David Rivron) 15 Exercices Exercices CSS Paged Media Module Level 3 Section : "7.1. Page-based counters" http://dev.w3.org/csswg/css3-page/#page-based-counters20 Question 8 Insérer le titre du document en entête des pages. L'élément portant le contenu à mettre en marge doit être sorti du "flot" par la propriété position: running(<identifiant>), il peut ensuite être référencé par un content: element(<identifiant>). Indices : CSS Generated Content for Paged Media Module Section : "2. Running headers and footers" http://www.w3.org/TR/css3-gcpm/#running-headers-and-footers 21 On utilise la balise title du head plutôt que de créer un autre élément portant le titre, le head étant caché par la feuille de style par défaut, on force son affichage dans une première règle : head {display: block;} La mise en forme des blocs référencés de cette manière n'est pas facile, il ne vaut mieux pas trop en abuser. Question 9 Créer une table des matières. Indices : CSS Generated Content for Paged Media Module Section : "3. Leaders" http://www.w3.org/TR/css3-gcpm/#leaders22 La fonction leader('.') insère des points jusqu'à la fin de la ligne. la fonction target-counter(attr(href), page) récupère la valeur du compteur page tel qu'il est à l'élément pointé par l'attribut href. NB : Cela ne fonctionne que pour le compteur page dans Flying Saucer. 3. Exercice [2h] Soit les fichiers DITA Question 1 Écrire une transformation XSLT pour intégrer les différents fichiers DITA en un seul fichier XML. Indice : Utiliser la fonction document() et l'instruction xsl:copy. Principales instructions XSLT - p.28 Question 2 Écrire une transformation XSLT pour obtenir un PDF en utilisant XHTML+CSS et 20 - http://dev.w3.org/csswg/css3-page/#page-based-counters 21 - http://www.w3.org/TR/css3-gcpm/#running-headers-and-footers 22 - http://www.w3.org/TR/css3-gcpm/#leaders Stéphane Crozat (Contributions : David Rivron) Stéphane Crozat (Contributions : David Rivron) 16 16 Exercices Flying Saucer. Question 3 Écrire une transformation XSLT pour obtenir un PDF en utilisant XSL-FO et Oxygen. Indice : Stéphane Crozat (Contributions : David Rivron) 17 Solution des exercices > Solution n°1 (exercice p. 13) Stéphane Crozat (Contributions : David Rivron) 19 Bibliographie [Brillant07] ALEXANDRE BRILLANT, XML : Cours et exercices, Eyrolles, 2007 [ISBN 978-2212126914] [Shea06] DAVE SHEA, MOLLY HOLZSCHLAG, Le Zen des CSS, Eyrolles, 2006. Stéphane Crozat (Contributions : David Rivron) 21 Contenus annexes - Structure générale XHTML Syntaxe : Structure générale 1 2 3 4 5 6 7 8 <html xmlns="http://www.w3.org/1999/xhtml"> <head> ... </head> <body> ... </body> </html> Syntaxe : Entête 1 2 3 4 <head> <title>...</title> <meta http-equiv="Content-Type" content="text/html; charset=UTF-8"> </head> Syntaxe : Corps 1 2 3 4 5 <body> <h1>...</h1> <h2>...</h2> <p>...</p> </body> Complément Tutoriel XHTML : http://fr.html.net/tutorials/html/23 Brillant07, pp107-108 [Brillant07] - Balises de base XHTML Syntaxe 1 2 3 4 <p>Un paragraphe de texte</p> <p>Paragraphe contenant du texte, mot <b>gras</g> ou <i>italique</i>.</p> <p><a href="page02.html">Un lien</a> vers une autre page</p> <img src="img.png" alt="une image"/> 23 - http://fr.html.net/tutorials/html/ Stéphane Crozat (Contributions : David Rivron) 23 Contenus annexes 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 Contenus annexes <h1>Titre de niveau 1</h1> <h2>Titre de niveau 2</h2> <h3>Titre de niveau 3</h3> <table border="1"> <tr><th>Titre colonne 1</th><th>Titre colonne 2</th><th>...</th></tr> <tr><td>Ligne 1 colonne 1</td><td>Ligne 1 colonne 2</td><td>...</td></tr> <tr><td>Ligne 2 colonne 1</td><td>Ligne 2 colonne 2</td><td>...</td></tr> </table> <ul> <li>Item de liste à puce</li> <li>Item de liste à puce</li> </ul> <ol> <li>Item de liste à ordonnée</li> <li>Item de liste à ordonnée</li> </ol> Complément Pour une description des balises de base : Brillant07, pp108-112 [Brillant07]. - Introduction à CSS CSS (Cascading Style Sheets) est un standard du W3C qui complète HTML. CSS sert à : Mieux séparer méthodologiquement la structure (en HTML) de la mise en forme (CSS) Simplifier l'écriture HTML (et la génération HTML dans le cas de sites dynamiques réalisés avec PHP par exemple) Factoriser et réutiliser la mise en forme, notamment pour assurer l'homogénéisation d'un site Web (externalisation des feuilles CSS) Augmenter les possibilités de mise en forme du HTML (couches CSS) Syntaxe : Association HTML et CSS On peut associer à tout fichier HTML, dans le head, une ou plusieurs feuilles CSS (qui se complètent "en cascade"). 1 2 3 4 5 6 7 <html xmlns="http://www.w3.org/1999/xhtml"> <head> <meta http-equiv="Content-Type" content="text/html; charset=UTF8" /> <title>...</title> <link href='css/style1.css' type='text/css' rel='stylesheet'/> <link href='css/style2.css' type='text/css' rel='stylesheet'/> ... Syntaxe : Syntaxe CSS Un fichier CSS permet d'associer une mise en forme aux éléments utilisés dans le fichier HTML. 1 p { font-family:sans-serif;} Stéphane Crozat (Contributions : David Rivron) Stéphane Crozat (Contributions : David Rivron) 24 24 Contenus annexes Méthode : DIV et SPAN On peut différencier les styles en fonction des attributs class et id des éléments HTML. On recours alors massivement aux éléments div et span pour le stylage, avec des attributs id (pour référencer un élément particulier) et/ou class (pour référencer un ensemble d'éléments de même type). 1 2 3 div.class { ... } span.class { ... } #id { ... } Complément Tutoriel CSS didactique et complet : http://fr.html.net/tutorials/css/24. Pour une introduction à CSS : Brillant07, pp112-122 [Brillant07]. Zen Garden : http://www.csszengarden.com25 ; Le Zen des CSS [Shea06] - Transformations XSLT Méthode : Associer une transformation XSLT à un fichier XML Pour associer une XSLT à un fichier XML : 1. Ajouter la ligne standard avant l'élément racine : <?xml-stylesheet href="adresse2.xsl" type="text/xsl"?> Exemple : Exemple de déclaration XSLT standard Déclaration XSLT standard 24 - http://fr.html.net/tutorials/css/ 25 - http://www.csszengarden.com/ Stéphane Crozat (Contributions : David Rivron) 25 Contenus annexes Méthode Contenus annexes : Exécuter une transformation Pour exécuter une transformation : 1. Cliquer sur (ou Document > Document XML > Appliquer le scénario de transformation ou CTRL+MAJ+T) 2. Répondre Oui à la proposition d'exécuter le scénario par défaut basé sur la XSLT déclarée dans le fichier XML (lors de la première exécution seulement). 3. Le résultat de la transformation est présenté dans la fenêtre du bas. Exemple : Exemple de transformation Transformation Méthode : Récupérer un résultat de transformation Pour récupérer le résultat de la transformation : 1. Faire un clic droit sur la zone de résultat (zone du bas) 2. Choisir Enregistrer les résultat dans le menu contextuel 3. Enregistrer le fichier sur le disque dur (attention, l'extension n'est pas ajoutée automatiquement, pensez à écrire fichier.html s'il s'agit d'un fichier HTML) 4. Ouvrir ce fichier, par exemple dans un navigateur Web s'il s'agit d'un fichier HTML Complément XSLT : Déclarer et exécuter un scénario de transformation Pour associer une transformation XSLT à un fichier XML, il est possible de créer d'abord un "scénario de transformation" : Document > Document XML > Configurer un scénario de transformation ou CTRL+MAJ+C ou Puis : 1. 2. 3. 4. 5. Cliquer sur Nouveau Donner un nom au scénario Sélectionner le fichier XSLT sur le disque dur Cliquer sur Accepter Cliquer sur Accepter pour fermer la seconde fenêtre et associer le scénario qui vient d'être créé au fichier XML en cours d'édition Stéphane Crozat (Contributions : David Rivron) Stéphane Crozat (Contributions : David Rivron) 26 26 Contenus annexes Configurer un scénario Créer un scénario Une fois qu'un scénario de transformation est déclaré avec une XSLT, il peut être associé à tout fichier XML : 1. Sélectionner le fichier XML que vous souhaitez associer au scénario 2. Choisir Document > Document XML > Configurer un scénario de transformation 3. Sélectionner le scénario à appliquer au fichier XML dans la liste 4. Cliquer sur Accepter Pour l’exécuter, procéder comme précédemment ( ). Complément : Tester une expression XPath Exécution d'expression XPath dans l'éditeur Oxygen - Principales instructions XSLT Stéphane Crozat (Contributions : David Rivron) 27 Contenus annexes Contenus annexes Fondamental : Les deux instructions de base <xsl:apply-templates select="XPATH"/> : Relance les règles du programme sur le sous-arbre pointé par le select (fondement de la récursivité) <xsl:value-of select="XPATH"/> : Génère le texte contenu dans le nœud ou attribut pointé par le select {XPATH} : Génère le texte contenu dans le nœud ou attribut pointé par le XPath entre accolades (alternative à xsl:value-of à utiliser dans la génération d'attributs exclusivement, par exemple : <img src="{@URIsrc}"> Autres instructions courantes <xsl:copy-of select="XPATH"/> : Génère le sous-arbre pointé par le select <xsl:if test="XPATH">...</xsl:if> : Ne s'exécute que si test est vrai <xsl:for-each select="XPATH">...</xsl:for-each> : chaque sous-arbre renvoyé par le select Complément Exécute pour : Extension XPath "document()" document(chemin-accès) où chemin d'accès permet d'accéder à un fichier sur le disque. Par exemple : document("c:\monfichier.xml")//x : Tous les éléments x présents dans le fichier monfichier.xml. document(child::source)/* : La racine du document XML pointé par l'expression XPath child::source. Complément : Déclaration explicite sur la cible <xsl:element name="">contenu</xsl:element> <xsl:attribute name="">valeur</xsl:attribute> <xsl:text>chaîne de caractère</xsl:text Complément : Référence http://fr.selfhtml.org/xml/representation/elementsxslt.htm 26 Complément : Références synthétiques https://developer.mozilla.org/fr/XSLT/Éléments 27 http://www.daniel-lemire.com/inf6450/mod3/xsltenbref.xhtml 28 http://personnel.univ-reunion.fr/fred/Enseignement/XML/intro-xslt.html 29 26 - http://fr.selfhtml.org/xml/representation/elementsxslt.htm 27 - https://developer.mozilla.org/fr/XSLT/%C3%89l%C3%A9ments 28 - http://www.daniel-lemire.com/inf6450/mod3/xsltenbref.xhtml 29 - http://personnel.univ-reunion.fr/fred/Enseignement/XML/intro-xslt.html Stéphane Crozat (Contributions : David Rivron) Stéphane Crozat (Contributions : David Rivron) 28 28