10. Tabellen

In XSL-FO wird eine eigene Tabellenstruktur unterstützt, die die typografischen Anforderungen eines Satz-und-Umbruchsystems erfüllt. Diese Tabellenstruktur ist weder identisch mit der der traditionellen CALS-Tabellenstruktur, noch mit der der HTML-Tabellenstruktur. Sie ist allerdings ausgezeichnet geeignet, beide Tabellenmodelle zum Ausgangspunkt für die typografische Umsetzung zu nehmen. Besonders einfach ist das XSL-FO-Tabellenkonzept für den Tabellensatz von sogenannten semantischen Tabellendaten zu nutzen, wie sie beispielsweise aus Datenbank-Anwendungen zum Satz exportiert werden.

Für den Satz von Tabellen stehen neun Elemente und eine Vielzahl von Attributen zur Verfügung. Die folgende Grafik zeigt die Struktur, die sich hieraus ergibt.

Tabellen-Elementstruktur

Tabellen-Elementstruktur

Die einzelnen Elemente:

  • <fo:table> ist das zentrale (oberste) und obligatorische Element zur Erzeugung einer Tabelle. Es besitzt eine optionale Spaltendefinition (<fo:table-column>), eine oder mehrere optionale Kopf- und Fuß-Tabellenzeilen (<fo:table-header> und <fo:table-footer>) und den obligatorischen Tabellen-Hauptteil (<fo:table-body>).

  • <fo:table-header> erzeugt den Kopfbereich der Tabelle, der bei einem eventuellen Seitenumbruch automatisch wiederholt wird.

  • <fo:table-body> enthält den tabellarischen Inhalt der Tabelle, der aus Zeilen (<fo:table-row>), diese wiederum aus Zellen (<fo:table-cell>) besteht.

  • <fo:table-footer> erzeugt den Fußbereich der Tabelle, der bei einem eventuellen Seitenumbruch automatisch wiederholt wird.

  • <fo:table-column> erlaubt die Vorweg-Spezifikation verschiedener Eigenschaften für die Spalten der Tabelle.

  • <fo:table-and-caption>: Hat die Tabelle eine Überschrift oder Legende, ist dieses Element das oberste und obligatorische Tabellen-Element.

  • <fo:table-caption> nimmt die Überschrift oder Legende einer Tabelle auf, die als oberstes Element <fo:table-and-caption> hat.

  • <fo:table-row> legt Inhalt und die Eigenschaften der Tabellenzeilen fest.

  • <fo:table-cell> legt Inhalt und die Eigenschaften der Tabellenzellen fest.

 

Die Attribute der Tabellenelemente

 

Da die Elemente mit einer Vielzahl von Attributen typografisch behandelt werden können, werden hier nur die Tabellen spezifischen Attribute näher erläutert und die aus anderen Zusammenhängen bekannten verkürzt dargestellt. In der Praxis irrelevante Attribute werden nicht behandelt.

<fo:table> (Tabellen-Attribute)

 

  • background-Attribute, border-Attribute, padding-Attribute, margin-Attribute, space-Attribute, id, break-after, break-before, keep-with-next, keep-with-previous, keep-together

  • height (Höhe), width (Breite)

  • border-collapse definiert das zu verwendende Modell für die benachbarten Zellen-Rahmen. Beim Wert collapse fallen die benachbarten Rahmen zusammen, bilden also eine gemeinsame Zellentrennung, bei separate bildet jede Zelle ihren eigenen Rahmen. Für die benachbarten Rahmen lässt sich ein Abstand definieren. Diese Flächen außerhalb der Rahmen werden ggf. mit dem für die Tabelle definierten Hintergrund gefüllt.

  • border-separation definiert den Abstand zwischen zwei benachbarten Rahmen, der ggf. mit dem für die Tabelle definierten Hintergrund gefüllt wird.

  • table-layout legt einen Algorithmus für die Gestaltung der Tabellenzellen, -zeilen und -spalten fest. Der Vorgabewert ist auto. Bei diesem Wert wird – HTML-Tabellen entsprechend – die Breite einer Spalte von den Zelleninhalten in dieser Spalte abhängig gemacht. Bei dem Wert fixed wird das Tabellen-Layout allein durch die Breitenangaben für die Tabelle und der darin enthaltenen Spalten, Rahmen und Abständen zwischen den Rahmen bestimmt.

  • table-omit-footer-at-break legt fest, ob der Fußbereich der Tabelle (<fo:table-footer>) bei Umbruch über die gegebene Seite hinaus auf den Folgeseiten wiederholt werden soll. Der Vorgabewert ist false, d. h. der Fußbereich wird wiederholt. Nur bei Spezifikation des Wertes true wird der Fußbereich nicht wiederholt.

  • table-omit-header-at-break ist das Wiederhol-Attribut für den Kopfbereich <fo:table-header>. Es gilt das für den Fußbereich Gesagte entsprechend.

 

