XSL-FO Praxis

112
XSL-FO Praxis

Transcript of XSL-FO Praxis

Page 1: XSL-FO Praxis

XSL-FO Praxis

Page 2: XSL-FO Praxis
Page 3: XSL-FO Praxis

Manfred Krüger,Ursula Welsch

XSL-FO Praxis

schnell + kompakt

Page 4: XSL-FO Praxis

Manfred Krüger, Ursula WelschXSL-FO Praxisschnell + kompaktISBN 978-3-939084-62-4

© 2007 entwickler.press,ein Imprint der Software & Support Verlag GmbH

http://www.entwickler-press.dehttp://www.software-support.biz

Ihr Kontakt zum Verlag und Lektorat: [email protected]

Bibliografische Information Der Deutschen BibliothekDie Deutsche Bibliothek verzeichnet diese Publikation in derDeutschen Nationalbibliografie; detailiierte bibliografische Datensind im Internet über http://dnb.ddb.de abrufbar.

Korrektorat: Sandra MichelSatz: durch die AutorenUmschlaggestaltung: Caroline ButzBelichtung, Druck und Bindung: M.P. Media-Print Informations-technologie GmbH, Paderborn.Alle Rechte, auch für Übersetzungen, sind vorbehalten. Reproduktion jeg-licher Art (Fotokopie, Nachdruck, Mikrofilm, Erfassung auf elektronischenDatenträgern oder andere Verfahren) nur mit schriftlicher Genehmigungdes Verlags. Jegliche Haftung für die Richtigkeit des gesamten Werkskann, trotz sorgfältiger Prüfung durch Autor und Verlag, nicht übernom-men werden. Die im Buch genannten Produkte, Warenzeichen und Fir-mennamen sind in der Regel durch deren Inhaber geschützt.

Page 5: XSL-FO Praxis

Inhaltsverzeichnis

XSL-FO – wovon reden wir? 7

Kapitel 1: XSL-FO – Einsatzszenarien 11

Kapitel 2: XSL-FO – Prozess und Software-Komponenten 152.1 Eingangsdaten . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 152.2 Verarbeitungsprozess . . . . . . . . . . . . . . . . . . . . . . . . . . 152.3 FO-Formatierer – Standard- plus proprietäre Merkmale . . . 172.4 XSLT-Prozessoren – die Daten-Vorkäuer . . . . . . . . . . . . 242.5 Stylesheet-Designer – nützliche Spezialwerkzeuge? . . . . . 25

Kapitel 3: Stylesheetdesign 273.1 Das Wurzelelement . . . . . . . . . . . . . . . . . . . . . . . . . . . 273.2 Der Aufbau des Stylesheets . . . . . . . . . . . . . . . . . . . . . 283.3 Modularer Aufbau des Stylesheets . . . . . . . . . . . . . . . . 303.4 Attributsätze . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 323.5 Parameter und Variable . . . . . . . . . . . . . . . . . . . . . . . . 33

Kapitel 4: Seitenlayout 354.1 Seitenaufbau . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 364.2 Seitenvorlagen . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 374.3 Seitenfolgevorlagen . . . . . . . . . . . . . . . . . . . . . . . . . . . 394.4 Seitenfolgen als Publikationsabfolge . . . . . . . . . . . . . . . 41

Kapitel 5: Typografische Gestaltung 455.1 Defaults, Vererbung, Schachtelung . . . . . . . . . . . . . . . . 455.2 Das Blockelement . . . . . . . . . . . . . . . . . . . . . . . . . . . . 525.3 Das Inline-Element . . . . . . . . . . . . . . . . . . . . . . . . . . . . 565.4 Block- und Inline-Container . . . . . . . . . . . . . . . . . . . . . . 58

Kapitel 6: Besondere Layout-Situationen 63

schnell + kompakt 5

Page 6: XSL-FO Praxis

6.1 Aufzählungen . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 636.2 Kästen . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 656.3 Grafiken . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 686.4 Tabellen . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 716.5 Fußnoten . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 77

Kapitel 7: Verlinkung, Orientierung 817.1 Verlinkung . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 817.2 Paginierung . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 847.3 Kolumnentitel . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 86

Kapitel 8: Farben für unterschiedliche Ausgabemedien 89

Kapitel 9: Inhaltsverzeichnisse, PDF-Lesezeichen und Register93

9.1 Inhaltsverzeichnisse . . . . . . . . . . . . . . . . . . . . . . . . . . . 949.2 PDF-Lesezeichen . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 969.3 Register . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 98

Kurzreferenz 103

Stichwortverzeichnis 107

Inhaltsverzeichnis

6

Page 7: XSL-FO Praxis

Die eXtensible Stylesheet Language – FormattingObjects beruht auf der W3C Recommendation XSL (kurz:XSL-FO-Standard), die in einer Version 1.0 in 2001 und inder Version 1.1 2006 publiziert wurde.

Dieser XSL-FO-Standard beschränkt sich auf die Spezifi-kation von Formatierobjekten. Dies sind spezifischeLayouts wie Textblöcke, Aufzählungen, Tabellen oder in-zeilige Auszeichnungen, die in Seiten mit festen Dimen-sionierungen einzufügen sind.

In der Praxis hat sich für diesen Standard – anstelle vonXSL – die genauere Bezeichnung XSL-FO allgemeindurchgesetzt. Damit lässt sich dann auch der XSL-FO-Standard klar von dem übergeordneten XSL-Konzept un-terscheiden. Es vereint in sich ein Bündel vonspezialisierten Standards für die Formatierung der Doku-mentinhalte in festen Seitendimensionen (XSL):

– zur Transformation der XML-Eingangsdaten (XSLT),

XSL-FO – wovon reden wir?

schnell + kompakt 7

Page 8: XSL-FO Praxis

– für den Zugriff auf die Strukturen in den XML-Daten(XPath) und eben

– für die Formatierung der Dokumentinhalte in festenSeitendimensionen (XSL).

In dieser kompakten Darstellung von XSL-FO verzichtenwir auf die detaillierte Behandlung von XSLT. Wir be-schränken uns auf die Aspekte des allgemeinen Style-sheet-Designs mit XSLT (Kapitel 3).

Kenntnisse in XSLT und XPath werden vorausgesetztbzw. im Band XSLT dieser Reihe behandelt.

XSL-FO ist ein lebender Standard, denn seine Entwick-lung setzt sich fort. Ein erster Schritt dieser Entwicklungbesteht in der Publikation von Version 1.1.

Der Entwicklungscharakter von XSL-FO wird gern miss-verstanden und man urteilt vorschnell: „Die Version 1.0ist für komplexe Layouts noch nicht reif! Warten wir ab,was die zukünftige Entwicklung bringt.“ Dabei wirdübersehen, dass XSL-FO 1.0 das Ergebnis einer langjähri-gen Forschung und Entwicklung einer Gruppe von Ex-perten (insbesondere Sharon Adler und Anders Berglund)der automatisierten Dokumentenverarbeitung ist, die sichzuvor schon in dem SGML-bezogenen ISO-Standard Do-cument Style Semantics and Specification Language(DSSSL) niedergeschlagen hat.

Version 1.1 ist eine „kleine“ Version, in der lediglich for-matiertechnische Details und PDF-bezogene Funktionender Basisversion hinzugefügt wurden. In der weiteren Be-handlung der Formatierobjekte werden wir auf die 1.1-Konstrukte als solche hinweisen, diese aber nichtgesondert thematisieren.

XSL-FO – wovon reden wir?

8

Page 9: XSL-FO Praxis

Ein weiteres, verbreitetes Missverständnis über die XSL-FO-Anwendung besteht darin, den kostenfrei zugängli-chen Standard als hinreichend für die Nutzunganzusehen. XSL-FO bezeichnet lediglich die formaleSprachschnittstelle zu Software-Produkten, die den An-spruch erheben, entsprechend strukturierte Dokumentestandardkonform zu verarbeiten. Diese Software-Produk-te – als XSL-FO-Formatierer bezeichnet – mögen den Stan-dard mehr oder weniger vollständig, konform oderbegrenzt konform unterstützen. Es gibt lizenzkostenfreie,kostengünstige und auch hochpreisige, dabei durchauspreiswerte Produkte. Auf diese Produkte wird im Ab-schnitt 2.3 näher eingegangen.

Die Darstellung hier zielt nicht auf eine vollständige Be-handlung aller XSL-FO-Konstrukte. Sie soll das Verständ-nis für den Umgang mit den in diesen Konstruktenformulierten Konzepten wecken und XSL-Stylesheet-Ent-wickler dazu befähigen, praxisgerechte Anwendungen zuschreiben, wobei man hinsichtlich der Details ggf. auf dieW3C-Recommendation XSL selbst oder / und die weiter-führende XSL-FO-Literatur zurückgreift. Eine ausführli-che Darstellung mit einer kommentierten XSL-FO-Referenz ist in „XSL-FO verstehen und anwenden“ vonManfred Krüger gegeben.

XSL-FO – wovon reden wir?

schnell + kompakt 9

Page 10: XSL-FO Praxis
Page 11: XSL-FO Praxis

Der Einsatzbereich für XSL-FO liegt ausschließlich in derautomatisierten Aufbereitung und Verarbeitung vonXML-strukturierten Dokumenten. Die Automatisierungsetzt eine zentrale Steuerung (Organisation) voraus, diesich bei XSL-FO in den Stylesheets niederschlägt. Die For-matierung oder Layoutierung beruht auf der XML-Struk-tur der Eingangsdokumente und wird in allgemeingültigen Regeln im Stylesheet eindeutig formuliert.Varia-tionen der Layoutierung sind möglich, beziehen sich aberauf eindeutig identifizierbare Strukturkonstellationen desEingangsdokuments.

Damit ist die Nutzung von XSL-FO für spontane und in-teraktiv beeinflussbare Gestaltungen ausgeschlossen. Fürderartige Anwendungen gibt es eigene Layoutierungs-konzepte, im W3C-Zusammenhang die Cascading Style-sheets (CSS).

In dieser Beschränkung des Einsatzbereichs liegt die Stär-ke von XSL-FO. Es ist deshalb nicht verwunderlich, dasssich XSL-FO im Zeitraum von etwa fünf Jahren gegenüberälteren Konzepten in der Dokumentenverarbeitung

XSL-FO – Einsatzszenarien

KAPITEL 1

schnell + kompakt 11

Page 12: XSL-FO Praxis

durchgesetzt hat – nämlich dort, wo die qualitätsgesicher-te und automatisiert ablaufende Verarbeitung aus techni-schen oder / und wirtschaftlichen Gründen zwingend ist.

Wie man an den folgenden Beispielen sehen kann, wächstdieser „beschränkte“ Einsatzbereich für XSL-FO kontinu-ierlich und sogar deutlich progressiv.

Dabei ist die Vielfalt der Einsatzszenarien beeindruckend.Sie reicht von literarischen E-Book-Anwendungen mit mi-nimalem Mitteleinsatz bis zu großindustriellen Massen-publikationen mit großen Umfängen und in vielenWeltsprachen, die asiatischen Sprachen eingeschlossen.Die Anwender sind in Verlagen, in der öffentlichen Ver-waltung, in der Banken- und Finanzdienstleisterwelt, inder technischen Dokumentation vieler Industriebereicheund – selbstverständlich – in der IT-Industrie beheimatet.

Ein kleiner Verlag produziert mit XSL-FO literarische „Zi-melien“ als E-Books, für die die konventionelle Druck-publikation unwirtschaftlich wäre, die aber auch eine demPublikationsmedium entsprechende, typografisch an-spruchsvolle Gestaltung erfordern.

Eine Krankenkasse produziert individualisierte Formula-re für ihre Mitglieder und spart dabei – nach eigenerAussage – 9/10 der Entwicklungs-, Software- und Hand-habungskosten gegenüber konkurrierenden Formular-verarbeitungssystemen.

Etliche Banken und Versicherungen produzieren mit XSL-FO Kontoauszüge, schematisierte Korrespondenz undVerträge zu einem Bruchteil der bisherigen Kosten – unddies häufig in überlegener Layout-Qualität.

1 – XSL-FO – Einsatzszenarien

12

Page 13: XSL-FO Praxis

Der in Deutschland marktführende Bahnbetreiber lässtseine Online-Kunden jeden Tag etwa 20.000 Online-Bahn-Tickets zentral produzieren und lokal ausdrucken.

Ein großer Industrieanlagenbauer produziert von fünfStandorten ausgehend in Europa auf einem zentralen Ser-ver bis zu 25.000 Seiten täglich technische Dokumentationin mehr als 12 Sprachen.

1 – XSL-FO – Einsatzszenarien

schnell + kompakt 13

Page 14: XSL-FO Praxis
Page 15: XSL-FO Praxis

2.1 Eingangsdaten

Die Verarbeitung von XML-Daten mit XSL-FO ist einmehrstufiger Prozess, der ohne Eingriffsmöglichkeiten in-nerhalb der einzelnen Prozessschritte und ohne Schleifen-bildung (Wiederholung einzelner Schritte) abläuft. Fürjeden dieser Schritte wird ein spezialisiertes Software-Mo-dul bzw. -Produkt benötigt.

Neben den zu verarbeitenden XML-Daten bilden die indiesen Daten referenzierten, in externen Dateien gehalte-nen Grafiken und selbstverständlich das XSL-FO-Style-sheet, in dem die Verarbeitung und Layoutierungdefiniert ist, die Eingangsdaten dieses Prozesses.

2.2 Verarbeitungsprozess

Den Prozess der Verarbeitung und Layoutierung veran-schaulicht die folgende Abbildung:

XSL-FO – Prozess undSoftware-Komponenten

2.1 Eingangsdaten 15

2.2 Verarbeitungsprozess 15

2.3 FO-Formatierer – Standard- plus proprietäre Merkmale 17

2.4 XSLT-Prozessoren – die Daten-Vorkäuer 24

2.5 Stylesheet-Designer – nützliche Spezialwerkzeuge? 25

KAPITEL 2

schnell + kompakt 15

Page 16: XSL-FO Praxis

Abb. 2.1: Der XSL-FO-Workflow

Die XML-Daten und das XSL-FO-Stylesheet werden vomXSLT-Prozessor eingelesen. Aus diesen beiden Dokumen-ten erzeugt der XSLT-Prozessor mit Hilfe der Anweisun-gen im Stylesheet, die das Namensraum-Präfix xsl haben,das XML-FO-Ergebnisdokument.

Das XML-FO-Dokument wird vom FO-Formatierer ein-gelesen. Die in diesem Dokument referenzierten externenDateien, typischerweise Grafiken, werden vom Formatie-rer an der Stelle ihrer Referenz im Textfluss formatspezi-fisch behandelt und eingefügt.

Das Ausgabeformat eines FO-Formatierers ist nicht imStandard festgelegt. Zumeist ist es jedoch PDF. Wennauch für viele FO-Formatierer die PDF-Generierung dieeinzige Möglichkeit darstellt, das formatierte Ergebnis,die layoutierten Seiten, sichtbar zu machen, so muss dochdieser Schritt der Verarbeitung als ein eigenständiges und

2 – XSL-FO – Prozess und Software-Komponenten

16

Page 17: XSL-FO Praxis

bei einigen Formatierern als ein austauschbares Modulangesehen werden. Bei einigen Produkten hat man dieWahl zwischen einem produkteigenen PDF-Modul undeinem Fremdprodukt.

Manche Formatierer-Produkte bieten auch andere Aus-gaben an, beispielsweise das MS-Windows-Zwischenfor-mat, von dem aus man die im lokalen System installiertenDruckertreiber (PostScript, PCL etc.) für die Ausgabe nut-zen kann. Sogar die Ausgabe der formatierten Seiten ineiner XML-Struktur wird angeboten. Eine solche XML-Ausgabe bietet wiederum exzellente Möglichkeiten, dasSatzergebnis weiter zu transformieren, beispielsweise zuRTF, um den XSL-FO-Satz in MS-Word zu verwerten,oder in eine XML-Struktur, die in Adobe InDesign einge-lesen und darin händisch modifiziert werden kann.

2.3 FO-Formatierer – Standard- plusproprietäre Merkmale

Für die Konformität von FO-Formatierern spezifiziert derXSL-FO-Standard eine Fülle von FO-Konstrukten, syn-taktisch als XML-Elemente und XML-Attribute formu-liert, mit denen man im Stylesheet die Layoutierungfestlegt. Wie diese Festlegung aussieht und was sie offenlässt, zeigen wir an folgendem Beispiel.

BeispielWir möchten, dass die Zeilen in Textabsätzen auf glei-che Länge ausgetrieben werden, ggf. am ZeilenendeSilbentrennung angewandt werden soll. Die FO-Spezi-fikation dafür folgt:

FO-Formatierer – Standard- plus proprietäre Merkmale

schnell + kompakt 17

Page 18: XSL-FO Praxis

<fo:block text-align="justify" hyphenate="true"language="de">. . .</fo:block>

