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

CTRL+C pour copier, CTRL+V pour coller
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>
<?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>

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

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

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.