list.xslt Vorlagen zur Arbeit mit Listen 2011-01-21 Herbert Schiemann h.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: item der Listeneintrag cur der bisher akkumulierte Wert pos die Position des Listeneintrags param der 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: first der Eintrag der ersten Liste second der Eintrag der zweiten Liste param der weitergegebene Parameter sep die Trennzeichenfolge der Ergebnis-Liste pos 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. 1 0 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 item der Listeneintrag param der weitergegebene Parameter sep die Trennzeichenfolge der Ergebnis-Liste pos die Position des Listeneintrags 1 0 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 item der Listeneintrag param der weitergegebene Parameter pos die 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: a der erste der beiden zu vergleichenden Werte b der zweite der zu vergleichenden Werte param der 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. 0 0 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.