Namespaces et FO

Soit le fichier XSLT suivant, permettant de transformer un fichier XML en fichier Formatting Objects (standard W3C pour la publication de fichiers imprimables).

<?xml version="1.0" encoding="UTF-8"?>
<xsl:stylesheet
xmlns:xsl="http://www.w3.org/1999/XSL/Transform" version="1.0"
xmlns:fo="http://www.w3.org/1999/XSL/Format"
>
<xsl:template match="doc">
 <fo:root>
  <fo:layout-master-set>
   <fo:simple-page-master master-name="A4" page-width="297mm" page-height="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" format="A">
   <fo:flow flow-name="xsl-region-body">
    <xsl:apply-templates select="para"/>
   </fo:flow>
  </fo:page-sequence>
 </fo:root>
</xsl:template>
<xsl:template match="para">
 <fo:block><xsl:value-of select="."/></fo:block>
</xsl:template>
<xsl:template match="para[1]">
 <fo:block><fo:inline font-weight="bold"><xsl:value-of select="."/></fo:inline></fo:block>
</xsl:template>
</xsl:stylesheet>

Indiquer quels sont les namespaces et préfixes définis dans ce fichier XSLT, expliquer à quoi ils servent en général et dans ce cas précis, et en particulier pourquoi l'on ne pourrait pas s'en passer ici.

Les deux namespaces sont :

  • http://www.w3.org/1999/XSL/Transform

  • http://www.w3.org/1999/XSL/Format

Les préfixes correspondant sont respectivement :

  • xsl

  • fo

Les namespaces permettent d'assurer l'unicité des noms des éléments XML lorsque plusieurs schémas sont utilisés. Dans ce cas, ils servent à différencier les balises du schéma de transformation XSLT et les balises du schéma de publication cible Formatting Objects. Sans cette mécanique, si les schémas de XSLT et de FO définissaient deux éléments différents, mais avec le même nom, le processeur XSLT ne saurait pas les différencier et engendrerait des erreurs.

Inventer un fichier XML source cohérent avec la transformation XSLT proposée, et produire le fichier FO correspondant au résultat de la transformation.

<!--source.xml-->
<doc>
<para>Lorem ipsum dolor sit amet.</para>
<para>Consectetur adipiscing elit.</para>
<para>Nunc eu lectus in diam.</para>
</doc>
<!--result.fo-->
<fo:root xmlns:fo="http://www.w3.org/1999/XSL/Format">
 <fo:layout-master-set>
  <fo:simple-page-master master-name="A4" page-width="297mm" page-height="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" format="A">
  <fo:flow flow-name="xsl-region-body">
   <fo:block><fo:inline font-weight="bold">Lorem ipsum dolor sit amet.</fo:inline></fo:block>
   <fo:block>Consectetur adipiscing elit.</fo:block>
   <fo:block>Nunc eu lectus in diam.</fo:block>
  </fo:flow>
 </fo:page-sequence>
</fo:root>
AccueilExercices > Exercices XSLT > Exercice : Namespaces et FO< PrécédentSuivant >