<fo:table-column> (Spalten-Definitions-Attribute)

 

  • background-Attribute, border-Attribute, padding-Attribute

  • column-number (Nummer der Spalte). Zulässiger Wert ist eine Zahl, z. B. für die 1. Spalte 1. Diese Zahl dient der Zuordnung der Spalten-Spezifikationen zu Zellen, die den gleichen Wert für column-number haben.

  • column-width (Breite der Spalte). Zulässige Werte sind beliebige, unterstützte absolute Maße oder Prozentzahlen (Tabellenbreite ist 100%).

  • number-columns-repeated (Anzahl der Spalten, für die diese Spezifikation gelten soll). Zulässige Werte sind ganze Zahlen, z. B. 2.

  • number-columns-spanned (Anzahl der Spalten, die überspannt werden sollen). Zulässige Werte sind ganze Zahlen, z. B. 2.

 

<fo:table-body>, <fo:table-header>, <fo:table-footer> (Attribute für die Tabellenbereiche)

 

  • background-Attribute, border-Attribute, padding-Attribute, id (Zuweisung einer eindeutigen Identifikation)

 

<fo:table-row> (Tabellenzeilen-Attribute)

 

  • background-Attribute, border-Attribute, padding-Attribute, id, break-after, break-before, keep-with-next, keep-with-previous, keep-together

  • height (Zeilenhöhe)

 

<fo:table-cell> (Tabellenzellen-Attribute)

 

  • background-Attribute, border-Attribute, padding-Attribute, id.

  • height (Zellenhöhe) und width (Zellenbreite)

  • display-align (vertikale Ausrichtung des Zelleninhalts). Der Vorgabewert ist auto und bewirkt, dass der Zelleninhalt behandelt wird, als sei der Wert before definiert. Bei üblicher Schreibrichtung bewirkt der Wert before die Aliniierung am oberen Zellenrand, center eine mittige Ausrichtung und after die Aliniierung am unteren Zellenrand.

  • empty-cells (Rahmen um leere Zellen). Der Vorgabewert ist show, d. h. leere Zellen haben ihren Rahmen wie die Zellen mit Inhalten. Alternativer Wert ist hide. Bei diesem Wert werden die Rahmen unterdrückt. Haben alle Zellen einer Tabellenzeile den Attributwert hide, dann wird die gesamte Tabellenzeile in der Darstellung unterdrückt.

  • ends-row (Ende einer Tabellenzeile). Der Vorgabewert ist false, d. h. die gegebene Zelle beendet keine Tabellenzeile. Mit dem alternativen Wert true beendet die gegebene Zelle die Tabellenzeile. Dies gilt nur dann, wenn die Zellen nicht innerhalb von <fo:table-row> stehen.

  • starts-row (Beginn einer neuen Tabellenzeile). Das für ends-row Gesagte gilt hier entsprechend.

  • column-number (Nummer der Spalte). Hiermit wird eine Verbindung zu den Spezifikationen der entsprechenden <fo:table-column> hergestellt.

  • number-columns-spanned (Zahl der zu überspannenden Spalten). Vorgabewert ist 1, d. h. die Zelle füllt gerade eine Spalte. Entsprechend dem ganzzahligen Attributwert werden Spalten in der Schreib­rich­tung überspannt. Beispielsweise überspannt die Zelle drei Spalten bei einem Attributwert von 3.

  • number-rows-spanned (Zahl der zu überspannenden Tabellenzeilen). Das zu number-columns-spanned Gesagte gilt entsprechend.

