Datenbanken Online Lexikon TH Köln, Campus Gummersbach
Aktuelle Änderungen - Suchen:

Extensible Stylesheet Language - Formatting Objects (XSL-FO)

XSL-FO ist eine Seitenbechreibungssprache, mit der bestimmt werden kann in welcher Anordnung verschiedene Objekte, d.h. Texte, Bilder, Grafiken etc., auf einer Seite ausgegeben werden sollen. Die Formatierung wird nicht nur für digitalen Output (z. B. Webseite) angewendet, sondern auch für Printausgaben auf Papier. Zusammen mit XSLT und XPATH gehört XSL-FO zu der XSL-Sprachfamilie.

Entstehung

Die erste Empfehlung der W3C für XSL-FO (Version 1.0) wurde am 15. Oktober 2001 herausgegeben. Gegenwärtig ist XSL-FO in der Version 1.1 verfügbar. XSL-FO besitzt Gemeinsamkeiten mit DSSSL (Document Style Semantics and Specification Language), welche als deren Ursprung gezählt wird. Es finden sich zudem viele Überschneidungen in den Eigenschaften mit der zweiten Version der Cascading Stylesheets (CSS). CSS wiederum verwendet viele Adaptionen und Formatanweisungen der DSSSL. Dies wurde absichtlich von der W3C beschlossen, um den Autor des Stylesheets nicht zusätzlich zu verwirren und den Übergang zu erleichtern. Dennoch gibt es eine signifikante Variation in der Syntax, da XSL-FO ein reguläres XML-Vokabular? verwendet während CSS eine eigene Syntax benutzt. Das folgende Beispiel soll dies Veranschaulichen:

CSS-Syntax:

<element style="font-size:12pt;font-weight:bold">Beispieltext</element>

XSL-FO:

<fo:element font-size:"12pt" font-weight="bold">Beispieltext</element>

XSL-FO innerhalb der XSL-Familie

Primär wird XSL-FO für die Formatierung der Ausgaben von PDF-Dokumenten benutzt, je nach Ausstattung und Möglichkeiten des verwendeten XSLT-Prozessors, ist es auch möglich Zieldokumente anderer Formate, wie beispielsweise PostScript oder HTML, zu erzeugen. XSL-FO stellt hierfür jedoch so gut wie keine Möglichkeiten zur Verfügung eigene Algorithmen zu entwickeln. Die Formatierung wird über XSLT so erstellt, das sämtliche Anweisungen und Daten aus dem Quelldokument (XML) in einer FO-Datei zusammengeführt werden. Als Konsequenz sind daher zusätzliche Kenntnisse in XSLT, wie in XPath obligatorisch, sobald die Erstellung einer FO-Datei angestrebt wird.

Aufbau und Elemente

Der Aufbau eines jeden XSL-FO-Dokuments basiert immer auf ein und demselben Grundgerüst. Dieses besteht aus dem Wurzelelement <fo:root>, dem Kindelement <fo:layout-master-set>, mindestens einem <fo:page-sequence>-Element und einem optionalen <fo:declarations>-Element. Das Wurzelelement <fo:root> ist das oberste Element in einem XSL-FO-Dokument und beinhaltet zudem die Namensraumdeklaration für die Formatting Objects: xlmns:fo="http://www.w3.org/1999/XSL/Format" Das <layout-master-set> beinhaltet Elemente, welche für die Gesamtdarstellung der Seiten selbst benötigt werden. Hier werden die Vorlagen (templates) für die Seitengestaltung definiert. Sie legen beispielsweise die Größe der Seiten fest, den Modus, die Seitenränder etc. Die <fo:page-sequence>-Elemente enthalten den Text, der Seite. Darüber hinaus werden hier die Instruktionen für die Formatierung festgehalten. Das umfasst Angaben zur Textausrichtung, Schriftart, Höhe und Position usw.

XSL-FO stellt Funktionen, Elemente und Attribute für jeden Strich, jeden Punkt, kurzum für jedes Detail zur Verfügung, welches auf ein Blatt gebracht werden kann. Aufgrund der Vielfalt dieser Elemente soll hier lediglich auf eine der Wichtigsten Elemente eingegangen werden, die Areas.

 Test
Regions und Margins auf der Page (nach www.w3schools.com)


XSL-FO definiert eine Reihe von rechteckigen Bereichen, so genannte Areas, in welchen die Ausgabe eines Zieldokumentes unterteilt wird. Die Bezeichnung Areas stellt hierbei einen Sammelbegriff für die einzelnen Bereiche dar. Diese sind wie folgt definiert:

Seiten (Pages)

Die Ausgabe wird in XSL-FO in Seiten formatiert. Gedruckte Ausgaben verteilen sich gewöhnlich über mehrere Seiten. Digitale Ausgaben, beispielsweise im Browser dargestellt, werden als eine lange Seite präsentiert. Seiten besitzen Randbereiche (Margins) und können aus einer oder mehreren Regionen (Regions) bestehen.

