VII - Les instructions de création
        Instruction xsl:text
                Bande-annonce
                Syntaxe
                Sémantique
                Exemple
                Variante syntaxique
                Sémantique
                Exemple
        Création de texte XML par un élément source littéral
                Exemple
                Descripteur de valeur différée d'attribut (Attribute Value Template)
                Suite de l'exemple
        Instruction xsl:element
                Bande-annonce
                Syntaxe
                Sémantique
                Exemple trivial
                Exemple plus évolué
                        Première étape
                        Deuxième étape
                Variante syntaxique namespace="..."
                        Exemple sans namespace="..."
                        Autre exemple sans namespace="..."
                        Exemple avec namespace="..."
                Variante syntaxique use-attribute-sets="..."
        Instruction xsl:attribute
                Bande-annonce
                Syntaxe
                Règle XSLT typique
                Emploi moins typique
                Sémantique
                Exemple trivial
                Exemple plus évolué
                Variante syntaxique namespace="..."
                Exemple avec namespace="..."
        Instruction xsl:attribute-set
                Bande-annonce
                Syntaxe
                Sémantique
                Variante syntaxique use-attribute-sets="..."
                Exemple
                Variante de l'exemple
                Commentaire de l'exemple
                Compléments
        Instruction xsl:copy
                Bande-annonce
                Syntaxe
                Variante syntaxique
                Sémantique
                        Copie d'un nœud de type element
                        Copie d'un nœud de type attribute
                        Copie d'un nœud de type namespace
                        Copie du nœud de type root
                        Copie d'un nœud de type text
                        Copie d'un nœud de type comment
                        Copie d'un nœud de type processing-instruction
        Instruction xsl:comment
                Syntaxe
                Sémantique
                Exemple
        Instruction xsl:processing-instruction
                Syntaxe
                Sémantique
        Instruction xsl:number
                Bande-annonce
                Syntaxe
                Sémantique
                        Calcul d'un numéro d'ordre
                        Différents modes de calcul d'un numéro d'ordre
                        Réinitialisation d'un numéro d'ordre
                        Numéro d'ordre sans décompte
                        Numéro d'ordre dans un document source secondaire
                        Rendu de la numérotation


Chapitre VII - Les instructions de création

Instruction xsl:text

Bande-annonce

Nom.xsl
<?xml version="1.0" encoding="UTF-16"?>
<xsl:stylesheet xmlns:xsl="http://www.w3.org/1999/XSL/Transform" version="1.0">

    <xsl:output  method='text' encoding='ISO-8859-1' />
    
    <xsl:template name="insérerSautLigneAprèsTexte"> 
        <xsl:param name="texte"/>
        <xsl:value-of select="$texte" />
        <xsl:text>
</xsl:text>
    </xsl:template>
    
    <xsl:template match="Nom">
        <xsl:call-template name="insérerSautLigneAprèsTexte">
            <xsl:with-param name="texte" select="."/>
        </xsl:call-template>
    </xsl:template>
    
    <xsl:template match="text()"/>
    
</xsl:stylesheet>
Concert.xml
<?xml version="1.0" encoding="UTF-16" standalone="yes"?>

<Concert>
    
    <Entête> Les Concerts d'Anacréon </Entête>
    <Date>Jeudi 17 Janvier 2002, 20H30</Date>
    <Lieu>Chapelle des Ursules</Lieu>

    <Ensemble> "A deux violes esgales" </Ensemble>

    <Interprète>
        <Nom> Jonathan Dunford </Nom>
        <Instrument>Basse de viole</Instrument>
    </Interprète>

    <Interprète>
        <Nom> Sylvia Abramowicz </Nom>
        <Instrument>Basse de viole</Instrument>
    </Interprète>

    <Interprète>
        <Nom> Benjamin Perrot </Nom>
        <Instrument>Théorbe et Guitare baroque</Instrument>
    </Interprète>
    
    <TitreConcert>
        Folies d'Espagne et diminutions d'Italie
    </TitreConcert>
    
    <Compositeurs>
        <Compositeur>M. Marais</Compositeur>
        <Compositeur>D. Castello</Compositeur>
        <Compositeur>F. Rognoni</Compositeur>
    </Compositeurs>
    
</Concert>
Résultat
 Jonathan Dunford 
 Sylvia Abramowicz 
 Benjamin Perrot 
 

Syntaxe

xsl:text
<xsl:text>
    <!-- modèle de transformation -->
    ... texte brut (pas de texte XML et encore moins XSL) ...
    <!-- fin du modèle de transformation -->
</xsl:text>

Sémantique

Exemple

Résultat
                flûte à bec
                 :
         Michel Keustermans  et  Laura Pok 
                viole d'amour
                 :
         Vinciane Baudhuin 
                oboe da caccia
                 :
         Blai Justo 
                viole de gambe
                 :
         Rika Murata ,  Martin Bauer ,  Sophie Watillon 
                violone
                 :
         Benoit vanden Bemden 
                orgue positif et clavecin
                 :
         Jacques Willemijns 
Résultat
flûte à bec : Michel Keustermans et Laura Pok.
viole d'amour : Vinciane Baudhuin.
oboe da caccia : Blai Justo.
viole de gambe : Rika Murata, Martin Bauer, Sophie Watillon.
violone : Benoit vanden Bemden.
orgue positif et clavecin : Jacques Willemijns.
ProgrammeConcert.xsl
<?xml version="1.0" encoding="UCS-2"?>
<xsl:stylesheet xmlns:xsl="http://www.w3.org/1999/XSL/Transform" version="1.0">

    <xsl:output  method='text' encoding='ISO-8859-1' />

    <xsl:template match="Role">
        
        <xsl:value-of select="./child::text()"/> :
        <xsl:choose>
        
            <xsl:when test="count(./Interprète) = 1 ">
                <xsl:value-of select="Interprète"/>
            </xsl:when>
        
            <xsl:when test="count(./Interprète) = 2 ">
                <xsl:value-of select="Interprète[1]"/> et <xsl:value-of 
                              select="Interprète[2]"/>
            </xsl:when>
        
            <xsl:otherwise>
                <xsl:for-each select="Interprète">
                    <xsl:value-of select="."/><xsl:if test="not(position() =
                                  last())">, </xsl:if>
                </xsl:for-each>
            </xsl:otherwise>
            
        </xsl:choose>
        
    </xsl:template>
    
    <xsl:template match="text()"/>
            
</xsl:stylesheet>
          <Role>\n
\t \t \t \t viole de gambe\n
\t \t \t \t <Interprète>
                ...
    <xsl:template match="Role">
        
        <xsl:value-of select="normalize-space(./child::text())"/> :
        <xsl:choose>
        
            <xsl:when test="count(./Interprète) = 1 ">
                <xsl:value-of select="Interprète"/>
            </xsl:when>
        
            <xsl:when test="count(./Interprète) = 2 ">
                <xsl:value-of select="Interprète[1]"/> et <xsl:value-of 
                              select="Interprète[2]"/>
            </xsl:when>
        
            <xsl:otherwise>
                <xsl:for-each select="Interprète">
                    <xsl:value-of select="."/><xsl:if test="not(posiotion() =
                                  last())">, </xsl:if>
                </xsl:for-each>
            </xsl:otherwise>
            
        </xsl:choose>
        
    </xsl:template>
Résultat
flûte à bec :
         Michel Keustermans  et  Laura Pok viole d'amour :
         Vinciane Baudhuin oboe da caccia :
         Blai Justo viole de gambe :
         Rika Murata ,  Martin Bauer ,  Sophie Watillon violone :
         Benoit vanden Bemden orgue positif et clavecin :
         Jacques Willemijns 
    <xsl:template match="Role">
        
        <xsl:value-of select="normalize-space(./child::text())"/> :
        <xsl:choose>
        
            <xsl:when test="count(./Interprète) = 1 ">
                !<xsl:value-of select="Interprète"/>
            </xsl:when>
        
            <xsl:when test="count(./Interprète) = 2 ">
                !<xsl:value-of select="Interprète[1]"/> et <xsl:value-of 
                              select="Interprète[2]"/>
            </xsl:when>
        
            <xsl:otherwise>
                !<xsl:for-each select="Interprète">
                    <xsl:value-of select="."/><xsl:if test="not(position() =
                                  last())">, </xsl:if>
                </xsl:for-each>
            </xsl:otherwise>
            
        </xsl:choose>
        
    </xsl:template>
Résultat
flûte à bec :
        
                ! Michel Keustermans  et  Laura Pok viole d'amour :
        
                ! Vinciane Baudhuin oboe da caccia :
        
                ! Blai Justo viole de gambe :
        
                ! Rika Murata ,  Martin Bauer ,  Sophie Watillon violone :
        
                ! Benoit vanden Bemden orgue positif et clavecin :
        
                ! Jacques Willemijns 
    <xsl:template match="Role">
      
       *<xsl:value-of select="normalize-space(./child::text())"/> :
        <xsl:choose>
        
            <xsl:when test="count(./Interprète) = 1 ">
                <xsl:value-of select="Interprète"/>
            </xsl:when>
        
            <xsl:when test="count(./Interprète) = 2 ">
                <xsl:value-of select="Interprète[1]"/> et <xsl:value-of 
                              select="Interprète[2]"/>
            </xsl:when>
        
            <xsl:otherwise>
                <xsl:for-each select="Interprète">
                    <xsl:value-of select="."/><xsl:if test="not(position() =
                                  last())">, </xsl:if>
                </xsl:for-each>
            </xsl:otherwise>
            
        </xsl:choose>
      
    </xsl:template>
Résultat
      
       *flûte à bec :
         Michel Keustermans  et  Laura Pok 
      
       *viole d'amour :
         Vinciane Baudhuin 
      
       *oboe da caccia :
         Blai Justo 
      
       *viole de gambe :
         Rika Murata ,  Martin Bauer ,  Sophie Watillon 
      
       *violone :
         Benoit vanden Bemden 
      
       *orgue positif et clavecin :
         Jacques Willemijns 
    <xsl:template match="Role">\n
\n
\t \t \t *<xsl:value-of select="normalize-space(./child::text())"/> :\n
\t \t \t <xsl:choose>
            ...
    <xsl:template match="Role">
      
        <xsl:text>
</xsl:text>
        <xsl:value-of select="normalize-space(./child::text())"/> :
        <xsl:choose>
            ...
        </xsl:choose>
      
    </xsl:template>
    <xsl:template match="Role">
      
        <xsl:text>
</xsl:text>
        <xsl:value-of select=
        "normalize-space(./child::text())"/>  <xsl:text> : </xsl:text>
        <xsl:choose>
            ...
        </xsl:choose>
      
    </xsl:template>
    <xsl:template match="Role">
      
        <xsl:text>
</xsl:text>
        <xsl:value-of select=
        "normalize-space(./child::text())"/> : <xsl:text/>
        <xsl:choose>
            ...
        </xsl:choose>
      
    </xsl:template>
ProgrammeConcert.xsl
<?xml version="1.0" encoding="UCS-2"?>
<xsl:stylesheet xmlns:xsl="http://www.w3.org/1999/XSL/Transform" version="1.0">

   <xsl:output  method='text' encoding='ISO-8859-1' />

    <xsl:template match="Role">
      
      <xsl:text>
</xsl:text>
      <xsl:value-of select="normalize-space(./child::text())"/> : <xsl:text/>
      <xsl:choose>
      
         <xsl:when test="count(./Interprète) = 1 ">
            <xsl:value-of select="normalize-space(Interprète)"/>.<xsl:text/>
         </xsl:when>
      
         <xsl:when test="count(./Interprète) = 2 ">
            <xsl:value-of select="normalize-space(Interprète[1])"/>
            <xsl:text> et </xsl:text>
            <xsl:value-of select="normalize-space(Interprète[2])"/>.<xsl:text/>
         </xsl:when>
      
         <xsl:otherwise>
            <xsl:for-each select="Interprète">
               <xsl:value-of select="normalize-space(.)"/>
               <xsl:if test="not(position() = last())">
                  <xsl:text>, </xsl:text>
               </xsl:if>
            </xsl:for-each>
            <xsl:text>.</xsl:text>
         </xsl:otherwise>
         
      </xsl:choose>
      
    </xsl:template>
    
    <xsl:template match="text()"/>
    
</xsl:stylesheet>
Résultat
flûte à bec : Michel Keustermans et Laura Pok.
viole d'amour : Vinciane Baudhuin.
oboe da caccia : Blai Justo.
viole de gambe : Rika Murata, Martin Bauer, Sophie Watillon.
violone : Benoit vanden Bemden.
orgue positif et clavecin : Jacques Willemijns.

Variante syntaxique

xsl:text
<xsl:text disable-output-escaping="...">
    ... texte brut (pas de texte XML et encore moins XSL) ...
</xsl:text>

Sémantique

Exemple

Résultat
flûte à bec : Michel Keustermans & Laura Pok.
viole d'amour : Vinciane Baudhuin.
oboe da caccia : Blai Justo.
viole de gambe : Rika Murata, Martin Bauer, Sophie Watillon.
violone : Benoit vanden Bemden.
orgue positif et clavecin : Jacques Willemijns.
ProgrammeConcert.xsl
<?xml version="1.0" encoding="UCS-2"?>
<xsl:stylesheet xmlns:xsl="http://www.w3.org/1999/XSL/Transform" version="1.0">

   <xsl:output  method='xml' 
                encoding='ISO-8859-1' /> <!-- mode xml activé ici !!! -->

    <xsl:template match="Role">
      
      <xsl:text>
</xsl:text>
      <xsl:value-of select="normalize-space(./child::text())"/> : <xsl:text/>
      <xsl:choose>
      
         <xsl:when test="count(./Interprète) = 1 ">
            <xsl:value-of select="normalize-space(Interprète)"/>.<xsl:text/>
         </xsl:when>
      
         <xsl:when test="count(./Interprète) = 2 ">
            <xsl:value-of select="normalize-space(Interprète[1])"/>
            <xsl:text disable-output-escaping="no"> &amp; </xsl:text>
            <xsl:value-of select="normalize-space(Interprète[2])"/>.<xsl:text/>
         </xsl:when>
      
         <xsl:otherwise>
            <xsl:for-each select="Interprète">
               <xsl:value-of select="normalize-space(.)"/>
               <xsl:if test="not(position() = last())">
                  <xsl:text>, </xsl:text>
               </xsl:if>
            </xsl:for-each>
            <xsl:text>.</xsl:text>
         </xsl:otherwise>
         
      </xsl:choose>
      
    </xsl:template>
    
    <xsl:template match="text()"/>
    
</xsl:stylesheet>
Résultat
<?xml version="1.0" encoding="ISO-8859-1"?>
flûte à bec : Michel Keustermans &amp; Laura Pok.
viole d'amour : Vinciane Baudhuin.
oboe da caccia : Blai Justo.
viole de gambe : Rika Murata, Martin Bauer, Sophie Watillon.
violone : Benoit vanden Bemden.
orgue positif et clavecin : Jacques Willemijns.
Résultat
<?xml version="1.0" encoding="ISO-8859-1"?>
flûte à bec : Michel Keustermans & Laura Pok.
viole d'amour : Vinciane Baudhuin.
oboe da caccia : Blai Justo.
viole de gambe : Rika Murata, Martin Bauer, Sophie Watillon.
violone : Benoit vanden Bemden.
orgue positif et clavecin : Jacques Willemijns.

Création de texte XML par un élément source littéral

<xsl:template match="Concert">
    <xsl:variable name="mouvement">
        <insert>
            <Ensemble>
                <Nom><xsl:value-of select="NomEnsemble"/></Nom>
                <Direction><xsl:value-of select="Chef"/></Direction>
            </Ensemble>
            <Concert>
                <Date><xsl:value-of select="Date"/></Date>
                <Ville><xsl:value-of select="Ville"/></Ville>
                <Lieu><xsl:value-of select="Salle"/></Lieu>
                <Titre><xsl:value-of select="TitreConcert"/></Titre>
            </Concert>
        </insert>
    </xsl:variable>
    <xsl:copy-of select="$mouvement"/>
</xsl:template>
instanciation de ce modèle
<insert>
    <Ensemble>
        <Nom>...</Nom>
        <Direction>...</Direction>
    </Ensemble>
    <Concert>
        <Date>...</Date>
        <Ville>...</Ville>
        <Lieu>...</Lieu>
        <Titre>...></Titre>
    </Concert>
</insert>

Exemple

declamationTaille.xml
<?xml version="1.0" encoding="UTF-16"?>
<texte>

    <référence>
        Pièces de viole du 5° livre, 1725
        Marin Marais
    </référence>
    

    <titre>
    Le Tableau de l'Opération de la Taille
    </titre>
    
    <paroles>
        <p>L'aspect de l'apareil.</p>
        <p>Fremissement en le voyant.</p>
        <p>Resolution pour y monter.</p>
        <p>Parvenu jusqu'au hault;</p>
        <p>descente dudit apareil.</p>
        <p>Reflexions serieuses.</p>
        <p>Entrelassement des soyes
        Entre les bras et les jambes.</p>
        <p>Icy se fait l'incision.</p>
        <p>Introduction de la tenette.</p>
        <p>Ici l'on tire la piere.</p>
        <p>Icy l'on perd quasi la voix.</p>
        <p>Ecoulement du sang.</p>
        <p>Icy l'on oste les soyes.</p>
        <p>Icy l'on vous transporte dans le lit.</p>
    </paroles>
    
</texte>
synopsisRecitant.xml
<?xml version="1.0" encoding="UTF-16"?>
<synopsisRécitant>

    <prologue/>
    
    <Numeros>
        <NoMesure>1</NoMesure>
        <NoMesure>8</NoMesure>
        <NoMesure>11</NoMesure>
        <NoMesure>15</NoMesure>
        <NoMesure>20</NoMesure>
        <NoMesure>22</NoMesure>
        <NoMesure>23</NoMesure>
        <NoMesure>27</NoMesure>
        <NoMesure>31</NoMesure>
        <NoMesure>39</NoMesure>
        <NoMesure>44</NoMesure>
        <NoMesure>48</NoMesure>
        <NoMesure>50</NoMesure>
        <NoMesure>53</NoMesure>
    </Numeros>
    