HinweisDiese FO-Spezifikation beschränkt sich auf die schlichteAnweisung, die Inhalte des Blocks als Blocksatz mit Sil-bentrennung nach den deutschsprachigen Regeln zulayoutieren. Die Silbentrennung wird durch impliziteAnweisungen, die im XSL-FO-Standard als Defaults ge-setzt sind (z.B. für das zu setzende Silbentrennzeichenund die Mindestzahl von Zeichen im Wort vor und nachder Trennung), genauer spezifiziert. Jedoch bleibt offen,woher der Formatierer die Silbentrennregeln selbstnimmt und welche minimalen und maximalen Wortab-stände eingehalten werden sollen. Diese Merkmale sindproprietäre Merkmale eines FO-Formatierers.

Das vorangehende Beispiel soll zeigen, dass ein FO-For-matierer ohne proprietäre Funktionalität kein praxistaug-liches Werkzeug wäre. Neben dem proprietärenZeilenumbruch- und Silbentrenn-Algorithmus benötigtein praxistauglicher FO-Formatierer weitere, nicht durchden Standard vorgegebene Funktionalität – allem vorandie Generierung eines verwertbaren Ausgabeformats.Weitere proprietäre Funktionen beziehen sich auf die Be-handlung von Grafiken, auf direkt in den Formatierereingelesene XML-Daten (z.B. SVG-Dateien, mathemati-sche Ausdrücke in MathML-Notation), auf die Einbin-dung von Fonts oder auf die Erweiterung von im Standarddefinierten Befehlen und Eigenschaften.

Diese proprietäre Funktionalität ist zum einen fester Be-standteil des Formatierer-Produkts, zum anderen durch

2 – XSL-FO – Prozess und Software-Komponenten

18

Page 19: XSL-FO Praxis

den Stylesheet-Entwickler steuerbar. Gesteuert wird dieseFunktionalität entsprechend ihrer Charakteristik entwe-der durch entsprechende Spezifikationen in produktspe-zifischen Konfigurationsdateien oder durch dieSpezifikation von Eigenschaften (XML-syntaktische At-tribute) im Stylesheet unter Hinzufügung eines produkt-spezifischen Namensraum-Präfixes. Die XSL-FO-Stylesheets bleiben also immer konform zum Standard.Bei Nutzung eines Stylesheets mit einem anderen Forma-tierer-Produkt ignoriert der Formatierer einfach die Merk-male, die mit einem ihm fremden Namensraum-Präfixgekennzeichnet sind.

Es ist also offensichtlich, dass die Leistungsfähigkeit vonstandardkonformen FO-Formatierern unterschiedlich istund die Wahl unter den angebotenen Produkten entspre-chend der bestehenden Anforderungen zu treffen ist. Eineeinfache Gegenüberstellung der FO-Formatierer hinsicht-lich der unterstützten Standard-Merkmale – wie sie imWeb zu finden ist – taugt nur sehr bedingt für die Wahleines professionellen Produkts.

Die folgenden Beschreibungen verschiedener FO-Forma-tierer spiegeln unsere eigenen Erfahrungen mit dem Pro-dukt unserer Wahl und Diskussionen mit Anwendernund Präsentationen von Herstellern wider.

Sämtliche technischen Angaben zu den Formatierer-Pro-dukten beruhen auf dem Stand der verfügbaren Informa-tionen im Frühjahr 2007. Die Reihenfolge ihrerBehandlung ist zufällig und stellt keinesfalls eine Rang-folge ihrer Wertigkeit dar.

FO-Formatierer – Standard- plus proprietäre Merkmale

schnell + kompakt 19

Page 20: XSL-FO Praxis

FOP der Apache Software Foundation

Für die Liebhaber von Open-Source-Software entwickeltdie Apache Software Foundation (www.apache.org) denFormatierer FOP. Lange Zeit gab es FOP lediglich in einerVersion, deren Funktionalität sehr eingeschränkt und de-ren Kompatibilität zum Standard ungenügend war. DerCode der aktuellen Version (0.93 von Anfang 2007) ist einevollständige Neuentwicklung und bringt die Funktiona-lität auf das Niveau anderer, aktuell angebotener FO-Formatierer.

Als Java-Software ist FOP multiplattformfähig. Dem An-wender werden für die Installation und KonfigurationJava-Kenntnisse abverlangt.

Es existieren nach wie vor funktionale Einschränkungen,die FOP für bestimmte Anwendungen ungeeignet er-scheinen lassen. Die aus unserer Sicht gravierendsten sindEinschränkungen des Tabellen-Layouts, der Platzierungvon Block-Containern, der fehlenden Unterstützung vonInline-Containern und fließenden Objekten sowie derSchreibrichtungen von rechts nach links und von obennach unten.

Von den neuen Merkmalen in XSL-FO 1.1 werden ledig-lich die PDF-Lesezeichen unterstützt.

Die Erweiterung durch proprietäre Konstrukte, wie sie fürdie kommerziellen FO-Formatierer typisch ist, gehörtnicht zu den Entwicklungszielen.

2 – XSL-FO – Prozess und Software-Komponenten

20

Page 21: XSL-FO Praxis

XEP von RenderX Inc.

XEP der US-amerikanischen Herstellerfirma RenderX(www.renderx.com) ist ein kommerzielles Produkt. Esbietet das gesamte Spektrum von Gestaltungen, die imFokus des Standards sind – mit Ausnahme von Anwen-dungen in Sprachen, die nicht in der uns gewohntenSchreibrichtung (von links nach rechts und von oben nachunten) laufen.

XEP unterstützt weitgehend komplett die im Standarddefinierten FO-Konstrukte und bietet darüber hinaus eineReihe von proprietären Merkmalen für komplexereLayouts. XEP ist Java-basiert und damit ein Multiplatt-form-Produkt mit der festen Einbindung eines eigenenPDF-Generators.

Die neuen Merkmale in XSL-FO 1.1 werden bisher nichtunterstützt. XEP bietet keine grafische Benutzungsober-fläche, ist allerdings in einige XML-Editoren als FO-For-matierer integriert.

XEP ist ein kommerzielles Produkt, für das Lizenzen aufunterschiedlichen Leistungsniveaus zu entsprechend dif-ferenzierten Preisen angeboten werden.

Ecrion XF Rendering Server von Ecrion SoftwareInc.

Ebenfalls US-amerikanischen Ursprungs ist der Ecrion XFRendering Server (www.ecrion.com). Diese kommerzielleSoftware wird ausschließlich für die Microsoft-Windows-Plattformen angeboten, ist also nicht in Java geschrieben.Mit Ausnahme der fehlenden Unterstützung für die

FO-Formatierer – Standard- plus proprietäre Merkmale

schnell + kompakt 21

Page 22: XSL-FO Praxis

Schreibrichtungen von rechts nach links und von obennach unten scheint die Unterstützung entsprechend derXSL-FO-Version 1.0 ziemlich komplett.

Eine Reihe von proprietären Erweiterungen runden dieFunktionalität ab. Die neuen Merkmale in XSL-FO 1.1werden bisher nicht unterstützt.

Neben PDF wird als Ausgabeformat XPS, das neue XML-Microsoft-Print-Format, unterstützt. Damit erweitern sichdie Ausgabe- und – wenn gewünscht – die Nachbearbei-tungsmöglichkeiten. Eine verschlankte Version des Ser-verprodukts, XF Desktop Edition genannt, bietet einegrafische Benutzer- bzw. Vorschau-Oberfläche.

Das Produkt wird den unterschiedlichen Leistungsnive-aus entsprechend zu differenzierten Preisen angeboten.

XML2PDF von Altsoft NV

Europäischen Ursprungs ist XML2PDF von Altsoft NV(www.alt-soft.com). Dieses kommerzielle Produkt basiertauf dem Microsoft .NET Framework, ist also ebenfalls andie Microsoft-Windows-Plattform gebunden. Die Konfor-mitätsliste zu XSL-FO ist beeindruckend vollständig, ein-schließlich der Unterstützung für die asiatischenSchreibrichtungen und einen Großteil der Erweiterungenin XSL-FO 1.1. Proprietäre Erweiterungen betreffen dieEinbindung von PDF sowie die PDF-Ausgaben.

Neben einer Server- sowie API-Edition gibt es eine Desk-top-Edition mit einer grafischen Benutzeroberfläche.

Das Produkt wird den unterschiedlichen Leistungsnive-aus entsprechend zu differenzierten Preisen angeboten.

2 – XSL-FO – Prozess und Software-Komponenten

22

Page 23: XSL-FO Praxis

XSL Formatter von Antenna House

Der kommerzielle XSL Formatter von Antenna House(www.antennahouse.com) kommt aus Japan. Dieses Pro-dukt ist ein Multiplattform-Produkt, das auf den Micro-soft-Windows-Plattformen programmtechnischspezifisch implementiert, ansonsten auf den meistenUnix-Plattformen als Java-basierte Software angebotenwird.

Die Unterstützung für die satzbezogenen XSL-FO-Kon-strukte der Versionen 1.0 und 1.1 ist nahezu vollständig.Eine Fülle von proprietären Erweiterungen vervollstän-digt das Produkt für komplexe Anwendungen in allenWeltsprachen.

Besonders hervorzuheben ist die Verarbeitungsmöglich-keit für sehr viele Grafikformate und die differenzierteSteuerung der PDF-Ausgabe für die spezifische Nutzungder resultierenden PDFs. Die Ausgabemöglichkeit istnicht auf PDF beschränkt. Einzelne Seiten lassen sich alsSVG-Grafiken produzieren. Eine Area Tree genannteXML-basierte Ausgabe bietet das Potenzial für weitereTransformationen und den Import in andere XML im-portierende Layout-Produkte.

Auf der Windows-Plattform wird eine ausgefeilte Benut-zeroberfläche angeboten, die insbesondere für die Style-sheet-Entwicklung und -Kontrolle gute Dienste leistet.

Das Produkt wird den unterschiedlichen Leistungsnive-aus entsprechend zu differenzierten Preisen angeboten,wobei das Preisniveau eher oberhalb der Niveaus derWettbewerberprodukte liegt.

FO-Formatierer – Standard- plus proprietäre Merkmale

schnell + kompakt 23

Page 24: XSL-FO Praxis

2.4 XSLT-Prozessoren –die Daten-Vorkäuer

Obwohl den XSLT-Prozessoren im Prozess der FO-Verar-beitung eine mitentscheidende Rolle zufällt (s. Abschnitt2.2), ist ihre Wahl unter den verschiedenen Produktange-boten eher nebensächlich. Dabei gehen wir davon aus,dass der XML-FO-Code nicht direkt erstellt wird, sondernaufgrund der Spezifikationen in einem XSL-Stylesheet, al-so die vorangehende Transformation zwingend ist. Wennaber diese XSLT-Prozessoren standardkonform arbeitenund in der Regel lizenzkostenfrei sind, dann sind eigent-lich nur die lokale Verfügbarkeit und die Einbindungs-möglichkeiten in den Gesamtprozess von Bedeutung.

Eine gute Übersicht zu XSLT-Prozessoren bietet die Seitehttp://seaotter.berkeley.edu/xml/parsers.html.

Wenn diese unterschiedlichen XSLT-Prozessoren auchgleiche Ergebnisse – den XML-FO-Code – erzeugen (soll-ten), unterscheiden sie sich doch gelegentlich in ihrenMeldungen. Beispielsweise gibt der XSLT-Prozessor vonMicrosoft, MSXML, keine Warnung aus, wenn man imStylesheet Templates spezifiziert hat, die nicht eindeutigeinem bestimmten Knoten in der Dokumentstruktur zu-zuweisen sind.

Wie FO-Formatierer können auch XSLT-Prozessorenproprietäre Erweiterungen gegenüber dem Standard ent-halten. Die Autoren vermeiden die Nutzung solche Er-weiterungen in diesem Verarbeitungszusammenhang.Dies macht die Wahl und Anwendung eines bestimmtenXSLT-Prozessors einfacher und erhöht die Portabilität derXML-Verarbeitung.

2 – XSL-FO – Prozess und Software-Komponenten

24

Page 25: XSL-FO Praxis

2.5 Stylesheet-Designer – nützlicheSpezialwerkzeuge?

XSL-FO-Stylesheets zu schreiben, erscheint Einsteigern indiese Technologie ein mühsames Geschäft. Da fällt derBlick schnell auf Produktangebote, die den Anschein er-wecken, man könne solche Stylesheets ohne Kenntnis derXSL-Syntax und performant mit Tastatur und Maus aufeiner grafischen Seitenoberfläche zeichnen, wie man diesvon Tabellen in MS-Word gewohnt ist.

Die Autoren stehen diesen Produktangeboten, die es fürdie Spezifikation von XSL-Stylesheets in wachsender Zahlgibt, mit Skepsis gegenüber. Unsere Gründe dafür:

– Von Ausnahmen einfach strukturierter Anwendungenabgesehen, lassen sich Datentransformation und Ge-staltung sowie die Verknüpfung der Daten in den kom-plexen Seitenfolgen nicht grafisch darstellen.

– Einfache Angaben, wie z.B. Seitenmaße, Ränder, Schrif-ten, Größen, lassen sich zwar mit den gewohnten Ober-flächen von Desktop-Publishing-Produkten gut undeffizient spezifizieren und visuell kontrollieren. Fürkomplexe Gestaltungen kommt jedoch irgendwann derPunkt, an dem man lieber direkt auf den Code zugrei-fen möchte. Versteht man dann die ungewohnte Syntaxnicht, wird man auch komplexe Spezifikationen nichtprofessionell bearbeiten können.

– Stylesheet-Design-Produkte sind typischerweise aufbestimmte Dokumentgestaltungen spezialisiert, bei-spielsweise Formular- oder Kataloggestaltung. Für An-wendungen, die sich nicht in solche Beschränkungen

Stylesheet-Designer – nützliche Spezialwerkzeuge?

schnell + kompakt 25

Page 26: XSL-FO Praxis

einpassen lassen, muss man auf ein anderes Editor-Werkzeug zurückgreifen.

Ja, gibt es denn überhaupt keine Editor-Unterstützung fürdie Erstellung von XSL-FO-Stylesheets?

Doch schon – und zwar eine, die auf jede Art der Doku-mentgestaltung und alle möglichen Dokumentkategorien(Flussdokumente, Kataloge, Formulare u.a.) gleicherma-ßen anwendbar ist: die Kombination eines einfachenXML-Editors mit Kenntnis der FO-Befehle und FO-Kon-strukte und einem FO-Formatierer für die schnelle undgenaue visuelle Kontrolle der Stylesheet-Spezifikationenan einem repräsentativen Beispieldokument.

In unserer praktischen Arbeit hat sich die Zusammenar-beit von XMLSpy von Altova (www.altova.com) als XML-Editor mit der grafischen Benutzeroberfläche des XSLFormatter von Antenna House (www.antenna-house.com), in der man Maße, Schriften, Schriftgrößenu.a. genau überprüfen kann, bewährt.

2 – XSL-FO – Prozess und Software-Komponenten

26

Page 27: XSL-FO Praxis

Ein XSL-FO-Stylesheet ist ein XSLT-Stylesheet.

Zum XSL-FO-Stylesheet wird es allein dadurch, dass dasZieldokument, das damit erzeugt wird, ein XML-FO-Do-kument ist – also ein ganz spezielles XML-Dokument undnicht eines mit einer beliebigen XML-Struktur. Ein XML-FO-Dokument ist ein XML-Dokument, in dem ausschließ-lich die Elemente und Attribute verwendet werden, dieim XSL-FO-Standard definiert werden und die der Be-schreibung des zu erzielenden Layouts und seiner typo-grafischen Gestaltung dienen.

Ein XSL-FO-Stylesheet ist also ein Stylesheet, in dem dieXSL-FO-Elemente und -Attribute als literale Ergebnisele-mente von Befehlen und Funktionen von XSLT und XPath„umrahmt“ werden.

3.1 Das Wurzelelement

Als wohlgeformtes XML-Dokument verfügt das XSL-FO-Stylesheet zu allererst über eine XML-Deklaration – je-

Stylesheetdesign

3.1 Das Wurzelelement 27

3.2 Der Aufbau des Stylesheets 28

3.3 Modularer Aufbau des Stylesheets 30

3.4 Attributsätze 32

3.5 Parameter und Variable 33

KAPITEL 3

schnell + kompakt 27

Page 28: XSL-FO Praxis

doch ohne DOCTYPE-Deklaration. Das Wurzelelement –und auch die Toplevel-Elemente – des XSL-FO-Style-sheets sind identisch mit denjenigen eines XSLT-Style-sheets. Allerdings muss für das XSL-FO-Stylesheetzusätzlich zum Namensraum von XSLT auch der Na-mensraum von XSL-FO angegeben werden:Listing 3.1: Wurzelelement eines XSL-FO-Stylesheets mit den benötig-ten Namensräumen

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

Bietet der verwendete XSL-FO-Prozessor proprietäre Er-weiterungen zum XSL-FO-Standard an und sollen diesebenutzt werden, dann muss auch der Namensraum desjeweiligen Prozessors deklariert werden.

3.2 Der Aufbau des Stylesheets

Im Gegensatz zu einem XSLT-Stylesheet, dessen interneOrganisation sich weitgehend den Vorlieben des Style-sheet-Designers anpassen kann, gibt es für XSL-FO-Style-sheets ein paar Einschränkungen. Diese betreffen vorallem die für die Layoutdefinition notwendigen Angabenzur Seitengestaltung, die innerhalb des Wurzelelementsfür das zu erzeugende XML-FO-Dokument stehen müs-sen. Damit kommt der ersten Template-Regel im XSL-FO-Stylesheet – nämlich derjenigen, mit der das

