Template-Regeln

Die Template-Regeln sind Schablonen zur Transformation des Quellbaums (source tree) in den Ergebnisbaum (result tree). Sie bestehen aus zwei Teilen, von denen der eine als Pattern (Suchmuster) bezeichnet wird und der andere als Template (Ersetzungsmuster), das ausgeführt wird, wenn das Suchmuster einen entsprechenden Treffer im Quellbaum hat.

Template-Aufbau

Template-Aufbau

Zur Demonstration der Arbeitsweise von Templates wird das Beispiel-Stylesheet um mehrere kleine Templates erweitert.

Das Stylesheet:

<?xml version="1.0" encoding="UTF-8"?>
<xsl:stylesheet version="1.0" xmlns:xsl="http://www.w3.org/1999/XSL/Transform">
    <xsl:output encoding="iso-8859-1" />
    <xsl:template match="Gedichtsammlung">
        <html>
            <body>
                <xsl:apply-templates/>              (1)
            </body>
        </html>
    </xsl:template>
    <xsl:template match="Autor">
        <br/>
        <h4>
            <xsl:apply-templates/>
        </h4>
    </xsl:template>
    <xsl:template match="Vorname">
        <xsl:apply-templates/>
        <xsl:text> </xsl:text>                      (2)
    </xsl:template>
    <xsl:template match="Nachname">
        <xsl:apply-templates/>
    </xsl:template>
    <xsl:template match="Titel">
        <h2>
            <xsl:apply-templates/>
        </h2>
    </xsl:template>
    <xsl:template match="Strophe">
        <p>
            <xsl:apply-templates/>
        </p>
    </xsl:template>
    <xsl:template match="Vers">
        <xsl:apply-templates/>
        <br/>
    </xsl:template>
</xsl:stylesheet>

(1) Der Inhalt des <Gedichtsammlung>-Elements wird an an dieser Stelle einschließlich aller Unterelemente mit deren Inhalten hineinkopiert. Der Prozessor sucht nach Unterelementen bis zur bloßen Zeichenbasis und nach möglichen passenden Templates. Da in diesem Beispiel für alle untergeordneten Elemente Templates formuliert sind, wird der Inhalt dieser Templates der Reihe nach in die Zielstruktur kopiert. Gäbe es für ein untergeordnetes Element kein passendes Template in der Reihenfolge des Quelldokumentes, würde der Prozessor dennoch den bloßen Inhalt dieses Elements kopieren.

(2) Mit <xsl:text> wird hier ein Leerzeichen in das Zieldokument kopiert.

Browser-Ansicht des Zieldokumentes:

Browser-Ansicht: Beispiel - Templates

Aufgabe 1

a) Schreiben Sie Templates für die Datei Gedicht.xml. Es sollten alle vorkommenden Elemente unterstützt werden.
Zusätzlich sollte eine Überschrift "Gedichtsammlung" generiert werden, die am Anfang des erzeugten Dokumentes steht.

b) Warum wird der Text eines Elementes angezeigt, obwohl kein Template für ihn definiert wurde?

c) Löschen Sie alle Autorenangaben und tragen Sie sich selbst als Autor ein.

> > zu den Lösungen von Aufgabe 1

Named Templates

In dem gegebenen Beispiel beziehen sich die Templates auf Elemente (Knoten in der XML-Hierarchie des Ausgangsdokuments). Sie werden mit dem Element <xsl:template> und dem Attribut match spezifiziert. Templates können auch unabhängig von solchen Knoten spezifiziert werden. An Stelle des match-Attributs tritt dann das Attribut name mit einem beliebigen Namen, z. B. Vorlage. Das Element <xsl:template> gilt für beide Template-Varianten. Der Aufruf beider Varianten ist unterschiedlich: Knoten-bezogene Templates werden mit dem Element <xsl:apply-templates> aufgerufen. Benannte Templates werden mit dem Element <xsl:call-template> und dem Attribut name aufgerufen, z. B. <xsl:call-template name="Vorlage">. Das match-Attribut (bei <xsl:apply-templates>) bewirkt, dass nach einem Suchmuster im XML-Dokument gesucht wird und erst bei einer Übereinstimmung das Template ausgeführt wird. Das name-Attribut (bei <xsl:call-template>) bewirkt, dass lediglich nach dem Template gleichen Namens im Style­sheet gesucht wird, das an der Stelle des Aufrufs ausgeführt wird.

Das Stylesheet:

<?xml version="1.0" encoding="UTF-8"?>
<xsl:stylesheet version="1.0" xmlns:xsl="http://www.w3.org/1999/XSL/Transform">
    <xsl:output encoding="iso-8859-1" version="1.0"/>
    <xsl:template match="Gedichtsammlung">
        <html>
            <body>
                <h1>Gedichtsammlung</h1>
                <p>
                    <xsl:call-template name="Titel"/>
                </p>
            </body>
        </html>
    </xsl:template>
    <xsl:template name="Titel">
        <br/>Titel: <xsl:apply-templates select="Gedicht/Titel"/>
    </xsl:template>
    <xsl:template match="Titel">
        <h4>
            <xsl:apply-templates/>
        </h4>
    </xsl:template>
</xsl:stylesheet>
Aufgabe 2

a) Weshalb wurde in der Zeile mit dem <xsl:apply-templates select="Gedicht/Titel"/> das Attribut select ergänzt?

b) Schreiben Sie Ihr Stylesheet so um, dass der Vorname und der Nachame des Autors ebenfalls erscheinen.
Hinweis: Die oder-Verknüpfung mehrerer Elemente wird mit "|" erreicht.

c) Was geschieht, wenn ein Element nicht aufgeführt wird?

> > zu den Lösungen von Aufgabe 2

   

<< zurück vor >>

 

Tipp der data2type-Redaktion:
Zum Thema XSLT 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