Vielfältige Darstellungsmöglichkeiten für strukturierte Dokumente

Mit XSL-FO gewinnt XML an Format

11.01.2002
Das W3-Consortium (W3C) stellte mit der Empfehlung "Extensible Stylesheet Language - Formatting Objects" (XSL-FO) XML ein leistungsfähiges System zur Formatbeschreibung zur Seite. Es ermöglicht ein plattform- und programmunabhängiges Layout von XML-Dateien. Von Fotis Jannidis*

Die Extensible Markup Language (XML) gehört mit Sicherheit zu den erfolgreichsten Empfehlungen, die das W3C bis dato verabschiedete. Die gerade einmal 50 Druckseiten starke Beschreibung des Standards löste eine Revolution aus: Heute sind XML-Parser Bestandteil fast aller Betriebssysteme, die meisten Browser und Datenbanken können XML-Dateien verarbeiten, und viele Programme kommunizieren mittels XML-codierter Informationen. Was bislang fehlte und nun von XSL-FO geboten wird, war eine eigene Formatierungssprache. Sie sollte leistungsfähig genug sein, XML-Dokumente in der Komplexität zu formatieren, die für den Druck üblich ist.

Wie schon bei SGML gilt auch bei XML die Trennung von Inhalt und Layout als besonderer Pluspunkt. So informiert die folgende Auszeichnung "name" zwar da-rüber, dass das betreffende Element einen Eigennamen enthält, macht aber keine Angaben, wie dieser auf dem Bildschirm oder auf Papier dargestellt werden soll: "Linux wurde von <name>Linus Torvald</name> geschaffen". Mittels einer Formatierungsanweisung lassen sich nun alle Namen typografisch gleich gestalten. Solche Formatierungsangaben müssen natürlich selbst wiederum notiert werden, zumeist in Stylesheets.

Eine wesentliche Anforderung an XSL bestand darin, eine beliebige Neuanordnung aller Elemente des XML-Dokuments zu erlauben. Deshalb unterteilte die XSL-Arbeitsgruppe von Anfang an den geplanten Standard in zwei Bereiche: eine Sprache zur Transformation der Struktur von XML-Dokumenten (XSLT) und ein Vokabular, mit dem man Formatinformation festlegen kann (XSL-FO). In einem klugen Schachzug verabschiedete das W3C schon 1999 XSLT einschließlich eines Standards zur Adressierung beliebiger XML-Dokumentenabschnitte (Xpath). Es zeichnete sich nämlich ab, dass die Festlegung des Formatierungsvokabulars ungemein schwierig würde.

Ein XSL-Stylesheet für ein XML-Dokument verwendet XSLT, um festzulegen, welche Elemente in dem XML-Dokument von der Formatangabe betroffen sind. XSLT erlaubt dabei auch sehr genaue Angaben aufgrund der Position des Elements oder aufgrund von Attributen oder Inhalten. Mittels XSL-FO werden die eigentlichen Angaben über Seiten-, Absatz- und Zeichenlayout festgelegt. Die meisten heute verfügbaren XSL-Renderer (siehe Kasten "Links") nehmen eine XML-Datei und eine XSLT-Datei als Eingabe. Intern erfolgt zuerst eine Transformation der XML-Daten mittels XSLT in ein XSL-FO-Dokument und dieses Dokument wird anschließend einem XSL-FO-Renderer übergeben (siehe Abbildung).

Ausgegeben wird zumeist ein Format wie beispielsweise das von Adobe entwickelte Portable Document Format (PDF), das man inzwischen auch im professionellen Druckgewerbe verwendet. Es ist fraglich, ob es jemals Online-Reader für XSL-FO in nennenswerter Zahl geben wird, da die Übersetzung von beliebigen XML-Dokumenten in XHTML inzwischen eine weitverbreitete Technik ist und die Gestaltung von XML-Seiten mit CSS von den meisten Browsern weitgehend unterstützt wird.

Als XML geschaffen wurde, gab es zwei Vorbilder für programmunabhängige Stylesheets: die ISO-normierte Document Style Semantics and Specification Language (DSSSL), die Formatierungssprache für SGML, und Cascading Stylesheets (CSS) für HTML. XSL-FO macht bei beiden deutliche Anleihen. XSL sollte jedoch von Anfang an, anders als seine Vorbilder, keine eigene Syntax haben, sondern selbst wiederum ein XML-Dokument sein. So kann man heute die gesamte Palette an XML-Programmen auch für die Erstellung und Prüfung von XSL-Stylesheets verwenden.

