Seminar WWW Technologien

Dr. Heinz Kredel im Auftrag Prof. Dr. Meuer

Thema: XSL Formating Objects

Autor: Pascal Sütterlin

Datum: 16.07.2002

1.1 Erzeugen von Präsentationssichten: XML Stylesheets

1.2 Einleitung XSL FO



1.3 Anwendungsszenario: XML + XSL

xml+xsl



1.4 Anwendungsszenario: XSL FO

xsl-fo



2.1 Typischer Ablauf - Schema

  1. Einlesen des XML-Datenbaumes
  2. Einlesen des XSLT-Stylesheets
  3. Anwenden des Stylesheets auf den XML-Baum
  4. Ergebnisbaum (XSL-FO-Baum) in einen Area-Baum umwandeln
  5. Area-Baum ausgeben


2.2 Typischer Ablauf - 1.-3.Schritt

baum1



2.2 Typischer Ablauf - 4.-5.Schritt

baum2



3. Area-Modell



3.1 Area-Modell - Vorgehensweise



3.2 Area-Modell - Grundtypen

xsl-area



3.3 Area-Modell - Erklärung Grundtypen



4. Ein einfaches Beispiel

<?xml version="1.0"?>
<fo:root
  xmlns:fo="http://www.w3.org/1999/XSL/Format">
  
  <fo:layout-master-set>
    <fo:simple-page-master master-name="only"
      page-width="5.5cm"
      margin-left="1cm">
      <fo:region-body/>
    </fo:simple-page-master>
  </fo:layout-master-set>

  <fo:page-sequence master-name="only">
    <fo:flow flow-name="xsl-region-body">
      <fo:block font-size="18pt">
        A small
        <fo:external-graphic src="file:fo.jpg"/>
        example
      </fo:block>
    </fo:flow>
  </fo:page-sequence>

</fo:root>
bsp


5. Struktur eines XSL FO-Dokuments


5.1 fo:root


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


5.2 fo:layout-master-set / fo:simple-page-master


<fo:layout-master-set>
  
  <fo:simple-page-master master-name="Titelseite">
    page-height="21cm"
    page-width="16cm"
    margin-top="1cm"
    margin-bottom="1cm"
    margin-left="1cm"
    margin-right="1cm">
    <fo:region-before/>
    <fo:region-body/>
  </fo:simple-page-master>
  ...
  ...
</fo:layout-master-set>


5.3 fo:page-sequence


<fo:page-sequence master-name="Titelseite">

  <fo:static-content flow-name="xsl-region-before">
    <fo:block>
      Das ist die Kopf-Zeile
    </fo:block>
  </fo:static-content>

  <fo:flow flow-name="xsl-region-body">
    <fo:block text-align="justify" font-size="16pt" padding="3pt">
      Hier ist der Text der Titelseite.
    </fo:block>
  </fo:flow>

</fo:page-sequence>


5.4 fo:region-body, fo:region-before,...

fo_before



5.5 fo:flow


<fo:flow flow-name="xsl-region-body">

  <fo:block font-size="16pt">
    This is the document content. This is the
    <fo:external-graphic src="cup.gif"/>
    document content. This is the...
  </fo:block>

</fo:flow>
cup


5.6 fo:static-content


<fo:static-content flow-name="xsl-region-after">

  <fo:block text-align="end" font-size="10pt">
    Seite <fo:page-number/>
  </fo:block>

</fo:static-content>
fo_static_content



5.7 fo:block


<fo:block font-size="36pt">

  Kapitel 1: Einführung

</fo:block>


5.8 fo:block-container


<fo:block font-size="14pt">

  Hier ist
  <fo:block-container reference-orientation="90">
    ein
  </fo:block-container>
  Beispiel

</fo:block>
fo_block_container


5.9 fo:inline


<fo:block font-family="Times Roman">

  Hier ist

  <fo:inline font-style="italic">
    ein
  </fo:inline>

  Abschnitt

  <fo:inline font-weight="bold">
    mit
  </fo:inline>

  verschiedenen

  <fo:inline color="blue">
    Formaten.
  </fo:inline>

</fo:block>
fo_inline


5.10 fo:character


<fo:block font-size="12pt">

  <fo:character character="H" font-size="16pt" color="blue"/>
   ello
  <fo:character character="W" font-size="16pt" color="red"/>
  orld!

</fo:block>
fo_character


5.11 fo:external-graphic


<fo: block>

  Look at this!
  <fo:external-graphic src="cup.jpg"/>

</fo:block>
fo_external_graphic


5.12 fo:list-block, fo:list-item


