XML-Know How

Der Verarbeitungsprozess

Die folgende Grafik zeigt den kompletten Ablauf einer automatisierten Formatierung mittels XSL-FO. Die Verarbeitung erfolgt hierbei in mehreren Schritten, die in der Praxis vollständig automatisiert und für den Endanwender unsichtbar im Hintergrund ablaufen.

Ausgangspunkt sind zwei Dateien. Die eine ist das XML-Dokument, das es auszugeben gilt, die andere das XSL-Stylesheet mit allen Formatierungsregeln.

Im ersten Schritt werden die beiden Ausgangsdateien in einen XSLT-Prozessor geladen. Dieser Prozessor wendet die in dem XSL-FO-Stylesheet definierten Regeln auf das XML-Dokument an. Das Resultat ist ein neues XML-Dokument, (in der Grafik als »XML-FO-Dok.« bezeichnet). Diese XML-Datei entspricht dem vom W3C definierten FO-Standard und enthält alle Formatierungseigenschaften und auszugebenden Inhalte. Dieser erste Schritt ist der Entscheidende, denn hier laufen die eigentlichen automatisierten Prozesse der Umsetzung ab. So werden schon hier etwa die Kapitelüberschriften gesammelt und für ein Inhaltsverzeichnis neu zusammengestellt.

Die erzeugte XML-FO-Datei hingegen ist statisch. Man kann Sie mit einer HTML-Datei vergleichen, die ebenso statisch ist und erst durch das Laden in einem Browser visualisiert wird. Für die Visualisierung einer XML-FO-Datei muss diese ebenso von einem Programm interpretiert werden. Ein solches Programm wird als Formatierer oder Renderer bezeichnet. Der Formatierer lädt die XML-FO-Datei und berechnet den Umbruch, die Silbentrennung, bettet die Grafiken ein etc.

Der Formatierer generiert also in dem letzten Schritt des Verarbeitungsprozesses ein bestimmtes Ausgabeformat. In der Grafik werden beispielhaft zwei verschiedene gezeigt. Das wohl am häufigsten erzeugte Format dürfte hierbei PDF sein, das vollautomatisch verlinkt und mit den entsprechenden Lesezeichen versehen werden kann. Es gibt darüber hinaus aber auch die Möglichkeit, über entsprechende Druckertreiber RTF, AFP, Postscript u. v. m. zu erzeugen.

Im Folgenden soll der Ablauf idealtypisch anhand von (vereinfachten) Auszügen aus den Dateien der einzelnen Arbeitsschritte aufgezeigt werden.

Das Ausgangsdokument

Das XML-Dokument kann sowohl Schema- als auch DTD-kontrolliert oder auch nur wohlgeformt sein.

Hier ein Auszug aus einem Beispieldokument:

Es enthält zwei Kapitelebenen <kapitel> und <artikel>. Beide können jeweils einen Titel <titel> und Absätze <absatz> enthalten. Innerhalb der Absätze können inzeilige Auszeichnungen wie hier z. B. fett <fett> vorkommen.

<?xmlversion="1.0"encoding="UTF-8"?>
<buch>
    <kapitel>
       <titel>XSL</titel>
       <artikel>
           <titel>XSL-FO</titel>
               <absatz>Wie bereits erwähnt wird
               XSL-FO</fett> zur automatisierten Ausgabe
               von Datenverwendet. Mit XSL-FO lassen sich Regeln
               angeben, die dabei den Satz und den Umbruch
               automatisieren. Die Möglichkeiten, die XSL-FO
               bietet sind vielfältig und können hier nur
               exemplarisch dargestellt werden.</absatz>
               <absatz> Im Mittelpunkt desKonzepts steht die
               Einrichtung von Seiten. Die Maße einer Seite in
               Breite und Höhe sind frei wählbar. Eine Seiteläßt
               sich in fünf unterschiedliche Regionen
               aufteilen; den Kopf- und Fußbereich, den linken
               und rechten Rand und den »Body«-Bereich, der
               für den eigentlichen Inhalt reserviert ist.
               Unterschiedliche Seiten(-vorlagen) lassen sich
               schließlich zu einer Seitenfolge verknüpfen (z. B.
               sich abwechselnde linke und rechte Seiten). </absatz>
               <absatz>Aber auch zur detaillierteren Gestaltung
               lassen sich Angaben treffen. So lassen sich
               beispielsweise Regeln aufstellen die den Umbruch
               von Zeilen (mit Silbentrennung in allen Sprachen),
               Spalten und Seiten gezielt steuern.</absatz>
       </artikel>
       <artikel>
           <titel>Der Verarbeitungsprozess</titel>