Wie bei TextverarbeitungXSL-FO ist, anders als man anfangs vermuten möchte, keine Seitenbeschreibungssprache wie Postscript oder das darauf basierende PDF. Vielmehr verwendet es ein Modell zur Layoutdefinition, wie man es von Textverarbeitungen oder "Latex" kennt. Der Benutzer definiert die Rahmenbedingungen für das Layout, etwa das Seitenlayout, Tabellenformate oder die Schriftarten für spezifische Absatztypen. Der XSL-FO Renderer gießt dann gleichsam den vorhandenen Text in solcherart definierte Rahmen. Bei der Benennung der zahlreichen Layouteigenschaften hat man sich weitgehend an den entsprechenden Bezeichnungen von CSS orientiert. Dies sollte die Konvertierung zwischen den beiden Typen von Stylesheets erleichtern. Die Entwickler von XSL-FO bedachten von Anfang an, dass damit Dokumente in unterschiedlichen Landessprachen und Zeichensätzen aufbereitet werden sollten. So lassen sich die Schreibrichtung und Fortschrittsorientierung sehr einfach auch nicht-europäischen Anforderungen angepassen. Wie auch bei neueren Versionen von CSS kann man in XSL-FO Formatangaben auch von bestimmten Ausgabemedien abhängig machen - etwa ob die Formatanweisung für die visuelle Darstellung oder zur akustischen Wiedergabe gedacht ist. Allerdings scheint es bislang kein Programm zu geben, das Letzteres unterstützt.

Layout kann variierenDie prinzipielle Orientierung am Textverarbeitungsmodell hat den großen Vorteil, dass der Verwender von XSL-FO nicht selbst die Seitenformate berechnen muss. Er kann einfach seine Vorgaben machen. Das hat allerdings den Nachteil, dass XSL-FO eben kein identisches Layout des Textes über verschiedene Renderer hinweg garantiert. Wenn das neue Layout-Programm beispielsweise einen anderen Trennalgorithmus oder auch nur eine etwas andere Schriftart gleichen Namens verwendet, wird die Seite anders aussehen. Wer absolute Layouttreue seiner Texte garantieren muss, wird weiterhin Formate wie Postscript oder PDF verwenden. Die besondere Stärke von XSL besteht darin, nicht nur die Daten selbst, sondern auch ihre Weiterverarbeitung bis zur Druckvorstufe plattform- und programmunabhängig zu ermöglichen.

Moderne Publishing-Frameworks wie das eben in Version 2 erschienene "Cocoon" von Apache zeigen, wie in Zukunft das Ausliefern von XML-Dokumenten aussehen kann. Der Anwender produziert seinen Inhalt und erzeugt jeweils XSL-Stylesheets für die Darstellung in HTML und PDF, die vollkommen portabel sind. Ein großer Vorteil besteht darin, dass Gestaltungs- und Programmierungsfragen auf diese Weise einfach zu trennen sind. (ws)

*Fotis Jannidis ist freier Autor in München.

XSL-Renderer - LinksXSL beim W3C

http://www.w3.org/Style/XSL

XSL-FO Software

Renderer

Apache Foundation: FOP

http://xml.apache.org/fop

Sebastian Rahtz: PassiveTeX

http://users.ox.ac.uk/~rahtz/passivetex

RenderX: XEP Rendering Engine

http://www.renderx.com

IBM: XFC

http://www.alphaworks.ibm.com/tech/xfc

Antenna House: XSL Formatter

http://www.antennahouse.com

Unicorn Enterprises: Unicorn Formatting Objects

http://www.unicorn-enterprises.com/products_ufo.html)

Editoren

Arbortext: Epic Editor

http://www.arbortext.com

Fabio Giannetti (HP): Formatting Objects Authoring Tool

http://www-uk.hpl.hp.com/people/fabgia/foa/foa.html

Tools

Novosoft: rtf2fo, konvertiert rtf Dokumente nach XSL-FO

http://rtf2fo.novosoft-us.com

Abb: Publikationsweg mit XSLT/SXL-FO

Die Formatierungsangaben werden normalerweise nicht direkt in das XML-Quelldokument eingegeben, sondern in ein separates Stylesheet. Ein XSLT-Prozessor generiert daraus ein XSL-FO-konformes Dokument. Quelle: Jannidis