Listen
XSL-FO enthält die Möglichkeit, Listen zu erzeugen. Hierfür wird zu allererst das Element list-block
benötigt. In
diesem Element werden nun list-item
-Elemente untergeordnet, welche die einzelnen Listenpunkte repräsentieren.
Jeder Listenpunkt enthält nun genau zwei weitere Unterelemente: list-item-label
und list-item-body
.
Das list-item-label
stellt die Beschriftung für den Listenpunkt dar. Dies ist i. d. R. ein Aufzählungszeichen
oder ein fortlaufender Wert (nummerisch, alphanummerisch oder römisch). XSL-FO enthält selbst keinen Mechanismus, um eine solche
geordnete Aufzählung zu erzeugen. Hier wird dann meistens das number
-Element von XSLT verwendet, um einen solchen
Aufzählungswert zu erzeugen (siehe Beispiel). Der eigentliche Inhalt des Aufzählungspunkts wird im Element
list-item-body
notiert. Sowohl im list-item-label
- als auch im list-item-body
-Element
darf der Inhalt nicht direkt notiert werden, sondern muss in einem block
-Element untergeordnet werden. Standardmäßig
überlagert sich der Inhalt der Elemente list-item-label
und list-item-body
. Um einen Abstand zu
erzeugen, werden üblicherweise die Attribute start-indent
und end-indent
verwendet.
XML-Code:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 | <? xml version = "1.0" encoding = "UTF-8" standalone = "yes" ?> <? xml-stylesheet href = "listen.xsl" type = "text/xsl" ?> < zahlen > < zahl >45</ zahl > < zahl >39</ zahl > < zahl >22</ zahl > < zahl >70</ zahl > < zahl >68</ zahl > < zahl >12</ zahl > < zahl >51</ zahl > < zahl >63</ zahl > < zahl >27</ zahl > < zahl >94</ zahl > </ zahlen > |
XSL-Code:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 | <? xml version = "1.0" encoding = "UTF-8" ?> < xsl:stylesheet version = "1.0" xmlns:xsl = "http://www.w3.org/1999/XSL/Transform" xmlns:fo = "http://www.w3.org/1999/XSL/Format" > < xsl:output method = "xml" omit-xml-declaration = "no" version = "1.0" encoding = "UTF-8" indent = "yes" /> < xsl:template match = "/" > < fo:root > < fo:layout-master-set > < fo:simple-page-master master-name = "DIN-A4" page-height = "297mm" page-width = "210mm" > < fo:region-body region-name = "inhalt" margin = "2cm" /> </ fo:simple-page-master > </ fo:layout-master-set > < fo:page-sequence master-reference = "DIN-A4" > < fo:flow flow-name = "inhalt" > < fo:list-block > < xsl:apply-templates /> </ fo:list-block > </ fo:flow > </ fo:page-sequence > </ fo:root > </ xsl:template > < xsl:template match = "/zahlen/zahl" > < fo:list-item > < fo:list-item-label > < fo:block > < xsl:number format = "1." /> </ fo:block > </ fo:list-item-label > < fo:list-item-body start-indent = "10mm" > < fo:block > < xsl:value-of select = "." /> </ fo:block > </ fo:list-item-body > </ fo:list-item > </ xsl:template > </ xsl:stylesheet > |
Wichtig: Im obigen Beispiel wird ein fest definierter Abstand verwendet. Nachteil dieser Variante ist die Abhängigkeit
der Schriftgröße sowie der evtl. zu kleine Abstand bei langen Aufzählungen. Abhilfe schafft der Attributwert label-end()
im Attribut end-indent
des list-item-label
-Elements sowie der Attributwert body-start()
im Attribut start-indent
des list-item-body
-Elements. Der Abstand zwischen dem list-item-label
-
und list-item-body
-Element lässt sich dann über das Attribut provisional-distance-between-starts
,
welches im list-block
-Element notiert wird, festlegen. Der Standardwert dieses Attributs ist 24pt.