Zu beachten: Die horizontale Ausrichtung (Aliniierung) des Zelleninhalts wird nicht als Attribut der Zelle selbst spezifiziert, sondern als Attribut der in der Zelle befindlichen Blöcke!

Für den Einstieg ein einfaches Tabellenbeispiel:

<fo:block>
<fo:table>
   <fo:table-body>
      <fo:table-row>
         <fo:table-cell>
            <fo:block>Erste Zelle</fo:block>
         </fo:table-cell>
         <fo:table-cell>
            <fo:block>Zweite Zelle</fo:block>
         </fo:table-cell>
         <fo:table-cell>
            <fo:block>Dritte Zelle</fo:block>
         </fo:table-cell>
      </fo:table-row>
   </fo:table-body>
</fo:table>                         
</fo:block>

Diese Tabelle stellt die Grundform einer Tabelle dar. Allerdings fehlen einige charakteristische Eigenschaften. Es sind keine Größenangaben für die Tabelle, deren Zeilen oder Zellen angegeben, und die Tabellenzellen sind ohne Rahmen. Das nächste Beispiel soll etwas komplexer sein und diese Eigenschaften enthalten.

<fo:block>
<fo:table width="110mm" border-style="ridge" border-width="5pt"> (1)                     
   <fo:table-body>                                               (2)
      <fo:table-row>                                             (3)
         <fo:table-cell width="40mm" border-style="solid" border-width="1pt"> (4)
            <fo:block> 1. Zelle</fo:block>                         
         </fo:table-cell>                         
         <fo:table-cell width="40mm" border-style="solid" border-width="1pt"> (4)
            <fo:block> 2. Zelle</fo:block>
         </fo:table-cell>
         <fo:table-cell width="30mm" border-style="solid" border-width="1pt"> (4)
            <fo:block> 3. Zelle</fo:block>                         
         </fo:table-cell>                         
      </fo:table-row>
      <fo:table-row>                                             (3)
         <fo:table-cell border-style="solid" border-width="1pt"> (5)
            <fo:block> 1. Zelle</fo:block>
         </fo:table-cell>
         <fo:table-cell border-style="solid" border-width="1pt"> (5)
            <fo:block> 2. Zelle</fo:block>
         </fo:table-cell>
         <fo:table-cell border-style="solid" border-width="1pt"> (5)
            <fo:block> 3. Zelle</fo:block>
         </fo:table-cell>
      </fo:table-row>
   </fo:table-body>
</fo:table>
</fo:block>

(1) Das Element <fo:table> beinhaltet den Inhalt der Tabelle. Das Attribut width legt die Breite der Tabelle fest. Das Attribut border-style definiert den äußeren Rahmen der Tabelle. Um dies zu veranschaulichen, unterscheidet sich dieser von den Rahmen der Zellen.

(2) <fo:table-body> ist der Behälter für den Inhalt der Tabelle, die hier keinen Fuß- oder Kopfbereich hat.

(3) <fo:table-row> definiert eine Zeile einer Tabelle. Auch hier sind diverse Attribute erlaubt, auf die aus Vereinfachungsgründen vorerst verzichtet wurde.

(4) <fo:table-cell> definiert eine Zelle. Die ersten beiden Zellen haben hier eine Breite von 40mm, die dritte von 30mm. Die Zellen besitzen einen kompletten Rahmen (border-style="solid" border-width="1pt").

(5) Die Zellen der zweiten Zeile haben im Unterschied zu denen der ersten keine Breitenangaben. Daher werden die Breitenangaben der ersten Zeile automatisch übernommen.

Formatierer-Ansicht

Formatierer-Ansicht

Das folgende Beispiel ist ein wesentlich komplexeres, das die gebräuchlichsten Tabelleneigenschaften nutzt:

<fo:block>
<fo:table width="110mm" border-style="outset" border-width="1pt">      (1)                   
   <fo:table-column column-number="1" column-width="25%" 
      border-style="solid" border-width="1pt"/>                        (2)                       
   <fo:table-column column-number="2" column-width="25%" border-style="solid" border-width="1pt"/>
   <fo:table-column column-number="3" column-width="25%" border-style="solid" border-width="1pt"/>
   <fo:table-column column-number="4" column-width="25%" border-style="solid" border-width="1pt"/>
   <fo:table-header background-color="red">                            (3)
      <fo:table-row>                         
         <fo:table-cell number-columns-spanned="4">                    (4)  
            <fo:block>Kopfzeile</fo:block>                         
         </fo:table-cell>
      </fo:table-row>
   </fo:table-header>
   <fo:table-footer background-color="red">                            (3)                      
      <fo:table-row>
         <fo:table-cell number-columns-spanned="4">                    (4)
            <fo:block>Fusszeile</fo:block>
         </fo:table-cell>                         
      </fo:table-row>
   </fo:table-footer>                         
   <fo:table-body>
      <fo:table-row border-style="double" border-width="1pt">                         
         <fo:table-cell column-number="1">                             (5)
            <fo:block> 1. Zelle</fo:block>                         
         </fo:table-cell>
         <fo:table-cell column-number="2">                             (5)
            <fo:block> 2. Zelle</fo:block>
         </fo:table-cell>                         
         <fo:table-cell column-number="3" number-columns-spanned="2">  (5)
            <fo:block> 3. Zelle</fo:block>                         
         </fo:table-cell>
      </fo:table-row>
      <fo:table-row border-style="double" border-width="1pt">
         <fo:table-cell column-number="1" number-columns-spanned="2">  (5)
            <fo:block> 1. Zelle</fo:block>                         
         </fo:table-cell>
         <fo:table-cell column-number="3">                             (5)
            <fo:block> 2. Zelle</fo:block>                         
         </fo:table-cell>
         <fo:table-cell column-number="4">                             (5)
            <fo:block> 3. Zelle</fo:block>                         
         </fo:table-cell>                         
      </fo:table-row>
   </fo:table-body>
</fo:table>
</fo:block>

(1) Das Attribut width legt die Gesamtbreite der Tabelle fest.

(2) Die Definition der Spalten erfolgt mit dem Element <fo:table-column>. Jeder Spalte wird eine Nummer mit dem Attribut column-number und eine Breite mit dem Attribut column-width zugewiesen. Die Breite der Spalte wird hier in Prozent der Gesamtbreite der Tabelle (110mm) angegeben.

(3) Die Tabelle verfügt über einen farblich abgehobenen Kopfteil, der mit dem Element <fo:table-header>, und einem gleichfarbigen Fußteil, der mit dem Element <fo:table-footer> spezifiziert wird. Das Attribut background-color erwartet als Wert einen vordefinierten Farbwert wie hier red oder aber einen RGB-Dreifarbenwert.

(4) Im Fuß- und Kopfbereich enthält die Tabellenzelle das Attribut number-columns-spanned mit dem Wert "4". Dies bewirkt eine Überspannung dieser Zelle über alle vier Spalten.

(5) Die Tabellenzellen im Inhaltsteil (<fo:table-body>) werden mit Hilfe des Attributs column-number den vordefinierten Spalten zugewiesen.

Formatierer-Ansicht

Formatierer-Ansicht

<< zurück vor >>
Tipp der data2type-Redaktion:
Zum Thema XSL-FO bieten wir auch folgende Schulungen zur Vertiefung und professionellen Fortbildung an:

Copyright © dpunkt.verlag GmbH 2004
Für Ihren privaten Gebrauch dürfen Sie die Online-Version ausdrucken.
Ansonsten unterliegt dieses Kapitel aus dem Buch "XSL-FO in der Praxis" denselben Bestimmungen, wie die gebundene Ausgabe: Das Werk einschließlich aller seiner Teile ist urheberrechtlich geschützt. Alle Rechte vorbehalten einschließlich der Vervielfältigung, Übersetzung, Mikroverfilmung sowie Einspeicherung und Verarbeitung in elektronischen Systemen.

dpunkt.verlag GmbH, Ringstraße 19B, 69115 Heidelberg, fon 06221-14830, fax 06221-148399, hallo(at)dpunkt.de