list.xsltVorlagen zur Arbeit mit Listen2011-01-21HerbertSchiemannh.schiemann@herbaer.de
Diese Datei enthält benannte Hilfsvorlagen, die die Einträge einer Liste
akkumulieren, zu einer neuen Liste bearbeiten, auf zwei Listen aufteilen
oder sortieren.
Sie nutzt Vorlage aus txt.xslt.
Wenn ein Stylesheet diese Datei (list.xslt) einbindet,
sollte es daher auch txt.xslt einbinden.
Eine Liste ist eine Zeichenkette,
die durch eine feste Zeichenfolge (die Trennzeichenfolge)
in einzelne Listeneinträge zerlegt wird.
Einige Vorlagen behandeln die leere Zeichenkette als Listeneintrag so,
als gäbe es diesen Eintrag nicht.
Ein Listeneintrag sollte also, so wie Listen hier behandelt werden, nicht leer sein.
Die Trennzeichenfolge kann jeder Vorlage für jede Liste als Parameter übergeben werden.
Wenn eine Vorlage mit mehreren Listen arbeitet,
können die Listen verschiedene Trennzeichenfolgen verwenden.
Voreingestellt ist ein einzelnes Leerzeichen.
Die Listeneinträge werden von 1 an gezählt (Position eines Listeneintrags).
Konkrete Funktionen für einzelne Listeneinträge werden ausgeführt,
indem die Vorlagen im Modus
list.apply
auf einen Parameter ("Funktional") angewandt werden.
Typischerweise ist der Parameter eine Vorlage,
die auf sich selbst im Modus list.apply passt.
Zu jedem "Funktional"-Parameter gibt es einen weiteren Parameter
(meist mit dem Namen "param",
der an die Vorlagen im Modus list.apply übergeben wird.
Wurzel-Element dieser Datei.
Indem eine einbindende Datei dieses Variable anders definiert,
kann sie das Vorgabe-Verhalten fast aller Vorlagen dieser Datei ändern.
Listeneinträge akkumulieren.
Dem "Akkumulator" (Funktional-Parameter) werden die folgenden Parameter übergeben:
itemder Listeneintragcurder bisher akkumulierte Wertposdie Position des Listeneintragsparamder weitergegebene Parameter
Der voreingestellte Akkumulator zählt die Einträge der Liste.
Dieser "Akkumulator" zählt die Einträge der Liste.
Er ist in der benannten Vorlage
list.accumulate voreingestellt.
Fügt zwei Listen elementweise ("reißverschlussartig") zu einer neuen Liste zusammen.
Dem "Zipper" (Funktional-Parameter) werden die folgenden Parameter übergeben:
firstder Eintrag der ersten Listesecondder Eintrag der zweiten Listeparamder weitergegebene Parametersepdie Trennzeichenfolge der Ergebnis-Listepos
die Position der Einträge in den Listen
(first und
second haben dieselbe Position)
Das Ergebnis des "Zippers" ist ein einzelner Eintrag oder eine Liste von Einträgen,
die in die Ergebnisliste eingefügt werden.
Wenn das Ergebnis leer ist, wird kein Eintrag in die Ergebnisliste eingefügt.
Der voreingestellte "Zipper" fügt first,
param
und second zu einer Zeichenkette zusammen.
10
Dieser "Zipper" fügt first, param
und second zu einer Zeichenkette zusammen.
Er ist in der Vorlage list.zip voreingestellt.
Wendet den "Mapper" (Funktional-Parameter) auf jeden Listeneintrag an
und fügt die Ergebnisse des Mappers zur Ergebnisliste zusammen.
Das Ergebnis des "Mappers" kann leer, ein einzelner Listeneintrag
oder eine Liste von Einträgen sein.
Wenn das Ergebnis des "Mappers" leer ist,
wird kein Eintrag in die Ergebnisliste eingefügt.
Diese Vorlage kann insbesondere dazu benutzt werden,
bestimmte Einträge aus der Liste auszuwählen.
Die Parameter des "Mappers" sind
itemder Listeneintragparamder weitergegebene Parametersepdie Trennzeichenfolge der Ergebnis-Listeposdie Position des Listeneintrags10
Dieser "Mapper" (Parameter für list.map),
wählt Einträge an ungerader Position aus.
Er wird benutzt, um eine zu sortierende Liste zu zerlegen.
Ein "Mapper" (Parameter für list.map),
wählt alle Einträge aus.
Dieser Mapper ist sinnvoll, wenn die Ergebnisliste nur eine andere Trennzeichenfolge
verwendet als die Eingabeliste.
Die Hilfsvorlage list.mergesorted bentzt ihn.
Wendet den "Mapper" (Funktional-Parameter) auf die Listeneinträge an.
Das Ergebnis ist das erste nicht-leere Ergebnis des "Mappers".
Die Parameter des "Mappers" sind
itemder Listeneintragparamder weitergegebene Parameterposdie Position des Listeneintrags
Fügt zwei sortierte Listen sortiert zusammen.
Diese Hilfsvorlage wird von list.sort benutzt
und sollte in der Regel nicht direkt aufgerufen werden.
Sortiert eine Liste.
Die Parameter des "Vergleichers" sind nach der Perl-Konvention benannt:
ader erste der beiden zu vergleichenden Wertebder zweite der zu vergleichenden Werteparamder weitergegebene Parameter für den Vergleicher
Ein negatives Ergebnis bedeutet,
dass a nach b folgt;
ein positives Ergebnis bedeutet,
dass b nach a folgt;
Null bedeutet,
dass a und a gleichrangig sind.
Der voreingestellte Vergleicher list.compare.integer
interpretiert führende Dezimalziffern eines Listeneintrags als Zahl
und ordnet Listeneinträge nach dieser Zahl.
Vergleicht die führenden Ziffernfolgen zweier Elemente als natürliche Zahlen.
Dieser Vergleicher ist in der Vorlage list.sort
voreingestellt.
00
Diese Vorlage kombiniert den Aufruf der benannten Vorlagen
list.map
und list.sort:
zunächst list.map,
dann list.sort.
Wählt einen Listeneintrag nach einem enthaltenen Schlüssel aus.
Das Ergebnis ist der erste Listeneintrag,
der die Zeichenkette key enthält, oder leer.
Das Ergebnis ist auch leer, wenn key leer ist.