3 – Stylesheetdesign

28

Page 29: XSL-FO Praxis

Wurzelelement des XML-FO-Dokuments erzeugt wird –eine besondere Bedeutung zu.

In dieser ersten Template-Regel wird also das Wurzelele-ment für das XML-FO-Dokument angelegt. Als erstes Ele-ment innerhalb dieses Wurzelelements muss das Layout-Masterset (fo:layout-master-set) stehen, das dieDefinition aller benötigten Layoutvorlagen enthält. Alsnächstes innerhalb dieses Wurzelelements folgt die Be-schreibung der eigentlichen Publikation einschließlich ih-rer Inhalte als Abfolge von Publikationsteilen. Für jedesPublikationsteil muss eine eigene Seitenfolge (fo:page-sequence) vorhanden sein.

Zwei Typen von Layoutvorlagen müssen im Layout-Mas-terset festgelegt werden: nämlich Seitenvorlagen(fo:simple-page-master), die jeweils eine einzelne Layout-seite beschreiben, und ggf. Seitenfolgevorlagen(fo:page-sequence-master), die mehrere Seitenvorlagenzu einer Folge zusammenbinden. Diese Folge kann alseinzelne Vorlage adressiert werden.

Je nach Komplexität des Zielformats bzw. des zu erzeu-genden Layouts müssen für eine Publikation mehrereSeitenvorlagen, eine oder mehrere Seitenfolgevorlagenund eine umfangreiche Publikationsabfolge aus mehrerenSeitenfolgen definiert werden.Listing 3.2: Die erste XSLT-Template-Regel mit Layout-Masterset undSeitenfolgen

<xsl:template match="/"><fo:root><fo:layout-master-set><fo:simple-page-master>...</fo:simple-pagemaster>

Der Aufbau des Stylesheets

schnell + kompakt 29

Page 30: XSL-FO Praxis

<fo:simple-page-master>...</fo:simple-pagemaster>...<fo:page-sequence-master>...</fo:page-sequence-master></fo:layout-master-set><fo:page-sequence>...</fo:page-sequence><fo:page-sequence>...</fo:page-sequence><fo:page-sequence>...</fo:page-sequence></fo:root></xsl:template>

Alle weiteren Template-Regeln befassen sich ausschließ-lich mit der Umsetzung von Knoten des Quelldokumentsin die gewünschte Darstellung im Zieldokument. WeitereInformationen zu XSLT- bzw. XPath-Befehlen und Funk-tionen finden Sie beispielsweise in dem schnell + kompaktBand „XSLT“ bzw. entsprechend umfangreicheren Ab-handlungen über XSLT und XPath.

In den Kapiteln 5, 6 und 7 wird auf die konkrete Gestal-tung der literalen XML-FO-Elemente im Detail eingegan-gen.

3.3 Modularer Aufbau des Stylesheets

Stylesheets für komplexe XML-Anwendungen können ei-nen erheblichen Umfang annehmen. Gewinner ist dabeiderjenige, der sein Stylesheet sauber organisiert und kom-mentiert. Dabei ist es für die Verarbeitung unerheblich,welchem Ordnungsprinzip man folgt – ob man eher Glei-ches resp. Ähnliches zusammenfaßt oder ob man der Lo-gik der Struktur folgt. Eine Kommentierung derTemplate-Regeln bzw. die Änderungshistorie kann mitden üblichen XML-Kommentar-Tags eingefügt werden.

3 – Stylesheetdesign

30

Page 31: XSL-FO Praxis

Steht das Stylesheet jedoch in einer Anwendungsumge-bung, in der z.B. die Verantwortung für die verschiedenenTeile des Stylesheets bei unterschiedlichen Personen liegtoder in der mit häufigen Änderungen bzw. reihenspezi-fischen Anpassungen gerechnet werden muss, dann emp-fiehlt sich die Modularisierung des Stylesheets, d.h. dieAuslagerung sinnvoller Teile des Stylesheets in eine eige-ne Datei.

In das XSL-FO-Stylesheet können diese externen Dateienmit Hilfe der XSLT-Anweisungen <xsl:include> oder<xsl:import> integriert werden, die jeweils über das href-Attribut verfügen, um den Pfad zur externen Datei zubenennen.Listing 3.3: Beispiele für das Inkludieren bzw. Importieren eines Style-sheet-Fragments

<xsl:include href="fragmente/template_5.xsl"/><xsl:import href="fragmente/parameter.xsl"/>

Hinweis<xsl:import> ist mit Vorsicht einzusetzen, da die im-portierten Templates gegenüber den im Stylesheet vor-handenen Templates nachrangig behandelt werden. Beimehreren <xsl:import> wird stets der letzte höherran-gig behandelt als sein Vorgänger.

In so ein Stylesheet-Fragment auslagern sollte man z.B.alle die Template-Regeln, die gemeinsam geändert wer-den müssen. Beziehen sich die Änderungen ausschließlichauf die Eigenschaften, d.h. die Attribute von FO-Elemen-ten, dann sollte man die entsprechenden Attributgruppenin Attributsätze (siehe Abschnitt 3.4) auslagern.

Modularer Aufbau des Stylesheets

schnell + kompakt 31

Page 32: XSL-FO Praxis

Sollen die Änderungen von Personen durchgeführt wer-den können, die nicht befugt sind, das Stylesheet zu än-dern, empfiehlt sich die Auslagerung von Variablen undParametern (siehe Abschnitt 3.5).

3.4 Attributsätze

Wie wir später noch in aller Ausführlichkeit sehen wer-den, werden die gestalterischen Festlegungen für jedenAbsatz- oder auch Überschriftentyp mit einzelnen Gestal-tungsattributen beschrieben. Werden identische Gestal-tungsattribute an verschiedenen Stellen im Stylesheetbenötigt, dann empfiehlt sich die Festlegung eines ent-sprechenden Attributsatzes (mit <xsl:attribute-set>),der alle diese Attribute (<xsl:attribute>) zusammenfasstund mit einem referenzierbaren Namen versieht. Ange-sprochen werden kann dieser Attributsatz mit Hilfe diesesNamens von allen Stellen aus (xsl:use-attribute-sets).Listing 3.4: Definition eines Attributsatzes

<xsl:attribute-set name="Standardabsatz"><xsl:attribute name="font-family">Arial</xsl:attribute><xsl:attribute name="font-size">8pt</xsl:attribute><xsl:attribute name="line-height">9pt</xsl:attribute></xsl:attribute-set>

Listing 3.5: Nutzung eines Attributsatzes bei einem literalen Ergebnis-element

<xsl:template match="Absatz"><fo:block xsl:use-attribute-sets="Standardabsatz">...

3 – Stylesheetdesign

32

Page 33: XSL-FO Praxis

</fo:block></xsl:template>

Der Vorteil von Attributsätzen ist der, dass stets die kom-plette Kombination aller darin beschriebenen Attributeeinschließlich ihrer Werte genutzt wird.

Legt man die Attributsätze als externes Stylesheet-Frag-ment an, dann kann diese Datei leicht durch eine andereDatei ersetzt werden, die die Attributsätze für eine unter-schiedliche Gestaltung enthält. Das macht z.B. dann Sinn,wenn eine XML-Struktur und ein Stylesheet für die Pro-duktion verschiedener Buchreihen benutzt werden sollen.Damit hat man ein einfaches Mittel an der Hand, mit einerVerarbeitung unterschiedliche Gestaltungen ohne großenAufwand zu erzeugen.

3.5 Parameter und Variable

Es gibt jedoch Situationen und Gestaltungen, in denenman immer wieder auf einen einzelnen Wert zugreifenwill. Ist dies ein fest stehender Wert, so wird man ihn mitder XSLT-Anweisung <xsl:param> festlegen. Geht es eherum einen Wert, der nur temporär zur Verfügung stehensoll bzw. mit anderen Werten kombiniert werden soll,wird man dies eher mit <xsl:variable> tun.

Beide XSLT-Befehle haben dieselbe Syntax:Listing 3.6: Definition eines Parameters

<xsl:param name="Seitenraender">10mm 25mm 25mm 10mm</xsl:param>

Parameter und Variable

schnell + kompakt 33

Page 34: XSL-FO Praxis

Listing 3.7: Definition einer Variablen

<xsl:variable name="Anzahl_Vorkommen">...</xsl:variable>

Listing 3.8: Zwei Beispiele für die Nutzung von Parametern und Vari-ablen

<fo:simple-page-master margin="{$Seitenraender}"><xsl:value-of select="$Anzahl_Vorkommen"/>

HinweisPrinzipiell muss bei der Nutzung von Parametern undVariablen der Name einschließlich des führenden $-Zeichens in geschweiften Klammern stehen.

Nur bei der XSLT-Anweisung value-of müssen sie nichtstehen, da die geschweiften Klammern die Abkürzungvon xsl:value-of sind.

Global wirksame Parameter und Variablen werden prak-tischerweise zu Beginn des Stylesheets – noch vor derersten Template-Regel – angelegt, um sie gezielt ändernzu können.

Soll z.B. gestattet werden, die Parameterwerte zu ändern,ohne dass das Stylesheet selbst geändert werden kann,dann können die Parameterfestlegungen in ein externesStylesheet-Fragment ausgelagert werden.

3 – Stylesheetdesign

34

Page 35: XSL-FO Praxis

Bevor man mit dem Stylesheet-Schreiben beginnt, solltein aller Ruhe geplant werden, wie viele verschiedene Sei-tenvorlagen und Seitenfolgevorlagen für die gesamtePublikation benötigt werden. Natürlich kann das Style-sheet nachträglich erweitert werden, aber einfacher ist es,wenn von vornherein klar ist, was genau benötigt wirdund wie sich die Vorlagen unterscheiden.

Da der Formatierungsprozess mit XSL-FO ein vollauto-matischer ist, in den nicht eingegriffen werden kann, müs-sen auch die Seitenvorlagen so angelegt werden, dass sievollautomatisch zu befüllen sind. Ausnahmen von dieserRegel gibt es nicht. Ausnahmen in der Seitengestaltungmüssen mit einer eigenen Seitenvorlage bedacht werden– sofern sie durch eine inhaltlich-logische Struktur be-dingt sind.

Die wichtigsten Kriterien, die zu unterschiedlichen Sei-tenvorlagen führen, sind z.B.:

– Ausdehnung der Seitenränder bzw. Positionierung desSatzspiegels auf der Seite; d.h. die für Printpublikatio-

Seitenlayout

4.1 Seitenaufbau 36

4.2 Seitenvorlagen 37

4.3 Seitenfolgevorlagen 39

4.4 Seitenfolgen als Publikationsabfolge 41

KAPITEL 4

schnell + kompakt 35

Page 36: XSL-FO Praxis

nen übliche unterschiedliche Positionierung von Satz-spiegel und Pagina in linken und rechten Seiten führtzu zwei unterschiedlichen Seitenvorlagen

– Bestückung der Seitenbereiche mit feststehenden In-formationen, wie z.B. Paginierung, Kolumnentitel,Marginalien etc.; d.h. der Verzicht auf Pagina und / oderKolumnentitel auf einer Kapitelanfangsseite führt zueiner weiteren Seitenvorlage.

Gerade bei komplexen Publikationen kann es hilfreichsein, sich jede benötigte Seitenvorlage aufzumalen undmit den konkreten Maßen für Seitenränder und Seitenbe-reiche bzw. der Positionierung von Inhalten auf der Seitezu versehen.

HinweisAuch für eine Vakatseite empfiehlt es sich, eine eigeneSeitenvorlage anzulegen, da man diese in der Publika-tionsfolge gezielt einsetzen kann.

4.1 Seitenaufbau

Bei der Festlegung der konkreten Maße für die Seitenvor-lage ist Folgendes zu berücksichtigen: XSL-FO geht davonaus, dass auf ein Blatt gedruckt wird und nicht von derRolle. In unserem Fall kann man vom Format DIN A4ausgehen, das von jedem landläufigen Drucker verarbei-tet werden kann. Natürlich kann man hier auch jede an-dere Papiergröße angeben.

HinweisDieses Vorgehen schließt nicht aus, dass mit XSL-FOproduzierte Seiten z.B. mit einer Rollen-Offset-Maschi-

4 – Seitenlayout

36

Page 37: XSL-FO Praxis

ne gedruckt werden können. Man wird in diesem Falldie Papiergröße mit der definitiven (= beschnittenen)Seitengröße identisch setzen und beim Ausschießen diePDF-Seiten mit Passmarken versehen.

Im Abzugsverfahren werden festgelegt:

– die Seitengröße, indem für alle vier Seiten Maße fest-gelegt werden (margins),

– der Bereich, in den der Inhalt des zu verarbeitendenXML-Dokuments einfließen soll (fo:region-body), in-dem die Ausdehnung für die vier äußeren Seitenberei-che (regions) abgezogen wird.

Abb. 4.1: Schematische Darstellung der Seitenaufteilung

4.2 Seitenvorlagen

Das geschilderte Konzept des Seitenaufbaus führt also zurAufteilung des zu bedruckenden Blatt Papiers in

Seitenvorlagen

schnell + kompakt 37

Page 38: XSL-FO Praxis

– einen Margin-Bereich, der nicht bedruckt und ggf. weg-schnitten wird, und

– fünf Seitenbereiche (regions), die mit Informationen be-druckt werden können.

Bei den fünf bedruckbaren Bereichen gibt es nur einen, inden der Inhalt des XML-Dokuments einfließen darf:fo:region-body. Das ist der einzige Bereich, der in jederSeitenvorlage vorhanden sein muss – und das genau einMal!

Die übrigen Bereiche (fo:region-before, fo:region-end,fo:region-after, fo:region-start) werden nur dann beider Definition der Seitenvorlage einbezogen, wenn sieAuswirkungen auf das Seitenlayout haben sollen, ggf.auch ohne mit Informationen gefüllt zu sein.

Soll ein Bereich in der entsprechenden Seitenfolge derPublikation mit Inhalt bestückt werden, dann muss derBereich mit einem Namen versehen werden (Attributregion-name).Listing 4.1: Beispiel für eine Seitenvorlage mit einem Kopfbereich

<fo:simple-page-masterpage-height="29.7cm"page-width="21cm"margin="10mm 25mm 25mm 10mm"master-name="Bodyseite_links"><fo:region-bodymargin="8mm 0mm 0mm 0mm"/><fo:region-beforeregion-name="Kopfzeile-links"

4 – Seitenlayout

38

Page 39: XSL-FO Praxis

extent="24pt"/></fo:simple-page-master>

HinweisDie beim Attribut margin genannten Werte beziehensich auf die Außenseiten des jeweiligen Bereichs undsind – beginnend oben – im Uhrzeigersinn zu lesen:oben – rechts – unten – links. Wird nur ein Wert genannt,gilt er gleichermaßen für alle vier Seiten.

4.3 Seitenfolgevorlagen

Seitenfolgevorlagen werden dann benötigt, wenn ein in-haltlich bzw. logisch eingrenzbarer Teil des XML-Doku-ments, z.B. ein Kapitel, mengenmäßig mehrere Seitenumfasst und wenn dafür verschiedene Seitenvorlagenverwendet werden sollen, z.B.

– erste Seite des Kapitels als rechte Seite ohne Pagina,

– zweite und jede weitere gerade Seite als linke Seite mitPagina,

– dritte und jede weitere ungerade Seite als rechte Seitemit Pagina.

Damit verschiedene Seitenvorlagen zu einer Seitenfolge-vorlage kombiniert werden können, müssen die einzelnenSeitenvorlagen mit einem eindeutigen Namen versehensein. Dies geschieht mit dem Attribut master-name beifo:simple-page-master (siehe das Listing auf S. 38/39).

Seitenfolgevorlagen

schnell + kompakt 39

Page 40: XSL-FO Praxis

Listing 4.2: Beispiel für die Definition einer Seitenfolgevorlage

<fo:page-sequence-master master-name="Korpus"><fo:repeatable-page-master-alternatives><fo:conditional-page-master-referencemaster-reference="Bodyseite.Kap-Anfang"page-position="first"/><fo:conditional-page-master-referencemaster-reference="Bodyseite.Kap-links"page-position="rest"odd-or-even="even"/><fo:conditional-page-master-referencemaster-reference="Bodyseite.Kap-rechts"page-position="rest"odd-or-even="odd"/></fo:repeatable-page-master-alternatives></fo:page-sequence-master>

Das Listingbeispiel zeigt eine Seitenfolgevorlage, die jenach Position der Seite in der formatierten Seitenfolge eineunterschiedliche Seitenvorlage verwendet.

Der fo:page-sequence-master im Beispiel ist selbst be-nannt (siehe master-name), damit die Folgenvorlage ineiner Seitenfolge benutzt werden kann. Die in der Seiten-folgevorlage kombinierten Seitenvorlagen werden mitdem Attribut master-reference referenziert.

ProfitippEndet ein Kapitel auf einer rechten Seite, so dass eineVakatseite eingefügt werden muss, um das nächste Ka-pitel wieder auf einer rechten Seite beginnen zu lassen,so kann dies beim zugehörigen fo:block mit dem Attri-

4 – Seitenlayout

40

Page 41: XSL-FO Praxis

but page-break-before und dem Wert right erreichtwerden.

HinweisSoll nur eine Seitenvorlage zur Anwendung kommen,dann wird fo:repeatable-page-master-reference an-stelle von fo:repeatable-page-master-alternatives be-nutzt. Es muss dann auch nicht in fo:conditional-page-master-reference verzweigt werden.

4.4 Seitenfolgen alsPublikationsabfolge

Sind die Seitenvorlagen in ihrer Geometrie festgelegt undggf. kombinierte Seitenfolgevorlagen fixiert, dann ist dernächste Schritt die Positionierung von Inhalten in denVorlagen.

Dies geschieht mit Seitenfolgen. Für jeden logisch ab-grenzbaren Publikationsteil muss eine eigene Seitenfolgeangelegt werden, z.B. für Titelei, Inhaltsverzeichnis, Kor-pus, Anhang, Register. Für den Korpus einer Publikation,der aus mehreren Kapiteln – oder auch aus Stichwörterneines Lexikons – besteht, braucht in der Regel nur eineSeitenfolge angelegt werden, die mit einer Seitenfolgevor-lage verbunden ist.

Wurden für die in der Seitenfolgevorlage kombiniertenrechten und linken Seitenvorlagen jeweils ein Kopf- undein Fußbereich festgelegt, dann müssen in der Seitenfolgealle diese Seitenbereiche mit Inhalt bestückt werden. Ne-ben dem Fließtextbereich (fo:region-body), der den Inhalt

Seitenfolgen als Publikationsabfolge

schnell + kompakt 41

Page 42: XSL-FO Praxis

aus dem XML-Quelldokument aufnimmt, sind also zu be-füllen:

– Kopfbereich auf der rechten Seite (fo:region-beforeregion-name="Kopfzeile-rechts")

– Kopfbereich auf der linken Seite (fo:region-beforeregion-name="Kopfzeile-links")

– Fußbereich auf der rechten Seite (fo:region-afterregion-name="Fusszeile-rechts")

– Fußbereich auf der linken Seite (fo:region-afterregion-name="Fusszeile-links")

Die Positionierung der Inhalte erfolgt in der Publikations-folge (fo:page-sequence) mit den Befehlen:

– fo:flow flow-name="xsl-region-body" für die Positio-nierung des Fließtexts aus der XML-Instanz (der Wertdes flow-name ist hier eine feststehende Formulierung)

HinweisFür jede Publikationsfolge darf es nur einen einzigenFlow-Bereich geben.

– fo:static-content für die übrigen vier Seitenbereiche,deren Unterscheidung über den Wert des Attributsflow-name erfolgt, die frei vergeben werden können.

Listing 4.3: Beispiel für eine Publikationsfolge auf der Basis einer Sei-tenfolgevorlage mit einem Fließtextbereich und je einem Fußbereich aufden rechten und linken Seiten

<fo:page-sequence master-reference="Kapitel"><fo:static-content flow-name="Fusszeile-rechts"><fo:block text-align="right">

4 – Seitenlayout

42

Page 43: XSL-FO Praxis

<fo:page-number/></fo:block></fo:static-content><fo:static-content flow-name="Fusszeile-links"><fo:block><fo:page-number/></fo:block></fo:static-content><fo:flow flow-name="xsl-region-body"><fo:block><xsl:apply-templates select="."/></fo:block></fo:flow></fo:page-sequence>

HinweisJeder Seitenbereich muss mit einem Blockelement –hier: fo:block – begonnen werden. Legt man hier bereitsdie Angaben für die Grundschrift fest, dann werdendiese Eigenschaften auf die untergeordneten Elementevererbt. Diese Festlegung kann lokal, z.B. für Über-schriften, überschrieben werden (siehe Abschnitt 5.1).

Seitenfolgen als Publikationsabfolge

schnell + kompakt 43

Page 44: XSL-FO Praxis
Page 45: XSL-FO Praxis

In diesem Kapitel befassen wir uns mit den Grundlagender typografischen Gestaltung innerhalb der Seiten bzw.Seitenbereiche, wie sie im vorangehenden Kapitel 4 be-schrieben sind.

Ehe wir allerdings zu dem Basismaterial der FO-Gestal-tung, den Blöcken, Containern für Blöcke und dem Inline-Element kommen, müssen wir noch auf Prinzipien im FO-Konzept eingehen, die die Spezifikation der Gestaltungabkürzen, vereinfachen und in ihrer Mächtigkeit verstär-ken.

5.1 Defaults, Vererbung, Schachtelung

Es geht um drei Prinzipien:

– Defaults (Voreinstellungen) für die meisten FO-Eigen-schaften ersparen in vielen Gestaltungssituationen dieexplizite Setzung einer Eigenschaft.

Typografische Gestaltung

5.1 Defaults, Vererbung, Schachtelung 45

5.2 Das Blockelement 52

5.3 Das Inline-Element 56

5.4 Block- und Inline-Container 58

KAPITEL 5

schnell + kompakt 45

Page 46: XSL-FO Praxis

– Wo sinnvoll, vererben sich FO-Eigenschaften, die aufeiner höheren Ebene der FO-Struktur spezifiziert sind,automatisch in der Dokumenthierarchie nach unten(bis sie ggf. durch eine Spezifikation auf unterer Ebeneneu oder abweichend gesetzt werden).

– Die FO-Strukturen, das sind die Elemente mit dem Na-mensraum-Präfix fo: lassen sich – wo aus Anwen-dungssicht sinnvoll – rekursiv nutzen (verschachteln).

Defaults (Voreinstellungen)

Defaults, also bestimmte Ausprägungen von FO-Eigen-schaften, die außerhalb des Stylesheets gesetzt sind, kön-nen aus unterschiedlichen Quellen bezogen werden:

– Einmal sind es Defaults, die im XSL-Standard beschrie-ben sind und deshalb in standardkonformen FO-For-matierern fest vordefiniert sind. Ein Beispiel ist dieTextausrichtung in Blöcken. Wird diese im Stylesheetnicht spezifiziert, gilt fo:block text-align="start" (start ist in der uns vertrauten Schreibrichtung„links“). Dies führt zu einer linksbündigen und rechtsflatternden Zeilenausrichtung.

– Der Standard überlässt es bei einer Reihe von Eigen-schaften den FO-Formatierer-Produkten, diese De-faults produktspezifisch zu setzen. Dies giltbeispielsweise für die Wahl des Fonts, wenn ein Fontim Stylesheet entweder nicht bestimmt ist oder für dieVerarbeitung des Formatierers nicht verfügbar ist.

– Schließlich können FO-Formatierer-Produkte es auchden Anwendern in gewissem Umfang überlassen, be-

5 – Typografische Gestaltung

46

Page 47: XSL-FO Praxis

stimmte Defaults in Konfigurationsdateien selbst zubestimmen, die auch Festlegungen enthalten können,die mit den Mitteln des Standards in den Stylesheetsnicht spezifiziert werden können. Beispiele sind dasSeitenformat und das Ausgabeformat sowie ggf. dieVersionsfestlegung des Ausgabeformats (z.B.PDF V. 1.6).

HinweisAuf Grund der Unterschiede in der Default-Konfigura-tion von verschiedenen FO-Formatierern können alsobei gleichem Stylesheet höchst unterschiedliche Ergeb-nisse entstehen!

Kehren wir noch einmal zurück zu den im Standard ge-setzten Defaults. Die schlichte Spezifikation

<fo:block>...</fo:block>

wird durch die im Standard bestimmten Defaults zu einerausgesprochenen Monster-Satzanweisung für den For-matierer (wir ignorieren die Eigenschaften mit den none-oder auto-Werten, die sich auf das Satzergebnis nichtauswirken):Listing 5.1: Im Standard gesetzte Eigenschaften für einfache Textblö-cke

<fo:blockbackground-color="transparent"end-indent="0pt"font-size="medium"font-stretch="normal"font-style="normal"font-variant="normal"

Defaults, Vererbung, Schachtelung

schnell + kompakt 47

Page 48: XSL-FO Praxis

font-weight="normal"hyphenate="false"hyphenation-character="-"hyphenation-push-character-count="2"hyphenation-remain-character-count="2"hyphenation-ladder-count="no-limit"last-line-end-indent="0pt"linefeed-treatment="treat-as-space"line-height="normal"line-height-shift-adjustment="consider-shifts"line-stacking-strategy="line-height"margin-bottom="0pt"margin-left="0pt"margin-right="0pt"margin-top="0pt"orphans="2"padding-after="0pt"padding-before="0pt"padding-bottom="0pt"padding-end="0pt"padding-left="0pt"padding-right="0pt"padding-start="0pt"padding-top="0pt"space-after="0pt"space-before="0pt"space-end="0pt"space-start="0pt"start-indent="0pt"text-align="start"text-align-last="relative"text-altitude="use-font-metrics"text-depth="use-font-metrics"

5 – Typografische Gestaltung

48

Page 49: XSL-FO Praxis

text-indent="0pt"visibility="visible"white-space="normal"white-space-collapse="true"white-space-treatment="ignore-if-surrounding-linefeed"widows="2"wrap-option="wrap">...</fo:block>

Damit sind für die Blockgestaltung – ggf. wirkende Ver-erbungseffekte hier einmal ausgeschlossen – neben vielemanderen bestimmt:

– Font, Schriftgröße und Zeilenhöhe sind systembe-stimmt;

– Ausnutzung des vollen Satzspiegels, keine besonderenVorschübe vor oder nach dem Block;

– keine Hintergründe oder Rahmen;

– Textausrichtung linksbündig;

– keine Silbentrennung;

– Hurenkinder- und Schusterjungenkontrolle (jeweils2 Zeilen);

– Zeilenschaltungen im Blockinhalt werden als Leerzei-chen behandelt; mehrere Leerzeichen werden zu einemzusammengezogen.

Vererbung

Die Vererbung von FO-Eigenschaften ist beschränkt aufdie Nachkommenknoten, also nach unten in der Doku-

Defaults, Vererbung, Schachtelung

schnell + kompakt 49

Page 50: XSL-FO Praxis

menthierarchie. Im Standard ist bestimmt, welche Eigen-schaften sich vererben und welche nicht.

Zwar wird man auf die Vererbbarkeit einer Eigenschaftintuitiv richtig tippen, also beispielsweise für Font(font-family) oder Schriftgröße (font-size). Aber Vor-sicht! Die Randeigenschaften margin-left undmargin-right vererben sich nicht, die alternativen Rand-eigenschaften start-indent und end-indent werden ver-erbt.

In der Stylesheet-Spezifikation sollte man diese Verer-bung nutzen, um ein möglichst konsistentes Layout zuerreichen und den Spezifikationsaufwand für unterge-ordnete Knoten zu verringern.

Das folgende Beispiel macht deutlich, welche Eigenschaf-ten dafür dienen können.Listing 5.2: Beispiel für die Vererbung von Blockeigenschaften

<fo:blockfont-family="Arial"font-size="10pt"line-height="12pt"text-align="justify"hyphenate="true"language="de">...</fo:block>

Für den gegebenen Block und die darunter geordnetenFO-Elemente werden festgelegt: Font, Schriftgröße, Zei-lenhöhe, Textausrichtung und Silbentrennung nach deut-schen Regeln.

5 – Typografische Gestaltung

50

Page 51: XSL-FO Praxis

Schachtelung

Die Vererbbarkeit von FO-Eigenschaften erreicht aller-dings erst durch die Möglichkeit der beliebig tiefenSchachtelung von Block-Elementen in XSL-FO seine ge-genüber alternativen Layout-Konzepten (z.B. MS-Word)überlegene Wirkung.

Das Wurzelelement für die Dokumentinhalte ist fo:flow.Darunter sind die Dokumentinhalte in eines der in XSL-FO verfügbaren Blockelemente einzukleiden: Block(fo:block), Block-Container (fo:block-container), Liste(fo:list-block) oder Tabellen (fo:table-and-captionbzw. fo:table).

Lediglich in fo:block direkt sind Textinhalte zulässig, al-lerdings auch – neben allen oben bereits genannten Block-Elementen – eine Fülle weiterer blockbildender undinzeiliger Strukturen.

Eine mögliche Schachtelung von Blockelementen zeigtfolgendes Listing:Listing 5.3: Eine mögliche Schachtelung von Blockelementen

<fo:flow><fo:blockfont-family="Arial"font-size="10pt"line-height="12pt"><fo:block><fo:block>...<fo:block>...</fo:block>...</fo:block></fo:block><fo:list-block>...

Defaults, Vererbung, Schachtelung

schnell + kompakt 51

Page 52: XSL-FO Praxis

<fo:block>...</fo:block><fo:list-block>...</fo:list-block>...</fo:list-block><fo:table>...<fo:table-cell><fo:block>...</fo:block><fo:list-block>...</fo:list-block></fo:table-cell>...</fo:table></fo:block></fo:flow>

Die in Tabellen und Listen notwendigen Zwischenstruk-turen sind in diesem Beispiel durch ,,...“ ersetzt!

5.2 Das Blockelement

Das Blockelement fo:block, das das Rückgrat einer jedenXSL-FO-Anwendung bildet, haben wir bereits hinsicht-lich seines Schachtelungspotenzials und der Vererbungs-möglichkeiten für essentielle Gestaltungsparameter imvorangehenden Abschnitt 5.1 kennen gelernt.

Hier wollen wir auf die blockgestaltenden Eigenschaftenvon Blöcken, ihre relative Platzierung in der Seite sowieEigenschaften des Teilens beim Spalten- oder Seitenum-bruch eingehen. Aus Platzgründen müssen wir uns aufdie in der täglichen Praxis gängigen Konstrukte beschrän-ken.

5 – Typografische Gestaltung

52

Page 53: XSL-FO Praxis

Zu den blockgestaltenden Eigenschaften gehört zunächsteinmal der zu verwendende Font, den man mit der Ei-genschaft font-family bestimmt. Setzen Sie als Wert denSchriftnamen ein, wie Sie es aus anderen Textverarbei-tungssystemen gewohnt sind. Soll beispielsweise TimesNew Roman verwendet werden, spezifizieren Sie:

<fo:block font-family="Times New Roman">...</fo:block>

HinweisFür den Fall, dass der bezeichnete Font nicht verfügbarist, können nach dem Schriftnamen und einem Kommaauch weitere Fonts als Ersatz spezifiziert werden.

Schriftgröße und Zeilenhöhe werden mit font-size bzw.line-height bestimmt:

... font-size="10pt" line-height="12pt" ...

HinweisAls Maßeinheiten sind Zentimeter (cm), Millimeter (mm),Inches (in), DTP-Punkte (pt), Picas (pc, 1 pc = 12 pt),Breite eines m (em; nicht von allen Formatierern unter-stützt!) und Pixel (px; abhängig von der Auflösung desWiedergabemediums!) oder Bruchteile davon zulässig.

Damit haben Sie schon einmal die wichtigsten Parameterin Ihrem Stylesheet unter Kontrolle und vermeiden dieAnwendung ggf. abweichender Produkt-Parameter.

Wünschen Sie eine andere als die linksbündige Textaus-richtung, spezifizieren Sie diese beispielsweise für Block-satz mit:

Das Blockelement

schnell + kompakt 53

Page 54: XSL-FO Praxis

... text-align="justify" ...

Bei dieser Gestaltung werden Sie, um unschön großeWortabstände zu vermeiden, Silbentrennung wollen. Da-für müssen Sie die Silbentrennung aktivieren und dieSprache bezeichnen, nach deren Regeln getrennt werdensoll:

... hyphenate="true" language="de" ...

Für die hier bezeichnete Sprache Deutsch muss allerdingsder Formatierer auch die entsprechende Silbentrennungunterstützen!

Damit die Blöcke nicht lediglich durch die letzte, ggf. kur-ze Zeile als solche sichtbar sind, können Sie entweder dieerste Zeile (!) eines Blocks etwas einziehen oder die aufei-nander folgenden Blöcke durch einen Abstand (Vorschub)trennen. Sie können auch beides zugleich anwenden:

... text-indent="12pt" space-after="3mm" ...

HinweisBei den Eigenschaften space-before und space-afterhandelt es sich um sehr mächtige Konzepte für den Vor-schub in der gegebenen Block-Vorschub-Richtung (beiuns von oben nach unten).

Die Vorschübe können variabel mit Minimal-, Optimal-und Maximalwerten bezeichnet werden.

Bei direkt aufeinander treffenden Vorschüben –space-after für den vorangehenden Block undspace-before für den nachfolgenden Block – wird nor-

5 – Typografische Gestaltung

54

Page 55: XSL-FO Praxis

malerweise der kleinere Wert beider Spezifikationenignoriert. Es können aber auch Vorrangregeln für diesedirekt aufeinander treffenden Vorschub-Spezifikatio-nen gesetzt werden.

Wollen Sie einen Block links und rechts einrücken – aus-gehend von den Rändern, die durch die Umgebung desBlocks gegeben sind – verwenden Sie dafür start-indent bzw. end-indent:

... start-indent="6mm" end-indent="6mm" ...

HinweisMit start-indent ziehen Sie alle Zeilen eines Blocks ent-sprechend links ein, nicht allein die erste Zeile (wie mittext-indent).

Die beiden Eigenschaften vererben sich auf untergeord-nete Blöcke. Dies werden wir für verschachtelte Listennutzen (siehe Abschnitt 6.1).

ProfitippVerwenden Sie für das Einziehen links und rechtsnicht die Eigenschaften margin-left bzw. margin-right, da sie nicht vererbt werden!

Hintergründe, Innenabstände und Rahmen von Blöckenwerden in Abschnitt 6.2 behandelt.

Das Blockelement

schnell + kompakt 55

Page 56: XSL-FO Praxis

5.3 Das Inline-Element

Innerhalb von Blöcken bietet XSL-FO eine Fülle von Kon-strukten, von denen hier nur diejenigen zur inzeiligentypografischen Hervorhebung genannt werden:

– Inzeilige Hervorhebung (fo:inline). Dieses Elementwird im Folgenden hinsichtlich seiner typografischenMöglichkeiten näher betrachtet.

– Inzeilige Gestaltung eines einzelnen Zeichens(fo:character). Unterscheidet sich von fo:inline ledig-lich durch die zusätzliche Eigenschaft, mit characterein einzelnes Zeichen zur Darstellung zu bestimmen.

– Inzeiliger Container für Blockelemente(fo:inline-container). Dieses Element wird im an-schließenden Abschnitt 5.4 behandelt.

fo:inline kann wiederum verschachtelt genutzt werden.Da die meisten Eigenschaften vererbbar sind, lassen sichdadurch für Teile von Hervorhebungen Eigenschaftskom-binationen (z.B. fett innerhalb einer gesperrten Zeichen-darstellung) erreichen. Normalerweise wird man aber dieHervorhebungseigenschaften innerhalb eines fo:inline-Elements kombinieren.

Eine Kursivauszeichnung erhält man durch:

<fo:inline font-style="italic">...</fo:inline>

Die Fettdarstellung bezeichnet man mit:

... font-weight="bold" ...

5 – Typografische Gestaltung

56

Page 57: XSL-FO Praxis

Für die Kombination fett-kursiv werden die beiden vor-bezeichneten Eigenschaften kombiniert:

... font-style="italic" font-weight="bold" ...

Für die Unterstreichung sorgt der Code:

... text-decoration="underline" ...

Eine Überstreichung erhält man durch den alternativenWert overline, eine Durchstreichung durch den Wertline-through.

Die Zeichen innerhalb von Wörtern lassen sich um einenbeliebigen Wert sperren:

... letter-spacing="0.5pt" ...

Die Hochstellung braucht zwei Attribute:

... baseline-shift="super" font-size="60%" ....

Durch die zusätzliche Verringerung der Schriftgröße inRelation zu der Schriftgröße der Umgebung werden dieHochstellungen in der vorgegebenen Zeilenhöhe gehal-ten. Wenn Sie Tiefstellung benötigen, ersetzen Sie denWert super durch sub.

Wollen Sie noch mehr? Hier ist es:

... font-variant="small-caps" ...

Damit werden die Kleinbuchstaben Ihres Textes in Groß-buchstaben in der Höhe der normalen Kleinbuchstaben

Das Inline-Element

schnell + kompakt 57

Page 58: XSL-FO Praxis

transformiert. Diese nennt man Kapitälchen. Großbuch-staben bleiben unverändert.

Schließlich:

... font-stretch="condensed" ...

verringert die Laufweite aller Zeichen. Der alternativeWert expanded verbreitert die Laufweite.

HinweisDie meisten der hier beschriebenen Eigenschaften fürinzeilige Hervorhebungen lassen sich auch auf dasBlockelement fo:block anwenden!

5.4 Block- und Inline-Container

Blöcke (fo:block) werden immer in der durch die Schreib-richtung vorgegebenen Blockvorschubachse (bei uns vonoben nach unten) aneinander gereiht, ggf. mit Abständendazwischen. Sie lassen sich weder fest in der Seite positi-onieren noch in ihrer Breite und / oder Höhe dimensio-nieren. Um dies beides – wo man es braucht – zu erreichen,bietet XSL-FO das Konstrukt Block-Container(fo:block-container).

Dieser Container enthält dann in beliebiger Zahl und Mi-schung sämtliche Blockelemente einschließlich unterge-ordneter Block-Container.

Analog zu dem Konzept der Block-Container existiert dasder Inline-Container (fo:inline-container). Wie derName schon sagt, werden diese relativ zur Zeile, in der siepositioniert sind, platziert. Höhe und Breite lassen sich

5 – Typografische Gestaltung

58

Page 59: XSL-FO Praxis

auch für diese inzeiligen Container festlegen. Und – wasdas Schönste ist – sie lassen wiederum das gesamte Spekt-rum der Blockelemente einschließlich untergeordneterBlock-Container als Unterstrukturen zu.

Wozu braucht man Block-Container? Insbesondere fürkomplex gestaltete Anzeigen, Umschläge, Titelblätteroder Formulare.

Wozu braucht man Inline-Container? Zum Beispiel fürEinträge in Wörterbüchern mit komplexen über- oder un-tergeordneten Akzentuierungen oder Werkausgaben, indenen mehrere Manuskriptfassungen in einer Textzeilevertikal synchronisiert dargestellt werden sollen.

Block-Container

Für die Anwendung von Block-Containern sind folgendeAspekte zu berücksichtigen:

– die absolute Positionierung in der Seite bzw. den Sei-tenbereichen, in denen ein Block-Container zur Forma-tierung aufgerufen wird,

– die Platzierungskoordinaten innerhalb der Seite bzw.des Seitenbereichs,

– Höhe und / oder Breite des Block-Containers,

– im Falle der Überlagerung von Block-Containern ihreStapelungsebene (wer ist im Vordergrund, wer im Hin-tergrund).

Die absolute Positionierung eines Block-Containers wirdmit dem Attribut absolute-position bestimmt.

Block- und Inline-Container

schnell + kompakt 59

Page 60: XSL-FO Praxis

Mit dem Default auto fließt der Container im Textfluss wiedie anderen Blockelemente. Er dient lediglich als Hülle fürdie untergeordneten Blockelemente.

Mit dem Wert absolute wird der Container in dem gege-benen Seitenbereich fest positioniert. Wenn keine Platzie-rungskoordinaten angegeben werden, wird der Containerin der oberen linken Ecke des Seitenbereichs positioniert.

Mit dem Wert fixed wird der Container in der Seite ohneBerücksichtigung der Seitenbereiche fest positioniert.

Für die Platzierung auf der Seite bzw. in dem gegebenenSeitenbereich dienen die Attribute top, bottom, left undright.

Die Höhen- und Breitenausdehnung des Containers lässtsich mit den Attributen height und width bestimmen.Wird die Breite nicht festgelegt, dann gilt die Breite desgegebenen Seitenbereichs bzw. der Seite. Ist der Containerin seiner Ausdehnung fixiert, lässt sich für den Fall desInhaltsüberflusses das Attribut overflow anwenden, des-sen Wert entscheidet, was mit dem überschießenden In-halt geschehen soll.

Mit dem Attribut z-index lässt sich für einander überla-gernde Container die Stapelungsebene festlegen (der Con-tainer mit dem höheren Indexwert liegt über dem miteinem niedrigeren Wert). Wenn durch Hintergrundeigen-schaften nichts Abweichendes bestimmt ist, sind die über-einander gestapelten Container transparent, d.h. mankann die Inhalte des untergeordneten Containers sehen,wenn sie nicht durch Inhalte des übergeordneten verdecktwerden.

5 – Typografische Gestaltung

60

Page 61: XSL-FO Praxis

ProfitippMehrspaltige Layouts sind zweifellos nicht die Stärkevon XSL-FO, weil lediglich für eine gesamte Seitenfolgeanwendbar (siehe Abschnitt 6.2). Innerhalb von Block-Containern kann bei Anwendung des FO-Formatierersvon Antenna House die Mehrspaltigkeit für den gege-benen Block-Container unabhängig von der Spaltigkeitder Seite hergestellt werden (mit dem proprietären At-tribut axf:column-count).

Inline-Container

Für die Demonstration des Inline-Container-Konzeptssoll folgendes Beispiel genügen:Listing 5.4: Inline-Container mit zwei Blöcken

<fo:block>...<fo:inline-container alignment-baseline="middle"><fo:block text-align="center">Kopflinie</fo:block><fo:block text-align="center">header</fo:block></fo:inline-container></fo:block>

Für die vertikale Ausrichtung des Inline-Containers istmit dem Attributwert middle bestimmt, dass er sich aufder halben Höhe eines x-Zeichens des gegebenen Fontsund der gegebenen Schriftgröße ausrichten soll. Inhaltsind zwei Blöcke, deren Inhalte horizontal mittig zentriertausgerichtet werden sollen. Der Block mit dem breiterlaufenden Inhalt bestimmt die Breite des Inline-Contai-ners.

Block- und Inline-Container

schnell + kompakt 61

Page 62: XSL-FO Praxis
Page 63: XSL-FO Praxis

Mit den Blockelementen, den Containern und dem Inline-Element sind die wichtigsten Formatierungen eines Do-kuments bereits erklärt und die Dokumente sehen schonweitgehend korrekt aus. In vielen Publikationen gibt esjedoch weitere Layout-Situationen, die häufig benutztwerden.

6.1 Aufzählungen

Für Aufzählungen gibt es in XSL-FO ein eigenes Forma-tierungskonzept, das bei gezählten und ungezählten Lis-ten identisch angewendet wird. Das Konzept setzt imPrinzip auf ein zweispaltiges Layout – eine Spalte für dasAufzählungszeichen und eine Spalte für den Inhalt desAufzählungselements.

Den äußeren Rahmen für das Konstrukt bildet das Block-element fo:list-block, das die Aufzählung komplett um-schließt. Für jedes einzelne Listenelement muss in dernächsten Schachtelungsebene ein fo:list-item vorhan-

Besondere Layout-Situationen

6.1 Aufzählungen 63

6.2 Kästen 65

6.3 Grafiken 68

6.4 Tabellen 71

6.5 Fußnoten 77

KAPITEL 6

schnell + kompakt 63

Page 64: XSL-FO Praxis

den sein, das seinerseits in fo:list-item-label für dasAufzählungszeichen und in fo:list-item-body für denInhalt unterteilt ist.

Die letzte Ebene, bevor der eigentliche Inhalt eingefügtwird, sind – wie schon bei den Seitenbereichen – ein odermehrere Blockelemente, im einfachsten Fall fo:block, an-sonsten aber auch in beliebiger Zahl und Mischungfo:table, fo:block-container oder auch fo:list-block.Listing 6.1: FO-Konstrukt für eine ungezählte Aufzählung

<fo:list-blockprovisional-distance-between-starts="12pt"><fo:list-item><fo:list-item-label><fo:block>&#x2022;</fo:block></fo:list-item-label><fo:list-item-body start-indent="body-start()"><fo:block><xsl:apply-templates/></fo:block></fo:list-item-body></fo:list-item>...</fo:list-block>

Der Wert, der beim Attribut provisional-distance-between-starts angegeben ist, bezeichnet den Abstand,auf den sich die Funktion body-start() bei fo:list-item-body bezieht. Vergrößert man diesen Wert, dannschiebt sich die Linie, an der der Aufzählungstext ausge-richtet wird, nach rechts.

6 – Besondere Layout-Situationen

64

Page 65: XSL-FO Praxis

Gezählte Listen

Die Unicode-Zeichenreferenz &#x2022; im Beispiel stehtfür einen dicken Punkt als Aufzählungszeichen. SolltenSie statt eines festen Zeichens eine Nummerierung benö-tigen, dann benutzen Sie an Stelle der Zeichenreferenz denXSLT-Befehl xsl:number.

Geschachtelte Listen

Aufzählungen können auch geschachtelt vorkommen –beliebig viele Ebenen tief, bis zur Grenze der Darstellbar-keit. Dabei muss das FO-Element fo:list-block für dietieferen Ebenen jeweils innerhalb von fo:list-item-bodyzu stehen kommen.

HinweisSind Aufzählungen in der XML-Struktur rekursiv ver-wendet, d.h. Aufzählungen sind gleich strukturiert inbeliebigen Ebenen zulässig, genügt für die Aufzählun-gen in allen Ebenen eine einzige Template-Regel. Pro-bieren Sie es aus!

6.2 Kästen

Kästen sind in Ratgebern und Fachinformationen beliebteGestaltungsmittel, deren konkrete Eigenschaften so viel-fältig sind wie die Layoutmöglichkeiten. Deshalb werdenwir uns hier auf einige wenige Beispiele beschränken.

Die Gestaltung von Kästen mit XSL-FO ist im Prinzip nureine Variante des Einsatzes von Blockelementen mit zu-sätzlichen Eigenschaften. So wird z.B. ein grau hinterleg-

Kästen

schnell + kompakt 65

Page 66: XSL-FO Praxis

ter Kasten, der exakt so breit sein soll wie der Satzspiegelund dessen Text rundherum um 1mm eingezogen seinsoll, über folgende Attribute erreicht:

– background-color für die Hintergrundfarbe, hier mitdem Wert gray (zu den Farben siehe Kapitel 8),

– padding ergänzt den vorhandenen Block nach außen –dehnt also den Hintergrund um den angegebenen Wertnach außen,

– start-indent und end-indent ziehen den gesamtenBlock links und rechts um den angegebenen Wert ein,so dass nun der Hintergrundblock tatsächlich satzspie-gelbreit ist und der enthaltene Text eingezogen.

Listing 6.2: Kasten mit grauer satzspiegelbreiter Hinterlegung und ein-gezogenem Text

<fo:blockbackground-color="gray"padding="1mm"start-indent="1mm"end-indent="1mm"><fo:block><xsl:apply-templates/></fo:block></fo:block>

HinweisUm einen Hintergrund zu gestalten, ist neben den Far-ben auch die Nutzung von Bildern möglich – einschließ-lich des aus HTML bekannten Kachelprinzips. Außer-dem kann der Hintergrund mit den Attributen

6 – Besondere Layout-Situationen

66

Page 67: XSL-FO Praxis

background-position-horizontal und background-position-vertical relativ zum Bild verschoben werden.

Um einen Kasten mit einem Rahmen zu versehen, der au-ßerhalb des Satzspiegels verläuft und dafür den Textblockgenau im Satzspiegel hält, sind folgende Attribute not-wendig:

– border erweitert – ebenso wie padding – den aktuellenBlock nach außen,

– padding für den Abstand zwischen dem Text und derLinie.

Listing 6.3: Kasten mit Rahmen außerhalb des Satzspiegels

<fo:blockborder="1pt solid gray"padding="1mm"><fo:block><xsl:apply-templates/></fo:block></fo:block>

Die Werte bei border und padding addieren sich dabei. Dader Text (nicht der Rahmen außen herum!) satzspiegel-breit stehen soll, sind start-indent und end-indent hiernicht notwendig.

HinweisDas Attribut border bei fo:block ist ein so genanntesSammelattribut, in dem – getrennt durch Leerschritte –die Werte für mehrere Einzelattribute stehen können: inunserem Fall für border-width, border-style undborder-color. Diese drei Attribute sind ihrerseits eben-

Kästen

schnell + kompakt 67

Page 68: XSL-FO Praxis

falls Sammelattribute, die noch in Attribute für die vierSeiten des aktuellen Blocks aufgeteilt werden können:z.B. border-top-width, border-right-width, border-bot-tom-width und border-left-width, falls dies benötigtwird. Ansonsten gelten die Sammelattribute für alle vierSeiten gleichermaßen.

ProfitippGelegentlich werden mehrspaltige Grundlayouts ver-wendet. Die Mehrspaltigkeit ist eine Eigenschaft vonfo:region-body und somit bereits in der Seitenvorlageangelegt.

Wenn ein Kasten die Spalten überspannen – also satz-spiegelbreit sein – soll, dann wird dies mit dem Attributspan und seinem Wert all erreicht.

XSL-FO bietet jedoch keine Möglichkeit, z.B. zwei vondrei Spalten zu überspannen!

6.3 Grafiken

Welche Grafikformate eingebunden werden können, isteine Frage des XSL-FO-Formatierers (siehe Abschnitt2.3). Wie sie eingebunden und wie sie gestaltet werden, istfür alle Grafikformate identisch.

Freigestellte Grafiken

Der eigentliche FO-Befehl für die Einbindung von Gra-fikdateien (fo:external-graphic) braucht ein übergeord-netes Element – in der Regel wird das fo:block sein, dem

6 – Besondere Layout-Situationen

68

Page 69: XSL-FO Praxis

die grundsätzliche Ausrichtung bzw. Positionierung derGrafik mitgegeben werden kann.

Die wichtigsten Formatierungsmöglichkeiten für freige-stellte Grafiken sind die Sammelattribute background,padding und border (siehe die Beispiele in Abschnitt 6.2),für die Abstände zu den vorherigen und nachfolgen Ob-jekten space-before und space-after und für die Angabeder Höhe bzw. Breite die Attribute content-height undcontent-width.Listing 6.4: Template-Regel für eine freigestellte Grafik mit Rahmenund einer festen Breite gefolgt von einer Bildlegende

<xsl:template match="bild"><fo:blocktext-align="center"space-before="6pt"space-after="6pt"><fo:external-graphicborder="1pt solid black"src="{grafik/@dateiref}"content-width="60mm"padding="3pt"/><fo:block>Abb. <xsl:number count="bild" level="any"/>:<xsl:apply-templates select="legende"/></fo:block></fo:block></xsl:template>

Im Beispiel wird vorausgesetzt, dass die Grafik (grafik)ein Kindelement von bild ist. Der Dateipfad für die Grafiksteht in dem Attribut dateiref. Gezählt werden mitxsl:number die Bilder, egal in welcher Ebene der XML-

Grafiken

schnell + kompakt 69

Page 70: XSL-FO Praxis

Struktur sie auftreten. Sollte in der XML-Quelldatei auchdie Breite der Grafik angegeben sein, müsste sie analogangesprochen werden.

HinweisSollen die Bildmaße generell im Maßstab verändertwerden, so kann dieser Wert hier mit einfließen, z.B.content-width="{@breite} * 0.7".

ProfitippSetzt man bei dem Blockelement, das den Grafikaufrufund die Bildlegende umschließt, das Attribut keep-together.within-page auf den Wert always, dann wer-den Bild und Bildlegende beim Seitenumbruch nichtgetrennt.

ProfitippGibt man sowohl bei content-height als auch beicontent-width einen festen Wert an, wird der FO-For-matierer versuchen, dem gerecht zu werden – und ggf.das Bild verzerrt wiedergeben. Zwar kann man über dasAttribut scaling festlegen, ob verzerrt wird, aber einfa-cher hat man es, wenn man nur eines der beiden Maßeangibt.

Inzeilige Grafiken

Grafiken können auch als inzeilige Elemente positioniertund gestaltet werden. Zu diesem Zweck müssen sie in-nerhalb entsprechender Inline-Elemente stehen, wie z.B.fo:inline (siehe Abschnitt 5.3), fo:basic-link (siehe Ab-schnitt 7.1) oder fo:marker (siehe Abschnitt 7.3).

6 – Besondere Layout-Situationen

70

Page 71: XSL-FO Praxis

HinweisDa sich die Höhe von inzeiligen Grafiken auf die Zei-lenhöhe auswirkt, sollte hier mit einer festen Höhe(content-height) gearbeitet werden, die der Zeilenhöheentspricht.

6.4 Tabellen

Tabellen dienen im ursprünglichen Sinn der übersichtli-chen Darbietung gleich gearteter, kleinteiliger Informati-onen. In populären Publikationen – insbesondere inZeitschriften – finden sich oftmals vielfältig gestaltete Ta-bellen, die unterschiedlichste Informationsarten beinhal-ten.

Da mit XSL-FO voll automatisiert – also ohne manuelleEingriffe – komplexe Layouts generiert werden, kann die-se Gestaltungsvielfalt nur unter hohem Aufwand bewahrtwerden. Je nach den Erfordernissen der Publikation soll-ten ein oder mehrere Tabellentypen festgelegt werden, aufdie man sich beschränkt. Die Information, nach welchemTabellentyp eine Tabelle formatiert werden soll, muss na-türlich aus dem XML-Quelldokument kommen.

Das Tabellenkonzept von XSL-FO ähnelt in seiner Logikund Stringenz dem HTML-Tabellenmodell. Ausgehendvon fo:table werden ein Tabellenkorpus (fo:table-body)und optional ein Tabellenkopf (fo:table-header) bzw. einTabellenfuß (fo:table-footer) festgelegt. Tabellenkopfund Tabellenfuß kommen dabei vor dem Tabellenkorpuszu stehen, damit beide Strukturen bei mehrseitigen Ta-bellen besser greifbar sind. Beide Tabellenbereiche wer-

Tabellen

schnell + kompakt 71

Page 72: XSL-FO Praxis

den nämlich standardmäßig bei Seitenumbrüchenautomatisch wiederholt.

Innerhalb aller drei Tabellenbereiche kann entweder mitTabellenzeilen (fo:table-row) oder gleich mit Tabellen-zellen (fo:table-cell) weitergearbeitet werden. Soll ohneTabellenzeile direkt mit Tabellenzellen gearbeitet werden,so ist es erforderlich, dass die erste Zelle einer Zeile mitdem Attribut starts-row="true" ausgestattet wird unddie jeweils letzte Zelle mit ends-row="true".

HinweisEs gibt außerdem das FO-Element fo:table-and-caption, das neben einer Tabelle (fo:table) aucheine optionale Tabellenbeschriftung (fo:table-caption) enthält. Wenn also Tabellen eine Tabellenbe-schriftung haben (können), dann ist das Wurzelelementfür Tabellen fo:table-and-caption!

HinweisAuf FO-Tabellen (fo:table) lassen sich zwei prinzipielleTabellen-Layouts anwenden, die mit dem Attributtable-layout="auto" (dies ist der Default) odertable-layout="fixed" festgelegt werden. Mit dem erst-genannten Wert werden die Spaltenbreiten ähnlich wiein HTML-Browsern unter Berücksichtigung der Zellen-inhalte automatisch bestimmt. Mit dem Wert fixed be-stimmen die Angaben für Tabellenbreite und Spalten-breiten die Tabellengestaltung, nicht die Zelleninhalte.

Darüber hinaus können für die Spalten (fo:table-column) gesondert Eigenschaften definiert werden, wiez.B. Spaltenbreite (column-width) und die Liniengestal-

6 – Besondere Layout-Situationen

72

Page 73: XSL-FO Praxis

tung mit dem Sammelattribut border. Eine Zählung derTabellenspalten muss nicht angegeben werden, da sie sichaus der Reihenfolge der Spaltendefinitionen ergibt.

HinweisGibt man die Spaltenbreite bei fo:table-column mit re-lativen Werten an, die sich insgesamt zu 100% addieren,dann wird die Tabelle stets auf die volle Satzspiegel-breite gesetzt.

Egal ob im XML-Quelldokument bereits ein Tabellenmo-dell vorhanden ist oder ob aus einer semantischen Tabelleeine gestaltete Tabelle werden soll, der Umsetzungspro-zess wird sich immer über mehrere Template-Regeln er-strecken, die die endgültige Tabelle wie ein Mosaikzusammensetzen.Listing 6.5: Das zusammengesetzte Tabellenmodell von XSL-FO

<fo:table><fo:table-column column-width="30%"/><fo:table-column column-width="70%"/><fo:table-header><fo:table-row><fo:table-cell>...</fo:table-cell><fo:table-cell>...</fo:table-cell></fo:tabel-row></fo:table-header><fo:table-footer><fo:table-row><fo:table-cell>...</fo:table-cell><fo:table-cell>...</fo:table-cell></fo:tabel-row></fo:table-footer><fo:table-body>

Tabellen

schnell + kompakt 73

Page 74: XSL-FO Praxis

<fo:table-row><fo:table-cell>...</fo:table-cell><fo:table-cell>...</fo:table-cell></fo:tabel-row><fo:table-row><fo:table-cell>...</fo:table-cell><fo:table-cell>...</fo:table-cell></fo:tabel-row></fo:table-body></fo:table>

Für alle diese FO-Elemente ist eine Vielzahl von Attribu-ten zugelassen – auch die Sammelattribute background,border und padding, mit denen höchst unterschiedlicheGestaltungen geschaffen werden können. Bei der Ver-wendung innerhalb einer Tabellenzelle richtet sich derWert von padding allerdings nach innen – und nicht nachaußen wie sonst.

HinweisDie vertikale Ausrichtung kann mit dem Attributdisplay-align an die Tabellenzelle gebunden werden,während die horizontale Ausrichtung an das Blockele-ment gebunden wird, das zwingend in jeder FO-Tabel-lenzelle vorhanden sein muss.

Besonders hingewiesen sei noch auf die Möglichkeit desÜberspannens von Spalten, das mit dem Attributnumber-columns-spanned bei fo:table-column undfo:table-cell eingesetzt werden kann, und des Über-spannens von Zeilen mit dem Attribut number-rows-spanned bei fo:table-cell, die auf die entsprechendenKonstrukte von HTML und CALS rekurrieren.

6 – Besondere Layout-Situationen

74

Page 75: XSL-FO Praxis

Listing 6.6: Tabelle mit zwei Spalten und vier Tabellenzeilen: mit Über-spannen beider Spalten (Zeile 1), mit einer Zelle je Spalte (Zeile 2) undmit Überspannen von zwei Zeilen in der ersten Spalte (Zeilen 3 und 4)

<fo:table border="1pt solid black"><fo:table-column border-right="1pt solid black"/><fo:table-column /><fo:table-body><fo:table-row border-bottom="1pt solid black"><fo:table-cell number-columns-spanned="2"><fo:block>...</fo:block></fo:table-cell></table-row><fo:table-row border-bottom="1pt solid black"><fo:table-cell><fo:block>...</fo:block></fo:table-cell><fo:table-cell><fo:block>...</fo:block></fo:table-cell></table-row><fo:table-row border-bottom="1pt solid black"><fo:table-cell number-rows-spanned="2"><fo:block>...</fo:block></fo:table-cell><fo:table-cell><fo:block>...</fo:block></fo:table-cell></table-row><fo:table-row><fo:table-cell><fo:block>...</fo:block></fo:table-cell></table-row>

Tabellen

schnell + kompakt 75

Page 76: XSL-FO Praxis

</fo:table-body></fo:table>

Damit das komplette Tabellengitter mit einer Linie verse-hen wird, müssen die verschiedenen Tabellenbereichemosaikartig mit den entsprechenden Angaben versehenwerden. Begonnen wird mit dem Sammelattribut borderbei fo:table, das einen Rahmen um die Tabelle zieht.Dann folgt die erste Tabellenspalte mit border-right, dasdie erste Spalte auf der rechten Seite mit einer Linie ver-sieht. Danach kommen die erste, zweite und dritte Tabel-lenzeile mit border-bottom, was jeweils dem unteren Randjeder Zeile eine Linie hinzufügt.

Abb. 6.1: Tabellengitter des Beispiels auf den vorstehenden Seiten

HinweisEin komplexeres Beispiel einer Tabelle, die mit XSL-FOgestaltet wurde, finden Sie im Anhang „Kurzrefe-renz“ .

ProfitippTabellen können auch ineinander geschachtelt sein. ImFall von XSL-FO muss die „innere“ Tabelle in einer Ta-bellenzelle zu stehen kommen. Damit ist eine beliebige

6 – Besondere Layout-Situationen

76

Page 77: XSL-FO Praxis

Schachtelung bis zu den Grenzen der Darstellbarkeitmöglich.

ProfitippBei einem Seitenumbruch innerhalb der Tabelle werdenalle Tabellenköpfe und Tabellenfüße – auch die der ge-schachtelten Tabellen! – wiederholt, es sei denn, Siewürden dies durch table-omit-header-at-break bzw.table-omit-footer-at-break mit dem Wert true info:table ausschließen.

6.5 Fußnoten

Das Fußnotenkonzept von XSL-FO hat eine wunderbareinfache und logische Struktur. An derselben Stelle, an derim XML-Quelldokument ausschließlich der Fußnotenin-halt gespeichert ist, wird nun innerhalb des Konstruktsfo:footnote sowohl das Fußnotenzeichen als auch diekonkrete Gestaltung der Fußnote samt Inhalt abgelegt.

Gestaltung von Fußnotenzeichen und Fußnote

Das Fußnotenzeichen, das ja später innerhalb der Zeilepositioniert werden soll, wird mit Hilfe des Inline-Ele-ments und seiner Attribute baseline-shift undfont-size und ggf. weiterer Gestaltungsattribute forma-tiert.

Parallel dazu wird – ebenso innerhalb von fo:footnote –die Fußnote selbst formatiert. Dabei wird auf das Aufzäh-lungskonzept (siehe Abschnitt 6.1) von XSL-FO zugegrif-

Fußnoten

schnell + kompakt 77

Page 78: XSL-FO Praxis

fen, sofern die Fußnotenziffer am linken Rand freigestelltund der Fußnotentext darunter eingezogen sein soll.

Die typografischen Eigenschaften, wie z.B. die Schriftgrö-ße, werden beim Blockelement innerhalb von fo:list-item-label bzw. fo:list-item-body festgelegt.Listing 6.7: Gestaltung einer Fußnote einschließlich der Fußnotenzifferim Text

<fo:footnote><fo:inline baseline-shift="super" font-size="60%"><xsl:number count="fussnote" level="any"/></fo:inline><fo:footnote-body><fo:list-block>... wie Aufzählung ...</fo:list-block></fo:footnote-body></fo:footnote>

Fußnotenlinien

Typischerweise werden die Fußnoten am Fuß der Seitedurch eine Fußnotenlinie vom Fließtext getrennt.

Dies erreicht man, indem man für die Seitenfolge(fo:page-sequence), in der sich die Fußnoten befindenkönnen, einen zusätzlichen statischen Inhalt (fo:static-content) mit dem standardisierten Flussnamen (flow-name="xsl-footnote-separator") spezifiziert. In diesemfo:static-content wird die Trennlinie zwischen demFließtext und dem Fußnotenbereich definiert.

6 – Besondere Layout-Situationen

78

Page 79: XSL-FO Praxis

Listing 6.8: Definition der Fußnotenlinie

<fo:static-content flow-name="xsl-footnote-separator"><fo:block><fo:leaderleader-length="20mm"rule-thickness="0.5pt"leader-pattern="rule"/></fo:block></fo:static-content>

Für die Fußnotenlinie selbst wird hier das FO-Konstruktfo:leader benutzt, das auch im normalen Textfluss alsFührungslinie mit variabler oder fester Länge eingesetztwerden kann.

Fußnoten

schnell + kompakt 79

Page 80: XSL-FO Praxis
Page 81: XSL-FO Praxis

Mit den bisher behandelten Themen können wir die In-halte einer Dokumentation oder Publikation gefällig ge-stalten. Es fehlen noch die Konstrukte zur Verlinkung derDokumentinhalte bzw. der Dokumentinhalte zu externenInformationen und die Mittel zur Orientierung, dies sindtraditionell Seitenzahlen (Pagina) und lebende Kolum-nentitel. Dazu mehr im Folgenden.

7.1 Verlinkung

In einer gedruckten Publikation spielen aktive Links keineRolle. Soll aber z.B. ein E-Book im PDF-Format entstehen,dann wird die Linkfunktionalität sehr wohl gebraucht.Der entsprechende Befehl heißt fo:basic-link und kannvielfältigst gestaltet werden, u.a. mit den Sammelattribu-ten background, border und padding.

Verlinkung, Orientierung

7.1 Verlinkung 81

7.2 Paginierung 84

7.3 Kolumnentitel 86

KAPITEL 7

schnell + kompakt 81

Page 82: XSL-FO Praxis

Externe Links

Handelt es sich bei dem Verweis um einen externen Link– also typischerweise ins WWW oder auf eine andere Da-tei – dann muss als Attribut für die Bezeichnung desSprungziels external-destination verwendet werden.Der Attributwert beinhaltet die komplette URI.Listing 7.1: Externer Link mit der WWW-typischen Gestaltung

<fo:inlinecolor="blue"text-decoration="underline"><fo:basic-linkexternal-destination="http://www.entwickler.com">entwickler-press</fo:basic-link></fo:inline>

Interne Links

Interne Links – also Links, die auf andere Teile derselbenPublikation verweisen – werden mit dem Attributinternal-destination versehen.

Damit ein interner Link auch wirklich funktioniert, müs-sen im XML-Quelldokument zwei Informationsarten ge-geben sein:

– Am Verweisziel muss eine ID vorhanden sein, die alsSprungziel benutzt wird, z.B. <kapitel name="Kap1">.

– An der Verweisquelle muss beim Linkelement ein At-tribut vorhanden sein, das das Verweisziel benennt,z.B. <verweis ziel="Kap1">.

7 – Verlinkung, Orientierung

82

Page 83: XSL-FO Praxis

Dementsprechend muss es auch im XML-FO-Dokumentdiese beiden aufeinander bezogenen Informationen ge-ben, sonst funktioniert der Link nicht.

Ist sichergestellt, dass für jedes ziel auch ein name im Da-tenbestand vorhanden ist, dann sieht die Template-Regelfür das Verweiselement folgendermaßen aus:Listing 7.2: Interner Link

<xsl:template match="verweis"><xsl:for-each select="//kapitel[@name=current()/@ziel]"><fo:inline color="blue"><fo:basic-link internal-destination="{generate-id()}">siehe Kapitel <xsl:number count="kapitel"/></fo:basic-link></fo:inline></xsl:for-each></xsl:template>

Im Beispiel wird mit dem XSLT-Befehl xsl:for-each fürjeden Knoten in der Knotenmenge von <verweis> der zu-gehörige Zielknoten selektiert, indem der Wert des aktu-ellen Attributknotens in der Knotenmenge desVerweisziels gesucht wird.

Sodann wird mit Hilfe der XSLT-Funktion generate-id() an der Verweisquelle die ID platziert, die mit Hilfederselben Funktion dort generiert wurde:Listing 7.3: Generieren einer ID beim Verweisziel

<xsl:template match="kapitel"><fo:block id="{generate-id()}"><xsl:apply-templates/>

Verlinkung

schnell + kompakt 83

Page 84: XSL-FO Praxis

</fo:block></xsl:template>

HinweisDas Attribut id kann bei allen wichtigen FO-Elementenplatziert werden, u.a. bei Publikationsfolgen und allenBlockelementen, bei Aufzählungen und Tabellen auchin jeder Ebene des Konstrukts, bei Abbildungen, demInline-Element und der Paginierung.

7.2 Paginierung

Da die Nummerierung von Knoten, wie z.B. Kapiteln oderAbbildungen, bereits vom XSLT-Prozessor geleistet wird,so dass diese Informationen nur noch als Text dargestelltwerden müssen, gibt es in XSL-FO an Nummerierungennur noch die Zählung der generierten Seiten und derenReferenzierung zu leisten.

Die eigentliche Zählung ist denkbar einfach mit dem FO-Element fo:page-number als leerem Element. Platziertwird es in der Regel in einem der Seitenbereiche oben oderunten. Mit dem Attribut format kann die Art der Zählungfestgelegt werden. Im folgenden Beispiel wird römischgezählt. Für die arabische Zählung kann das Attributformat einfach entfallen, da dies die Voreinstellung ist.Listing 7.4: Paginierung im Kopfbereich einer rechten Seite

<fo:static-content flow-name="Kopfzeile-rechts"><fo:block text-align="center"><fo:page-number format="I"/>

7 – Verlinkung, Orientierung

84

Page 85: XSL-FO Praxis

</fo:block></fo:static-content>

Beginn der Zählung

Die Paginierung zählt prinzipiell von der ersten bis zurletzten Seite einer Publikation durch. Dargestellt werdendie Seitenzahlen nur dort, wo sie in einem Seitenbereichplatziert sind.

Soll die Paginierung z.B. mit dem Korpus neu beginnen,dann muss in der entsprechenden Seitenfolge das Attributinitial-page-number mit dem Wert 1 gesetzt werden.Listing 7.5: Festlegung der Seitenzählung bei einer Publikationsfolge

<fo:page-sequencemaster-name="Korpus"initial-page-number="1">...</fo:page-sequence>

Seitenreferenzierung

Auf die soeben generierte Seitenzählung wird vor allemin Inhaltsverzeichnissen und bei Seitenverweisen Bezuggenommen. Für die Referenzierung von Seiten steht dasFO-Element fo:page-number-citation zur Verfügung. Mitdem Attribut format kann die Art der Zählung festgelegtwerden. Die Stelle, die referenziert werden soll, muss alsID im Datenbestand vorhanden sein und in das das Objektkonstituierende Blockelement übernommen sein:

Paginierung

schnell + kompakt 85

Page 86: XSL-FO Praxis

Listing 7.6: Übernahme einer Kapitel-ID in den Block, der das Kapitelkonstituiert

<fo:block id="Kap1">...</fo:block>

Bei fo:page-number-citation wird mit dem Attributref-id auf den Block mit der entsprechenden id Bezuggenommen:Listing 7.7: Referenzierung einer Seite in einem Seitenverweis

<fo:block> ... (siehe Seite<fo:page-number-citation ref-id="Kap1"/>)...</fo:block>

7.3 Kolumnentitel

Kolumnentitel dienen in einer Publikation der Orientie-rung. Sie können verschiedene Formen annehmen. Amhäufigsten sind jedoch lebende Kolumnentitel, die z.B. beieinem Lexikon entsprechend der auf den Seiten enthalte-nen Stichwörter oder bei einer hierarchisch organisiertenPublikation entsprechend der jeweiligen hierarchischenEbenen wechseln.

In XSL-FO steht dafür ein eigenes Konzept zur Verfügung,das in zwei Schritten funktioniert:

– Formulierung des als Kolumnentitel zu verwendendenInhalts bei dem Knoten, auf den sich der Kolumnentitelbezieht, mit fo:marker und Festlegung eines eindeuti-gen Namens dafür mit Hilfe des Attributsmarker-class-name,

7 – Verlinkung, Orientierung

86

Page 87: XSL-FO Praxis

– Abruf des festgelegten Inhalts im dafür vorgesehenenSeitenbereich mit Hilfe der Referenz auf den festgeleg-ten Namen mit fo:retrieve-marker und dem Attributretrieve-class-name, das als Wert den vorher definier-ten Namen enthält.

Listing 7.8: Formulierung des Inhalts für den Kolumnentitel in der Tem-plate-Regel für die Verarbeitung der entsprechenden Überschrift

<fo:block><fo:marker marker-class-name="Titel2"><xsl:number count="kapitel" format="1."/><xsl:number count="abschnitt" format="1"/><xsl:apply-templates mode="Kolumne"/></fo:marker></fo:block>

Listing 7.9: Abruf des vorformulierten Kolumnentitels im Kopfbereicheiner rechten Seite

<fo:static-content flow-name="Kopfzeile-links"><fo:block><fo:retrieve-marker retrieve-class-name="Titel2"/></fo:block></fo:static-content>

Kolumnentitel

schnell + kompakt 87

Page 88: XSL-FO Praxis
Page 89: XSL-FO Praxis

Möchte man Farben für den Text oder den Hintergrundseines Dokuments abweichend vom normalen Schwarzbestimmen, muss man berücksichtigen, dass diese Farbenin unterschiedlichen Ausgabemedien nach unterschiedli-chen Konzepten zu spezifizieren sind.

Heute übliche Computerbildschirme setzen das gesamteFarbspektrum einschließlich Schwarz aus den dreiGrundfarben Rot, Grün und Blau, abgekürzt RGB, zu-sammen. Auf den mehrere Farben unterstützenden Büro-druckern wird das Farbspektrum ebenfalls aus RGBgebildet. Schwarz wird ggf. aus einem gesonderten Spei-cher (meist als Patrone bezeichnet) gedruckt.

Im professionellen Farbdruck setzt man für die Erzeu-gung des Farbspektrums typischerweise ein anderes Farb-modell ein, das aus den Grundfarben Cyan (abgekürzt C;Türkis), Magenta (abgekürzt M; Fuchsiarot), Yellow (ab-gekürzt Y; Gelb) und der Schlüsselfarbe Schwarz (abge-kürzt K) besteht.

Farben für unterschiedlicheAusgabemedien

KAPITEL 8

schnell + kompakt 89

Page 90: XSL-FO Praxis

Statt des Farbmodells CMYK gibt es Anwendungen, diedie Grundfarbe Schwarz mit einer reinen Sonderfarbe(farbherstellerspezifisch) kombinieren.

Schließlich muss Schwarz nicht gleich Schwarz sein, son-dern kann Grau in einer Skala von Schwarz bis Weiß sein.

Im Weiteren beziehen wir uns ausschließlich auf die Spe-zifikation von Farben für die Gegenstände, die mit XSL-FO direkt angefasst werden. Dies sind der Text und dieBlockhintergründe. Die Farbspezifikationen in grafischenDarstellungen können in den Grafikformaten, z.B. RGB inJPEG-Grafiken, fest definiert oder in den Grafik erzeu-genden Systemen konfigurierbar sein. Selbstverständlichsind die Farbmodelle für den Druck von Text-Bild-Doku-menten abzustimmen!

Die XSL-FO-Eigenschaften, mit denen Farben spezifiziertwerden, heißen color für die Textfarbe undbackground-color für die Hintergründe. Diese Eigenschaf-ten lassen sich auf alle FO-Elemente anwenden, die direkttextlichen Inhalt enthalten.

Durch die Festlegung des Default-Farbmodells RGB imStandard ist die Farbspezifikation für die Bildschirm- undBürodruckerausgabe einfach:

<fo:block color="orange" background-color="pink">...</fo:block>

definiert die Schriftfarbe Orange und die Hintergrundfar-be Pink für den gegebenen Block. So sind Sie es in HTMLfür die Anzeige im Web-Browser schon gewohnt.

8 – Farben für unterschiedliche Ausgabemedien

90

Page 91: XSL-FO Praxis

Genauer lassen sich die drei Farben jeweils auch mit ihrenHexadezimal-Werten bestimmen:

<fo:block color="#ffa500" background-color="#ffc0cb">...</fo:block>

entspricht der Bestimmung mit vorgegebenen Farbnamen(siehe www.w3.org/TR/css3-color, dort im Abschnitt 4.3).

An Stelle dieser Angabe in Hexadezimal-Werten kannauch die Spezifikation beispielsweise der Farbe Orangemit der XSL-FO-Funktion rgb(255,165,0) treten.

Bei der Bestimmung von Farben im CMYK-Modell ist zubeachten, dass man ja auch eine möglichst gute Entspre-chung der Druckfarben in der Vorschau auf dem Bild-schirm haben möchte. Dafür bietet XSL-FO eine erweiterteFunktion an, die auf dem Farbprofil des International Co-lor Consortium (ICC) aufsetzt. Die Farben beider Farb-modelle werden in dieser Funktion nacheinanderspezifiziert, hier wiederum für das Beispiel Orange:

color="rgb-icc(255,165,0,#CMYK,0.000,0.353,1.000)"

Der Parametername CMYK ist streng genommen innerhalbder FO-Deklarationen (fo:declarations) mit der Eigen-schaft color-profile-name in fo:color-profile zu definie-ren. Der FO-Formatierer von Antenna House unterstütztdieses Konstrukt allerdings nicht, verlangt lediglich dasVorzeichen # vor dem im Produkt festen Namen CMYK.

Den Orange entsprechenden Grauwert würde man fürden FO-Formatierer von Antenna House mit der Farb-funktion wie folgt spezifizieren:

8 – Farben für unterschiedliche Ausgabemedien

schnell + kompakt 91

Page 92: XSL-FO Praxis

color="rgb-icc(#Grayscale,32.2%)"

Für die Ermittlung der Farbwerte hier haben wir auf dieSeite http://web.forret.com/tools/color.asp zurückgegrif-fen.

Verwenden Sie einen anderen Formatierer als den vonAntenna House orientieren Sie sich hinsichtlich der Farb-spezifikationen an der Produktdokumentation.

8 – Farben für unterschiedliche Ausgabemedien

92

Page 93: XSL-FO Praxis

Hier geht es um die Sammlung von Überschriften undRegisterbegriffen aus den zu verarbeitenden Daten, ihresequentielle oder alphabetische Ordnung und schließlichdie Darstellung in der Form von Verzeichnissen – diePDF-Lesezeichen bilden ein spezielles Inhaltsverzeichnisim PDF-Reader – mit Verweisen auf die Seiten, in denendiese Überschriften oder Registerbegriffe verankert sind.

Unter dem Gesichtspunkt der bloßen Gestaltung erfor-dern diese Verzeichnisse wenig Eigenes. Das eigentlichSchwierige ist die Sammlung und Ordnung der Verzeich-nisinhalte. Dies ist eine Arbeit, die den XSLT-Teil der XSL-Verarbeitung betrifft, also durch die „Daten-Vorkäuer“ (siehe Abschnitt 2.4) im ersten Teil derVerarbeitung bereits getan ist und eigentlich nicht im The-menbereich dieses Buches liegt.

Die folgenden kommentierten Beispiele zeigen ein Grund-gerüst für die Generierung und Gestaltung solcher Ver-zeichnisse. Vollständigere Anwendungsbeispiele sinddem Buch Manfred Krüger „XSL-FO verstehen und an-wenden“ zu entnehmen.

Inhaltsverzeichnisse,PDF-Lesezeichen undRegister

9.1 Inhaltsverzeichnisse 94

9.2 PDF-Lesezeichen 96

9.3 Register 98

KAPITEL 9

schnell + kompakt 93

Page 94: XSL-FO Praxis

9.1 Inhaltsverzeichnisse

Als Anforderung sei angenommen, dass jedes Kapitel einInhaltsverzeichnis der untergeordneten Abschnitte ent-halten soll (wie hier in diesem Buch). Das Inhaltsverzeich-nis wird also zwischen der Kapitelüberschrift und demKapitelinhalt eingefügt. Die Template-Regel für das Ka-pitel sieht so aus:Listing 9.1: Template-Regel für das Kapitel-Inhaltsverzeichnis

<xsl:template match="Kapitel"><fo:block><xsl:apply-templates select="Titel" mode="Kap-Titel"/></fo:block><xsl:for-each select="Abschnitt"><xsl:call-template name="IVZ-Eintrag"/></xsl:for-each><xsl:apply-templates/></xsl:template><xsl:template match"Kapitel/Titel"/>

Zunächst wird die Kapitelüberschrift dargestellt. Darun-ter wird für jeden Abschnitt innerhalb des Kapitels diebenannte Template-Regel IVZ-Eintrag aufgerufen. Unter-halb der Inhaltsverzeichniseinträge wird der gesamte Ka-pitelinhalt mit den entsprechenden Templates verarbeitet.Da die Kapitelüberschrift bereits als Erstes gesondert ausden Kapiteldaten herausgezogen ist, muss mit einer leerenTemplate-Regel für diese Überschriften die wiederholteDarstellung unterdrückt werden.

Was noch hinzukommen muss, ist die benannte Tem-plate-Regel für die Inhaltsverzeichniseinträge:

9 – Inhaltsverzeichnisse, PDF-Lesezeichen und Register

94

Page 95: XSL-FO Praxis

Listing 9.2: Benannte Template-Regel für den Eintrag im Inhaltsver-zeichnis

<xsl:template name="IVZ-Eintrag"><fo:block text-align-last="justify"><xsl:apply-templates select="Titel" mode="IVZ-Titel"/><fo:leader/><fo:page-number-citation ref-id="{generate-id()}"/></fo:block></xsl:template>

Diese benannte Template-Regel wird aufgerufen, wennder XSLT-Prozessor auf dem Knoten eines Abschnitt in-nerhalb des gegebenen Kapitels steht. Die betreffendeÜberschrift des Abschnitts wird also in den Block einge-zogen, dessen letzte Zeile über die gesamte Textbreitegeht.

HinweisMit xsl:for-each select="Abschnitt" in der vorstehen-den Template-Regel für Kapitel steht der Prozessor aufdem Knoten Abschnitt. Die XSLT-Anweisungxsl:apply-templates select="Titel" ... in der vorste-henden benannten Template-Regel IVZ-Eintrag be-zeichnet demnach den Titel des betreffenden Ab-schnitts.

Zwischen der Überschrift und der zitierten Seitenzahl, aufder der betreffende Abschnitt beginnt, wird mitfo:leader die Zeile ausgetrieben. Der Seitenverweis zieltauf eine ID, die der XSLT-Prozessor durch die Funktiongenerate-id() generiert hat. Das muss dem XSLT-Prozes-sor aber auch gesagt werden und zwar in dem Templatefür die Abschnitte:

Inhaltsverzeichnisse

schnell + kompakt 95

Page 96: XSL-FO Praxis

Listing 9.3: Template-Regel für die Generierung der IDs bei den KnotenAbschnitt

<xsl:template match="Abschnitt"><fo:block id="{generate-id()}"><xsl:apply-templates/></fo:block></xsl:template>

Die ID für den Abschnitt wird also für den Block generiert,der den gesamten Inhalt des Abschnitts einschließt.

9.2 PDF-Lesezeichen

Für die Generierung von PDF-Lesezeichen ist in der Ver-sion 1.1 von XSL-FO ein neues, eigenes Konzept einge-führt worden, das noch nicht in allen FO-Formatierernimplementiert sein muss!

Zur Spezifikation im Stylesheet müssen wir die Template-Regel erweitern, die in fo:root den fo:layout-master-set und die Seitenfolgen (fo:page-sequence) festlegt:Listing 9.4: Template-Regel für den Aufruf der Template-Regel für PDF-Lesezeichen

<xsl:template match="/"><fo:root><fo:layout-master-set>...</fo:layout-master-set><xsl:call-template name="PDF-Lesezeichen"/><fo:page-sequence master-reference="...">...</fo:page-sequence>

9 – Inhaltsverzeichnisse, PDF-Lesezeichen und Register

96

Page 97: XSL-FO Praxis

...</fo:root></xsl:template>

Das einzufügende Lesezeichen-Template folgt:Listing 9.5: Template-Regel für das Generieren der PDF-Lesezeichen

<xsl:template name="PDF-Lesezeichen"><fo:bookmark-tree><fo:bookmark><fo:bookmark-title><xsl:apply-templates select="Werk/Titel" mode="Lzchen"/></fo:bookmark-title><xsl:for-each select="Werk/Kapitel"><fo:bookmark internal-destination="{generate-id()}"><fo:bookmark-title><xsl:apply-templates select="Titel" mode="Lzchen"/></fo:bookmark-title><xsl:for-each select="Abschnitt"><fo:bookmark internal-destination="{generate-id()}"><fo:bookmark-title><xsl:apply-templates select="Titel" mode="Lzchen"/></fo:bookmark-title></fo:bookmark></xsl:for-each></fo:bookmark></xsl:for-each></xsl:bookmark></fo:bookmark-tree></xsl:template>

Der PDF-Lesezeichenbaum besteht in diesem Beispiel inder ersten Ebene aus dem Werktitel (ohne Link-Funktio-

PDF-Lesezeichen

schnell + kompakt 97

Page 98: XSL-FO Praxis

nalität im PDF-Reader), in der zweiten Ebene aus denÜberschriften der direkt dem Werk untergeordneten Ka-pitel und in der dritten Ebene aus den Überschriften derdirekt den Kapiteln untergeordneten Abschnitte. Damitdie Links auf die Anfangsseiten der Kapitel und Abschnit-te funktionieren, müssen für diese Blöcke IDs spezifiziertwerden, die der XSLT-Prozessor mit der Funktiongenerate-id() generiert:Listing 9.6: Template-Regeln für das Generieren der IDs bei Kapitel undAbschnitt