</synopsisRécitant>
synopsisRecitant.xml
<?xml version="1.0" encoding="ISO-8859-1"?>
<récitant>
   <prologue>
    Le Tableau de l'Opération de la Taille
    </prologue>
   <mesure No="1">L'aspect de l'apareil.</mesure>
   <mesure No="8">Fremissement en le voyant.</mesure>
   <mesure No="11">Resolution pour y monter.</mesure>
   <mesure No="15">Parvenu jusqu'au hault;</mesure>
   <mesure No="20">descente dudit apareil.</mesure>
   <mesure No="22">Reflexions serieuses.</mesure>
   <mesure No="23">Entrelassement des soyes
        Entre les bras et les jambes.</mesure>
   <mesure No="27">Icy se fait l'incision.</mesure>
   <mesure No="31">Introduction de la tenette.</mesure>
   <mesure No="39">Ici l'on tire la piere.</mesure>
   <mesure No="44">Icy l'on perd quasi la voix.</mesure>
   <mesure No="48">Ecoulement du sang.</mesure>
   <mesure No="50">Icy l'on oste les soyes.</mesure>
   <mesure No="53">Icy l'on vous transporte dans le lit.</mesure>
</récitant>
Elément source littéral à contenu calculé
<mesure No="...">
    ...
</mesure>
fusion.xsl
<?xml version="1.0" encoding="UTF-16"?>
<xsl:stylesheet 
    xmlns:xsl="http://www.w3.org/1999/XSL/Transform" 
    version="1.0">

    <xsl:output  method='xml' indent="yes" encoding='ISO-8859-1' />
    <xsl:param name="declamationFileRef" select="'declamationTaille.xml'" />
    <xsl:variable name="declamation" 
                  select="document( $declamationFileRef )/texte" />
    
    <xsl:template match="/">
        <récitant>
            <xsl:apply-templates/>
        </récitant>
    </xsl:template>

    <xsl:template match="prologue">
        <prologue>
            <xsl:value-of select="$declamation/titre"/>
        </prologue>
    </xsl:template>
    
    <xsl:template match="Numeros">
        ...
    </xsl:template>
        
    <xsl:template match="text()"/>
</xsl:stylesheet>
<mesure No="...">
    ...
</mesure>
    <xsl:template match="Numeros">
        <xsl:for-each select="NoMesure">
            ...
            <mesure No="...(1)...">
                ...(2)...
            </mesure>
        </xsl:for-each>
    </xsl:template>
    <xsl:template match="Numeros">
        <xsl:for-each select="NoMesure">
            <xsl:variable name="i" select="position()" />
            <mesure No="...(1)...">
                <xsl:value-of select="$declamation/paroles/p[position()=$i]"/>
            </mesure>
        </xsl:for-each>
    </xsl:template>
<xsl:template match="Numeros">
    <xsl:for-each select="NoMesure">
        <xsl:variable name="i" select="position()" />
        <mesure No="$declamation/paroles/p[position() = $i]">
            <xsl:value-of select="$declamation/paroles/p[position() = $i]"/>
        </mesure>
    </xsl:for-each>
</xsl:template>
interventionRecitant.xml
<?xml version="1.0" encoding="ISO-8859-1"?>
<récitant>
   <prologue>
    Le Tableau de l'Opération de la Taille
    </prologue>
   <mesure No="$declamation/paroles/p[position() = $i]">L'aspect de l'apareil.</mesure>
   <mesure No="$declamation/paroles/p[position() = $i]">Fremissement en le voyant.</mesure>
   <mesure No="$declamation/paroles/p[position() = $i]">Resolution pour y monter.</mesure>
   <mesure No="$declamation/paroles/p[position() = $i]">Parvenu jusqu'au hault;</mesure>
   <mesure No="$declamation/paroles/p[position() = $i]">descente dudit apareil.</mesure>
   <mesure No="$declamation/paroles/p[position() = $i]">Reflexions serieuses.</mesure>
   <mesure No="$declamation/paroles/p[position() = $i]">Entrelassement des soyes
        Entre les bras et les jambes.</mesure>
   <mesure No="$declamation/paroles/p[position() = $i]">Icy se fait l'incision.</mesure>
   <mesure No="$declamation/paroles/p[position() = $i]">Introduction de la tenette.</mesure>
   <mesure No="$declamation/paroles/p[position() = $i]">Ici l'on tire la piere.</mesure>
   <mesure No="$declamation/paroles/p[position() = $i]">Icy l'on perd quasi la voix.</mesure>
   <mesure No="$declamation/paroles/p[position() = $i]">Ecoulement du sang.</mesure>
   <mesure No="$declamation/paroles/p[position() = $i]">Icy l'on oste les soyes.</mesure>
   <mesure No="$declamation/paroles/p[position() = $i]">Icy l'on vous transporte dans le lit.</mesure>
</récitant>

Descripteur de valeur différée d'attribut (Attribute Value Template)

Suite de l'exemple

<xsl:template match="Numeros">
    <xsl:for-each select="NoMesure">
        <xsl:variable name="i" select="position()" />
        <mesure No="...(1)...">
            <xsl:value-of select="$declamation/paroles/p[position() = $i]"/>
        </mesure>
    </xsl:for-each>
</xsl:template>
fusion.xsl
<?xml version="1.0" encoding="UTF-16"?>
<xsl:stylesheet 
   xmlns:xsl="http://www.w3.org/1999/XSL/Transform" 
   version="1.0">

   <xsl:output  method='xml' indent="yes" encoding='ISO-8859-1' />
   <xsl:param name="declamationFileRef" select="'declamationTaille.xml'" />
   <xsl:variable name="declamation" 
                 select="document( $declamationFileRef )/texte" />
    
   <xsl:template match="/">
      <récitant>
         <xsl:apply-templates/>
      </récitant>
   </xsl:template>

   <xsl:template match="prologue">
      <prologue>
         <xsl:value-of select="$declamation/titre"/>
      </prologue>
   </xsl:template>
   
   <xsl:template match="Numeros">
      <xsl:for-each select="NoMesure">
         <xsl:variable name="i" select="position()" />
         <mesure No="{.}">
            <xsl:value-of select="$declamation/paroles/p[position() = $i]"/>
         </mesure>
      </xsl:for-each>
   </xsl:template>
        
   <xsl:template match="text()"/>
</xsl:stylesheet>
interventionRecitant.xml
<?xml version="1.0" encoding="ISO-8859-1"?>
<récitant>
   <prologue>
    Le Tableau de l'Opération de la Taille
    </prologue>
   <mesure No="1">L'aspect de l'apareil.</mesure>
   <mesure No="8">Fremissement en le voyant.</mesure>
   <mesure No="11">Resolution pour y monter.</mesure>
   <mesure No="15">Parvenu jusqu'au hault;</mesure>
   <mesure No="20">descente dudit apareil.</mesure>
   <mesure No="22">Reflexions serieuses.</mesure>
   <mesure No="23">Entrelassement des soyes
        Entre les bras et les jambes.</mesure>
   <mesure No="27">Icy se fait l'incision.</mesure>
   <mesure No="31">Introduction de la tenette.</mesure>
   <mesure No="39">Ici l'on tire la piere.</mesure>
   <mesure No="44">Icy l'on perd quasi la voix.</mesure>
   <mesure No="48">Ecoulement du sang.</mesure>
   <mesure No="50">Icy l'on oste les soyes.</mesure>
   <mesure No="53">Icy l'on vous transporte dans le lit.</mesure>
</récitant>
Conclusion

Instruction xsl:element

Bande-annonce

<Ensemble>
    <Nom>
        <xsl:value-of select="NomEnsemble"/>
    </Nom>
    <Direction>
        <xsl:value-of select="Chef"/>
    </Direction>
</Ensemble>
<xsl:element name="Ensemble">
    <xsl:element name="Nom">
        <xsl:value-of select="NomEnsemble"/>
    </xsl:element>
    <xsl:element name="Direction">
        <xsl:value-of select="Chef"/>
    </xsl:element>
</xsl:element>
<xsl:element name="{$x}">
    ...
</xsl:element>

Syntaxe

xsl:element
<xsl:element name="...">
    <!-- modèle de transformation -->
    ... 
    <!-- fin du modèle de transformation -->
</xsl:element>

Sémantique

Exemple trivial

prepareInsert.xsl
<?xml version="1.0" encoding="UTF-16"?>
<xsl:stylesheet 
    xmlns:xsl="http://www.w3.org/1999/XSL/Transform" 
    version="1.0">

    <xsl:output  method='xml' encoding='ISO-8859-1' indent='yes' />
  
    <xsl:template match="/">
        <Mouvements>
        <xsl:apply-templates/>
        </Mouvements>
    </xsl:template>
    
    <xsl:template match="Concert">
        <xsl:variable name="mouvement">
            <insert>
                <Ensemble>
                    <Nom>
                        <xsl:value-of select="NomEnsemble"/>
                    </Nom>
                    <Direction>
                        <xsl:value-of select="Chef"/>
                    </Direction>
                </Ensemble>
                <Concert>
                    <Date>
                        <xsl:value-of select="Date"/>
                    </Date>
                    <Ville>
                        <xsl:value-of select="Ville"/>
                    </Ville>
                    <Lieu>
                        <xsl:value-of select="Salle"/>
                    </Lieu>
                    <Titre>
                        <xsl:value-of select="TitreConcert"/>
                    </Titre>
                </Concert>
            </insert>
        </xsl:variable>
        <xsl:copy-of select="$mouvement"/>
    </xsl:template>
        
    <xsl:template match="text()"/>
</xsl:stylesheet>
  <xsl:template match="Concert">
        <xsl:variable name="mouvement">
            <xsl:element name="insert">
                <xsl:element name="Ensemble">
                    <xsl:element name="Nom">
                        <xsl:value-of select="NomEnsemble"/>
                    </xsl:element>
                    <xsl:element name="Direction">
                        <xsl:value-of select="Chef"/>
                    </xsl:element>
                </xsl:element>
                <xsl:element name="Concert">
                    <xsl:element name="Date">
                        <xsl:value-of select="Date"/>
                    </xsl:element>
                    <xsl:element name="Ville">
                        <xsl:value-of select="Ville"/>
                    </xsl:element>
                    <xsl:element name="Lieu">
                        <xsl:value-of select="Salle"/>
                    </xsl:element>
                    <xsl:element name="Titre">
                        <xsl:value-of select="TitreConcert"/>
                    </xsl:element>
                </xsl:element>
            </xsl:element>
        </xsl:variable>
        <xsl:copy-of select="$mouvement"/>
    </xsl:template>

Exemple plus évolué

mapping.xml
<?xml version="1.0" encoding="ISO-8859-1"?>
<mapping>
   <table>ACCORD</table>
   <ACCORD>
      <DEDEC>
         <field>beginning_date</field>
         <type>BusinessDate</type>
      </DEDEC>
      <CCETF>
         <field>state</field>
         <type>String</type>
      </CCETF>
      <NOACA>
         <field>company_id</field>
         <type>String</type>
      </NOACA>
      <NOPOA>
         <field>contract_nbr</field>
         <type>String</type>
      </NOPOA>
      <CCPAA1>
         <field>country_code</field>
         <type>Integer</type>
      </CCPAA1>
   </ACCORD>
   <table>COMPANY</table>
   <COMPANY>
      <NOACA>
         <field>company_id</field>
         <type>String</type>
      </NOACA>
      <LSACA1>
         <field>company_name</field>
         <type>String</type>
      </LSACA1>
      <CCPAA1>
         <field>country_code</field>
         <type>Integer</type>
      </CCPAA1>
      <LAACA1>
         <field>address</field>
         <type>String</type>
      </LAACA1>
      <URL>
         <field>URL</field>
         <type>String</type>
      </URL>
      <STATRAT>
         <field>quality_code</field>
         <type>String</type>
      </STATRAT>
   </COMPANY>
</mapping>
accord.xml
<?xml version="1.0" encoding="UTF-16"?>
<table name="ACCORD">
DEDEC<tab/>DATE<br/>
CCETF<tab/>CHAR(1)<br/>
NOACA<tab/>CHAR(6)<br/>
NOPOA<tab/>VARCHAR2(35)<br/>
CCPAA1<tab/>NUMBER(4)<br/>
</table>
company.xml
<?xml version="1.0" encoding="UTF-16" ?>
<table name="COMPANY">
NOACA<tab/>CHAR(6)<br/>
LSACA1<tab/>VARCHAR2(35)<br/>
CCPAA1<tab/>NUMBER(4)<br/>
LAACA1<tab/>VARCHAR2(35)<br/>
URL<tab/>VARCHAR2(40)<br/>
STATRAT<tab/>VARCHAR2(1)<br/>
</table>
fields.xml
<?xml version="1.0" encoding="UTF-16"?>
<fields>
    <field id="DEDEC"  >beginning_date</field>
    <field id="CCETF"  >state         </field>
    <field id="NOACA"  >company_id    </field>
    <field id="NOPOA"  >contract_nbr  </field>
    <field id="CCPAA1" >country_code  </field>
    <field id="LSACA1" >company_name  </field>
    <field id="LAACA1" >address       </field>
    <field id="URL"    >URL           </field>
    <field id="STATRAT">quality_code  </field>
</fields>
tables.xml
<?xml version="1.0" encoding="UTF-16" ?>
<!DOCTYPE tables [
<!ENTITY accord SYSTEM 'accord.xml'>
<!ENTITY company SYSTEM 'company.xml'>
]>
<tables>
&accord;
&company;
</tables>
<?xml version="1.0" encoding="UTF-16" ?>
<tables>

    <table name="ACCORD">
    DEDEC<tab/>DATE<br/>
    CCETF<tab/>CHAR(1)<br/>
    NOACA<tab/>CHAR(6)<br/>
    NOPOA<tab/>VARCHAR2(35)<br/>
    CCPAA1<tab/>NUMBER(4)<br/>
    </table>
    
    <table name="COMPANY">
    NOACA<tab/>CHAR(6)<br/>
    LSACA1<tab/>VARCHAR2(35)<br/>
    CCPAA1<tab/>NUMBER(4)<br/>
    LAACA1<tab/>VARCHAR2(35)<br/>
    URL<tab/>VARCHAR2(40)<br/>
    STATRAT<tab/>VARCHAR2(1)<br/>
    </table>
    
</tables>

Première étape

table ACCORD :
nom de colonne = DEDEC; type = DATE
nom de colonne = CCETF; type = CHAR(1)
nom de colonne = NOACA; type = CHAR(6)
nom de colonne = NOPOA; type = VARCHAR2(35)
nom de colonne = CCPAA1; type = NUMBER(4)

table COMPANY :
nom de colonne = NOACA; type = CHAR(6)
nom de colonne = LSACA1; type = VARCHAR2(35)
nom de colonne = CCPAA1; type = NUMBER(4)
nom de colonne = LAACA1; type = VARCHAR2(35)
nom de colonne = URL; type = VARCHAR2(40)
nom de colonne = STATRAT; type = VARCHAR2(1)
essai.xsl
<?xml version="1.0" encoding="UTF-16"?>
<xsl:stylesheet 
    xmlns:xsl="http://www.w3.org/1999/XSL/Transform" 
    version="1.0">

    <xsl:output  method='xml' indent="yes" encoding='ISO-8859-1' />
  
    <xsl:template match="table">
        <xsl:text/>table <xsl:value-of select="@name"/> :<xsl:text>
</xsl:text>
        <xsl:for-each select="tab">
            <xsl:text>nom de colonne = </xsl:text>
            <xsl:value-of select="normalize-space(
                                  preceding-sibling::text()[1])"/>
            <xsl:text>; type = </xsl:text>
            <xsl:value-of select="normalize-space(
                                  following-sibling::text()[1])"/>
            <xsl:text>
</xsl:text>
        </xsl:for-each>
        
    </xsl:template>
    
    <xsl:template match="text()"/>
</xsl:stylesheet>

Deuxième étape

<$elementName>
   <field>...</field>
   <type>...</type>
</$elementName>
<DEDEC>
   <field>...</field>
   <type>...</type>
</DEDEC>
<?xml version="1.0" encoding="ISO-8859-1"?>
<mapping>
   <table>ACCORD</table>
   <ACCORD>
      <DEDEC>
         <field>beginning_date</field>
         <type>BusinessDate</type>
      </DEDEC>
      <CCETF>
         <field>state</field>
         <type>String</type>
      </CCETF>
      <NOACA>
         <field>company_id</field>
         <type>String</type>
      </NOACA>
      ...
      
<xsl:for-each select="tab">
    
    <!-- ici : elementName = le texte situé juste avant le <tab> courant -->
                          
    <xsl:element name="{$elementName}">

        <field>
            <!-- 
                ici placer la traduction de $elementName, 
                obtenue par un dictionnaire 
            -->
        </field>
        
        <type>
            
            <!-- ici: typeSQL = le texte situé juste après le <tab> courant -->
            
            <xsl:choose>
                <xsl:when test="contains( $typeSQL, 'CHAR' )" >
                    <xsl:text>String</xsl:text>
                </xsl:when>
                
                <xsl:when test="contains( $typeSQL, 'DATE' )" >
                    <xsl:text>BusinessDate</xsl:text>
                </xsl:when>
                
                <xsl:when test="contains( $typeSQL, 'NUMBER' )" >
                    <xsl:text>Integer</xsl:text>
                </xsl:when>
            </xsl:choose>
            
        </type>
        
    </xsl:element>
    
