12. Querverweise/Hyperlinks

In XSL-FO besteht die Möglichkeit, Querverweise/Hyperlinks zu erzeugen. Diese können entweder auf ein Ziel innerhalb des Dokuments verweisen oder aber auf externe Quellen.

Die Nutzung solcher Querverweise/Hyperlinks unterscheidet sich, je nachdem welches Medium zur Ausgabe eingesetzt wird: PDF in einem interaktiven Reader wird die Hyperlink-Funktion nutzen, um beispielsweise vom Link-Ursprung durch Klicken zum Link-Ziel zu navigieren. Im Druck wird man die Querverweis-Funktion nutzen, um beispielsweise an der Stelle des Verweisursprungs die Bezeichnung/den Titel des Verweisziels erscheinen zu lassen. Basis beider Funktionen ist das Element <fo:basic-link>.

Zunächst muss das Verweisziel bezeichnet werden. Dies geschieht dadurch, dass dem Block, der das Verweisziel beinhaltet (ein Kapitel, eine Grafik, eine Tabelle, eine Überschrift u. a.), das Attribut id beigefügt wird und mit einem eindeutigen Identifikator versehen wird. Das Attribut id kann Blöcken jeder Art und sogar inzeiligen Elementen zugeordnet werden.

An der Stelle des Verweisursprungs wird das Element <fo:basic-link> gesetzt.

Das Element <fo:basic-link> kann eine Fülle von Attributen enthalten. Für die Demonstration dieses Konzepts sind allerdings nur drei Attribute von Bedeutung:

  • Im Fall eines Dokument-internen Verweisziels wird das Attribut internal-destination gesetzt. Dessen Wert verweist auf das Verweisziel mittels eines XPath-Ausdrucks.

  • Im Fall eines Dokument-externen Verweisziels wird das Attribut external-destination gesetzt. Dessen Wert verweist auf eine Stelle außerhalb des Dokuments. Dies kann eine Web-Adresse oder ein anderes Dokument sein.

  • Zu spezifizieren ist außerdem das Verhalten des Links/Verweises: Dies geschieht mit dem Attribut show-destination (Anzeige des Verweisziels). Der Vorgabewert ist replace, d. h. das Verweisziel wird in der gegebenen Sicht (das ist im Falle des Drucks immer die Druckseite) angezeigt. Der alternative Wert new öffnet das Verweisziel in einer neuen Sicht, hat also für die Druckausgabe keine Bedeutung.

Zu beachten ist, dass die Hyperlink-Funktionalität in der PDF-Ausgabe abhängig davon ist, ob der die Formatierung übernehmende PDF-Generator auf Grund der XSL-FO-Codierung automatisch übernimmt oder zusätzliche Eingriffe in das Formatier-Ergebnis verlangt.

Das folgende Beispiel hat drei Komponenten, weil in der Verarbeitung die Auflösung des Verweises/Links durch den XSLT-Prozess erfolgt, nicht also erst im Formatier-Prozess geschieht: Das zu formatierende XML-Dokument, das XSL-Stylesheet und das resultierende XSL-FO-Dokument.

Ausschnitt aus dem zu formatierenden XML-Dokument:

<titel id="links">Querverweise/Hyperlinks</titel>   (1)
 ...
 text ... <ref idref="links"/> ... text ...         (2)

(1) Dies ist das Verweisziel im XML-Dokument. Der Titel hat für das Attribut id den Wert "links".

(2) Dies ist der Verweisursprung. Das Attribut idref verweist durch seinen Wert "links" auf den Titel mit dem gleichen Wert im Attribut id.

Ausschnitt aus dem XSL-Stylesheet:

<xsl:template match="titel">                                        (1)
   <fo:block id="{generate-id()}" ...>                              (2)
      <xsl:apply-templates/>
   </fo:block>
</xsl:template>
 ...
<xsl:template match="ref">                                          (3)
   <xsl:for-each select="//titel[contains(@id,current()/@idref)]">  (4)
      <fo:inline text-decoration="underline">                       (5)
         <fo:basic-link internal-destination="{generate-id()}" show-destination="replace"> (6)
            <xsl:value-of select="."/>                              (7)
         </fo:basic-link>
      </fo:inline>
   </xsl:for-each>
</xsl:template>

(1) Dies ist das Template für das Element <titel>.

(2) Dem Block, der den Inhalt des Titels aufnehmen soll, wird ein Attribut id beigefügt, dessen Wert durch den XSLT-Prozessor generiert werden soll und mit der Funktion generate-id() spezifiziert ist.

(3) Dies ist das Template für das Element <ref>.

(4) Das <xsl:for-each>-Element bestimmt für jedes Auftreten gleicher id-idref-Attributwerte für Verweisziel <titel> und Verweisursprung <ref> das in den folgenden Zeilen Spezifizierte. Der Attributwert von select ist ein XPath-Ausdruck, der das Verweisziel so beschreibt: Ein Element <titel> in jeder Umgebung, das für das Attribut id den gleichen Wert ("links") hat wie das Attribut idref des hier gegebenen Elements <ref>.

(5) Das Attribut text-decoration wird lediglich gesetzt, um den Link-Ursprung im PDF als solchen kenntlich zu machen.

(6) Der Attributwert von internal-destination soll ebenfalls mit der Funktion generate-id() im XSLT-Prozess generiert werden (s. die Parallele für <titel>). Das Attribut show-destination mit seinem Wert replace ist lediglich der Klarheit wegen definiert.

(7) Durch diesen XSLT-Ausdruck wird der Inhalt des <titel>-Elements in das <fo:basic-link>-Element eingefügt. Würde man nicht den Inhalt des Elements <titel>, sondern die Seitenzahl, auf der der Titel erscheint, einfügen wollen, hieße der Ausdruck in dieser Zeile <fo:page-number-citation ref-id="{generate-id()}"/>.

Ausschnitt aus dem resultierenden XSL-FO-Dokument:

...
 <fo:block id="IDAHGBZB" ...>Querverweise / Hyperlinks</fo:block>           (1)
 ...
 ...<fo:inline text-decoration="underline">
 <fo:basic-link internal-destination="IDAHGBZB" show-destination="replace"> (2)
 Querverweise / Hyperlinks                                                  (3)
 </fo:basic-link>
 </fo:inline>...

(1) Der Block mit dem Inhalt des Titels hat jetzt für id den durch den XSLT-Prozess generierten Wert "IDAHGBZB".

(2) Das inzeilige Element <fo:basic-link> hat für das Attribut internal-destination den gleichen Wert "IDAHGBZB". Dadurch wird es später dem PDF-Generator ermöglicht, den Hyperlink zwischen den Seiten zu generieren, der Verweisursprung und Verweisziel miteinander verbindet.

(3) Hier wird der Inhalt des Titels eingefügt, auf den verwiesen ist. Stünde im Stylesheet an Stelle von <xsl:value-of> der Ausdruck <fo:page-number-citation>, würde an dieser Stelle durch den Formatierer die Seitenzahl eingetragen, auf der der betreffende Titel steht.

<< zurück  
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