Interne Verweise

Es lassen sich Verweise auf interne Ziele (innerhalb des gegebenen Dokuments) setzen, die auch ggf. im PDF als Hyperlinks genutzt werden können.

In diesem Abschnitt wird anhand eines Beispiels der Einsatz des Elements <fo:basic-link> für das Setzen von internen Verweisen demonstriert, die auch als Hyperlinks genutzt werden können. Die Hyperlink-Funktionalität ist abhängig von der entsprechenden Unterstützung in der PDF-Generierung und im PDF-Viewer.

Auszug aus der DTD:

<!ELEMENT Abschnitt (Titel, ...)>            ❶ 
<!ATTLIST Abschnitt ID CDATA #IMPLIED>       ❶ 
<!ELEMENT Titel (#PCDATA)>
...
<!ELEMENT iV (#PCDATA)>                      ❷ 
<!ATTLIST iV RefID CDATA #REQUIRED>          ❷ 

Das Element <Abschnitt> stellt das Verweisziel dar. Mit dem Attribut ID muss jedem Abschnitt, auf den verwiesen werden soll, eine über das gesamte Dokument eindeutige Identifikation gegeben werden.

Hier wird vereinfachend davon ausgegangen, dass die Abschnittstitel lediglich Text, aber keine Unterstrukturen enthalten.

Mit dem Element <iV> kann auf einzelne Abschnitte verwiesen werden (gleicher Attributwert für RefID wie für das Ziel mit ID). Der Attributwertebereich ist aus pragmatischen Gründen mit CDATA, nicht mit IDREF definiert. Die Attributwerte für ID und RefID müssen aber syntaktisch den Regeln für XML-IDs entsprechen, weil sie in der XSL-FO-Repräsentation IDs und IDREFs entsprechen müssen. Andernfalls funktioniert der Hyperlink nicht. Der #PCDATA-Inhalt dient lediglich zur Aufnahme von Hilfstexten im Redaktionsprozess, wird in diesem Anwendungsbeispiel in der Verarbeitung allerdings nicht genutzt.

Ausschnitt aus der XML-Instanz:

<Abschnitt ID="Beispiel">                                          ❶
   <Titel>Beispiel-Anwendung</Titel>                                
...
</Abschnitt> 
...... 
...<iV RefID="Beispiel">s. Abschnitt Beispiel-Anwendung</iV> ...   ❷
..........

❶ Der gegebene Abschnitt (das Verweisziel) hat die ID mit dem Wert Beispiel.

❷ Der Verweis <iV> hat ebenso den Wert Beispiel für das Attribut RefID. Der textliche Inhalt von <iV> dient lediglich der Orientierung in der Redaktion. Er wird in der Verarbeitung durch den Verweis auf die entsprechende Seite und den Titel des Abschnitts, auf den verwiesen wird, ersetzt.

Stylesheet:

<xsl:template match="Abschnitt">
   <fo:block id="{generate-id()}">                                           ❶ 
      <xsl:apply-templates/>                                                 ❷
   </fo:block>
</xsl:template>
<xsl:template match="iV">
   <xsl:for-each select="//Abschnitt[contains(@ID,current()/@RefID)]">       ❸ 
      <fo:inline text-decoration="underline">                                ❹ 
         <fo:basic-link internal-destination="{generate-id()}">              ❺ 
            (s. Seite <fo:page-number-citation ref-id="{generate-id()}"/>,   ❻ 
            <xsl:value-of select="Titel"/>)                                  ❼                             
         </fo:basic-link>
      </fo:inline>
   </xsl:for-each>
</xsl:template>

❶ Dem Block, der den gesamten Inhalt des Abschnitts umfassen soll, wird ein Attribut id beigefügt, dessen Wert durch den XSLT-Prozessor generiert werden soll und mit der Funktion generate-id() spezifiziert ist. Diese Identifikation wird für den Hyperlink auf diesen Abschnitt benötigt. Sie ist nicht mit dem Attribut ID="Beispiel" für diesen Abschnitt zu verwechseln, das lediglich für die Adressierung des Abschnittes dient, auf den ein Verweis zielt.

❷ Hiermit wird der gesamte Inhalt von <Abschnitt> in den spezifizierten Block unter Beachtung untergeordneter Templates einbezogen.

❸ Für jeden Abschnitt, bei dem der Wert für das Attribut ID gleich dem für das Attribut RefID des gegebenen Verweises ist, werden die folgenden Anweisungen ausgeführt.

❹ Für den Verweis wird ein inzeiliges Element gebildet, dessen Inhalt unterstrichen werden soll, um anzuzeigen, dass hier ein Link hinterlegt ist.

❺ Mit <fo:basic-link> wird der Link spezifiziert. Das Attribut internal-destination bekommt den mit der Funktion generate-id() generierten id-Wert des Blocks, der den Zielabschnitt umfasst.

Der Verweis wird zunächst mit generiertem Text begonnen. Der den Verweis umgebende Text und seine Interpunktion müssen auf diesen Verweistext entsprechend angepasst sein.

❻ Mit <fo:page-number-citation> und der Funktion generate-id() wird auf die Anfangsseite des Zielabschnitts verwiesen.

❼ Schließlich wird in den Verweistext noch der Titel des Zielabschnitts aufgenommen. Bitte beachten Sie, dass <Titel> ein Kind-Element von <Abschnitt> sein muss. Mit <xsl:value-of> wird lediglich dann der vollständige Titel wiedergegeben, wenn dieser Titel lediglich Text, jedoch keine Unterstrukturen enthält.

 

<< 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