Règles templates

Les règles templates sont des modèles (template en anglais) qui aident à la transformation d'un arbre source (source tree) en un arbre résultat (result tree). Elles se composent de 2 parties: l'une nommée pattern (Suchmuster en allemand) et l'autre template (Ersetzungsmuster en allemand) qui sera exécutée lorsque le pattern trouve un résultat correspondant dans l'arbre source. 

Construction Template

Construction Template

Afin de montrer plus clairement le mode de fonctionnement d'un template, nous développons ci-dessous l'exemple d'une feuille de style à l'aide de plusieurs petits templates.

La feuille de style:

<?xml version="1.0" encoding="UTF-8"?>
<xsl:stylesheet version="1.0" xmlns:xsl="http://www.w3.org/1999/XSL/Transform">
    <xsl:output encoding="iso-8859-1" />
    <xsl:template match="recueilPoemes">
        <html>
            <body>
                <xsl:apply-templates/>            (1)
            </body>
        </html>
    </xsl:template>
    <xsl:template match="auteur">
        <br/>
        <h4>
            <xsl:apply-templates/>
        </h4>
    </xsl:template>
    <xsl:template match="prenom">
        <xsl:apply-templates/>
        <xsl:text> </xsl:text>                    (2)
    </xsl:template>
    <xsl:template match="nomFamille">
        <xsl:apply-templates/>
    </xsl:template>
    <xsl:template match="titre">
        <h2>
            <xsl:apply-templates/>
        </h2>
    </xsl:template>
    <xsl:template match="strophe">
        <p>
            <xsl:apply-templates/>
        </p>
    </xsl:template>
    <xsl:template match="vers">
        <xsl:apply-templates/>
        <br/>
    </xsl:template>
</xsl:stylesheet>

(1) Le contenu de l'élément <recueilPoemes>, ainsi que tous les sous-éléments et leur contenu sont copiés à cet endroit. Le processeur cherche des sous-éléments jusque dans les caractères de base, ainsi que tous templates qui pourraient éventuellement correspondre. Le contenu de ces templates est copié dans la structure cible de manière séquentielle, car dans cet exemple des templates sont formulées pour tous les éléments subordonnés. S'il n'y a pas de template correspondant pour un élément subordonné dans l'ordre du document source, le processeur copie malgré tout le contenu de cet élément.

(2) Grâce à <xsl:text>, un caractère espace est copié ici dans le document cible.

Vue du browser du document cible:

vue du browser: exemple - templates

Exercice 1

a) Ecrivez un templates pour le fichier Poeme.xml. Tous les éléments échéants doivent être supportés. De plus, vous devrez créer un titre, appelé "Recueil de poèmes", situé au début du document généré.  

b) Pourquoi est-ce-que le texte d'un élément s'affiche, alors qu'aucun template n'est défini pour lui?

c) Supprimez toutes les indications sur l'auteur et désignez vous vous-même en tant qu'auteur.

> > aux solutions du exercice 1

   

Named Templates

Dans l'exemple donné ci-dessus, les templates se réferent aux éléments (noeuds dans la hiérarchie XML du document de départ). Ils sont définis grâce à l'élément <xsl:template> et l'attribut match. Les templates peuvent également être spécifiés indépendamment de ces noeuds. L'attribut match est remplacé par l'attribut name avec un nom facultatif, par exemple original. L'élément <xsl:template> s'applique aux deux variantes templates. Chacune d'entre-elles est appelé différemment: les noeuds en relation avec les templates sont appelés grâce à l'élément <xsl:apply-templates>. Named Templates sont appelés avec l'élément <xsl:call-template> et l'attribut name, par exemple <xsl:call-template name="original">. L'attribut  match (dans  <xsl:apply-templates>) provoque la recherche d'un modèle de recherche dans un document XML et l'exécution d'un règle template une fois qu'une correspondance est trouvée. L'attribut name (dans <xsl:call-template>) provoque la recherche d'un template portant le même nom dans une feuille de style et qui sera présenté à la place de l'appel.

La feuille de style:

<?xml version="1.0" encoding="UTF-8"?>
<xsl:stylesheet version="1.0" xmlns:xsl="http://www.w3.org/1999/XSL/Transform">
    <xsl:output encoding="iso-8859-1" version="1.0"/>
    <xsl:template match="recueilPoemes">
        <html>
            <body>
                <h1>Recueil de poèmes</h1>
                <p>
                   <xsl:call-template name="titre"/>
                </p>
            </body>
        </html>
    </xsl:template>
    <xsl:template name="titre">
        <br/>Titre: <xsl:apply-templates select="poeme/titre"/>
    </xsl:template>
    <xsl:template match="titre">
        <h4>
            <xsl:apply-templates/>
        </h4>
    </xsl:template>
</xsl:stylesheet>
Exercice 2

a) Pourquoi a-t-on complété l'attribut select dans la ligne <xsl:apply-templates select="poeme/titre"/>?

b) Construisez votre feuille de style de telle manière que le prénom, ainsi que le nom de famille de l'auteur apparaissent.

Remarque: L'association OU de plusieurs éléments est achevée à l'aide du caractère "|".

c) Que se passe-t-il lorsqu'un élément n'est pas représenté?

> > aux solutions du exercice 2

   

<< précédent suivant >>

 


Copyright © dpunkt.verlag GmbH 2004
Vous pouvez imprimer cette version en ligne pour un usage privé. Par ailleurs, ce chapitre du livre "XSL-FO in der Praxis" est soumis aux mêmes clauses prévues pour la version papier: L'intégralité de l'œuvre est protégée par les droits d'auteurs. Tous droits réservés y compris la copie, la traduction, la reproduction sur microfilm, tout comme l'enregistrement et le traitement dans des systèmes électroniques.

dpunkt.verlag GmbH, Ringstraße 19B, 69115 Heidelberg, téléphone +49 (0)6221-14830, fax +49 (0)6221-148399, hallo(at)dpunkt.de