Regionen (Regions) und Ränder (Margins)

In XSL-FO werden Seiten jeweils in eine Reihe von verschiedenen Regionen unterteilt: region-body (Seitenkörper), region-before (Kopfzeile), region-after (Fusszeile), region-start (linker Seitenrand), region-end (rechter Seitenrand). Die Unterteilung ist ähnlich jener, wie man sie auch auf der Seite eines Word-Dokuments vorfinden kann. Die Regions sind aber stets ein Teil des Seitenkörpers, welcher wiederum von Margins, den Rändern, umgeben ist. Die Abbildung rechts verdeutlicht das Zusammenspiel. Eine Region kann aus einem oder mehreren Blöcken bestehen.

Blöcke (Blocks)

Innerhalb von Blöcken werden die Objekte (Text, Grafik etc.) eingebettet. Blöcke selbst enthalten kleine rechteckige Bereiche:

  • space-before, space-after - Blockzwischenraum
  • margin - Leerer Bereich außerhalb des Blocks
  • border - Seitenrand des Blocks
  • padding - Bereich zwischen Seitenrand und Inhalt (engl. content)

Jeder dieser Bereiche wiederum stellt mehrere verschiedene Attribute zur Formatierung bereit. So kann beispielsweise mittels border-color die Farbe eines Seitenrandes bestimmt werden und die Breite mit border-width.

 Test
Unterteilung eines Blocks (nach www.w3schools.com)


Seitendefinition in XSL-FO

Nachstehender Code beschreibt eine Seitendefinition in XSL-FO. Zunächst wird ein Seitenvorlage definiert (fo:simple-page-master) und "A4" benannt. Es folgt die Festlegung von Breite und Länge, sowie die der Seitenränder.

<fo:simple-page-master master-name="A4" page-width="297mm"
page-height="210mm" margin-top="1cm" margin-bottom="1cm"
margin-left="1cm" margin-right="1cm">
<fo:region-body margin="3cm"/>

Anschließend folgt die Festlegung der Regions und das End-Tag der Vorlage:

<fo:region-before extent="2cm"/>
<fo:region-after extent="2cm"/>
<fo:region-start extent="2cm"/>
<fo:region-end extent="2cm"/>
</fo:simple-page-master>

Anwendungsbeispiel - "Hello World"

Das folgende "Hello World"-Beispiel stellt ein einfaches Dokument dar, welches bei Ausführung den bekannten Begrüßungstext ausgibt. Die Abbildung zeigt das Ergebnis der Ausgabe.

Nach der Versionsangabe und der Namensraumdeklaration folgt das Master-Set

 Test
Ergebnis (nach www.data2type.de)

<?xml version="1.0" encoding="UTF-8"?>
<fo:root xmlns:fo="http://www.w3.org/1999/XSL/Format">

Innerhalb des Master-Set wird auch hier wieder eine Seitenvorlage definiert (fo:simple-page-master), die Höhe und Breite der Seite festlegt Eine Einteilung der Seite in Regionen (fo:region-body), z. B. für Kopf- oder Fußzeilen, findet nicht statt, weshalb der Anweisung keine Parameter übergeben werden

<fo:layout-master-set>
<fo:simple-page-master master-name="A4Page"
page-height="297mm" page-width="210mm">
<fo:region-body/>
</fo:simple-page-master>
</fo:layout-master-set>

Im anschließenden Tag-Abschnitt (fo:page-sequence) folgt der eigentliche (Fließ-)Text (fo:flow). Die Ausgabe wird regulär in den Block (fo:block) eingetragen.

<fo:page-sequence master-reference="A4Page">
<fo:flow flow-name="xsl-region-body">
<fo:block>Hello World</fo:block>
</fo:flow>
</fo:page-sequence>
</fo:root>

Wenn auch der Schwerpunkt von XSL-FO ledigilich in der Ausgabenformatierung liegt, so ist diese Sprache dennoch zu umfangreich, als das sie in diesem Artikel in aller Ausführlichkeit beschrieben werden könnte, weshalb zur genaueren Betrachtung auf weiterführende Literatur verwiesen wird.

Quellen

  • Becher, M.: "XML", W3L GmbH Witten 2009
  • Harold, E. R., Means, W. S.: "XML in a Nutshell - A Desktop Quick Reference", O'Reilly Media Inc. 2004
  • Holman, G. K.: "Definitive XSL-FO", Prentice Hall International 2003
  • Kränzler, C.: "XML | XSL - Für Buch und Web", Markt + Technik 2002
  • Pawson, D.: "XSL-FO Making XML Look Good in Print", O'Reilly Media Inc. 2002
  • Skulschus, M., J., Wiederstein, M.: "XML: Standards und Technologien", Comelio GmbH 2012
  • Skulschus, M., J., Wiederstein, M.: "XSL-FO", Comelio GmbH 2011

Weiterführende Links: