XSL-FO (Extensible Stylesheet Language - Formatting Objects) ist ein Teil der XSL (Extensible Stylesheet Language)-Spezifikation des W3C. XSL-FO wird typischerweise für die professionelle Druckaufbereitung von XML-Dokumenten verwendet. Dabei werden die XML-Dokumente mithilfe von XSLT-Stylesheets nach XSL-FO umgewandelt. XSL-FO führt in gewisser Weise ein Schattendasein, weil das Format in der Regel nur als Zwischenformat für die Druckaufbereitung von XML-Inhalten zum Einsatz kommt.
XSL-FO
XSL-FO (Extensible Stylesheet Language - Formatting Objects) ist eine auf XML basierende Auszeichnungssprache, die beschreibt, wie Text, Bilder, Linien und andere grafische Elemente auf einer Seite angeordnet werden. Mittels XSL-FO ist es möglich, hochwertige Druckerzeugnisse entweder auf Papier oder auf dem Bildschirm zu erzeugen. Anders als das Format XHTML/HTML, das sich vor allem für Browser-Anwendungen eignet, kommt XSL-FO vor allem im Druck- und Archivierungsbereich zum Einsatz, also dort, wo innerhalb eines Dokuments viele Seiten anfallen.
XSL-FO wurde 2001 vom World Wide Web Consortium (W3C) als Standardsprache für die Umwandlung von XML-Dokumenten in Druckformate festgelegt.
XSL-FO im Überblick
XSL-FO ist Teil des Konzepts des W3C für die Weiterverarbeitung von XML-strukturierten Daten. Während sich die anderen Teile der XSL-Spezifikation allgemein mit dem Finden und Transformieren von Daten in XML-Bäumen beschäftigen, dient XSL-FO gezielt dazu, in XML strukturierte Information für den Druck aufzubereiten und satzfertig zu machen. XSL-FO führt also Daten (in der Regel aus XML-Dateien) und Layoutinformationen für den Druck bzw. die Erstellung einer druckfertigen Datei (z. B. einer PDF-Datei) zusammen. Definitionsgemäß ist XSL-FO damit ein Zwischenformat für die Druckaufbereitung von XML-Daten.
Einen typischen Verarbeitungsablauf, in dem ein XSL-FO-Dokument als Zwischenformat verwendet wird, kann man sich folgendermaßen vorstellen:
-
Ausgangspunkt
Der Ausgangspunkt sind Daten in XML-Format. Dabei kann es sich um ganz verschiedene Inhalte und Datenquellen handeln, z. B. eine Datenbank, ein Content-Management-System, ein Archiv oder aber auch ein Unternehmenswiki.
-
Datenaufbereitung
Nun sollen diese Daten, die in XML vorliegen, für den Druck oder ein Druckformat aufbereitet werden. Dazu werden die Daten aus der Quelle abgefragt und es wird festgelegt, wie die Daten dargestellt werden sollen. Dazu wird in der Regel ein XSLT-Stylesheet verwendet.
-
XSL-FO-Datei erstellen
Mithilfe eines XSLT-Prozessors wird das oder die XSLT-Stylesheets auf die XML-Daten angewendet und eine XSL-FO-Datei erzeugt, die genau die richtigen Inhalte und die Layout- Informationen für den Druck vereinigt.
-
In Druckformat konvertieren
Schließlich wird ein XSL-FO-Prozessor, manchmal auch als XSL-FO-Renderer bezeichnet, dazu verwendet, die XSL-FO-Datei in ein Druckformat zu konvertieren; das gängige Druckformat ist dabei PDF.
XSL-FO bietet sich damit als Zwischenformat an, wenn Daten, die in XML vorliegen und sich häufiger ändern, regelmäßig in großem Umfang für den Druck aufbereitet werden müssen, z. B. um Kunden Informationen über Daten aus Datenbanken (wie Rechnungen, Kontostände) mitzuteilen oder modular aus Textbausteinen aufgebaute Texte zu drucken (wie AGBs, Betriebsanleitungen).
Die XSL-FO-Dateien selbst sind in mindestens zwei verschiedene Abschnitte strukturiert:
- Layout Master: Der Layout Master beschreibt das Seitenlayout auf Basis verschiedener Seitendefinitionen, die in einer bestimmten Reihenfolge angeordnet werden.
- Page Sequence: Der eigentliche Inhalt wird in Page Sequences beschrieben, wobei jede Page Sequence statische Inhalte und einen sogenannten Fließtext (Flow) beinhalten kann.
- Darüber hinaus kann der Abschnitt Declarations dazukommen. Dieser optionale Abschnitt dient dazu, Farbprofile anzugeben. Für die Verwendung des Standardprofils RGB ist keine Angabe erforderlich (sRGB-Fallback). Wenn andere ICC-Farbprofile verwendet werden sollen, müssen diese explizit angegeben und referenziert werden.
XSL-FO-Seitenmodell
XSL-FO unterscheidet zwischen dem allgemeinen Seitenaufbau und der weiteren Unterteilung des Druckbereichs einer Seite.
Die allgemeine Seitenbeschreibung besteht aus der Angabe von Seitenbreite und -höhe sowie der vier Seitenränder (optional).
Der dadurch festgelegte Druckbereich (Seitengröße minus Ränder bzw. Page Reference Area) kann wiederum in fünf verschiedene Bereiche unterteilt werden:
- Kopfbereich (region-before)
- Fußbereich (region-after)
- linker Bereich (region-start)
- rechter Bereich (region-end)
- Hauptbereich (region-body)
Fließtext (Flow) und statische Inhalte
Die eigentlichen Seiteninhalte werden über zwei Elemente abgebildet:
- Jede Page Sequence darf genau einen Fließtext (flow) beinhalten. Der Inhalt dieses Fließtextes wird ggf. über mehrere Seiten verteilt, wenn er nicht auf eine Seite platziert werden kann.
- Außerdem kann eine Page Sequence einen oder mehrere statische Inhalte (static content) enthalten. Statische Inhalte werden fix auf der Seite positioniert, d. h. nicht umgebrochen, wenn der Inhalt den Platzbedarf überschreiten sollte. Typische Beispiele für statische Inhalte sind Kopf- und Fußzeilen.
Blöcke und ihre Eigenschaften
Texte innerhalb von Fließtexten (Flows) und statischen Inhalten werden über sogenannte Blöcke abgebildet. Jeder Block entspricht einem positionierbaren Rechteck mit unterschiedlichen Eigenschaften, die über verschiedene Attribute angegeben werden. Blöcke können darüber hinaus ineinander geschachtelt werden.
Folgende Eigenschaften können u.a. auf Block-Ebene definiert werden:
- Rahmen, Padding und Hintergrund
- Font-Eigenschaften und Farbe
- Umbruchverhalten, Angaben zur Vermeidung von Hurenkindern und Schusterjungen
- Silbentrennung
Inline-Inhalte
Inhalte innerhalb von Blöcken können anders formatiert werden, indem sie als Inline-Elemente ausgezeichnet werden. Fast alle Eigenschaften, die für Blöcke angegeben werden können, können auch auf Inline-Elemente angewendet werden.
Abgrenzung gegenüber HTML und CSS
In mancher Hinsicht ähnelt XSL-FO den weitaus bekannteren Sprachen HTML und CSS. XSL-FO ist eine XML-basierte Sprache wie HTML. Viele Layout-Möglichkeiten ähneln den Möglichkeiten in CSS.
Daneben gibt es aber wesentliche Unterschiede, die im Folgenden dargestellt werden.
XSL-FO und HTML im Vergleich
Merkmal | XSL-FO | HTML / XHTML |
---|---|---|
Erstellung | in der Regel aus XML mit XSLT und XSLT-Prozessor | WYSIWYG-Editor, teilweise auch generiert |
Viewer | XML-Editor, wenige professionelle Tools mit Vorschaumodus | Webbrowser |
Wesentliche Elemente | layout-master und page-sequence (seitenorientiert) | head und body (nicht seitenorientiert) |
Druck-Informationen | direkt in XSL-FO | in der Regel im CSS |
XSL-FO und CSS im Vergleich
Merkmal | XSL-FO | CSS |
---|---|---|
Seitenmodell | Areas | Box-Model |
Rendering | Konvertierung in ein Druckformat mit XSL-FO-Renderer | Ad-hoc-Formatierung mit CSS-Renderer |
Verwendungsmöglichkeit | Standalone | CSS bezieht sich immer auf ein anderes Dokument (HTML, XML) |
Während es Trends gab, XML mit CSS zu formatieren und direkt im Browser darzustellen und Print-Layouts für HTML-Dokumente mit CSS zu definieren, kann man wohl sagen, dass die Transformation über XSL-FO für die Druckausgabe sich für XML-Daten anbietet, weil XSL-FO umfangreiche Möglichkeiten bietet, das Druck-Layout zu definieren.