</xsl:for-each>
mapping.xsl
<?xml version="1.0" encoding="UTF-16"?>
<xsl:stylesheet 
   xmlns:xsl="http://www.w3.org/1999/XSL/Transform" 
   version="1.0">

   <xsl:output  method='xml' indent="yes" encoding='ISO-8859-1' />
   <xsl:param name="dicoFileRef">fields.xml</xsl:param>
   <xsl:variable name="Dictionnaire" select="document($dicoFileRef)/fields"/>
   
   <xsl:template match="/">
      <mapping>
      <xsl:apply-templates/>
      </mapping>
   </xsl:template>
   
      
   <xsl:template name="traduction">
      <xsl:param name="motId"/>
      
      <xsl:variable 
         name="saTraduction" 
         select="$Dictionnaire/field[@id=$motId]" />
         
      <xsl:value-of select="normalize-space($saTraduction)" />
   </xsl:template>
  
   <xsl:template match="table">
      <table> 
      <xsl:value-of select="@name"/>
      </table>
      
      <xsl:element name="{@name}">
      
         <xsl:for-each select="tab">
            
            <xsl:variable name="elementName" 
                          select="normalize-space(
                                  preceding-sibling::text()[1]
                                  )"/>
            <xsl:element name="{$elementName}">
         
               <field>
                  <xsl:call-template name="traduction">
                     <xsl:with-param name="motId" select="$elementName" />
                  </xsl:call-template>
               </field>
               <type>
                  <xsl:variable name="typeSQL" select="normalize-space(
                                                  following-sibling::text()[1]
                                                  )"/>
                  <xsl:choose>
                     <xsl:when test="contains( $typeSQL, 'CHAR' )" >
                        <xsl:text>String</xsl:text>
                     </xsl:when>
                     
                     <xsl:when test="contains( $typeSQL, 'DATE' )" >
                        <xsl:text>BusinessDate</xsl:text>
                     </xsl:when>
                     
                     <xsl:when test="contains( $typeSQL, 'NUMBER' )" >
                        <xsl:text>Integer</xsl:text>
                     </xsl:when>
                  </xsl:choose>
               </type>
            </xsl:element>
            
         </xsl:for-each>
      </xsl:element>
      
    </xsl:template>
    
        
    <xsl:template match="text()"/>
</xsl:stylesheet>

Variante syntaxique namespace="..."

xsl:element
<xsl:element name="..." namespace="...">
    <!-- modèle de transformation -->
    ... 
    <!-- fin du modèle de transformation -->
</xsl:element>

Exemple sans namespace="..."

fusion.xsl
<?xml version="1.0" encoding="UTF-16"?>
<xsl:stylesheet 
    xmlns:xsl="http://www.w3.org/1999/XSL/Transform" 
    xmlns="http://concerts.anacreon.fr/viole-de-gambe" 
    version="1.0">

    <xsl:output  method='xml' indent="yes" encoding='ISO-8859-1' />
    <xsl:param name="declamationFileRef" select="'declamationTaille.xml'" />
    <xsl:variable name="declamation" 
                  select="document( $declamationFileRef )/texte" />
    
    <xsl:template match="/">
        <récitant>
            <xsl:apply-templates/>
        </récitant>
    </xsl:template>

    <xsl:template match="prologue">
        <prologue>
            <xsl:value-of select="$declamation/titre"/>
        </prologue>
    </xsl:template>
    
    <xsl:template match="Numeros">
        <xsl:for-each select="NoMesure">
            <xsl:variable name="i" select="position()" />
            <mesure No="{.}">
                <xsl:value-of select="$declamation/paroles/p[position()=$i]"/>
            </mesure>
        </xsl:for-each>
    </xsl:template>
        
    <xsl:template match="text()"/>
</xsl:stylesheet>
Résultat
<?xml version="1.0" encoding="ISO-8859-1"?>
<récitant xmlns="http://concerts.anacreon.fr/viole-de-gambe">
   <prologue>
    Le Tableau de l'Opération de la Taille
    </prologue>
   <mesure No="1">L'aspect de l'apareil.</mesure>
   <mesure No="8">Fremissement en le voyant.</mesure>
   <mesure No="11">Resolution pour y monter.</mesure>
   <mesure No="15">Parvenu jusqu'au hault;</mesure>
   <mesure No="20">descente dudit apareil.</mesure>
   <mesure No="22">Reflexions serieuses.</mesure>
   <mesure No="23">Entrelassement des soyes
        Entre les bras et les jambes.</mesure>
   <mesure No="27">Icy se fait l'incision.</mesure>
   <mesure No="31">Introduction de la tenette.</mesure>
   <mesure No="39">Ici l'on tire la piere.</mesure>
   <mesure No="44">Icy l'on perd quasi la voix.</mesure>
   <mesure No="48">Ecoulement du sang.</mesure>
   <mesure No="50">Icy l'on oste les soyes.</mesure>
   <mesure No="53">Icy l'on vous transporte dans le lit.</mesure>
</récitant>

Autre exemple sans namespace="..."

fusion.xsl
<?xml version="1.0" encoding="UTF-16"?>
<xsl:stylesheet 
    xmlns:xsl="http://www.w3.org/1999/XSL/Transform" 
    xmlns:vdg="http://concerts.anacreon.fr/viole-de-gambe" 
    version="1.0">

    <xsl:output  method='xml' indent="yes" encoding='ISO-8859-1' />
    <xsl:param name="declamationFileRef" select="'declamationTaille.xml'" />
    <xsl:variable name="declamation" 
                  select="document( $declamationFileRef )/texte" />
    
    <xsl:template match="/">
        <vdg:récitant>
            <xsl:apply-templates/>
        </vdg:récitant>
    </xsl:template>

    <xsl:template match="prologue">
        <vdg:prologue>
            <xsl:value-of select="$declamation/titre"/>
        </vdg:prologue>
    </xsl:template>
    
    <xsl:template match="Numeros">
        <xsl:for-each select="NoMesure">
            <xsl:variable name="i" select="position()" />
            <vdg:mesure No="{.}">
                <xsl:value-of select="$declamation/paroles/p[position()=$i]"/>
            </vdg:mesure>
        </xsl:for-each>
    </xsl:template>
        
    <xsl:template match="text()"/>
</xsl:stylesheet>
Résultat
<?xml version="1.0" encoding="ISO-8859-1"?>
<vdg:récitant xmlns:vdg="http://concerts.anacreon.fr/viole-de-gambe">
   <vdg:prologue>
    Le Tableau de l'Opération de la Taille
    </vdg:prologue>
   <vdg:mesure No="1">L'aspect de l'apareil.</vdg:mesure>
   <vdg:mesure No="8">Fremissement en le voyant.</vdg:mesure>
   <vdg:mesure No="11">Resolution pour y monter.</vdg:mesure>
   <vdg:mesure No="15">Parvenu jusqu'au hault;</vdg:mesure>
   <vdg:mesure No="20">descente dudit apareil.</vdg:mesure>
   <vdg:mesure No="22">Reflexions serieuses.</vdg:mesure>
   <vdg:mesure No="23">Entrelassement des soyes
        Entre les bras et les jambes.</vdg:mesure>
   <vdg:mesure No="27">Icy se fait l'incision.</vdg:mesure>
   <vdg:mesure No="31">Introduction de la tenette.</vdg:mesure>
   <vdg:mesure No="39">Ici l'on tire la piere.</vdg:mesure>
   <vdg:mesure No="44">Icy l'on perd quasi la voix.</vdg:mesure>
   <vdg:mesure No="48">Ecoulement du sang.</vdg:mesure>
   <vdg:mesure No="50">Icy l'on oste les soyes.</vdg:mesure>
   <vdg:mesure No="53">Icy l'on vous transporte dans le lit.</vdg:mesure>
</vdg:récitant>

Exemple avec namespace="..."

fusion.xsl
<?xml version="1.0" encoding="UTF-16"?>
<xsl:stylesheet 
    xmlns:xsl="http://www.w3.org/1999/XSL/Transform" 
    version="1.0">

    <xsl:output  method='xml' indent="yes" encoding='ISO-8859-1' />
    <xsl:param name="declamationFileRef" select="'declamationTaille.xml'" />
    <xsl:variable name="declamation" 
                  select="document( $declamationFileRef )/texte" />
    
    <xsl:template match="/">
        <récitant>
            <xsl:apply-templates/>
        </récitant>
    </xsl:template>

    <xsl:template match="prologue">
        <prologue>
            <xsl:value-of select="$declamation/titre"/>
        </prologue>
    </xsl:template>
    
    <xsl:template match="Numeros">
        <xsl:for-each select="NoMesure">
            <xsl:variable name="i" select="position()" />
            <xsl:element name="mesure" 
                    namespace="http://concerts.anacreon.fr/viole-de-gambe">
                <xsl:attribute name="No"><xsl:value-of select="."/>
                </xsl:attribute>
                <xsl:value-of select="$declamation/paroles/p[position()=$i]"/>
            </xsl:element>
        </xsl:for-each>
    </xsl:template>
        
    <xsl:template match="text()"/>
</xsl:stylesheet>
Résultat
<?xml version="1.0" encoding="ISO-8859-1"?>
<récitant>
   <prologue>
    Le Tableau de l'Opération de la Taille
    </prologue>
   <mesure xmlns="http://concerts.anacreon.fr/viole-de-gambe" No="1">L'aspect de l'apareil.</mesure>
   <mesure xmlns="http://concerts.anacreon.fr/viole-de-gambe" No="8">Fremissement en le voyant.</mesure>
   <mesure xmlns="http://concerts.anacreon.fr/viole-de-gambe" No="11">Resolution pour y monter.</mesure>
   <mesure xmlns="http://concerts.anacreon.fr/viole-de-gambe" No="15">Parvenu jusqu'au hault;</mesure>
   <mesure xmlns="http://concerts.anacreon.fr/viole-de-gambe" No="20">descente dudit apareil.</mesure>
   <mesure xmlns="http://concerts.anacreon.fr/viole-de-gambe" No="22">Reflexions serieuses.</mesure>
   <mesure xmlns="http://concerts.anacreon.fr/viole-de-gambe" No="23">Entrelassement des soyes
        Entre les bras et les jambes.</mesure>
   <mesure xmlns="http://concerts.anacreon.fr/viole-de-gambe" No="27">Icy se fait l'incision.</mesure>
   <mesure xmlns="http://concerts.anacreon.fr/viole-de-gambe" No="31">Introduction de la tenette.</mesure>
   <mesure xmlns="http://concerts.anacreon.fr/viole-de-gambe" No="39">Ici l'on tire la piere.</mesure>
   <mesure xmlns="http://concerts.anacreon.fr/viole-de-gambe" No="44">Icy l'on perd quasi la voix.</mesure>
   <mesure xmlns="http://concerts.anacreon.fr/viole-de-gambe" No="48">Ecoulement du sang.</mesure>
   <mesure xmlns="http://concerts.anacreon.fr/viole-de-gambe" No="50">Icy l'on oste les soyes.</mesure>
   <mesure xmlns="http://concerts.anacreon.fr/viole-de-gambe" No="53">Icy l'on vous transporte dans le lit.</mesure>
</récitant>

Variante syntaxique use-attribute-sets="..."

Instruction xsl:attribute

Bande-annonce

Concert.xml
<?xml version="1.0" encoding="UTF-16" standalone="yes"?>

<Concert>
    
    <Entête> Les Concerts d'Anacréon </Entête>
    <Date>Jeudi 17 Janvier 2002, 20H30</Date>
    <Lieu>Chapelle des Ursules</Lieu>

    <Ensemble> "A deux violes esgales" </Ensemble>

    <Interprète>
        <Nom> Jonathan Dunford </Nom>
        <Instrument>Basse de viole</Instrument>
    </Interprète>

    <Interprète>
        <Nom> Sylvia Abramowicz </Nom>
        <Instrument>Basse de viole</Instrument>
    </Interprète>

    <Interprète>
        <Nom> Benjamin Perrot </Nom>
        <Instrument>Théorbe et Guitare baroque</Instrument>
    </Interprète>
    
    <TitreConcert>
        Folies d'Espagne et diminutions d'Italie
    </TitreConcert>
    
    <Compositeurs>
        <Compositeur>M. Marais</Compositeur>
        <Compositeur>D. Castello</Compositeur>
        <Compositeur>F. Rognoni</Compositeur>
    </Compositeurs>
    
</Concert>
Concert.xsl
<?xml version="1.0" encoding="UTF-16"?>
<xsl:stylesheet xmlns:xsl="http://www.w3.org/1999/XSL/Transform" version="1.0">

    <xsl:output  method='xml' encoding='ISO-8859-1' indent='yes' />
    
    <xsl:template match="/">
        <Interprètes>
            <xsl:apply-templates/>
        </Interprètes>
    </xsl:template>
    
    <xsl:template match="Interprète">
        <Interprète>
            <xsl:attribute name="Nom">
                <xsl:value-of select="./Nom"/>
            </xsl:attribute>
            <xsl:attribute name="Instrument">
                <xsl:value-of select="./Instrument"/>
            </xsl:attribute>
        </Interprète>
    </xsl:template>
    
    <xsl:template match="text()"/>
    
</xsl:stylesheet>
Résultat
<?xml version="1.0" encoding="ISO-8859-1"?>
<Interprètes>
   <Interprète Nom=" Jonathan Dunford " Instrument="Basse de viole"/>
   <Interprète Nom=" Sylvia Abramowicz " Instrument="Basse de viole"/>
   <Interprète Nom=" Benjamin Perrot " Instrument="Théorbe et Guitare baroque"/>
</Interprètes>

Syntaxe

xsl:attribute
<xsl:attribute name="...">
    <!-- modèle de transformation propre à xsl:attribute -->
    ... 
    <!-- fin du modèle de transformation propre à xsl:attribute -->
</xsl:attribute>

Règle XSLT typique

xsl:attribute
<xsl:element name="...">
    <xsl:attribute name="...">
        <!-- modèle de transformation propre à xsl:attribute -->
        ... 
        <!-- fin du modèle de transformation propre à xsl:attribute -->
    </xsl:attribute>
    <xsl:attribute name="...">
        <!-- modèle de transformation propre à xsl:attribute -->
        ... 
        <!-- fin du modèle de transformation propre à xsl:attribute -->
    </xsl:attribute>
    ... autres instructions <xsl:attribute> ...
    <!-- modèle de transformation propre à xsl:element -->
    ... 
    <!-- fin du modèle de transformation propre à xsl:element -->
</xsl:element>
xsl:attribute
<xxx>
    <xsl:attribute name="...">
        <!-- modèle de transformation propre à xsl:attribute -->
        ... 
        <!-- fin du modèle de transformation propre à xsl:attribute -->
    </xsl:attribute>
    <xsl:attribute name="...">
        <!-- modèle de transformation propre à xsl:attribute -->
        ... 
        <!-- fin du modèle de transformation propre à xsl:attribute -->
    </xsl:attribute>
    ... autres instructions <xsl:attribute> ...
    <!-- modèle de transformation propre à l'élément xxx -->
    ... 
    <!-- fin du modèle de transformation propre à l'élément xxx -->
<xxx>

Emploi moins typique

Sémantique

Exemple trivial

interventionRecitant.xml
<?xml version="1.0" encoding="ISO-8859-1"?>
<récitant>
   <prologue>
    Le Tableau de l'Opération de la Taille
    </prologue>
   <mesure No="1">L'aspect de l'apareil.</mesure>
   <mesure No="8">Fremissement en le voyant.</mesure>
   <mesure No="11">Resolution pour y monter.</mesure>
   <mesure No="15">Parvenu jusqu'au hault;</mesure>
   <mesure No="20">descente dudit apareil.</mesure>
   <mesure No="22">Reflexions serieuses.</mesure>
   <mesure No="23">Entrelassement des soyes
        Entre les bras et les jambes.</mesure>
   <mesure No="27">Icy se fait l'incision.</mesure>
   <mesure No="31">Introduction de la tenette.</mesure>
   <mesure No="39">Ici l'on tire la piere.</mesure>
   <mesure No="44">Icy l'on perd quasi la voix.</mesure>
   <mesure No="48">Ecoulement du sang.</mesure>
   <mesure No="50">Icy l'on oste les soyes.</mesure>
   <mesure No="53">Icy l'on vous transporte dans le lit.</mesure>
</récitant>
fusion.xsl
<?xml version="1.0" encoding="UTF-16"?>
<xsl:stylesheet 
   xmlns:xsl="http://www.w3.org/1999/XSL/Transform" 
   version="1.0">

   <xsl:output  method='xml' indent="yes" encoding='ISO-8859-1' />
   <xsl:param name="declamationFileRef" select="'declamationTaille.xml'" />
   <xsl:variable name="declamation" 
                 select="document( $declamationFileRef )/texte" />
    
   <xsl:template match="/">
      <récitant>
         <xsl:apply-templates/>
      </récitant>
   </xsl:template>

   <xsl:template match="prologue">
      <prologue>
         <xsl:value-of select="$declamation/titre"/>
      </prologue>
   </xsl:template>
   
   <xsl:template match="Numeros">
      <xsl:for-each select="NoMesure">
         <xsl:variable name="i" select="position()" />
         <!-- c'est ici que cela change --> 
            <mesure>
               <xsl:attribute name="No">
                   <xsl:value-of select="."/>
               <xsl:attribute/>
               <xsl:value-of select="$declamation/paroles/p[position() = $i]"/>
            </mesure>
         <!--   -->
      </xsl:for-each>
   </xsl:template>
        
   <xsl:template match="text()"/>
</xsl:stylesheet>

Exemple plus évolué

mapping.xml
<?xml version="1.0" encoding="ISO-8859-1"?>
<mapping>
   <table>ACCORD</table>
   <ACCORD>
      <DEDEC>
         <field>beginning_date</field>
         <type>BusinessDate</type>
      </DEDEC>
      <CCETF CHAR="1">
         <field>state</field>
         <type>String</type>
      </CCETF>
      <NOACA CHAR="6">
         <field>company_id</field>
         <type>String</type>
      </NOACA>
      <NOPOA VARCHAR2="35">
         <field>contract_nbr</field>
         <type>String</type>
      </NOPOA>
      <CCPAA1 NUMBER="4">
         <field>country_code</field>
         <type>Integer</type>
      </CCPAA1>
   </ACCORD>
   <table>COMPANY</table>
   <COMPANY>
      <NOACA CHAR="6">
         <field>company_id</field>
         <type>String</type>
      </NOACA>
      <LSACA1 VARCHAR2="35">
         <field>company_name</field>
         <type>String</type>
      </LSACA1>
      <CCPAA1 NUMBER="4">
         <field>country_code</field>
         <type>Integer</type>
      </CCPAA1>
      <LAACA1 VARCHAR2="35">
         <field>address</field>
         <type>String</type>
      </LAACA1>
      <URL VARCHAR2="40">
         <field>URL</field>
         <type>String</type>
      </URL>
      <STATRAT VARCHAR2="1">
         <field>quality_code</field>
         <type>String</type>
      </STATRAT>
   </COMPANY>