<xsl:template match="Kapitel"><fo:block id="{generate-id()}"><xsl:apply-templates/></fo:block></xsl:template><xsl:template match="Abschnitt"><fo:block id="{generate-id()}"><xsl:apply-templates/></fo:block></xsl:template>

9.3 Register

Die umfassende Einführung in die Generierung eines Re-gisters oder Indexes würde den Rahmen dieses Büchleinssprengen. Eine kurze, beschreibende Erläuterung soll hierdennoch folgen.

Auch das Indexing-Konzept ist wie das vorher behandeltePDF-Lesezeichen-Konzept neu in die XSL-FO-Version 1.1aufgenommen worden. Im praktischen Einsatz ist also

9 – Inhaltsverzeichnisse, PDF-Lesezeichen und Register

98

Page 99: XSL-FO Praxis

zunächst zu prüfen, ob der benutzte FO-Formatierer die-ses Konzept bereits unterstützt!

Die Grundlage für die Registergenerierung bilden die anentsprechender Stelle im Textinhalt als Registereinträgestrukturierten und für die Darstellung im Register selbstformulierten Registerbegriffe. Soweit diese in mehr als ei-ner Ebene formuliert werden können (typisch in maximalzwei Ebenen), werden die Registerbegriffe in ein Contai-ner-Element eingeschlossen. Diese Registereinträge kön-nen im Dokumentinhalt mehrfach auftreten.

Die Registereinträge im Dokumentinhalt werden typi-scherweise an der Stelle ihres Eintrags in der Ausgabenicht dargestellt, müssen aber für die Sammlung und al-phabetische Ordnung des Registers dem XSLT-Prozessorzugänglich gemacht werden und dienen dem FO-Forma-tierer für die Referenzierung der Seitenzahlen im Register.

Dazu werden die Registereinträge in ein fo:inline-Ele-ment eingekleidet, dem mit der Funktion generate-id()eine eindeutige Kennung gegeben wird. Auf diese Ken-nung wird im generierten Register zur Ermittlung derSeitenzahl zurückgegriffen.

Der Inhalt dieses inzeiligen Elements ist nun allerdingsnicht der ggf. an mehreren Stellen gleich formulierte Re-gistereintrag selbst. Vielmehr wird aus dem textlichenInhalt ein Indexschlüssel gebildet (mehrere textgleicheRegistereinträge produzieren einen identischen Schlüs-sel!). Der Text des Registereintrags wird zum Wert derEigenschaft index-key, die als Atttribut dem Umschlag-element fo:wrapper zugeordnet wird. Die Registerbegriffeunterschiedlicher Ebenen werden durch ein Separatoren-zeichen (;) getrennt.

Register

schnell + kompakt 99

Page 100: XSL-FO Praxis

Ein Beispiel für einen Registereintrag mit Begriffen in zweiEbenen folgt:

BeispielZunächst der Eintrag im Dokumentinhalt:

...<R-Eintrag><RB-1>Register</RB-1><RB-2>Ebenen</RB-2></R-Eintrag>...

Nach der Verarbeitung mit dem XSLT-Prozessor siehtdies so aus:

...<fo:inline id="xxxxxx"><fo:wrapper index-key="Register;Ebenen"/></fo:inline>...

Das Ergebnis der Registergenerierung finden Sie im Re-gister dieses Büchleins.

Soweit der einfache Teil für die Registerspezifikation.Richtig schwierig wird jetzt die Registergenerierung. Ander Stelle in den Seitenfolgen, an der das Register einge-fügt werden soll, wird man eine benannte Template-Regelaufrufen, in der folgende Dinge bestimmt werden:

– Für die Gleichbehandlung von Klein- und Großbuch-staben in den Begriffen ist eine translate()-Funktionzu formulieren.

– Die Registerbegriffe der ersten Ebene sind sprachspe-zifisch alphabetisch zu sortieren (mit xsl:sort).

– In der Regel wird man den Registerbegriffen mit glei-chem Anfangsbuchstaben eine entsprechende Buchsta-ben-Überschrift voranstellen.

9 – Inhaltsverzeichnisse, PDF-Lesezeichen und Register

100

Page 101: XSL-FO Praxis

– Die Registerbegriffe selbst müssen mit FO-Mitteln ge-staltet werden (mit fo:block).

– Sofern ein Registerbegriff der ersten Ebene keinen Un-terbegriff hat, also für sich einen Registereintrag bildet,werden die Seiten, in denen der Registerbegriff veran-kert ist, referenziert. Dies geschieht innerhalb vonfo:index-page-citation-list mit dem Elementfo:index-key-reference mit dem Attribut ref-index-key, dessen Wert einem index-key (siehe oben) ent-spricht.

– Sofern ein Registerbegriff der ersten Ebene durch einenBegriff in der zweiten Ebene genauer qualifiziert wird,wiederholt sich das Procedere der alphabetischen Sor-tierung, Gestaltung und Seitenreferenzierung auf die-ser Ebene.

Das Stichwortverzeichnis dieses Buches ist das Resultatder Verarbeitung wie hier beschrieben.

Register

schnell + kompakt 101

Page 102: XSL-FO Praxis
Page 103: XSL-FO Praxis

Für die wichtigsten Begriffe, die wir in diesem Buch zu-meist unkommentiert benutzt haben, folgt hier eine Zu-sammenstellung mit Erläuterungen.

Begriffe in XSL-FO-Anwendungen

Begriff /Unterbegriff

varianteBezeichnung

Erläuterung

Blockelemente FO-Elemente, die als Blöcke dieBasisstruktur eines XML-FO-Dokuments bilden; zu ihnengehören fo:block,fo:block-container,fo:list-block,fo:table-and-caption undfo:table

Kurzreferenz

schnell + kompakt 103

Page 104: XSL-FO Praxis

Begriffe in XSL-FO-Anwendungen

Begriff /Unterbegriff

varianteBezeichnung

Erläuterung

Sammelattribut FO-Attribut, das in definierterForm mehrere Einzelattribute insich vereinen kann, z.B. border,mit dem für alle vier Seiten (z.B.border-top) eines Blocks gleich-zeitig die Eigenschaften fürBreite (*-width), Farbe (*-color)und Stil (*-style) bestimmtwerden können

Seitenbereich Region Bereich einer Seite, die info:simple-page-master angelegtund in fo:page-sequence mitInhalt gefüllt wird

Seitenfolge Publikations-folge

Publikationsteil, der aus einereinzelnen Seitenvorlage oder ei-ner Seitenfolgevorlage bestehenkann und mit konkretem Inhaltgefüllt ist (fo:page-sequence)

Seitenfolgevorlage Kombination von mehreren Sei-tenvorlagen in einer bestimm-ten Reihenfolge(fo:page-sequence-master)

Seitenvorlage Aufbau einer Layoutseite inihrer Geometrie, z.B. Ränderund Seitenbereiche(fo:simple-page-master)

XML-Dokument wohlgeformtesXML

Dokument einer beliebigenXML-Struktur; kann auch einXSL-Stylesheet oder ein XML-Schema sein

Kurzreferenz

104

Page 105: XSL-FO Praxis

Begriffe in XSL-FO-Anwendungen

Begriff /Unterbegriff

varianteBezeichnung

Erläuterung

XML-FO-Dokument XSL-FO-Dokument, FO-Dokument

XML-Dokument, in dem aus-schließlich XSL-FO-Elementeund -Attribute zur Strukturbe-schreibung enthalten sind; Er-gebnis des Transformations-prozesses mit einem XSL-FO-Stylesheet

XML-Quelldokument

XML-Instanz,XML-Dokument

Dokument mit denEingangsdaten für dieVerarbeitung; als XML-Instanzbezeichnet, wenn DTD oderSchema basiert; XML-Dokument kann auch lediglichwohlgeformt sein

XSL XSL-Familie eXtensible Stylesheet Languageist der zusammenfassendeBegriff für die Standards XSLT,XPath und XSL(-FO)

XSLT XSL-Transformation

eXtensible Stylesheet LanguageTransformations; W3CRecommendation; Syntax fürdie Transformation von XML-Dokumenten

XPath XML PathLanguage

XML Path Language; W3CRecommendation; Syntax fürdie Adressierung in XML-Strukturen

XSL XSL-FO eXtensible Stylesheet Language(Formatting Objects); W3CRecommendation; Syntax fürdie Layoutierung von XML-Dokumenten in festenSeitendimensionen

Kurzreferenz

schnell + kompakt 105

Page 106: XSL-FO Praxis

Begriffe in XSL-FO-Anwendungen

Begriff /Unterbegriff

varianteBezeichnung

Erläuterung

XSL-FO-Attribut FO-Attribut,Attribut,Eigenschaft

im XSL-Standard definiertesXML-Attribut, das einem odermehreren FO-Elementen zuge-wiesen ist und für die konkreteAusgestaltung der Inhalte sorgt

XSL-FO-Element FO-Element,Element

im XSL-Standard definiertesXML-Element für die Formatie-rung der Inhalte; diese Elementehaben den Namensraum fo:

XSL-FO-Formatierer FO-Formatierer,Formatierer

Software zur Layout-Verarbei-tung von XML-FO-Dokumen-ten

XSL-FO-Konstrukt FO-Konstrukt im XSL-FO-Standard definierteStruktur, häufig gebraucht fürkomplexe Kombinationen vonFO-Elementen und / oder FO-Attributen, z.B. fo:list-block,fo:table, fo:footnote

XSL-FO-Stylesheet XSL-Stylesheet,Stylesheet

Stylesheet zur Transformationvon XML-Dokumenten in XML-FO-Dokumente

XSLT-Element XSLT-Befehl im XSLT-Standard definiertesXML-Element für die Transfor-mation oder Reorganisation derInhalte; diese Elemente habenden Namensraum xsl:

XSLT-Prozessor Software zur Verarbeitung vonXSLT-Stylesheets

XSLT-Stylesheet XSL-Stylesheet,Stylesheet

Stylesheet zur Transformationvon XML-Dokumenten in einbeliebiges Ausgabeformat,häufig zu HTML

Kurzreferenz

106

Page 107: XSL-FO Praxis

Stichwortverzeichnis

AAbbildung

freigestellt 68inzeilig 70relative Größenänderung 70

Aufzählung 77geschachtelte 65gezählte 63ungezählte 63

Ausgabeformatalternative Ausgabeformate 17PDF 16

BBlock-Container 58

absolute Positionierung 59Breite 59Höhe 59Platzierungskoordinaten 59Stapelungsebene 59

Blockelemente 103fo:block 51, 52, 58fo:block-container 51fo:list-block 51fo:table 51fo:table-and-caption 51

CCSS

W3C-Recommendation 11

DDefaults 45, 46

anwendungsspezifische 46im XSL-Standard 46produktspezifische 46

EEinzüge (horizontal) 54

FFarben

Farbnamen 91Farbwerteermittlung 92Grauwerte 91Hintergrundfarbe 90Schriftfarbe 90

FarbprofileCMYK 89ICC 91RGB 89

Fließtextbereich 41Font-Spezifikation 53Fußbereich 42Fußnote 77

Fußnotenzeichen 77Inhalt 77Trennlinie 78

GGrafik 70Grafikformate 68

schnell + kompakt 107

Page 108: XSL-FO Praxis

HHervorhebungen

durchstrichen 57fett 56fo:inline 56hochstellen 57Kapitälchen 57kursiv 56Laufweiten verändern 58sperren 57tiefstellen 57überstrichen 57unterstrichen 57

HintergrundKasten 66

IInhaltsverzeichnisse 94

Kennung der Objekte 95Referenzierung derSeitenzahlen 94Verzeichniseinträge 94

Inline-Container 58horizontale Ausdehnung 61vertikale Ausrichtung 61

KKasten 65

Hintergrund 66Rahmen 67

Kolumnentitel 86lebende 86

Kopfbereich 38, 42

LLinie

border 67Link 81Liste 63

MMaßeinheiten 53Mehrspaltigkeit 61, 68

NNummerierung

Seiten 84Seiten mit Neubeginn 85

PPaginierung 84Papiergröße 36PDF

typisches Ausgabeformat 16PDF-Lesezeichen 96

Lesezeichenbaum 97Link zum PDF-Inhalt 97

Publikationsfolge 41, 42

RRahmen

Kasten 67Register

Ebenen 100Generierung 98inzeilige FO-Struktur 99Procedere d. Generierung 100Registerschlüssel 99Struktur der Registereinträge 99

Rekursivität 46, 51

SSammelattribute 104

border 67Satzspiegel 35Schachtelung 46, 51Seitenaufbau 36Seitenaufteilung 36Seitenbereiche 36–38, 42, 43, 104

Stichwortverzeichnis

108

Page 109: XSL-FO Praxis

Seitenfolge 104Seitenfolgevorlage 39, 40, 104Seitengestaltung 35Seitengröße 37Seitenlayout 35, 38Seitennummerierung 84Seitenränder 35Seitenreferenzierung 85Seitentitel 86Seitenumbruch 40Seitenverweis 86Seitenvorlage 35, 36, 38, 39, 41,104Seitenzählung 84Silbentrennung 54Spalten

überspannen 68, 74

TTabelle 71

horizontale Ausrichtung 74HTML 71Tabellen-Layout 72Typen 71

Textausrichtung 53

UUnicode

Zeichenreferenz 65

VVakatseite 36, 40Vererbung 46, 49Verweis 81

externer 82interner 82Ziel 82

Voreinstellungen (Defaults) 45,46Vorschübe (vertikal) 54

XX SL-FO-Attribut

baseline-shift 57XML-Dokument 104XML-FO-Dokument 105XML-Quelldokument 105XMLSpy, Altova 26XSL

XPath 105XSL-Familie 105XSL-FO 105XSLT 105

XSL-FOEinsatzszenarien 11Indexing, Registergenerierung 98Verarbeitungsprozess 15Version 1.0 8Version 1.1 8W3C-Recommendation 7

XSL-FO-Attribut 106absolute-position 59alignment-baseline 61background 69, 74, 81background-color 66border 67, 69, 74, 81bottom 60character 56column-width 72content-height 69–71content-width 69, 70display-align 74end-indent 50, 66ends-row 72external-destination 82flow-name 78region-name 38

Stichwortverzeichnis

schnell + kompakt 109

Page 110: XSL-FO Praxis

XSL-FO-Attribut (Forts.)font-family 50, 53font-size 50, 53, 77font-stretch 58font-style 56font-variant 57font-weight 56format 84, 85height 60hyphenate 50, 54id 84, 95index-key 99, 101initial-page-number 85internal-destination 82keep-together.within-page 70language 50, 54left 60letter-spacing 57line-height 50, 53margin-left 50margin-right 50marker-class-name 86number-columns-spanned 74number-rows-spanned 74overflow 60padding 66, 67, 69, 74, 81provisional-distance-between-starts 64ref-id 86, 94ref-index-key 101retrieve-class-name 87right 60scaling 70space-after 54, 69space-before 54, 69span 68start-indent 50, 55, 66starts-row 72table-omit-footer-at-break 77table-omit-header-at-break 77

XSL-FO-Attribut (Forts.)text-align 46, 53, 61text-decoration 57text-indent 54top 60width 60z-index 60

XSL-FO-Element 106fo:basic-link 81fo:block 40, 43, 52, 58fo:bookmark 97fo:bookmark-title 97fo:bookmark-tree 97fo:character 56fo:conditional-page-master-reference 41fo:external-graphic 68fo:flow 42fo:footnote 77fo:index-page-citation-list 101fo:index-page-key-reference 101fo:inline-container 58, 61fo:leader 79fo:list-item 63fo:list-item-body 64, 78fo:list-item-label 64, 78fo:marker 86fo:page-number 84fo:page-number-citation 85, 94fo:page-sequence 42fo:region-after 38fo:region-before 38fo:region-body 37, 38fo:region-end 38fo:region-start 38fo:repeatable-page-master-alternatives 41fo:repeatable-page-master-reference 41

Stichwortverzeichnis

110

Page 111: XSL-FO Praxis

XSL-FO-Element (Forts.)fo:retrieve-marker 87fo:static-content 78fo:table-body 71fo:table-caption 72fo:table-cell 72, 74fo:table-column 72, 74fo:table-footer 71fo:table-header 71fo:table-row 72fo:wrapper 99

XSL-FO-Formatierer 106Ecrion XF Rendering Server 21FOP, Apache 20Standardmerkmale vs.proprietäre Eigenschaften 9, 17XEP, RenderX 21XML2PDF, Altsoft 22XSL Formatter, AntennaHouse 23, 26

XSL-FO-Funktionbody-start() 64

XSL-FO-Konstrukt 106XSL-FO-Konstrukte

Referenz 9XSL-FO-Stylesheet 106XSL-FO-Stylesheet-Designer 25

XMLSpy, Altova 26XSLT-Attribut

xsl:use-attribute-sets 32XSLT-Element 106

xsl:attribute 32xsl:attribute-set 32xsl:import 31xsl:include 31xsl:number 65xsl:param 33xsl:template 29xsl:value-of 34xsl:variable 33

XSLT-Prozessoren 24, 106XSLT-Stylesheet 106

Stichwortverzeichnis

schnell + kompakt 111

Page 112: XSL-FO Praxis