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:
<?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:
<?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.