</mapping>
   <xsl:template match="table">
      <table> 
      <xsl:value-of select="@name"/>
      </table>
      
      <xsl:element name="{@name}">
      
         <xsl:for-each select="tab">
            
            <xsl:variable name="elementName" 
                          select="normalize-space(
                                  preceding-sibling::text()[1]
                                  )"/>
            <xsl:element name="{$elementName}">
         
               <field>
                  <xsl:call-template name="traduction">
                     <xsl:with-param name="motId" select="$elementName" />
                  </xsl:call-template>
               </field>
               <type>
                  <xsl:variable name="typeSQL" select="normalize-space(
                                                  following-sibling::text()[1]
                                                  )"/>
                  <xsl:choose>
                     <xsl:when test="contains( $typeSQL, 'CHAR' )" >
                        <xsl:text>String</xsl:text>
                     </xsl:when>
                     
                     <xsl:when test="contains( $typeSQL, 'DATE' )" >
                        <xsl:text>BusinessDate</xsl:text>
                     </xsl:when>
                     
                     <xsl:when test="contains( $typeSQL, 'NUMBER' )" >
                        <xsl:text>Integer</xsl:text>
                     </xsl:when>
                  </xsl:choose>
               </type>
            </xsl:element>
            
         </xsl:for-each>
      </xsl:element>
      
    </xsl:template>
<xsl:variable name="typeSQL" select="normalize-space(
                                following-sibling::text()[1]
                                )"/>
                                
<!--  ici, typeSQL vaut par exemple "NUMBER(4)" -->
                                
<xsl:variable name="attributeName" 
              select="substring-before( $typeSQL, '(' )"/>
                                
<!--  dans ce cas, attributeName vaut "NUMBER" -->
              
<xsl:variable name="typeSQL-after" 
              select="substring-after( $typeSQL, '(' )"/>
                                
<!--  et typeSQL-after vaut "4)" -->
                                
<xsl:variable name="attributeValue" 
              select="substring-before( $typeSQL-after, ')' )"/>
                                
<!--  et finalement attributeValue vaut "4" -->
<xsl:variable name="typeSQL" select="normalize-space(
                                following-sibling::text()[1]
                                )"/>
                                
<xsl:variable name="attributeName" 
              select="substring-before( $typeSQL, '(' )"/>
              
<xsl:variable name="typeSQL-after" 
              select="substring-after( $typeSQL, '(' )"/>
                                
<xsl:variable name="attributeValue" 
              select="substring-before( $typeSQL-after, ')' )"/>
                                
<xsl:if test="$attributeName">
   <xsl:attribute name="{$attributeName}" >
      <xsl:value-of select="$attributeValue"/>
   </xsl:attribute>                          
</xsl:if>
mapping.xsl
<?xml version="1.0" encoding="UTF-16"?>
<xsl:stylesheet 
   xmlns:xsl="http://www.w3.org/1999/XSL/Transform" 
   version="1.0">

   <xsl:output  method='xml' indent="yes" encoding='ISO-8859-1' />
   <xsl:param name="dicoFileRef">fields.xml</xsl:param>
   <xsl:variable name="Dictionnaire" select="document($dicoFileRef)/fields"/>
   
   <xsl:template match="/">
      <mapping>
      <xsl:apply-templates/>
      </mapping>
   </xsl:template>
   
      
   <xsl:template name="traduction">
      <xsl:param name="motId"/>
      
      <xsl:variable 
         name="saTraduction" 
         select="$Dictionnaire/field[@id=$motId]" />
         
      <xsl:value-of select="normalize-space($saTraduction)" />
   </xsl:template>
  
   <xsl:template match="table">
      <table> 
      <xsl:value-of select="@name"/>
      </table>
      
      <xsl:element name="{@name}">
      
         <xsl:for-each select="tab">
            
            <xsl:variable name="elementName" 
                          select="normalize-space(
                                  preceding-sibling::text()[1]
                                  )"/>
            <xsl:element name="{$elementName}">
               <xsl:variable name="typeSQL" select="normalize-space(
                                               following-sibling::text()[1]
                                               )"/>
                                               
               <xsl:variable name="attributeName" 
                             select="substring-before( $typeSQL, '(' )"/>
                             
               <xsl:variable name="typeSQL-after" 
                             select="substring-after( $typeSQL, '(' )"/>
                                               
               <xsl:variable name="attributeValue" 
                             select="substring-before( $typeSQL-after, ')' )"/>
                                               
               <xsl:if test="$attributeName">
                  <xsl:attribute name="{$attributeName}" >
                     <xsl:value-of select="$attributeValue"/>
                  </xsl:attribute>                          
               </xsl:if>
               
               <field>
                  <xsl:call-template name="traduction">
                     <xsl:with-param name="motId" select="$elementName" />
                  </xsl:call-template>
               </field>
               
               <type>
                  <xsl:choose>
                     <xsl:when test="contains( $typeSQL, 'CHAR' )" >
                        <xsl:text>String</xsl:text>
                     </xsl:when>
                     
                     <xsl:when test="contains( $typeSQL, 'DATE' )" >
                        <xsl:text>BusinessDate</xsl:text>
                     </xsl:when>
                     
                     <xsl:when test="contains( $typeSQL, 'NUMBER' )" >
                        <xsl:text>Integer</xsl:text>
                     </xsl:when>
                  </xsl:choose>
               </type>
            </xsl:element>
            
         </xsl:for-each>
      </xsl:element>
      
    </xsl:template>
    
        
    <xsl:template match="text()"/>
</xsl:stylesheet>

Variante syntaxique namespace="..."

xsl:attribute
<xsl:attribute name="..." namespace="...">
    <!-- modèle de transformation -->
    ... 
    <!-- fin du modèle de transformation -->
</xsl:element>

Exemple avec namespace="..."

mapping.xsl
<?xml version="1.0" encoding="UTF-16"?>
<xsl:stylesheet 
   xmlns:xsl="http://www.w3.org/1999/XSL/Transform" 
   version="1.0">

   <xsl:output  method='xml' indent="yes" encoding='ISO-8859-1' />
   <xsl:param name="declamationFileRef" select="'declamationTaille.xml'" />
   <xsl:variable name="declamation" 
                 select="document( $declamationFileRef )/texte" />
    
   <xsl:template match="/">
      <récitant>
         <xsl:apply-templates/>
      </récitant>
    </xsl:template>

   <xsl:template match="prologue">
      <prologue>
         <xsl:value-of select="$declamation/titre"/>
      </prologue>
    </xsl:template>
   
   <xsl:template match="Numeros">
      <xsl:for-each select="NoMesure">
         <xsl:variable name="i" select="position()" />
         <xsl:element name="mesure" >
            <xsl:attribute name="No" 
               namespace="http://concerts.anacreon.fr/viole-de-gambe">
               <xsl:value-of select="."/>
            </xsl:attribute>
            <xsl:value-of select="$declamation/paroles/p[position() = $i]"/>
         </xsl:element>
      </xsl:for-each>
    </xsl:template>
        
    <xsl:template match="text()"/>
</xsl:stylesheet>
Résultat
<?xml version="1.0" encoding="ISO-8859-1"?>
<récitant>
   <prologue>
    Le Tableau de l'Opération de la Taille
    </prologue>
   <mesure xmlns:ns0="http://concerts.anacreon.fr/viole-de-gambe" ns0:No="1">L'aspect de l'apareil.</mesure>
   <mesure xmlns:ns0="http://concerts.anacreon.fr/viole-de-gambe" ns0:No="8">Fremissement en le voyant.</mesure>
   <mesure xmlns:ns0="http://concerts.anacreon.fr/viole-de-gambe" ns0:No="11">Resolution pour y monter.</mesure>
   <mesure xmlns:ns0="http://concerts.anacreon.fr/viole-de-gambe" ns0:No="15">Parvenu jusqu'au hault;</mesure>
   <mesure xmlns:ns0="http://concerts.anacreon.fr/viole-de-gambe" ns0:No="20">descente dudit apareil.</mesure>
   <mesure xmlns:ns0="http://concerts.anacreon.fr/viole-de-gambe" ns0:No="22">Reflexions serieuses.</mesure>
   <mesure xmlns:ns0="http://concerts.anacreon.fr/viole-de-gambe" ns0:No="23">Entrelassement des soyes
        Entre les bras et les jambes.</mesure>
   <mesure xmlns:ns0="http://concerts.anacreon.fr/viole-de-gambe" ns0:No="27">Icy se fait l'incision.</mesure>
   <mesure xmlns:ns0="http://concerts.anacreon.fr/viole-de-gambe" ns0:No="31">Introduction de la tenette.</mesure>
   <mesure xmlns:ns0="http://concerts.anacreon.fr/viole-de-gambe" ns0:No="39">Ici l'on tire la piere.</mesure>
   <mesure xmlns:ns0="http://concerts.anacreon.fr/viole-de-gambe" ns0:No="44">Icy l'on perd quasi la voix.</mesure>
   <mesure xmlns:ns0="http://concerts.anacreon.fr/viole-de-gambe" ns0:No="48">Ecoulement du sang.</mesure>
   <mesure xmlns:ns0="http://concerts.anacreon.fr/viole-de-gambe" ns0:No="50">Icy l'on oste les soyes.</mesure>
   <mesure xmlns:ns0="http://concerts.anacreon.fr/viole-de-gambe" ns0:No="53">Icy l'on vous transporte dans le lit.</mesure>
</récitant>
mapping.xsl
<?xml version="1.0" encoding="UTF-16"?>
<xsl:stylesheet 
   xmlns:xsl="http://www.w3.org/1999/XSL/Transform"  
    xmlns:vdg="http://concerts.anacreon.fr/viole-de-gambe"
   version="1.0">

   <xsl:output  method='xml' indent="yes" encoding='ISO-8859-1' />
   <xsl:param name="declamationFileRef" select="'declamationTaille.xml'" />
   <xsl:variable name="declamation" 
                 select="document( $declamationFileRef )/texte" />
    
   <xsl:template match="/">
      <récitant>
         <xsl:apply-templates/>
      </récitant>
    </xsl:template>

   <xsl:template match="prologue">
      <prologue>
         <xsl:value-of select="$declamation/titre"/>
      </prologue>
    </xsl:template>
   
   <xsl:template match="Numeros">
      <xsl:for-each select="NoMesure">
         <xsl:variable name="i" select="position()" />
         <xsl:element name="mesure" >
            <xsl:attribute name="vdg:No">
               <xsl:value-of select="."/>
            </xsl:attribute>
            <xsl:value-of select="$declamation/paroles/p[position() = $i]"/>
         </xsl:element>
      </xsl:for-each>
    </xsl:template>
        
    <xsl:template match="text()"/>
</xsl:stylesheet>
Résultat
<?xml version="1.0" encoding="ISO-8859-1"?>
<récitant xmlns:vdg="http://concerts.anacreon.fr/viole-de-gambe">
   <prologue>
    Le Tableau de l'Opération de la Taille
    </prologue>
   <mesure vdg:No="1">L'aspect de l'apareil.</mesure>
   <mesure vdg:No="8">Fremissement en le voyant.</mesure>
   <mesure vdg:No="11">Resolution pour y monter.</mesure>
   <mesure vdg:No="15">Parvenu jusqu'au hault;</mesure>
   <mesure vdg:No="20">descente dudit apareil.</mesure>
   <mesure vdg:No="22">Reflexions serieuses.</mesure>
   <mesure vdg:No="23">Entrelassement des soyes
        Entre les bras et les jambes.</mesure>
   <mesure vdg:No="27">Icy se fait l'incision.</mesure>
   <mesure vdg:No="31">Introduction de la tenette.</mesure>
   <mesure vdg:No="39">Ici l'on tire la piere.</mesure>
   <mesure vdg:No="44">Icy l'on perd quasi la voix.</mesure>
   <mesure vdg:No="48">Ecoulement du sang.</mesure>
   <mesure vdg:No="50">Icy l'on oste les soyes.</mesure>
   <mesure vdg:No="53">Icy l'on vous transporte dans le lit.</mesure>
</récitant>

Instruction xsl:attribute-set

Bande-annonce

Concert.xml
<?xml version="1.0" encoding="UTF-16" standalone="yes"?>

<Concert>
    
    <Entête> "Les Concerts d'Anacréon" </Entête>
    <Date>Jeudi 17 Janvier 2002, 20H30</Date>
    <Lieu>Chapelle des Ursules</Lieu>

    <Ensemble> "A deux violes esgales" </Ensemble>
    
</Concert>
Concert.xsl
<?xml version="1.0" encoding="UTF-16"?>
<xsl:stylesheet xmlns:xsl="http://www.w3.org/1999/XSL/Transform" version="1.0">

    <xsl:output  method='html' encoding='ISO-8859-1' />

    
    <xsl:attribute-set name="body-attributes">
        <xsl:attribute name="leftmargin">150</xsl:attribute>
        <xsl:attribute name="bgcolor">#ddeeff</xsl:attribute>
        <xsl:attribute name="text">black</xsl:attribute>
    </xsl:attribute-set>


    <xsl:template match="/">
        <html>
            <head>
                <title><xsl:value-of select="/Concert/Entête"/></title>
            </head>
            <xsl:element name="body" use-attribute-sets="body-attributes">
                <xsl:apply-templates/>
            </xsl:element>
        </html>
    </xsl:template>
    
    <xsl:template match="Ensemble">
        <H2 align="center"> Ensemble <xsl:value-of select="."/></H2>
    </xsl:template>
    
    <xsl:template match="text()"/>
    
    
</xsl:stylesheet>
Résultat
<html>
   <head>
      <meta http-equiv="Content-Type" content="text/html; charset=ISO-8859-1">
   
      <title> &laquo;Les Concerts d'Anacr&eacute;on&raquo; </title>
   </head>
   <body leftmargin="150" bgcolor="#ddeeff" text="black">
      <H2 align="center"> Ensemble  &laquo;A deux violes esgales&raquo; </H2>
   </body>
</html>

Syntaxe

xsl:attribute-set
<xsl:attribute-set name="...">
    <!-- modèle de transformation propre à xsl:attribute-set -->
    <xsl:attribute name="...">
        <!-- modèle de transformation propre à xsl:attribute -->
        ... 
        <!-- fin du modèle de transformation propre à xsl:attribute -->
    </xsl:attribute>
    <xsl:attribute name="...">
        <!-- modèle de transformation propre à xsl:attribute -->
        ... 
        <!-- fin du modèle de transformation propre à xsl:attribute -->
    </xsl:attribute>
    <!-- etc. autant d'attributs que l'on veut, mais rien que des attributs -->
    <!-- fin du modèle de transformation propre à xsl:attribute-set -->
</xsl:attribute-set>

Sémantique

<xsl:attribute-set name="truc">
    <xsl:attribute name="machin">
        <xsl:value-of select="."/>
    </xsl:attribute>
    <xsl:attribute name="bidule">
        <xsl:value-of select=".."/>
    </xsl:attribute>
</xsl:attribute-set>

Variante syntaxique use-attribute-sets="..."

xsl:attribute-set
<xsl:attribute-set name="..." use-attribute-sets="...">
    <!-- modèle de transformation propre à xsl:attribute-set -->
    <xsl:attribute name="...">
        <!-- modèle de transformation propre à xsl:attribute -->
        ... 
        <!-- fin du modèle de transformation propre à xsl:attribute -->
    </xsl:attribute>
    <xsl:attribute name="...">
        <!-- modèle de transformation propre à xsl:attribute -->
        ... 
        <!-- fin du modèle de transformation propre à xsl:attribute -->
    </xsl:attribute>
    <!-- etc. autant d'attributs que l'on veut, mais rien que des attributs -->
    <!-- fin du modèle de transformation propre à xsl:attribute-set -->
</xsl:attribute-set>

Exemple

plagesCD.xml
<?xml version="1.0" encoding="ISO-8859-1"?>
<plages>

    <plage      vdg="cplu" clv="nspt" thb="eblq" vl1="fmrt" 
                vl2="oded" org="fech">
        Grave
    </plage>
    
    <plage      vdg="cplu" clv="nspt" thb="eblq" vl1="fmrt" 
                vl2="oded" vlc="dsmp">
        Presto / Prestissimo
    </plage>
    
    <plage      vdg="cplu" clv="nspt" thb="eblq" vl1="fmrt" 
                vl2="oded">
        Adagio
    </plage>
    
    <plage      vdg="cplu" clv="nspt" thb="eblq" vl1="fmrt" 
                vl2="oded" vlc="dsmp" org="fech">
        Presto Récit de basse
    </plage>
</plages>
codesPlages.xml
<?xml version="1.0" encoding="ISO-8859-1"?>
<codes>

    <artistes>
        <artiste id="cplu" name="Christine Plubeau"/>
        <artiste id="nspt" name="Noëlle Spieth"/>
        <artiste id="eblq" name="Eric Bellocq"/>
        <artiste id="fmrt" name="Frédéric Martin"/>
        <artiste id="oded" name="Odile Edouard"/>
        <artiste id="fech" name="Freddy Eichelberger"/>
        <artiste id="dsmp" name="David Simpson"/>
    </artistes>
    
    <instruments>
        <instrument id="vdg" name="Viole de gambe"/>
        <instrument id="clv" name="Clavecin"/>
        <instrument id="thb" name="Théorbe"/>
        <instrument id="vl1" name="Violon baroque"/>
        <instrument id="vl2" name="Violon baroque"/>
        <instrument id="org" name="Orgue positif"/>
        <instrument id="vlc" name="Violoncelle baroque"/>
    </instruments>

</codes>
sonates-jacquet-dlg.xml
<?xml version="1.0" encoding="UTF-16"?>
<sonates>

    <compositeur>
        Elizabeth Jacquet de la Guerre
    </compositeur>
    
    <recueil>
        Manuscrit des sonates en duo et trio 
        copiées par Sébastien de Brossard vers 1695
    </recueil>

    <sonate>
        <titre>
            Suonata IV en sol mineur a 2 Violini soli 
            e Violoncello obligato con organo
        </titre>
        <mouvement effectif="bc-violons-orgue">
            <titre>Grave</titre>
        </mouvement>
        <mouvement effectif="tutti">
            <titre>Presto / Prestissimo</titre>
        </mouvement>
        <mouvement effectif="bc-violons">
            <titre>Adagio</titre>
        </mouvement>
        <mouvement effectif="tutti-orgue">
            <titre>Presto Récit de basse</titre>
        </mouvement>
    </sonate>
    
    <!-- autres sonates à suivre ici -->
    