...

Das XSL-FO Stylesheet

Das XSL-FO Dokument enthält alle Verarbeitungs- und Formatierungsregeln für das Ausgangsdokument. Die Verarbeitungsregeln, die aus dem XSLT-Standard stammen, werden mit Namensräumen von den Formatierungsregeln aus dem XSL-FO-Standard unterschieden – diese erhalten den Namensraum fo.

Der XSLT-Prozessor verarbeitet hierbei nur die xslt-Elemente. Das am häufigsten vorkommende Element heißt xsl:template. Es handelt sich um eine Schablone, die nach passenden Elementen im Ausgangsdokument sucht und alles in ihm befindliche in das Zieldokument kopiert beziehungsweise weiter verarbeitet.

...
    <xsl:template match="absatz">
       <fo:block font-family="Arial" font-size="12pt"
           line-height="16pt" text-align="justify"
       hyphenate="true" xml:lang="de">
           <xsl:apply-templates/>
       </fo:block>
    </xsl:template>
    <xsl:template match="fett">
       <fo:inline font-weight="bold">
           <xsl:apply-templates/>       
       </fo:inline>    
       </xsl:template>
       <xsl:template match="kapitel/titel">
               <fo:block font-family="Arial" font-size="20pt"
               space-after="8mm" hyphenate="false"
               axf:outline-level="1" axf:outline-expand="true">
           <xsl:number format="1"/>
           <xsl:text> </xsl:text>
           <xsl:apply-templates/>
               </fo:block>
       </xsl:template>
       <xsl:template match="artikel/titel">
               <fo:block font-family="Arial"
               font-size="14pt" space-before="6mm"
               space-after="4mm" hyphenate="false"
               axf:outline-level="2" axf:outline-expand="true">
               <xsl:number level="multiple" format="1.1"
               count="//kapitel | //kapitel/artikel"/>
           <xsl:text> </xsl:text>
           <xsl:apply-templates/>
       </fo:block>
    </xsl:template>
...

     

  • xsl:template ist eine Schablone, die immer dann ausgeführt wird, wenn der XPath-Ausdruck, der sich im match-Attribut befindet, zutrifft. An dieser Stelle werden z. B. alle <absatz>-Elemente verarbeitet.
  • Das Element <fo:block> erzeugt einen Absatz mit den hier aufgeführten Layouteigenschaften wie Schriftart, Schriftgröße, Zeilenhöhe, Blocksatz und deutscher Silbentrennung.
  • Das XSLT-Element <xsl:number> erzeugt die Kapitel-Nummerierung, abhängig von der Position der Kapitel im Dokument.
  •  

Das XML-FO Dokument

Das XML-FO Dokument ist das Resultat der Verarbeitung der beiden Ausgangsdokumente durch den XSLT-Prozessor und wird in der Praxis nicht betrachtet oder bearbeitet. Es handelt sich um eine temporäre Datei, die automatisch in den Formatierer geladen wird. Dennoch soll an dieser Stelle, des Verständnisses für die Abläufe wegen, der erzeugte Auszug gezeigt werden:

...
    <fo:block font-family="Arial" font-size="20pt"
    space-after="8mm" hyphenate="false"
    axf:outline-level="1" axf:outline-expand="true">
    1 XSL</fo:block>
    <fo:block font-family="Arial" font-size="14pt"
    space-before="6mm" space-after="4mm" hyphenate="false"
    axf:outline-level="2" axf:outline-expand="true">
    1.1 XSL-FO</fo:block>
    <fo:block font-family="Arial" font-size="12pt"
    line-height="16pt" text-align="justify" hyphenate="true"
    xml:lang="de">Wie bereits erwähnt wird <fo:inline
    font-weight="bold">XSL-FO</fo:inline> zur automatisierten
    Ausgabe von Daten verwendet. Mit XSL-FO lassen sich
    Regeln angeben, die dabei den Satz und den Umbruch
    automatisieren. Die Möglichkeiten, die XSL-FO bietet sind
    vielfältig und können hier nur exemplarisch dargestellt
    werden.</fo:block>
    <fo:block font-family="Arial" font-size="12pt"
    line-height="16pt" text-align="justify"
    hyphenate="true" xml:lang="de">Im Mittelpunkt des Konzepts
    steht die Einrichtung von Seiten. Die Maße einer Seite in
    Breite und Höhe sind frei wählbar. Eine Seite läßt sich in
    fünf unterschiedliche Regionen aufteilen; den Kopf- und
    Fußbereich, den linken und rechten Rand und den »Body«-
    Bereich, der für den eigentlichen Inhalt reserviert ist.
    Unterschiedliche Seiten(-vorlagen) lassen sich schließlich
    zu einer Seitenfolge verknüpfen (z. B. sich abwechselnde
    linke und rechte Seiten).</fo:block>
    <fo:block font-family="Arial" font-size="12pt" line-
    height
="16pt" text-align="justify" hyphenate="true" xml:
    lang
="de">Aber auch zur detaillierteren Gestaltung lassen
    sich Angaben treffen. So lassen sich beispielsweise Regeln
    aufstellen die den Umbruch von Zeilen (mit Silbentrennung
    in allen Sprachen), Spalten und Seiten gezielt steuern.
    </fo:block>
    <fo:block font-family="Arial" font-size="14pt"
    space-before="6mm" space-after="4mm" hyphenate="false"
    axf:outline-level="2" axf:outline-expand="true">1.2 Der
   Verarbeitungsprozess</fo:block>
...

Wie an diesem Auszug zu sehen ist, wurden die Texte aus dem Ausgangsdokument gemäß den im XSL-FO-Stylesheet definierten Regeln um Layoutinformationen angereichert. Es befinden sich nur noch Elemente im Dokument, die den Namensraum fo haben; diese können im nächsten Verarbeitungsschritt vom Formatierer gelesen und umgesetzt werden.

Der Formatierer

Der Formatierer ist in der Lage, XML-FO Dokumente zu lesen und umzusetzen. Er berechnet den Seiten- und Zeilenumbruch, er lädt die Grafiken, erzeugt die Seitenfolgen, die Verweise, die Seitennummerierungen, die Kolumnentitel u. v. m.

Das oben beschriebene XML-FO-Dokument sieht in der GUI-Oberfläche des Antenna House Formatters wie folgt aus:

Es gibt verschiedene kommerzielle Formatierer, von denen zur Zeit der »Formatter« des japanischen Herstellers Antenna House der leistungsstärkste ist. Er bietet u. a. die Möglichkeit, die Formatierungsergebnisse sofort in einer grafischen Oberfläche zu betrachten, was vor allem während der Stylesheetentwicklung außerordentlich hilfreich ist. Im späteren Produktionsworkflow kann der Formatter über verschiedene Schnittstellen angesprochen werden. Man kann ihn sowohl im Batchbetrieb einsetzen, als auch über entsprechende Java, C++ und VB.NET Schnittstellen ansteuern. Er läuft unter allen in unserer Branche üblichen Betriebssystemen.