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).

1
<?xml version="1.0" encoding="UTF-8"?>
2
<xsl:stylesheet
3
    xmlns:xsl="http://www.w3.org/1999/XSL/Transform" version="1.0"
4
    xmlns:fo="http://www.w3.org/1999/XSL/Format"
5
    >
6
    <xsl:template match="doc">
7
        <fo:root>
8
            <fo:layout-master-set>
9
                <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">
10
                    <fo:region-body margin="3cm"/>
11
                    <fo:region-before extent="2cm"/>
12
                    <fo:region-after extent="2cm"/>
13
                    <fo:region-start extent="2cm"/>
14
                    <fo:region-end extent="2cm"/>
15
                    </fo:simple-page-master>
16
                </fo:layout-master-set>
17
            <fo:page-sequence master-reference="A4" format="A">
18
                <fo:flow flow-name="xsl-region-body">
19
                    <xsl:apply-templates select="para"/>
20
                    </fo:flow>
21
                </fo:page-sequence>
22
            </fo:root>
23
    </xsl:template>
24
    <xsl:template match="para">
25
        <fo:block><xsl:value-of select="."/></fo:block>
26
    </xsl:template>
27
    <xsl:template match="para[1]">
28
        <fo:block><fo:inline font-weight="bold"><xsl:value-of select="."/></fo:inline></fo:block>
29
    </xsl:template>
30
</xsl:stylesheet>

Question

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.

Solution

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.

Question

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

Solution

1
<!--source.xml-->
2
<doc>
3
<para>Lorem ipsum dolor sit amet.</para>
4
<para>Consectetur adipiscing elit.</para>
5
<para>Nunc eu lectus in diam.</para>
6
</doc>
1
<!--result.fo-->
2
<fo:root xmlns:fo="http://www.w3.org/1999/XSL/Format">
3
    <fo:layout-master-set>
4
        <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">
5
            <fo:region-body margin="3cm"/>
6
            <fo:region-before extent="2cm"/>
7
            <fo:region-after extent="2cm"/>
8
            <fo:region-start extent="2cm"/>
9
            <fo:region-end extent="2cm"/>
10
            </fo:simple-page-master>
11
        </fo:layout-master-set>
12
    <fo:page-sequence master-reference="A4" format="A">
13
        <fo:flow flow-name="xsl-region-body">
14
            <fo:block><fo:inline font-weight="bold">Lorem ipsum dolor sit amet.</fo:inline></fo:block>
15
            <fo:block>Consectetur adipiscing elit.</fo:block>
16
            <fo:block>Nunc eu lectus in diam.</fo:block>
17
            </fo:flow>
18
        </fo:page-sequence>
19
</fo:root>

Question

Modifier le fichier XML source doc pour ajouter le namespace nf29.utc.fr/doc1.

Écrivez le RelaxNG de doc.

Testez la XSLT et observer qu'elle ne fonctionne plus ; expliquer brièvement pourquoi.

Réécrivez la XSLT afin qu'elle fonctionne, en mobilisant la gestion de namespace en XSLT 2.0. Vous vous assurerez que le moteur de transformation que vous utilisez est compatible XSLT 2.0.