</sonates>
  <xsl:attribute-set name="bc">
        <xsl:attribute name="vdg">cplu</xsl:attribute>
        <xsl:attribute name="clv">nspt</xsl:attribute>
        <xsl:attribute name="thb">eblq</xsl:attribute>
    </xsl:attribute-set>
    
    <xsl:attribute-set name="vls">
        <xsl:attribute name="vl1">fmrt</xsl:attribute>
        <xsl:attribute name="vl2">oded</xsl:attribute>
    </xsl:attribute-set>
    
    <xsl:attribute-set name="tt" use-attribute-sets="bc vls">
        <xsl:attribute name="vcl">dsmp</xsl:attribute>
    </xsl:attribute-set>
    <xsl:template match="sonate">
        <xsl:for-each select="mouvement">
        
            <xsl:choose>
                <xsl:when test="@effectif = 'bc-violons-orgue'">
                    <xsl:element name="plage" use-attribute-sets="bc vls">
                        <xsl:attribute name="org">fech</xsl:attribute>
                        <xsl:value-of select="titre"/>
                    </xsl:element>
                </xsl:when>
plagesCD.xsl
<?xml version="1.0" encoding="UTF-16"?>
<xsl:stylesheet 
    xmlns:xsl="http://www.w3.org/1999/XSL/Transform" 
    version="1.0">

    <xsl:output  method='xml' indent="yes" encoding='ISO-8859-1' />
    
    
    <xsl:attribute-set name="bc">
        <xsl:attribute name="vdg">cplu</xsl:attribute>
        <xsl:attribute name="clv">nspt</xsl:attribute>
        <xsl:attribute name="thb">eblq</xsl:attribute>
    </xsl:attribute-set>
    
    <xsl:attribute-set name="vls">
        <xsl:attribute name="vl1">fmrt</xsl:attribute>
        <xsl:attribute name="vl2">oded</xsl:attribute>
    </xsl:attribute-set>
    
    <xsl:attribute-set name="tt" use-attribute-sets="bc vls">
        <xsl:attribute name="vcl">dsmp</xsl:attribute>
    </xsl:attribute-set>
    
    <xsl:template match="/">
        <plages>
            <xsl:apply-templates/>
        </plages>
    </xsl:template>

    <xsl:template match="sonate">
        <xsl:for-each select="mouvement">
        
            <xsl:choose>
                <xsl:when test="@effectif = 'bc-violons-orgue'">
                    <xsl:element name="plage" use-attribute-sets="bc vls">
                        <xsl:attribute name="org">fech</xsl:attribute>
                        <xsl:value-of select="titre"/>
                    </xsl:element>
                </xsl:when>
                <xsl:when test="@effectif = 'bc-violons'">
                    <xsl:element name="plage" use-attribute-sets="bc vls">
                        <xsl:value-of select="titre"/>
                    </xsl:element>
                </xsl:when>
                <xsl:when test="@effectif = 'bc-violoncelle'">
                    <xsl:element name="plage" use-attribute-sets="bc">
                        <xsl:attribute name="vlc">dsmp</xsl:attribute>
                        <xsl:value-of select="titre"/>
                    </xsl:element>
                </xsl:when>
                <xsl:when test="@effectif = 'tutti-orgue'">
                    <xsl:element name="plage" use-attribute-sets="tt">
                        <xsl:attribute name="org">fech</xsl:attribute>
                        <xsl:value-of select="titre"/>
                    </xsl:element>
                </xsl:when>
                <xsl:when test="@effectif = 'tutti'">
                    <xsl:element name="plage" use-attribute-sets="tt">
                        <xsl:value-of select="titre"/>
                    </xsl:element>
                </xsl:when>
            </xsl:choose>
            
        </xsl:for-each>
    </xsl:template>
        
    <xsl:template match="text()"/>
    
</xsl:stylesheet>

Variante de l'exemple

plagesCD.xsl
<?xml version="1.0" encoding="UTF-16"?>
<xsl:stylesheet 
    xmlns:xsl="http://www.w3.org/1999/XSL/Transform" 
    version="1.0">

    <xsl:output  method='xml' indent="yes" encoding='ISO-8859-1' />
    
    
    <xsl:attribute-set name="bc">
        <xsl:attribute name="vdg">cplu</xsl:attribute>
        <xsl:attribute name="clv">nspt</xsl:attribute>
        <xsl:attribute name="thb">eblq</xsl:attribute>
    </xsl:attribute-set>
    
    <xsl:attribute-set name="vls">
        <xsl:attribute name="vl1">fmrt</xsl:attribute>
        <xsl:attribute name="vl2">oded</xsl:attribute>
    </xsl:attribute-set>
    
    <xsl:attribute-set name="tt" use-attribute-sets="bc vls">
        <xsl:attribute name="vcl">dsmp</xsl:attribute>
    </xsl:attribute-set>
    
    <xsl:template match="/">
        <plages>
            <xsl:apply-templates/>
        </plages>
    </xsl:template>

    <xsl:template match="sonate">
        <xsl:for-each select="mouvement">
        
            <xsl:choose>
                <xsl:when test="@effectif = 'bc-violons-orgue'">
                    <plage xsl:use-attribute-sets="bc vls">
                        <xsl:attribute name="org">fech</xsl:attribute>
                        <xsl:value-of select="titre"/>
                    </plage>
                </xsl:when>
                <xsl:when test="@effectif = 'bc-violons'">
                    <plage xsl:use-attribute-sets="bc vls">
                        <xsl:value-of select="titre"/>
                    </plage>
                </xsl:when>
                <xsl:when test="@effectif = 'bc-violoncelle'">
                    <plage xsl:use-attribute-sets="bc">
                        <xsl:attribute name="vlc">dsmp</xsl:attribute>
                        <xsl:value-of select="titre"/>
                    </plage>
                </xsl:when>
                <xsl:when test="@effectif = 'tutti-orgue'">
                    <plage xsl:use-attribute-sets="tt">
                        <xsl:attribute name="org">fech</xsl:attribute>
                        <xsl:value-of select="titre"/>
                    </plage>
                </xsl:when>
                <xsl:when test="@effectif = 'tutti'">
                    <plage xsl:use-attribute-sets="tt">
                        <xsl:value-of select="titre"/>
                    </plage>
                </xsl:when>
            </xsl:choose>
            
        </xsl:for-each>
    </xsl:template>
        
    <xsl:template match="text()"/>
    
</xsl:stylesheet>

Commentaire de l'exemple

    <xsl:template name="bc">
        <xsl:attribute name="vdg">cplu</xsl:attribute>
        <xsl:attribute name="clv">nspt</xsl:attribute>
        <xsl:attribute name="thb">eblq</xsl:attribute>
    </xsl:template>

    <xsl:template name="vls">
        <xsl:attribute name="vl1">fmrt</xsl:attribute>
        <xsl:attribute name="vl2">oded</xsl:attribute>
    </xsl:template>

    <xsl:template name="tt">
        <xsl:call-template name="bc"/>
        <xsl:call-template name="vls"/>
        <xsl:attribute name="vcl">dsmp</xsl:attribute>
    </xsl:template>
<mouvement effectif="bc-violons-orgue">
    <titre>Grave</titre>
</mouvement>
<mouvement>
    <titre>Grave</titre>
    <effectif>
        <basseContinue/>
        <violons/>
        <orgue/>
    </effectif> 
</mouvement>
sonates-jacquet-dlg.xml
<?xml version="1.0" encoding="UTF-16"?>
<sonates>

    <compositeur>
        Elizabeth Jacquet de la Guerre
    </compositeur>
    
    <recueil>
        Manuscrit des sonates en duo et trio 
        copiées par Sébastien de Brossard vers 1695
    </recueil>
    
    <sonate>
        <titre>
            Suonata IV en sol mineur a 2 Violini soli 
            e Violoncello obligato con organo
        </titre>
        <mouvement>
            <titre>Grave</titre>
            <effectif>
                <basseContinue/>
                <violons/>
                <orgue/>
            </effectif> 
        </mouvement>
        <mouvement>
            <titre>Presto / Prestissimo</titre>
            <effectif>
                <tutti/>
            </effectif> 
        </mouvement>
        <mouvement>
            <titre>Adagio</titre>
            <effectif>
                <basseContinue/>
                <violons/>
            </effectif> 
        </mouvement>
        <mouvement>
            <titre>Presto Récit de basse</titre>
            <effectif>
                <tutti/>
                <orgue/>
            </effectif> 
        </mouvement>
    </sonate>
    
    <!-- autres sonates à suivre ici -->
    
</sonates>
<plage>
    <xsl:apply-templates select="effectif" />
    <xsl:value-of select="titre" />
</plage>
<xsl:template match="effectif">
    <xsl:apply-templates />
</xsl:template>
<xsl:template match="basseContinue">
    <xsl:call-template name="bc"/>
</xsl:template>
<xsl:template match="vents">
    <xsl:call-template name="flhb"/>
</xsl:template>
<xsl:template name="flhb">
    <xsl:attribute name="fl">xxx</xsl:attribute>
    <xsl:attribute name="hb">yyy</xsl:attribute>
</xsl:template>
plagesCD.xsl
<?xml version="1.0" encoding="UTF-16"?>
<xsl:stylesheet 
    xmlns:xsl="http://www.w3.org/1999/XSL/Transform" 
    version="1.0">

    <xsl:output  method='xml' indent="yes" encoding='ISO-8859-1' />
    
    

    <xsl:template name="bc">
        <xsl:attribute name="vdg">cplu</xsl:attribute>
        <xsl:attribute name="clv">nspt</xsl:attribute>
        <xsl:attribute name="thb">eblq</xsl:attribute>
    </xsl:template>

    <xsl:template name="vls">
        <xsl:attribute name="vl1">fmrt</xsl:attribute>
        <xsl:attribute name="vl2">oded</xsl:attribute>
    </xsl:template>

    <xsl:template name="tt">
        <xsl:call-template name="bc"/>
        <xsl:call-template name="vls"/>
        <xsl:attribute name="vcl">dsmp</xsl:attribute>
    </xsl:template>
    
    
    <xsl:template match="/">
        <plages>
            <xsl:apply-templates/>
        </plages>
    </xsl:template>

    <xsl:template match="sonate">
        <xsl:for-each select="mouvement">
            <plage>
                <xsl:apply-templates select="effectif" />
                <xsl:value-of select="titre" />
            </plage>
        </xsl:for-each>
    </xsl:template>

    <xsl:template match="basseContinue">
        <xsl:call-template name="bc"/>
    </xsl:template>

    <xsl:template match="violons">
        <xsl:call-template name="vls"/>
    </xsl:template>

    <xsl:template match="tutti">
        <xsl:call-template name="tt"/>
    </xsl:template>

    <xsl:template match="orgue">
        <xsl:attribute name="org">fech</xsl:attribute>
    </xsl:template>
        
    <xsl:template match="text()"/>
    
</xsl:stylesheet>

Compléments

<xsl:when test="@effectif = 'bc-violons'">
    <plage xsl:use-attribute-sets="bc vls">
        <xsl:attribute name="vl1">xxx</xsl:attribute>
        <xsl:value-of select="titre"/>
    </plage>
</xsl:when>

Instruction xsl:copy

Bande-annonce

Concert.xml
<?xml version="1.0" encoding="UTF-16" standalone="yes"?>

<Concert>
    
    <Entête> "Les Concerts d'Anacréon" </Entête>
    <Date>Jeudi 17 Janvier 2002, 20H30</Date>
    <Lieu>Chapelle des Ursules</Lieu>

    <Ensemble> "A deux violes esgales" </Ensemble>

    <Interprète>
        <Nom> Jonathan Dunford </Nom>
        <Instrument>Basse de viole</Instrument>
    </Interprète>

    <Interprète>
        <Nom> Silvia Abramowicz </Nom>
        <Instrument>Basse de viole</Instrument>
    </Interprète>

    <Interprète>
        <Nom> Benjamin Perrot </Nom>
        <Instrument>Théorbe et Guitare baroque</Instrument>
    </Interprète>
    
    <TitreConcert>
        Folies d'Espagne et diminutions d'Italie
    </TitreConcert>
    
    <Compositeurs>
        <Compositeur>M. Marais</Compositeur>
        <Compositeur>D. Castello</Compositeur>
        <Compositeur>F. Rognoni</Compositeur>
    </Compositeurs>
    
</Concert>
Concert.xsl
<?xml version="1.0" encoding="UTF-16"?>
<xsl:stylesheet xmlns:xsl="http://www.w3.org/1999/XSL/Transform" version="1.0">

    <xsl:output  method='xml' encoding='ISO-8859-1' indent='yes' />

    
    <xsl:template match="/">
        <Interprètes>
            <xsl:apply-templates/>
        </Interprètes>
    </xsl:template>
    
    <xsl:template match="Interprète">
        <xsl:copy>
            <xsl:apply-templates/>
        </xsl:copy>
    </xsl:template>
    
    <xsl:template match="Nom">
        <xsl:copy>
            <xsl:apply-templates mode="copie"/>
        </xsl:copy>
    </xsl:template>
    
    <xsl:template match="Instrument">
        <xsl:copy>
            <xsl:apply-templates mode="copie"/>
        </xsl:copy>
    </xsl:template>
    
    <xsl:template match="text()"/>
    
    <xsl:template match="text()" mode="copie" >
        <xsl:copy/>
    </xsl:template>
    
    
</xsl:stylesheet>
Résultat
<?xml version="1.0" encoding="ISO-8859-1"?>
<Interprètes>
   <Interprète>
      <Nom> Jonathan Dunford </Nom>
      <Instrument>Basse de viole</Instrument>
   </Interprète>
   <Interprète>
      <Nom> Silvia Abramowicz </Nom>
      <Instrument>Basse de viole</Instrument>
   </Interprète>
   <Interprète>
      <Nom> Benjamin Perrot </Nom>
      <Instrument>Théorbe et Guitare baroque</Instrument>
   </Interprète>
</Interprètes>
Concert.xsl
<<?xml version="1.0" encoding="UTF-16"?>
<xsl:stylesheet xmlns:xsl="http://www.w3.org/1999/XSL/Transform" version="1.0">

    <xsl:output  method='xml' encoding='ISO-8859-1' indent='yes' />

    
    <xsl:template match="/">
        <Interprètes>
            <xsl:apply-templates/>
        </Interprètes>
    </xsl:template>
    
    <xsl:template match="Interprète">
        <xsl:copy>
            <xsl:apply-templates/>
        </xsl:copy>
    </xsl:template>
    
    <xsl:template match="Nom">
        <xsl:copy>
            <xsl:value-of select="."/>
        </xsl:copy>
    </xsl:template>
    
    <xsl:template match="Instrument">
        <xsl:copy>
            <xsl:value-of select="."/>
        </xsl:copy>
    </xsl:template>
    
    <xsl:template match="text()"/>
    
    
</xsl:stylesheet>

Syntaxe

xsl:copy
<xsl:copy>
    <!-- modèle de transformation -->
        ...
    <!-- fin du modèle de transformation -->
</xsl:copy>

Variante syntaxique

xsl:copy
<xsl:copy use-attribute-sets="...">
    <!-- modèle de transformation -->
        ...
    <!-- fin du modèle de transformation -->
</xsl:copy>

Sémantique

<xsl:template match="...">
    <!-- modèle de transformation -->
    ...
    <xsl:copy/>
    ...
    <!-- fin du modèle de transformation -->
</xsl:template>
<xsl:template match="...">
    <!-- modèle de transformation -->
    ...
    <xsl:copy>
        <!-- modèle de transformation propre à xsl:copy -->
        ...
        <!-- fin du modèle de transformation propre à xsl:copy -->
    </xsl:copy>
    ...
    <!-- fin du modèle de transformation -->
</xsl:template>

Copie d'un nœud de type element

Sans modèle de transformation propre
interventionsRecitant.xml
<?xml version="1.0" encoding="ISO-8859-1"?>
<récitant>
   <prologue>
    Le Tableau de l'Opération de la Taille
    </prologue>
   <mesure xmlns:ns0="http://concerts.anacreon.fr/viole-de-gambe" ns0:No="1">L'aspect de l'apareil.</mesure>
   <mesure xmlns:ns0="http://concerts.anacreon.fr/viole-de-gambe" ns0:No="8">Fremissement en le voyant.</mesure>
   <mesure xmlns:ns0="http://concerts.anacreon.fr/viole-de-gambe" ns0:No="11">Resolution pour y monter.</mesure>
   <mesure xmlns:ns0="http://concerts.anacreon.fr/viole-de-gambe" ns0:No="15">Parvenu jusqu'au hault;</mesure>
   <mesure xmlns:ns0="http://concerts.anacreon.fr/viole-de-gambe" ns0:No="20">descente dudit apareil.</mesure>
   <mesure xmlns:ns0="http://concerts.anacreon.fr/viole-de-gambe" ns0:No="22">Reflexions serieuses.</mesure>
   <mesure xmlns:ns0="http://concerts.anacreon.fr/viole-de-gambe" ns0:No="23">Entrelassement des soyes
        Entre les bras et les jambes.</mesure>
   <mesure xmlns:ns0="http://concerts.anacreon.fr/viole-de-gambe" ns0:No="27">Icy se fait l'incision.</mesure>
   <mesure xmlns:ns0="http://concerts.anacreon.fr/viole-de-gambe" ns0:No="31">Introduction de la tenette.</mesure>
   <mesure xmlns:ns0="http://concerts.anacreon.fr/viole-de-gambe" ns0:No="39">Ici l'on tire la piere.</mesure>
   <mesure xmlns:ns0="http://concerts.anacreon.fr/viole-de-gambe" ns0:No="44">Icy l'on perd quasi la voix.</mesure>
   <mesure xmlns:ns0="http://concerts.anacreon.fr/viole-de-gambe" ns0:No="48">Ecoulement du sang.</mesure>
   <mesure xmlns:ns0="http://concerts.anacreon.fr/viole-de-gambe" ns0:No="50">Icy l'on oste les soyes.</mesure>
   <mesure xmlns:ns0="http://concerts.anacreon.fr/viole-de-gambe" ns0:No="53">Icy l'on vous transporte dans le lit.</mesure>
