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