Tri

On trie les noeuds avant leur sortie, grâce à l'élément <xsl:sort>. Le tri de chaînes de caractères par ordre alphabétique est défini en tant que standard. L'attribut order indique l'ordre de sortie et peut prendre les valeurs "ascending" (ascendant) ou "descending" (descendant). Un autre attribut optionnel data-type détermine s'il s'agit d'une chaîne de caractères ("text") ou de chiffres („number“). Toutefois, l'élément <xsl:sort> doit être encastré dans un élément <xsl:apply-templates> ou <xsl:for-each> et ne doit comporter aucun contenu.

Dans l'exemple suivant, les poèmes seront sortis selon leur année de parution.

La feuille de style:

<?xml version="1.0" encoding="UTF-8"?>
<xsl:stylesheet version="1.0" xmlns:xsl="http://www.w3.org/1999/XSL/Transform">
  <xsl:output encoding="iso-8859-1" version="1.0"/>
    <xsl:template match="/">
      <xsl:for-each select="//poeme">
        <xsl:sort order="ascending" data-type="number" select="@anneeParution"/>  (1)
        <xsl:apply-templates/>
      </xsl:for-each>
    </xsl:template>
    <xsl:template match="auteur">
        <br/>
        <h4>
            <xsl:apply-templates/>
        </h4>
    </xsl:template>
    <xsl:template match="prenom">
            <xsl:apply-templates/>
            <xsl:text> </xsl:text>
    </xsl:template>
    <xsl:template match="nomFamille">
            <xsl:apply-templates/>
    </xsl:template>
    <xsl:template match="titre">
        <h2>
            <xsl:apply-templates/>
        </h2>
        <p>Année de parution: 
            <xsl:value-of select="parent::poeme/@anneeParution"/>
        </p>
    </xsl:template>
    <xsl:template match="strophe">
        <p>
            <xsl:apply-templates/>
        </p>
    </xsl:template>
    <xsl:template match="vers">
            <xsl:apply-templates/>
        <br/>
    </xsl:template>
    <xsl:template match="poeme">
            <xsl:apply-templates/>
    </xsl:template>
</xsl:stylesheet>

(1) L'élément <xsl:sort> permet que tous les contenus des boucles, triés selon leur année de parution, apparaissent par ordre numérique croissant. L'attribut data-type doit être, ici, relié à la valeur number (numéro), parce que la règle de base attend text.

Vue du browser du document cible:

vue du browser: exemple - tri

Exercice 5

a) Dans l'instance Poemes_tri.xml, se trouvent deux poèmes ayant la même année de parution ("Der Panther" et "Pst!"). C'est pourquoi, on décide d'ajouter une nouvelle règle de tri. Tous les poèmes sont triés selon leur année de parution, mais s'il se trouve que plusieurs poèmes ont une même date en commun, alors ils doivent être triés selon le nom de famille de l'auteur.

Remarque: Vous trouverez un exemple d'utilisation de plusieurs instructions de tri simultané dans les recommandations XSLT.

b) Veuillez créer une table des matières.

> > aux solutions du exercice 5

L'instance Poemes_tri.xml:

<?xml version="1.0" encoding="UTF-8"?> 
<!DOCTYPE recueilPoemes SYSTEM "Poemes_tri.dtd"> 
 <recueilPoemes>
  <poeme anneeParution="1905" langue="de">     
   <auteur>       
    <prenom>Rainer Maria</prenom>     
    <nomFamille>Rilke</nomFamille>   
   </auteur>   
   <titre>Der Panther</titre>    
   <sous-titre>Im Jardin des Plantes, Paris </sous-titre> 
   <strophe>  
    <vers>Sein Blick ist vom Vorübergehn der Stäbe</vers>   
    <vers>so müd geworden, daß er nichts mehr hält.</vers>   
    <vers>Ihm ist, als ob es tausend Stäbe gäbe</vers>   
    <vers> und hinter tausend Stäben keine Welt. </vers>  
   </strophe>    
   <strophe>    
    <vers>Der weiche Gang geschmeidig starker Schritte, </vers> 
    <vers> der sich im allerkleinsten Kreise dreht, </vers> 
    <vers> ist wie ein Tanz von Kraft um eine Mitte, </vers>  
    <vers>in der betäubt ein großer Wille steht. </vers>   
   </strophe>  
   <strophe>   
    <vers> Nur manchmal schiebt der Vorhang der <gras>Pupille</gras></vers> 
    <vers>sich lautlos auf -. Dann geht ein Bild hinein, </vers>  
    <vers> geht durch der <gras>Glieder</gras> angespannte Stille - </gras></vers>
    <vers>und hört im <gras>Herzen</gras> auf zu sein. </gras> </vers>
   </strophe>  
  </poeme>   
  <poeme anneeParution="1799" langue="de">   
   <auteur>      
    <prenom>Johann Wolfgang</prenom> 
    <nomFamille> von Goethe</nomFamille> 
   </auteur>   
   <titre>Der Zauberlehrling</titre>    
   <strophe>      
    <vers>Hat der alte Hexenmeister</vers>    
    <vers>Sich doch einmal wegbegeben!</vers> 
    <vers>Und nun sollen seine Geister</vers> 
    <vers>Auch nach meinem Willen leben.</vers>  
    <vers>Seine Wort und Werke</vers>    
    <vers>Merkt ich und den Brauch,</vers>  
    <vers>Und mit Geistesstärke</vers>    
    <vers>Tu ich Wunder auch.</vers>  
   </strophe>    
   <strophe>    
    <vers>Walle! walle</vers>    
    <vers>Manche Strecke,</vers>
    <vers>Daß, zum Zwecke,</vers> 
    <vers>Wasser fließe</vers>   
    <vers>Und mit reichem, vollem Schwalle</vers> 
    <vers>Zu dem Bade sich ergieße.</vers>    
   </strophe>  
   <strophe>   
    <vers>Und nun komm, du alter Besen,</vers>     
    <vers>Nimm die schlechten Lumpenhüllen!</vers> 
    <vers>Bist schon lange Knecht gewesen:</vers>  
    <vers>Nun erfülle meinen Willen!</vers> 
    <vers>Auf zwei <gras>Beinen</gras> stehe,</vers>   
    <vers>Oben sei ein Kopf,</vers>   
    <vers>Eile nun und gehe</vers>    
    <vers>Mit dem Wassertopf!</vers>  
   </strophe> 
   <strophe> 
    <vers>Walle! walle</vers>     
    <vers>Manche Strecke,</vers> 
    <vers>Daß, zum Zwecke,</vers>
    <vers>Wasser fließe</vers>   
    <vers>Und mit reichem, vollem Schwalle</vers>  
    <vers>Zu dem Bade sich ergieße.</vers>  
   </strophe>    
   <strophe>     
    <vers>Seht, er läuft zum Ufer nieder;</vers> 
    <vers>Wahrlich! ist schon an dem Flusse,</vers>  
    <vers>Und mit Blitzesschnelle wieder</vers>    
    <vers>Ist er hier mit raschem Gusse.</vers>    
    <vers>Schon zum zweiten Male!</vers>  
    <vers>Wie das Becken schwillt!</vers> 
    <vers>Wie sich jede Schale</vers>     
    <vers>Voll mit Wasser füllt!</vers>    
    <vers>Stehe! stehe!</vers>   
    <vers>Denn wir haben</vers>  
    <vers>Deiner Gaben</vers>    
    <vers>Vollgemessen! -</vers> 
    <vers>Ach, ich merk es! Wehe! wehe!</vers> 
    <vers>Hab ich doch das Wort vergessen!</vers>  
   </strophe>   
   <strophe>    
    <vers>Ach, das Wort, worauf am Ende</vers>  
    <vers>Er das wird, was er gewesen.</vers> 
    <vers>Ach, er läuft und bringt behende!</vers>    
    <vers>Wärst du doch der alte Besen!</vers>   
    <vers>Immer neue Güsse</vers>      
    <vers>Bringt er schnell herein,</vers>  
    <vers>Ach! und hundert Flüsse</vers>    
    <vers>Stürzen auf mich ein!</vers>  
    <vers>Nein, nicht länger</vers>     
    <vers>Kann ich's lassen;</vers>  
    <vers>Will ihn fassen.</vers>   
    <vers>Das ist Tücke!</vers>   
    <vers>Ach, nun wird mir immer bänger!</vers>    
    <vers>Welche Miene! welche Blicke!</vers>   
   </strophe>
   <strophe>  
    <vers>O du Ausgeburt der Hölle!</vers> 
    <vers>Soll das ganze Haus ersaufen?</vers> 
    <vers>Seh ich über jede Schwelle</vers>   
    <vers>Doch schon Wasserströme laufen.</vers>   
    <vers>Ein verruchter Besen,</vers>    
    <vers>Der nicht hören will!</vers>   
    <vers>Stock, der du gewesen,</vers>  
    <vers>Steh doch wieder still!</vers> 
    <vers>Willst's am Ende</vers>     
    <vers>Gar nicht lassen?</vers>    
    <vers>Will dich fassen,</vers>    
    <vers>Will dich halten</vers>     
    <vers>Und das alte Holz behende</vers> 
    <vers>Mit dem scharfen Beile spalten.</vers>    
   </strophe> 
   <strophe>
    <vers>Seht, da kommt er schleppend wieder!</vers>  
    <vers>Wie ich mich nur auf dich werfe,</vers>      
    <vers>Gleich, o Kobold, liegst du nieder;</vers>   
    <vers>Krachend trifft die glatte Schärfe.</vers>   
    <vers>Wahrlich! brav getroffen!</vers>    
    <vers>Seht, er ist entzwei!</vers>       
    <vers>Und nun kann ich hoffen,</vers>   
    <vers>Und ich atme frei!</vers>  
    <vers>Wehe! wehe!</vers>    
    <vers>Beide Teile</vers>  
    <vers>Stehn in Eile</vers>   
    <vers>Schon als Knechte</vers>  
    <vers>Völlig fertig in die Höhe!</vers> 
    <vers>Helft mir, ach! ihr hohen Mächte!</vers>   
   </strophe>    
   <strophe>    
    <vers>Und sie laufen! Naß und nässer</vers>  
    <vers>Wird's im Saal und auf den Stufen.</vers>
    <vers>Welch entsetzliches Gewässer!</vers>     
    <vers>Herr und Meister! hör mich rufen! -</vers> 
    <vers>Ach, da kommt der Meister!</vers>    
    <vers>Herr, die Not ist groß!</vers>    
    <vers>Die ich rief, die Geister,</vers>  
    <vers>Werd ich nun nicht los.</vers>     
    <vers>In die Ecke,</vers>  
    <vers>Besen! Besen!</vers>    
    <vers>Seid's gewesen.</vers>  
    <vers>Denn als Geister</vers> 
    <vers>Ruft euch nur, zu seinem Zwecke,</vers>     
    <vers>Erst hervor der alte Meister. </vers>  
   </strophe>  
  </poeme>
  <poeme anneeParution="1945" langue="de">  
   <auteur>     
    <prenom>Berthold </prenom>
    <nomFamille>Brecht</nomFamille>   
   </auteur> 
   <titre>Die Moritat von Mackie Messer</titre> 
   <strophe>    
    <vers>Und der Haifisch, der hat <gras>Zähne</gras></vers> 
    <vers>Und die trägt er im <gras>Gesicht</gras></vers>  
    <vers>Und Macheath, der hat ein Messer</vers>      
    <vers>Doch das Messer sieht man nicht.</vers>   
   </strophe>   
   <strophe>     
    <vers>Und es sind des Haifischs <gras>Flossen</gras></vers> 
    <vers>Rot, wenn dieser Blut vergiesst</vers>    
    <vers>Mackie Messer trägt'nen Handschuh</vers>   
    <vers>Drauf man keine Untat liest.</vers>  
   </strophe> 
   <strophe>   
    <vers>An der Themse grünem Wasser</vers>     
    <vers>Fallen plötzlich Leute um</vers>    
    <vers>Es ist weder Pest noch Cholera</vers> 
    <vers>Doch es heisst: Mackie geht um.</vers> 
   </strophe>    
   <strophe>     
    <vers>An'nem schönen blauen Sonntag</vers>    
    <vers>Liegt ein toter Mann am Strand</vers>   
    <vers>Und ein Mensch geht um die Ecke</vers>  
    <vers>Den man Mackie Messer nennt.</vers>    
   </strophe>   
   <strophe>      
    <vers>Und Schmul Meier bleibt verschwunden</vers>   
    <vers>Und so mancher reiche Mann</vers>   
    <vers>Und sein Geld hat Mackie Messer</vers> 
    <vers>Dem man nichts beweisen kann.</vers>   
   </strophe>    
   <strophe>     
    <vers>Jenny Towler ward gefunden</vers>   
    <vers>Mit'nem Messer in der <gras>Brust</gras></vers>       
    <vers>Und am Kai geht Mackie Messer</vers>   
    <vers>Der von allem nichts gewusst.</vers>   
   </strophe>  
   <strophe>   
    <vers>Wo ist Alfons gleich, der Fuhrherr?</vers>      
    <vers>Kommt das je ans Sonnenlicht?</vers>    
    <vers>Wer es immer wissen könnte</vers>       
    <vers>Mackie Messer weiss es nicht.</vers>    
   </strophe>  
   <strophe>    
    <vers>Und das grosse Feuer in Soho</vers>    
    <vers>Sieben Kinder und ein Greis</vers>     
    <vers>In der Menge Mackie Messer, den</vers> 
    <vers>Man nicht fragt, und der nichts weiss.</vers>   
   </strophe>    
   <strophe>       
    <vers>Und die minderjähr'ge Witwe</vers>   
    <vers>Deren Namen jeder weiss</vers>      
    <vers>Wachte auf und war geschändet</vers>  
    <vers>Mackie welches war dein Preis?</vers> 
   </strophe> 
  </poeme>  
  <poeme anneeParution="1905" langue="de"> 
   <auteur>     
    <prenom>Heinrich Christian Wilhelm</prenom>    
    <nomFamille>Busch</nomFamille>   
   </auteur>   
   <titre>Pst!</titre>  
   <strophe>    
    <vers>Es gibt ja leider Sachen und Geschichten,</vers>     
    <vers>Die reizend und pikant,</vers> 
    <vers>Nur werden sie von Tanten und von Nichten</vers>     
    <vers>Niemals genannt.</vers> 
   </strophe>    
   <strophe>    
    <vers>Verehrter Freund, so sei denn nicht vermessen,</vers>   
    <vers>Sei zart und schweig auch du.</vers>  
    <vers>Bedenk: Man liebt den Käse wohl, indessen</vers> 
    <vers>Man deckt ihn zu. </vers>  
   </strophe> 
  </poeme> 
  <poeme anneeParution="-750" langue="el">   
   <auteur>      
    <prenom/>     
    <nomFamille>Όμηρος</nomFamille>    
   </auteur>   
   <titre>Ιλιάδα</titre> 
   <strophe>     
    <vers>Μῆνιν ἄειδε, θεὰ, Πηληιάδεω Ἀχιλῆος</vers>  
    <vers>οὐλομένην, ἣ μυρί’ Ἀχαιοῖς ἄλγε’ ἔθηκε,</vers>   
    <vers>πολλὰς δ’ ἰφθίμους ψυχὰς Ἄϊδι προῒαψεν</vers>    
    <vers>ἡρώων, αὐτοὺς δὲ ἑλώρια τεῦχε κύνεσσιν</vers>    
    <vers>οἰωνοῖσί τε πᾶσι• Διὸς δ’ ἐτελείετο βουλή </vers> 
    <vers>ἐξ οὗ δὴ τὰ πρῶτα διαστήτην ἐρίσαντε</vers>      
    <vers>Ἀτρεΐδης τε ἄναξ ἀνδρῶν καὶ δῖος Ἀχιλλεύς.</vers>   
   </strophe>  
  </poeme> 
 </recueilPoemes> 

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

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