</récitant>
copie.xsl
<?xml version="1.0" encoding="UTF-16"?>
<xsl:stylesheet 
    xmlns:xsl="http://www.w3.org/1999/XSL/Transform" 
    version="1.0">

    <xsl:output  method='xml' indent="yes" encoding='ISO-8859-1' />
    
    <xsl:template match="/">
        <mesures>
            <xsl:apply-templates/>
        </mesures>
    </xsl:template>

    <xsl:template match="mesure">
        <xsl:copy/>
    </xsl:template>
        
    <xsl:template match="text()"/>
</xsl:stylesheet>

Résultat
<?xml version="1.0" encoding="ISO-8859-1"?>
<mesures>
   <mesure xmlns:ns0="http://concerts.anacreon.fr/viole-de-gambe"/>
   <mesure xmlns:ns0="http://concerts.anacreon.fr/viole-de-gambe"/>
   <mesure xmlns:ns0="http://concerts.anacreon.fr/viole-de-gambe"/>
   <mesure xmlns:ns0="http://concerts.anacreon.fr/viole-de-gambe"/>
   <mesure xmlns:ns0="http://concerts.anacreon.fr/viole-de-gambe"/>
   <mesure xmlns:ns0="http://concerts.anacreon.fr/viole-de-gambe"/>
   <mesure xmlns:ns0="http://concerts.anacreon.fr/viole-de-gambe"/>
   <mesure xmlns:ns0="http://concerts.anacreon.fr/viole-de-gambe"/>
   <mesure xmlns:ns0="http://concerts.anacreon.fr/viole-de-gambe"/>
   <mesure xmlns:ns0="http://concerts.anacreon.fr/viole-de-gambe"/>
   <mesure xmlns:ns0="http://concerts.anacreon.fr/viole-de-gambe"/>
   <mesure xmlns:ns0="http://concerts.anacreon.fr/viole-de-gambe"/>
   <mesure xmlns:ns0="http://concerts.anacreon.fr/viole-de-gambe"/>
   <mesure xmlns:ns0="http://concerts.anacreon.fr/viole-de-gambe"/>
</mesures>
Avec modèle de transformation propre
<xsl:template match="mesure">
    <xsl:copy>
        texte sur mesure
    </xsl:copy>
</xsl:template>
Résultat
<?xml version="1.0" encoding="ISO-8859-1"?>
<mesures>
   <mesure xmlns:ns0="http://concerts.anacreon.fr/viole-de-gambe">
      texte sur mesure
   </mesure>
   <mesure xmlns:ns0="http://concerts.anacreon.fr/viole-de-gambe">
      texte sur mesure
   </mesure>
   <!-- etc. -->
</mesures>
<xsl:template match="mesure">
    <xsl:copy>
        <xsl:attribute name="No">23</xsl:attribute>
    </xsl:copy>
</xsl:template>
Résultat
<?xml version="1.0" encoding="ISO-8859-1"?>
<mesures>
   <mesure xmlns:ns0="http://concerts.anacreon.fr/viole-de-gambe" No="23"/>
   <mesure xmlns:ns0="http://concerts.anacreon.fr/viole-de-gambe" No="23"/>
   <!-- etc. -->
</mesures>
<xsl:template match="mesure">
    <xsl:copy>
        <xsl:attribute name="No" namespace="{namespace::ns0}">23</xsl:attribute>
    </xsl:copy>
</xsl:template>
Résultat
<?xml version="1.0" encoding="ISO-8859-1"?>
<mesures>
   <mesure xmlns:ns0="http://concerts.anacreon.fr/viole-de-gambe" ns0:No="23"/>
   <mesure xmlns:ns0="http://concerts.anacreon.fr/viole-de-gambe" ns0:No="23"/>
   <!-- etc. -->
</mesures>
<xsl:template match="mesure">
    <xsl:copy>
        <xsl:attribute name="No" namespace="namespace::ns0">23</xsl:attribute>
    </xsl:copy>
</xsl:template>
Résultat
<?xml version="1.0" encoding="ISO-8859-1"?>
<mesures>
   <mesure xmlns:ns0="http://concerts.anacreon.fr/viole-de-gambe" xmlns:ns0.6="namespace::ns0" ns0.6:No="23"/>
   <mesure xmlns:ns0="http://concerts.anacreon.fr/viole-de-gambe" xmlns:ns0.6="namespace::ns0" ns0.6:No="23"/>
   <!-- etc. -->
</mesures>
<xsl:template match="mesure">
    <xsl:copy>
        <xsl:attribute name="No" namespace="ns0">23</xsl:attribute>
    </xsl:copy>
</xsl:template>
Résultat
<?xml version="1.0" encoding="ISO-8859-1"?>
<mesures>
   <mesure xmlns:ns0="http://concerts.anacreon.fr/viole-de-gambe" xmlns:ns0.6="ns0" ns0.6:No="23"/>
   <mesure xmlns:ns0="http://concerts.anacreon.fr/viole-de-gambe" xmlns:ns0.6="ns0" ns0.6:No="23"/>
   <!-- etc. -->
</mesures>
<mesure xmlns:ns0="http://concerts.anacreon.fr/viole-de-gambe" 
        ns0:No="1">
    L'aspect de l'apareil.
</mesure>
copie.xsl
<?xml version="1.0" encoding="UTF-16"?>
<xsl:stylesheet 
    xmlns:xsl="http://www.w3.org/1999/XSL/Transform" 
    version="1.0">

    <xsl:output  method='xml' indent="yes" encoding='ISO-8859-1' />
    
    <xsl:template match="/">
        <mesures>
            <xsl:apply-templates/>
        </mesures>
    </xsl:template>

    <xsl:template match="mesure">
        <xsl:copy>
            <xsl:attribute name="No" namespace="{namespace::ns0}">23</xsl:attribute>
            <xsl:value-of select="."/>
        </xsl:copy>
    </xsl:template>
        
    <xsl:template match="text()"/>
</xsl:stylesheet>
Résultat
<?xml version="1.0" encoding="ISO-8859-1"?>
<mesures>
   <mesure xmlns:ns0="http://concerts.anacreon.fr/viole-de-gambe" ns0:No="23">L'aspect de l'apareil.</mesure>
   <mesure xmlns:ns0="http://concerts.anacreon.fr/viole-de-gambe" ns0:No="23">Fremissement en le voyant.</mesure>
   <!-- etc. -->
</mesures>
copie.xsl
<?xml version="1.0" encoding="UTF-16"?>
<xsl:stylesheet 
    xmlns:xsl="http://www.w3.org/1999/XSL/Transform" 
    version="1.0">

    <xsl:output  method='xml' indent="yes" encoding='ISO-8859-1' />
    
    <xsl:template match="/">
        <mesures>
            <xsl:apply-templates/>
        </mesures>
    </xsl:template>

    <xsl:template match="mesure">
        <xsl:copy>
            <xsl:attribute name="No" namespace="{namespace::ns0}">
                <xsl:value-of select="attribute::ns0:No"/>
            </xsl:attribute>
            <xsl:value-of select="."/>
        </xsl:copy>
    </xsl:template>
        
    <xsl:template match="text()"/>
</xsl:stylesheet>
Résultat
Error on line 17 of copie.xsl:
  Namespace prefix ns0 has not been declared
Transformation failed: Failed to compile stylesheet. 1 error detected.
copie.xsl
<?xml version="1.0" encoding="UTF-16"?>
<xsl:stylesheet 
    xmlns:xsl="http://www.w3.org/1999/XSL/Transform" 
    version="1.0">

    <xsl:output  method='xml' indent="yes" encoding='ISO-8859-1' />
    
    <xsl:template match="/">
        <mesures>
            <xsl:apply-templates/>
        </mesures>
    </xsl:template>

    <xsl:template match="mesure">
        <xsl:copy>
            <xsl:attribute name="No" namespace="{namespace::ns0}">
                <xsl:value-of select="attribute::No"/>
            </xsl:attribute>
            <xsl:value-of select="."/>
        </xsl:copy>
    </xsl:template>
        
    <xsl:template match="text()"/>
</xsl:stylesheet>
Résultat
<?xml version="1.0" encoding="ISO-8859-1"?>
<mesures>
   <mesure xmlns:ns0="http://concerts.anacreon.fr/viole-de-gambe" ns0:No="">L'aspect de l'apareil.</mesure>
   <mesure xmlns:ns0="http://concerts.anacreon.fr/viole-de-gambe" ns0:No="">Fremissement en le voyant.</mesure>
   <!-- etc. -->
</mesures>
copie.xsl
<?xml version="1.0" encoding="UTF-16"?>
<xsl:stylesheet 
    xmlns:xsl="http://www.w3.org/1999/XSL/Transform" 
    xmlns:ns0="http://concerts.anacreon.fr/viole-de-gambe"
    version="1.0">

    <xsl:output  method='xml' indent="yes" encoding='ISO-8859-1' />
    
    <xsl:template match="/">
        <mesures>
            <xsl:apply-templates/>
        </mesures>
    </xsl:template>

    <xsl:template match="mesure">
        <xsl:copy>
            <xsl:attribute name="No" namespace="{namespace::ns0}">
                <xsl:value-of select="attribute::ns0:No"/>
            </xsl:attribute>
            <xsl:value-of select="."/>
        </xsl:copy>
    </xsl:template>
        
    <xsl:template match="text()"/>
</xsl:stylesheet>
Résultat
<?xml version="1.0" encoding="ISO-8859-1"?>
<mesures xmlns:ns0="http://concerts.anacreon.fr/viole-de-gambe">
   <mesure ns0:No="1">L'aspect de l'apareil.</mesure>
   <mesure ns0:No="8">Fremissement en le voyant.</mesure>
   <mesure ns0:No="11">Resolution pour y monter.</mesure>
   <mesure ns0:No="15">Parvenu jusqu'au hault;</mesure>
   <mesure ns0:No="20">descente dudit apareil.</mesure>
   <mesure ns0:No="22">Reflexions serieuses.</mesure>
   <!-- etc. -->
</mesures>
Conclusion
copie.xsl
<?xml version="1.0" encoding="UTF-16"?>
<xsl:stylesheet 
    xmlns:xsl="http://www.w3.org/1999/XSL/Transform" 
    xmlns:ns0="http://concerts.anacreon.fr/viole-de-gambe"
    version="1.0">

    <xsl:output  method='xml' indent="yes" encoding='ISO-8859-1' />
    
    <xsl:template match="/">
        <mesures>
            <xsl:apply-templates/>
        </mesures>
    </xsl:template>

    <xsl:template match="mesure">
        <xsl:element name="mesure">
            <xsl:attribute name="No" namespace="{namespace::ns0}">
                <xsl:value-of select="attribute::ns0:No"/>
            </xsl:attribute>
            <xsl:value-of select="."/>
        </xsl:element>
    </xsl:template>
        
    <xsl:template match="text()"/>
</xsl:stylesheet>

Copie d'un nœud de type attribute

plagesCD.xml
<?xml version="1.0" encoding="ISO-8859-1"?>
<plages>

    <plage      vdg="cplu" clv="nspt" thb="eblq" vl1="fmrt" 
                vl2="oded" org="fech">
        Grave
    </plage>
    
    <plage      vdg="cplu" clv="nspt" thb="eblq" vl1="fmrt" 
                vl2="oded" vlc="dsmp">
        Presto / Prestissimo
    </plage>
    
    <plage      vdg="cplu" clv="nspt" thb="eblq" vl1="fmrt" 
                vl2="oded">
        Adagio
    </plage>
    
    <plage      vdg="cplu" clv="nspt" thb="eblq" vl1="fmrt" 
                vl2="oded" vlc="dsmp" org="fech">
        Presto Récit de basse
    </plage>
</plages>
copie.xsl
<?xml version="1.0" encoding="UTF-16"?>
<xsl:stylesheet 
    xmlns:xsl="http://www.w3.org/1999/XSL/Transform" 
    version="1.0">

    <xsl:output  method='xml' indent="yes" encoding='ISO-8859-1' />
    
    <xsl:template match="/">
        <plages>
            <xsl:apply-templates/>
        </plages>
    </xsl:template>

    <xsl:template match="plage">
        <xsl:copy>
            <xsl:for-each select="attribute::*">
                <xsl:copy/>
            </xsl:for-each>
            <xsl:value-of select="."/>
        </xsl:copy>
    </xsl:template>
        
</xsl:stylesheet>
Résultat
<?xml version="1.0" encoding="ISO-8859-1"?>
<plages>
   
   <plage vdg="cplu" clv="nspt" thb="eblq" vl1="fmrt" vl2="oded" org="fech">Grave</plage>
   
   <plage vdg="cplu" clv="nspt" thb="eblq" vl1="fmrt" vl2="oded" vcl="dsmp">Presto / Prestissimo</plage>
   
   <plage vdg="cplu" clv="nspt" thb="eblq" vl1="fmrt" vl2="oded">Adagio</plage>
   
   <plage vdg="cplu" clv="nspt" thb="eblq" vl1="fmrt" vl2="oded" vcl="dsmp" org="fech">Presto Récit de basse</plage>

</plages>
copie.xsl
<?xml version="1.0" encoding="UTF-16"?>
<xsl:stylesheet 
    xmlns:xsl="http://www.w3.org/1999/XSL/Transform" 
    version="1.0">

    <xsl:output  method='xml' indent="yes" encoding='ISO-8859-1' />
    
    <xsl:template match="/">
        <plages>
            <xsl:apply-templates/>
        </plages>
    </xsl:template>

    <xsl:template match="plage">
        <xsl:copy>
            <xsl:apply-templates select="attribute::*"/>
            <xsl:value-of select="."/>
        </xsl:copy>
    </xsl:template>

    <xsl:template match="attribute::*">
        <xsl:copy/>
    </xsl:template>
        
</xsl:stylesheet>

Copie d'un nœud de type namespace

taille.xml
<?xml version="1.0" encoding="ISO-8859-1"?>
<mesures xmlns:ns0="http://concerts.anacreon.fr/viole-de-gambe">
   <mesure ns0:No="1">L'aspect de l'apareil.</mesure>
   <mesure ns0:No="8">Fremissement en le voyant.</mesure>
   <!-- etc. -->
</mesures>
copie.xsl
<?xml version="1.0" encoding="UTF-16"?>
<xsl:stylesheet 
    xmlns:xsl="http://www.w3.org/1999/XSL/Transform" 
    version="1.0">

    <xsl:output  method='xml' indent="yes" encoding='ISO-8859-1' />
    
    <xsl:template match="/">
        <paroles>
            <xsl:for-each select="child::mesures/namespace::*">
                <xsl:copy/>
            </xsl:for-each>
        </paroles>
    </xsl:template>
</xsl:stylesheet>
Résultat
<?xml version="1.0" encoding="ISO-8859-1"?>
<paroles xmlns:ns0="http://concerts.anacreon.fr/viole-de-gambe"/>

Copie du nœud de type root

copie.xsl
<?xml version="1.0" encoding="UTF-16"?>
<xsl:stylesheet 
    xmlns:xsl="http://www.w3.org/1999/XSL/Transform" 
    version="1.0">

    <xsl:output  method='xml' indent="yes" encoding='ISO-8859-1' />
    
    <xsl:template match="/">
        
        <xsl:copy>
            <truc>
                abcd
            </truc>
        </xsl:copy>
        
    </xsl:template>
        
</xsl:stylesheet>
Résultat
<?xml version="1.0" encoding="ISO-8859-1"?>
<truc>
                abcd
            </truc>

Copie d'un nœud de type text

Copie d'un nœud de type comment

Copie d'un nœud de type processing-instruction

Instruction xsl:comment

Syntaxe

xsl:comment
<xsl:comment>
    <!-- modèle de transformation --> 
        ...
    <!-- fin du modèle de transformation -->
</xsl:comment>

Sémantique

Exemple

Concert.xsl
<?xml version="1.0" encoding="UTF-16"?>
<xsl:stylesheet xmlns:xsl="http://www.w3.org/1999/XSL/Transform" version="1.0">
    <xsl:output   method='html' encoding='ISO-8859-1' />

    <xsl:strip-space elements='Compositeurs'/>

    <xsl:template match="/">
        <html>
            <head>
                <title><xsl:value-of select="/Concert/Entête"/></title>
            </head>
            <body bgcolor="white" text="black">
                <xsl:apply-templates/>
            </body>
        </html>
    </xsl:template>
    
    <xsl:template match="Entête">
        <xsl:comment>
            <xsl:text>dans Entête : </xsl:text><xsl:value-of select="."/>
        </xsl:comment>
        <p> <xsl:value-of select="."/> présentent </p>
    </xsl:template>
    
    <xsl:template match="Date">
        <xsl:comment>
            <xsl:text>dans Date : </xsl:text><xsl:value-of select="."/>
        </xsl:comment>
        <H1 align="center"> Concert du <xsl:value-of select="."/> </H1>
    </xsl:template>
    
    <xsl:template match="Lieu">
        <xsl:comment>
            <xsl:text>dans Lieu : </xsl:text><xsl:value-of select="."/>
        </xsl:comment>
        <H4 align="center"> <xsl:value-of select="."/> </H4>
    </xsl:template>
    
    <xsl:template match="Ensemble">
        <xsl:comment>
            <xsl:text>dans Ensemble : </xsl:text><xsl:value-of select="."/>
        </xsl:comment>
        <H2 align="center"> Ensemble <xsl:value-of select="."/></H2>
    </xsl:template>
    
    <xsl:template match="Compositeurs">
        <xsl:comment>
            <xsl:text>dans Compositeurs : </xsl:text><xsl:value-of select="."/>
        </xsl:comment>
        <H3 align="center"> Oeuvres de <br/> <xsl:apply-templates/> </H3>
    </xsl:template>
    
    <xsl:template match="Compositeur">
        <xsl:comment>
            <xsl:text>dans Compositeur : </xsl:text><xsl:value-of select="."/>
        </xsl:comment>
    
        <xsl:value-of select="."/>
        <xsl:if test="not(position() = last())">, </xsl:if>
    </xsl:template>
    
    <xsl:template match="text()"/>
    
</xsl:stylesheet>
Concert.html
<html>
   <head>
      <meta http-equiv="Content-Type" content="text/html; charset=ISO-8859-1">
   
      <title> Les Concerts d'Anacr&eacute;on </title>
   </head>
   <body bgcolor="white" text="black">
      <!--dans Entête :  Les Concerts d'Anacréon -->
      <p> Les Concerts d'Anacr&eacute;on  pr&eacute;sentent </p>
      <!--dans Date : Jeudi 17 Janvier 2002, 20H30-->
      <H1 align="center"> Concert du Jeudi 17 Janvier 2002, 20H30</H1>
      <!--dans Lieu : Chapelle des Ursules-->
      <H4 align="center">Chapelle des Ursules</H4>
      <!--dans Ensemble :  "A deux violes esgales" -->
      <H2 align="center"> Ensemble  &laquo;A deux violes esgales&raquo; </H2>
      <!--dans Compositeurs : M. MaraisD. CastelloF. Rognoni-->
      <H3 align="center"> Oeuvres de <br>
         <!--dans Compositeur : M. Marais-->M. Marais, 
         <!--dans Compositeur : D. Castello-->D. Castello, 
         <!--dans Compositeur : F. Rognoni-->F. Rognoni
      </H3>
   </body>
</html>

Instruction xsl:processing-instruction

Syntaxe

xsl:processing-instruction
<xsl:processing-instruction name="...">
    <!-- modèle de transformation -->
        ...
    <!-- fin du modèle de transformation -->
</xsl:processing-instruction>

Sémantique

<xsl:processing-instruction name="xm-replace-text">
    <xsl:text> {para}</xsl:text>
</xsl:processing-instruction>

Instruction xsl:number

Bande-annonce

Concert.xml
<?xml version="1.0" encoding="UTF-16" standalone="yes"?>
<maisons>
    <maison id="1">
        <RDC>
            <cuisine surface='12m2'>
                Evier inox. Mobilier encastré.
            </cuisine>
            <WC>
                Lavabo. Cumulus 200L.
            </WC>
            <séjour surface='40m2'>
                Cheminée en pierre. Poutres au plafond. 
                Carrelage terre cuite. Grande baie vitrée.
            </séjour>
            <bureau surface='15m2'>
                Bibliothèque encastrée.
            </bureau>
            <garage/>
        </RDC>
        <étage>
            <terrasse>Palmier en zinc figurant le désert.</terrasse>
            <chambre surface='28m2' fenêtre='3'>
                Carrelage terre cuite poncée.
                <alcôve surface='8m2' fenêtre='1'>
                    Lambris.
                </alcôve>
            </chambre>
            <chambre surface='18m2'>
                Lambris.
            </chambre>
            <salleDeBains surface='15m2'>
                Douche, baignoire, lavabo.
            </salleDeBains>
        </étage>
    </maison>
    <maison id="2">
        <RDC>
            <cuisine surface='12m2'>
                en ruine.
            </cuisine>
            <garage/>
        </RDC>
        <étage>
            <terrasse>
                vue sur la mer
            </terrasse>
            <salleDeBains surface='15m2'>
                Douche.
            </salleDeBains>
        </étage>
    </maison>
    <maison id="3">
        <RDC>
            <séjour surface='40m2'>
                paillasson à l'entrée
            </séjour>
        </RDC>
        <étage>
            <chambre surface='18m2'>
                porte cochère.
            </chambre>
        </étage>
    </maison>
</maisons>
Concert.xsl
<?xml version="1.0" encoding="UTF-16"?>
<xsl:stylesheet xmlns:xsl="http://www.w3.org/1999/XSL/Transform" version="1.0">

    <xsl:output  method='xml' encoding='ISO-8859-1' indent='yes' />

    <xsl:template match="*">
        <xsl:element name="{local-name(.)}">
            <xsl:attribute name="numéro">
                <xsl:number count="*" level="multiple"/>
            </xsl:attribute>
            <xsl:apply-templates/>
        </xsl:element>
    </xsl:template>
    
    <xsl:template match="text()"/>
    
</xsl:stylesheet>
Résultat
<?xml version="1.0" encoding="ISO-8859-1"?>
<maisons numéro="1">
   <maison numéro="1.1">
      <RDC numéro="1.1.1">
         <cuisine numéro="1.1.1.1"/>
         <WC numéro="1.1.1.2"/>
         <séjour numéro="1.1.1.3"/>
         <bureau numéro="1.1.1.4"/>
         <garage numéro="1.1.1.5"/>
      </RDC>
      <étage numéro="1.1.2">
         <terrasse numéro="1.1.2.1"/>
         <chambre numéro="1.1.2.2">
            <alcôve numéro="1.1.2.2.1"/>
         </chambre>
         <chambre numéro="1.1.2.3"/>
         <salleDeBains numéro="1.1.2.4"/>
      </étage>
   </maison>
   <maison numéro="1.2">
      <RDC numéro="1.2.1">
         <cuisine numéro="1.2.1.1"/>
         <garage numéro="1.2.1.2"/>
      </RDC>
      <étage numéro="1.2.2">
         <terrasse numéro="1.2.2.1"/>
         <salleDeBains numéro="1.2.2.2"/>
      </étage>
   </maison>
   <maison numéro="1.3">
      <RDC numéro="1.3.1">
         <séjour numéro="1.3.1.1"/>
      </RDC>
      <étage numéro="1.3.2">
         <chambre numéro="1.3.2.1"/>
      </étage>
   </maison>
</maisons>
Variante
<xsl:number count="*" level="any"/>
Résultat
<?xml version="1.0" encoding="ISO-8859-1"?>
<maisons numéro="1">
   <maison numéro="2">
      <RDC numéro="3">
         <cuisine numéro="4"/>
         <WC numéro="5"/>
         <séjour numéro="6"/>
         <bureau numéro="7"/>
         <garage numéro="8"/>
      </RDC>
      <étage numéro="9">
         <terrasse numéro="10"/>
         <chambre numéro="11">
            <alcôve numéro="12"/>
         </chambre>
         <chambre numéro="13"/>
         <salleDeBains numéro="14"/>
      </étage>
   </maison>
   <maison numéro="15">
      <RDC numéro="16">
         <cuisine numéro="17"/>
         <garage numéro="18"/>
      </RDC>
      <étage numéro="19">
         <terrasse numéro="20"/>
         <salleDeBains numéro="21"/>
      </étage>
   </maison>
   <maison numéro="22">
      <RDC numéro="23">
         <séjour numéro="24"/>
      </RDC>
      <étage numéro="25">
         <chambre numéro="26"/>
      </étage>
   </maison>
</maisons>
Variante
<xsl:number count="*" level="single"/>
Résultat
<?xml version="1.0" encoding="ISO-8859-1"?>
<maisons numéro="1">
   <maison numéro="1">
      <RDC numéro="1">
         <cuisine numéro="1"/>
         <WC numéro="2"/>
         <séjour numéro="3"/>
         <bureau numéro="4"/>
         <garage numéro="5"/>
      </RDC>
      <étage numéro="2">
         <terrasse numéro="1"/>
         <chambre numéro="2">
            <alcôve numéro="1"/>
         </chambre>
         <chambre numéro="3"/>
         <salleDeBains numéro="4"/>
      </étage>
   </maison>
   <maison numéro="2">
      <RDC numéro="1">
         <cuisine numéro="1"/>
         <garage numéro="2"/>
      </RDC>
      <étage numéro="2">
         <terrasse numéro="1"/>
         <salleDeBains numéro="2"/>
      </étage>
   </maison>
   <maison numéro="3">
      <RDC numéro="1">
         <séjour numéro="1"/>
      </RDC>
      <étage numéro="2">
         <chambre numéro="1"/>
      </étage>
   </maison>
</maisons>

Syntaxe

xsl:number
<xsl:number 
    level="..."              <!-- 'single' (par défaut), 'any' ou 'multiple'-->
    count="..."              <!-- motif XPath -->
    from= "..."              <!-- motif XPath -->
    value="..."              <!-- expression XPath -->
    format="..."             <!-- {}une chaîne de caractères -->
    lang="..."               <!-- {}code langue (en, fr, etc.) -->
    letter-value="..."       <!-- {}'alphabetic' ou 'traditional' -->
    grouping-separator="..." <!-- {}un caractère -->
    grouping-size="..."      <!-- {}un entier -->
/>

Sémantique

Calcul d'un numéro d'ordre

Exemple
plagesCD.xml
<?xml version="1.0" encoding="ISO-8859-1"?>
<plages>

    <plage      vdg="cplu" clv="nspt" thb="eblq" vl1="fmrt" 
                vl2="oded" org="fech">
        Grave
    </plage>
    
    <plage      vdg="cplu" clv="nspt" thb="eblq" vl1="fmrt" 
                vl2="oded" vlc="dsmp">
        Presto / Prestissimo
    </plage>
    
    <plage      vdg="cplu" clv="nspt" thb="eblq" vl1="fmrt" 
                vl2="oded">
        Adagio
    </plage>
    
    <plage      vdg="cplu" clv="nspt" thb="eblq" vl1="fmrt" 
                vl2="oded" vlc="dsmp" org="fech">
        Presto Récit de basse
    </plage>
</plages>
copie.xsl
<?xml version="1.0" encoding="UTF-16"?>
<xsl:stylesheet 
    xmlns:xsl="http://www.w3.org/1999/XSL/Transform" 
    version="1.0">

    <xsl:output  method='xml' indent="yes" encoding='ISO-8859-1' />
    
    <xsl:template match="/">
        <plages>
            <xsl:apply-templates/>
        </plages>
    </xsl:template>

    <xsl:template match="plage">
        <xsl:copy>
            <xsl:apply-templates select="attribute::*"/>
            <xsl:value-of select="."/>
        </xsl:copy>
    </xsl:template>

    <xsl:template match="attribute::*">
        <xsl:copy/>
    </xsl:template>
        
</xsl:stylesheet>
copie.xsl
<?xml version="1.0" encoding="UTF-16"?>
<xsl:stylesheet 
    xmlns:xsl="http://www.w3.org/1999/XSL/Transform" 
    version="1.0">

    <xsl:output  method='xml' indent="yes" encoding='ISO-8859-1' />
    
    <xsl:template match="/">
        <plages>
            <xsl:apply-templates/>
        </plages>
    </xsl:template>
    
    <xsl:template match="plage">
        <xsl:variable name="numero"><xsl:number/></xsl:variable>
        <plage No="{$numero}">
            <xsl:apply-templates select="attribute::*"/>
            <xsl:value-of select="."/>
        </plage>
    </xsl:template>
    
    <xsl:template match="attribute::*">
        <xsl:copy/>
    </xsl:template>
    
</xsl:stylesheet>
Résultat
<?xml version="1.0" encoding="ISO-8859-1"?>
<plages>
   <plage No="1" vdg="cplu" clv="nspt" thb="eblq" vl1="fmrt" vl2="oded" org="fech">Grave</plage>
   <plage No="2" thb="eblq" vdg="cplu" clv="nspt" vl1="fmrt" vl2="oded" vcl="dsmp">Presto / Prestissimo</plage>
   <plage No="3" vdg="cplu" clv="nspt" thb="eblq" vl1="fmrt" vl2="oded">Adagio</plage>
   <plage No="4" thb="eblq" vdg="cplu" clv="nspt" vl1="fmrt" vl2="oded" vcl="dsmp" org="fech">Presto Récit de basse</plage>

</plages>

Différents modes de calcul d'un numéro d'ordre

canevasdoc.xml
<?xml version="1.0" encoding="ISO-8859-1"?>
<article lang="fr">
    <sect1>
        <titre>A</titre>
        <règle importance="1">R1R1R</règle>
        <sect2>
            <titre>B</titre>
            <para>bbb</para>
        </sect2>
        <sect2>
            <titre>C</titre>
            <sect3>
                <titre>D</titre>
                <para>ddd
                    <règle importance="3">R2R2R</règle>
                    <note>Nt</note>ddd/
                    <note>Nv</note>
                </para>
            </sect3>
            <sect3>
                <titre>E</titre>
                <para>eee
                    <note>Nah</note>eee;
                </para>
                <para>e,e,e</para>
                <règle importance="1">R3R3R</règle>
                <programlisting>ay</programlisting>
                <para>e;e;e</para>
                <programlisting>bg</programlisting>
                <para>e!e!e
                    <règle importance="2">R4R4R</règle>
                    <note>Naa</note>(eee)
                    <note>Nzz</note>[eee]
                    <note>NEE</note>(e,e,e)
                </para>
            </sect3>
            <sect3>
                <titre>F</titre>
                <programlisting>ck</programlisting>
            </sect3>
        </sect2>
    </sect1>
    <sect1>
        <titre>G</titre>
        <sect2>
            <titre>H</titre>
            <para>hhh</para>
            <para>hhh/
                <note>Nhx</note>hhh;
            </para>
        </sect2>
    </sect1>
</article>
sequence.xsl
<?xml version="1.0" encoding="UTF-16"?>
<xsl:stylesheet 
    xmlns:xsl="http://www.w3.org/1999/XSL/Transform" 
    version="1.0">

    <xsl:output  method='text' encoding='ISO-8859-1' />
    
    
    
    <xsl:template match="sect1 | sect2 |sect3">
        <xsl:number count="sect1 |sect2 |sect3 |titre |para | 
                           note |programlisting |règle" 
                    level="any"/>.<xsl:value-of select="name()"/>
        <xsl:text> </xsl:text>
        <xsl:apply-templates/>
    </xsl:template>
    
    <xsl:template match="para">
        <xsl:number count="sect1 |sect2 |sect3 |titre |para | 
                           note |programlisting |règle" level="any"/>  
        <xsl:text>.</xsl:text>
        <xsl:apply-templates mode="inpara"/>
    </xsl:template>
    
    <xsl:template match="note" mode="inpara">
        <xsl:number count="sect1 |sect2 |sect3 |titre |para | 
                           note |programlisting |règle" level="any"/>  
        <xsl:text>.</xsl:text>
        <xsl:text>texteNote=</xsl:text>
        <xsl:value-of select="."/>
        <xsl:text> </xsl:text>
    </xsl:template>
    
    <xsl:template match="programlisting">
        <xsl:number count="sect1 |sect2 |sect3 |titre |para | 
                           note |programlisting |règle" level="any"/> 
        <xsl:text>.</xsl:text>
        <xsl:text>texteProgramlisting=</xsl:text>
        <xsl:value-of select="."/>
        <xsl:text> </xsl:text>
    </xsl:template>
    
    <xsl:template match="titre">
        <xsl:number count="sect1 |sect2 |sect3 |titre |para | 
                           note |programlisting |règle" level="any"/> 
        <xsl:text>.</xsl:text>
        <xsl:text>texteTitre=</xsl:text>
        <xsl:value-of select="."/>
        <xsl:text> </xsl:text>
    </xsl:template>
    
    <xsl:template match="règle" mode="inpara">
        <xsl:apply-templates select="."/>
    </xsl:template>
    
    <xsl:template match="règle">
        <xsl:number count="sect1 |sect2 |sect3 |titre |para | 
                           note |programlisting |règle" level="any"/>  
        <xsl:text>.</xsl:text>
        <xsl:text>texteRègle=</xsl:text>
        <xsl:value-of select="."/>
        <xsl:text> </xsl:text>
    </xsl:template>
    
    <xsl:template match="text()" mode="inpara">
        <xsl:if test="normalize-space(.)">
            <xsl:text>textePara=</xsl:text>
        </xsl:if>
        <xsl:value-of select="."/>
        <xsl:text> </xsl:text>
    </xsl:template>
    
</xsl:stylesheet>
Résultat (level="any")
    1.sect1 
        2.texteTitre=A 
        3.texteRègle=R1R1R 
        4.sect2 
            5.texteTitre=B 
            6.textePara=bbb 
        
        7.sect2 
            8.texteTitre=C 
            9.sect3 
                10.texteTitre=D 
                11.textePara=ddd
                     12.texteRègle=R2R2R 
                     13.texteNote=Nt textePara=ddd/
                     14.texteNote=Nv 
            
            15.sect3 
                16.texteTitre=E 
                17.textePara=eee
                     18.texteNote=Nah textePara=eee;
                 
                19.textePara=e,e,e 
                20.texteRègle=R3R3R 
                21.texteProgramlisting=ay 
                22.textePara=e;e;e 
                23.texteProgramlisting=bg 
                24.textePara=e!e!e
                     25.texteRègle=R4R4R 
                     26.texteNote=Naa textePara=(eee)
                     27.texteNote=Nzz textePara=[eee]
                     28.texteNote=NEE textePara=(e,e,e)
            
            29.sect3 
                30.texteTitre=F 
                31.texteProgramlisting=ck 
    
    32.sect1 
        33.texteTitre=G 
        34.sect2 
            35.texteTitre=H 
            36.textePara=hhh 
            37.textePara=hhh/
                 38.texteNote=Nhx textePara=hhh;
Résultat (level="single")
    1.sect1 
        1.texteTitre=A 
        2.texteRègle=R1R1R 
        3.sect2 
            1.texteTitre=B 
            2.textePara=bbb 
        
        4.sect2 
            1.texteTitre=C 
            2.sect3 
                1.texteTitre=D 
                2.textePara=ddd
                     1.texteRègle=R2R2R 
                     2.texteNote=Nt textePara=ddd/
                     3.texteNote=Nv 
            
            3.sect3 
                1.texteTitre=E 
                2.textePara=eee
                     1.texteNote=Nah textePara=eee;
                 
                3.textePara=e,e,e 
                4.texteRègle=R3R3R 
                5.texteProgramlisting=ay 
                6.textePara=e;e;e 
                7.texteProgramlisting=bg 
                8.textePara=e!e!e
                     1.texteRègle=R4R4R 
                     2.texteNote=Naa textePara=(eee)
                     3.texteNote=Nzz textePara=[eee]
                     4.texteNote=NEE textePara=(e,e,e)
            
            4.sect3 
                1.texteTitre=F 
                2.texteProgramlisting=ck 
    
    2.sect1 
        1.texteTitre=G 
        2.sect2 
            1.texteTitre=H 
            2.textePara=hhh 
            3.textePara=hhh/
                 1.texteNote=Nhx textePara=hhh;
Résultat (level="multiple")
    1.sect1 
        1.1.texteTitre=A 
        1.2.texteRègle=R1R1R 
        1.3.sect2 
            1.3.1.texteTitre=B 
            1.3.2.textePara=bbb 
        
        1.4.sect2 
            1.4.1.texteTitre=C 
            1.4.2.sect3 
                1.4.2.1.texteTitre=D 
                1.4.2.2.textePara=ddd
                     1.4.2.2.1.texteRègle=R2R2R 
                     1.4.2.2.2.texteNote=Nt textePara=ddd/
                     1.4.2.2.3.texteNote=Nv 
                 
            1.4.3.sect3 
                1.4.3.1.texteTitre=E 
                1.4.3.2.textePara=eee
                     1.4.3.2.1.texteNote=Nah textePara=eee;
                 
                1.4.3.3.textePara=e,e,e 
                1.4.3.4.texteRègle=R3R3R 
                1.4.3.5.texteProgramlisting=ay 
                1.4.3.6.textePara=e;e;e 
                1.4.3.7.texteProgramlisting=bg 
                1.4.3.8.textePara=e!e!e
                     1.4.3.8.1.texteRègle=R4R4R 
                     1.4.3.8.2.texteNote=Naa textePara=(eee)
                     1.4.3.8.3.texteNote=Nzz textePara=[eee]
                     1.4.3.8.4.texteNote=NEE textePara=(e,e,e)
            
            1.4.4.sect3 
                1.4.4.1.texteTitre=F 
                1.4.4.2.texteProgramlisting=ck 
    
    2.sect1 
        2.1.texteTitre=G 
        2.2.sect2 
            2.2.1.texteTitre=H 
            2.2.2.textePara=hhh 
            2.2.3.textePara=hhh/
                 2.2.3.1.texteNote=Nhx textePara=hhh;
    
Exemple : numérotation classique pour un livre
sequence.xsl
<?xml version="1.0" encoding="UTF-16"?>
<xsl:stylesheet 
    xmlns:xsl="http://www.w3.org/1999/XSL/Transform" 
    version="1.0">

    <xsl:output  method='text' encoding='ISO-8859-1' />
    
    <xsl:template match="sect1 | sect2 |sect3">
        <xsl:number count="sect1 | sect2 |sect3" 
                    level="multiple"/>.<xsl:value-of select="name()"/>
        <xsl:text> </xsl:text>
        <xsl:apply-templates/>
    </xsl:template>
    
    <xsl:template match="para">
        <xsl:apply-templates mode="inpara"/>
    </xsl:template>
    
    <xsl:template match="note" mode="inpara">
        <xsl:number count="note" level="any"/>  
        <xsl:text>.</xsl:text>
        <xsl:text>texteNote=</xsl:text>
        <xsl:value-of select="."/>
        <xsl:text> </xsl:text>
    </xsl:template>
    
    <xsl:template match="programlisting">
        <xsl:text>texteProgramlisting=</xsl:text>
        <xsl:value-of select="."/>
        <xsl:text> </xsl:text>
    </xsl:template>
    
    <xsl:template match="titre">
        <xsl:text>texteTitre=</xsl:text>
        <xsl:value-of select="."/>
        <xsl:text> </xsl:text>
    </xsl:template>
    
    <xsl:template match="règle" mode="inpara">
        <xsl:apply-templates select="."/>
    </xsl:template>
    
    <xsl:template match="règle">
        <xsl:text>texteRègle=</xsl:text>
        <xsl:value-of select="."/>
        <xsl:text> </xsl:text>
    </xsl:template>
    
    <xsl:template match="text()" mode="inpara">
        <xsl:if test="normalize-space(.)">
            <xsl:text>textePara=</xsl:text>
        </xsl:if>
        <xsl:value-of select="."/>
        <xsl:text> </xsl:text>
    </xsl:template>
</xsl:stylesheet>
Résultat
    1.sect1 
        texteTitre=A 
        texteRègle=R1R1R 
        1.1.sect2 
            texteTitre=B 
            textePara=bbb 
        
        1.2.sect2 
            texteTitre=C 
            1.2.1.sect3 
                texteTitre=D 
                textePara=ddd
                     texteRègle=R2R2R 
                     1.texteNote=Nt textePara=ddd/
                     2.texteNote=Nv 
            
            1.2.2.sect3 
                texteTitre=E 
                textePara=eee
                     3.texteNote=Nah textePara=eee;
                 
                textePara=e,e,e 
                texteRègle=R3R3R 
                texteProgramlisting=ay 
                textePara=e;e;e 
                texteProgramlisting=bg 
                textePara=e!e!e
                     texteRègle=R4R4R 
                     4.texteNote=Naa textePara=(eee)
                     5.texteNote=Nzz textePara=[eee]
                     6.texteNote=NEE textePara=(e,e,e)
            
            1.2.3.sect3 
                texteTitre=F 
                texteProgramlisting=ck 
    
    2.sect1 
        texteTitre=G 
        2.1.sect2 
            texteTitre=H 
            textePara=hhh 
            textePara=hhh/
                 7.texteNote=Nhx textePara=hhh;

Réinitialisation d'un numéro d'ordre

Exemple
sequence.xsl
<?xml version="1.0" encoding="UTF-16"?>
<xsl:stylesheet 
    xmlns:xsl="http://www.w3.org/1999/XSL/Transform" 
    version="1.0">

    <xsl:output  method='text' encoding='ISO-8859-1' />
    
    <xsl:template match="sect1 | sect2 |sect3">
        <xsl:number count="sect1 | sect2 |sect3" 
                    level="multiple"/>.<xsl:value-of select="name()"/>
        <xsl:text> </xsl:text>
        <xsl:apply-templates/>
    </xsl:template>
    
    <xsl:template match="para">
        <xsl:apply-templates mode="inpara"/>
    </xsl:template>
    
    <xsl:template match="note" mode="inpara">
        <xsl:number count="note" from="sect3" level="any"/>   
        <xsl:text>.</xsl:text>
        <xsl:text>texteNote=</xsl:text>
        <xsl:value-of select="."/>
        <xsl:text> </xsl:text>
    </xsl:template>
    
    <xsl:template match="programlisting">
        <xsl:text>texteProgramlisting=</xsl:text>
        <xsl:value-of select="."/>
        <xsl:text> </xsl:text>
    </xsl:template>
    
    <xsl:template match="titre">
        <xsl:text>texteTitre=</xsl:text>
        <xsl:value-of select="."/>
        <xsl:text> </xsl:text>
    </xsl:template>
    
    <xsl:template match="règle" mode="inpara">
        <xsl:apply-templates select="."/>
    </xsl:template>
    
    <xsl:template match="règle">
        <xsl:text>texteRègle=</xsl:text>
        <xsl:value-of select="."/>
        <xsl:text> </xsl:text>
    </xsl:template>
    
    <xsl:template match="text()" mode="inpara">
        <xsl:if test="normalize-space(.)">
            <xsl:text>textePara=</xsl:text>
        </xsl:if>
        <xsl:value-of select="."/>
        <xsl:text> </xsl:text>
    </xsl:template>
</xsl:stylesheet>
Résultat (from="sect3" pour les notes)
    1.sect1 
        texteTitre=A 
        texteRègle=R1R1R 
        1.1.sect2 
            texteTitre=B 
            textePara=bbb 
        
        1.2.sect2 
            texteTitre=C 
            1.2.1.sect3 
                texteTitre=D 
                textePara=ddd
                     texteRègle=R2R2R 
                     1.texteNote=Nt textePara=ddd/
                     2.texteNote=Nv 
                 
            1.2.2.sect3 
                texteTitre=E 
                textePara=eee
                     1.texteNote=Nah textePara=eee;
                 
                textePara=e,e,e 
                texteRègle=R3R3R 
                texteProgramlisting=ay 
                textePara=e;e;e 
                texteProgramlisting=bg 
                textePara=e!e!e
                     texteRègle=R4R4R 
                     2.texteNote=Naa textePara=(eee)
                     3.texteNote=Nzz textePara=[eee]
                     4.texteNote=NEE textePara=(e,e,e)
            
            1.2.3.sect3 
                texteTitre=F 
                texteProgramlisting=ck 
            
    2.sect1 
        texteTitre=G 
        2.1.sect2 
            texteTitre=H 
            textePara=hhh 
            textePara=hhh/
                 1.texteNote=Nhx textePara=hhh;

Numéro d'ordre sans décompte

Exemple
sequence.xsl
<?xml version="1.0" encoding="UTF-16"?>
<xsl:stylesheet 
    xmlns:xsl="http://www.w3.org/1999/XSL/Transform" 
    version="1.0">

    <xsl:output  method='text' encoding='ISO-8859-1' />
    
    
    <xsl:template match="/">
        <xsl:apply-templates/>
        <xsl:text>Règles importantes :
</xsl:text>
        <xsl:apply-templates select="//règle" mode="recap"/>
    </xsl:template>
    
    <!-- etc. -->
    
    <xsl:template match="règle" mode="inpara">
        <xsl:apply-templates select="."/>
    </xsl:template>
    
    <xsl:template match="règle">
        <xsl:text>texteRègle=</xsl:text>
        <xsl:value-of select="."/>
        <xsl:text> </xsl:text>
    </xsl:template>
    
    <xsl:template match="règle" mode="recap">
        <xsl:number value="position()"/>.   <xsl:value-of select="."/>
        <xsl:text>
</xsl:text>
    </xsl:template>
    
    <xsl:template match="text()" mode="inpara">
        <xsl:if test="normalize-space(.)">
            <xsl:text>textePara=</xsl:text>
        </xsl:if>
        <xsl:value-of select="."/>
        <xsl:text> </xsl:text>
    </xsl:template>
    
</xsl:stylesheet>
Résultat
    
    <!-- etc. -->
    
    2.sect1
        texteTitre=G 
        2.1.sect2
            texteTitre=H 
            textePara=hhh 
            textePara=hhh/
                 7.texteNote=Nhx textePara=hhh;
             
Règles importantes :
1.      R1R1R
2.      R2R2R
3.      R3R3R
4.      R4R4R

sequence.xsl
<?xml version="1.0" encoding="UTF-16"?>
<xsl:stylesheet 
    xmlns:xsl="http://www.w3.org/1999/XSL/Transform" 
    version="1.0">

    <xsl:output  method='text' encoding='ISO-8859-1' />
    
    <xsl:template match="/">
        <xsl:apply-templates/>
        <xsl:text>Règles importantes :
</xsl:text>
        <xsl:for-each select="//règle">
            <xsl:sort select="@importance"/>
            <xsl:number value="position()"/>.   <xsl:value-of select="."/>
            <xsl:text>
</xsl:text>
        </xsl:for-each>
    </xsl:template>
    
    <xsl:template match="sect1 | sect2 |sect3">
        <xsl:number count="sect1 | sect2 |sect3" 
                    level="multiple"/>.<xsl:value-of select="name()"/>
        <xsl:apply-templates/>
    </xsl:template>
    
    <!-- etc. -->
    
</xsl:stylesheet>
Résultat
    
    <!-- etc. -->
    
    2.sect1
        texteTitre=G 
        2.1.sect2
            texteTitre=H 
            textePara=hhh 
            textePara=hhh/
                 7.texteNote=Nhx textePara=hhh;
    
Règles importantes :
1.      R1R1R
2.      R3R3R
3.      R4R4R
4.      R2R2R
<?xml version="1.0" encoding="UTF-16"?>
<xsl:stylesheet 
    xmlns:xsl="http://www.w3.org/1999/XSL/Transform" 
    version="1.0">

    <xsl:output  method='text' encoding='ISO-8859-1' />
    
    <xsl:template match="/">
        <xsl:apply-templates/>
        <xsl:text>Règles importantes :
</xsl:text>
        <xsl:for-each select="//règle">
            <xsl:sort select="@importance"/>
            <xsl:value-of select="position()"/>.    <xsl:value-of select="."/>
            <xsl:text>
</xsl:text>
        </xsl:for-each>
    </xsl:template>
    
    <!-- etc. -->
    
</xsl:stylesheet>
<?xml version="1.0" encoding="UTF-16"?>
<xsl:stylesheet 
    xmlns:xsl="http://www.w3.org/1999/XSL/Transform" 
    version="1.0">

    <xsl:output  method='text' encoding='ISO-8859-1' />
    
    <xsl:template match="/">
        <xsl:apply-templates/>
        <xsl:text>Règles importantes :
</xsl:text>
        <xsl:for-each select="//règle">
            <xsl:sort select="@importance"/>
            <xsl:number value="position()" format="I"/>.     <xsl:value-of 
                                                               select="."/>
            <xsl:text>
</xsl:text>
        </xsl:for-each>
    </xsl:template>
    
    <!-- etc. -->
    
</xsl:stylesheet>
Résultat
    
    <!-- etc. -->
    
    2.sect1
        texteTitre=G 
        2.1.sect2
            texteTitre=H 
            textePara=hhh 
            textePara=hhh/
                 7.texteNote=Nhx textePara=hhh;
    
Règles importantes :
I.      R1R1R
II.     R3R3R
III.    R4R4R
IV.     R2R2R

Numéro d'ordre dans un document source secondaire

Exemple
<?xml version="1.0" encoding="UTF-16"?>
<xsl:stylesheet 
    xmlns:xsl="http://www.w3.org/1999/XSL/Transform" 
    version="1.1"> <!-- compatibilité Saxon 6.5 -->

    <xsl:output  method='text' encoding='ISO-8859-1' />
    
    
    <xsl:template match="/">
        <xsl:apply-templates/>
        <xsl:text>Règles importantes :
</xsl:text>
        <xsl:variable name="lesRègles">
        
            <xsl:for-each select="//règle">
                <xsl:sort select="@importance"/>
                <xsl:copy-of select="."/>
            </xsl:for-each>
            
        </xsl:variable>
            
        <xsl:for-each select="$lesRègles//règle">
            <xsl:number/>. <xsl:value-of select="."/><xsl:text>
</xsl:text>
        </xsl:for-each>
    </xsl:template>
    
    <xsl:template match="sect1 | sect2 |sect3">
        <xsl:number count="sect1 | sect2 |sect3" 
                    level="multiple"/>.<xsl:value-of select="name()"/>
        <xsl:apply-templates/>
    </xsl:template>
    
    <!-- etc. comme avant -->
    
</xsl:stylesheet>
Résultat
    <!-- etc. -->       
    
    2.sect1
        texteTitre=G 
        2.1.sect2
            texteTitre=H 
            textePara=hhh 
            textePara=hhh/
                 7.texteNote=Nhx textePara=hhh;
    
Règles importantes :
1. R1R1R
2. R3R3R
3. R4R4R
4. R2R2R

Rendu de la numérotation

Numéro hiérarchique
valeur: 2 4 2 5 

format: A I-1.a
rendu : B IV-2.e
 
format: 001 a.i.1
rendu : 002 d.ii.5
Exemple
sequence.xsl
<?xml version="1.0" encoding="UTF-16"?>
<xsl:stylesheet 
    xmlns:xsl="http://www.w3.org/1999/XSL/Transform" 
    version="1.0">

    <xsl:output  method='text' encoding='ISO-8859-1' />
    
    
    <xsl:template match="/">
        <xsl:apply-templates/>
        <xsl:text>Règles importantes :
</xsl:text>
        <xsl:for-each select="//règle">
            <xsl:sort select="@importance"/>
            <xsl:number value="position()" format='I'/>
            <xsl:text>    </xsl:text>
            <xsl:value-of select="."/><xsl:text>
</xsl:text>
        </xsl:for-each>
    </xsl:template>
    
    <xsl:template match="sect1 | sect2 |sect3">
        <xsl:number count="sect1 | sect2 |sect3" 
                    level="multiple" format="I-1.a "/>
        <xsl:value-of select="name()"/>
        <xsl:apply-templates/>
    </xsl:template>
    
    <xsl:template match="para">
        <xsl:apply-templates mode="inpara"/>
    </xsl:template>
    
    <xsl:template match="note" mode="inpara">
        <xsl:number count="note" level="any" format="1."/>
        <xsl:text>texteNote=</xsl:text>
        <xsl:value-of select="."/>
        <xsl:text> </xsl:text>
    </xsl:template>
    
    <xsl:template match="programlisting">
        <xsl:text>texteProgramlisting=</xsl:text>
        <xsl:value-of select="."/>
        <xsl:text> </xsl:text>
    </xsl:template>
    
    <xsl:template match="titre">
        <xsl:text>texteTitre=</xsl:text>
        <xsl:value-of select="."/>
        <xsl:text> </xsl:text>
    </xsl:template>
    
    <xsl:template match="règle" mode="inpara">
        <xsl:apply-templates select="."/>
    </xsl:template>
    
    <xsl:template match="règle">
        <xsl:text>texteRègle=</xsl:text>
        <xsl:value-of select="."/>
        <xsl:text> </xsl:text>
    </xsl:template>
    
    <xsl:template match="text()" mode="inpara">
        <xsl:if test="normalize-space(.)">
            <xsl:text>textePara=</xsl:text>
        </xsl:if>
        <xsl:value-of select="."/>
        <xsl:text> </xsl:text>
    </xsl:template>
    
</xsl:stylesheet>
Résultat
    I sect1
        texteTitre=A 
        texteRègle=R1R1R 
        I-1 sect2
            texteTitre=B 
            textePara=bbb 
        
        I-2 sect2
            texteTitre=C 
            I-2.a sect3
                texteTitre=D 
                textePara=ddd
                     texteRègle=R2R2R 
                     1.texteNote=Nt textePara=ddd/
                     2.texteNote=Nv 
            
            I-2.b sect3
                texteTitre=E 
                textePara=eee
                     3.texteNote=Nah textePara=eee;
                 
                textePara=e,e,e 
                texteRègle=R3R3R 
                texteProgramlisting=ay 
                textePara=e;e;e 
                texteProgramlisting=bg 
                textePara=e!e!e
                     texteRègle=R4R4R 
                     4.texteNote=Naa textePara=(eee)
                     5.texteNote=Nzz textePara=[eee]
                     6.texteNote=NEE textePara=(e,e,e)
            
            I-2.c sect3
                texteTitre=F 
                texteProgramlisting=ck 
    
    II sect1
        texteTitre=G 
        II-1 sect2
            texteTitre=H 
            textePara=hhh 
            textePara=hhh/
                 7.texteNote=Nhx textePara=hhh;
    
Règles importantes :
I   R1R1R
II  R3R3R
III R4R4R
IV  R2R2R
preceding-sibling::*[1] Table following-sibling::*[1]