<fo:list-block provisional-distance-between-starts="0.5cm">

  <fo:list-item>

    <fo:list-item-label>
      <fo:block>
        a)
      </fo:block>
    </fo:list-item-label>
    <fo:list-item-body start-indent="body-start()">
      <fo:block>
        Dies ist das erste Listenelement.
      </fo:block>
    </fo:list-item-body>
  
  </fo:list-item>
  ...

</fo:list-block>
fo_list_block


5.13 fo:leader


<fo:block>
  <fo:leader leader-pattern="dots" leader-length="7cm"/>
  pattern="dots"
</fo:block>

<fo:block>
  <fo:leader leader-pattern="rule" rule-style="dashed" leader-length="7cm"/>
  pattern="rule" style="dashed"
</fo:block>

<fo:block>
  <fo:leader leader-pattern="rule" rule-thickness="4pt" leader-length="7cm"/>
  pattern="rule" thickness="5mm"
</fo:block>
fo_leader


5.14 fo:footnote


<fo:block>
  Die Fussnote

  <fo:footnote>
    <fo:inline font-size="6pt" vertical-align="super">
      1
    </fo:inline>

    <fo:footnote-body>
      <fo:block font-size="10pt">
        <fo:leader leader-pattern="rule" leader-length="6cm"/>
        1. Hier ist die Fussnote
      </fo:block>
    </fo:footnote-body>
  </fo:footnote>

  befindet sich typischerweise ...
</ fo: block>
fo_footnote


5.15 fo:table-and-caption,fo:table, ...


<fo:table border="1pt solid black" background-color="#EEEEEE">
  <fo:table-column column-width="20mm"/>
  <fo:table-column column-width="30mm"/>

  <fo:table-body>

    <fo:table-row>

      <fo:table-cell border="2pt solid black" padding="3pt">
        <fo:block>
          HTML
        </fo:block>
      </fo:table-cell>

      <fo:table-cell border="2pt solid black" padding="3pt">
        <fo:block>
          XML-FO
        </fo:block>
      </fo:table-cell>

    </fo:table-row>
    ...
  </fo:table-body>

</fo:table>
fo_table


6 XSL-FO Attribute



6.1 Character Properties


<fo:block font-family="Helvetica" font-size="12pt">

  Hier ist ein
  <fo:inline text-decoration="underline">
    wichtiger
  </fo:inline>
  <fo:inline color="red" font-weight="900">
    Text
  </fo:inline>

</fo:block>
character_properties



6.2 Sentence Properties


<fo: block line-height="32pt" text-align="left">
  Hier ist ein linksbündiger Text, ...
</fo:block>

<fo: block line-height="48pt" text-align="center">
  Hier ist ein zentrierter Text, ...
</fo:block>
sentence_properties

7 Anwendungsbeispiele für XSL FO

  1. XSL FO als eigenständige Seitenbeschreibungssprache für verschiedene Ausgabemedien -> Vgl. PDF oder TEX

    D.h. die XSL FO-Tags werden mit einem Editor direkt eingegeben und später gerendert

  2. Einsatz von XSL FO in Kombination mit XML und XSLT und einer client-basierten Software zur Ausgabe

    z.B. Antenna House XSL Formatter

  3. Einsatz im WWW-Umfeld (z.B. content-orientierte Webseiten / Portale) um z.B. dynamisch PDF-Dokumente zu erzeugen

    z.B. Apache fop Projekt

7.1 Software-Tools

7.2 Antenna House XSL Formatter

Antenna House Architektur

7.3 Antenna House XSL Formatter - Beispiel

<?xml version="1.0"?>
<xsl:stylesheet xmlns:xsl="http://www.w3.org/1999/XSL/Transform" version="1.0" 
  xmlns:fo="http://www.w3.org/1999/XSL/Format">

  <xsl:template match="doc">
    <fo:root xmlns:fo="http://www.w3.org/1999/XSL/Format">
  
      <fo:layout-master-set>
        <fo:simple-page-master master-name="single" 
          page-height="21cm"   page-width="29.7cm"
          margin-top="1cm"     margin-bottom="2cm"
          margin-left="2.5cm"  margin-right="2.5cm">
          <fo:region-body margin-top="2cm"/>
        </fo:simple-page-master>
      </fo:layout-master-set>

      <fo:page-sequence master-name="single">
        <fo:flow flow-name="xsl-region-body">
          <xsl:apply-templates select="body"/>
        </fo:flow>
      </fo:page-sequence>

    </fo:root>
  </xsl:template>

  <xsl:template match="body">
    <fo:block font-size="24pt" font-family="sans-serif" text-align="center">
      <xsl:apply-templates/>
    </fo:block>
  </xsl:template>

</xsl:stylesheet>

7.4 Antenna House XSL Formatter - Beispiel

<?xml version="1.0"?>
<doc>
  <body>
    Hier beginnt die flow-area...
  </body>
</doc>
        

8 Literatur und Quellenverzeichnis