Dokumente einbinden mit document()

(Auszug aus "XSLT 2.0 & XPath 2.0" von Frank Bongers, Kapitel 3.)

Die document()-Funktion erlaubt das Einbinden externer XML-Dokumente in den Stylesheetverarbeitungsprozess. Diese Einbindung erfolgt dabei vollkom­men unabhängig vom verarbeiteten XML-Dokument. Rückgabewert der Funk­tion ist jeweils der Dokumentknoten eines externen XML-Dokuments.

Beispiel Angenommen es existieren Rezensionen zu einem Buch in Form von externen XML-Dateien, so kann es erwünscht sein, diese Rezension in Zusammenhang mit anderen Informationen über das Buch in ein Ausgabedo­kument auszugeben. Dies könnte beispielsweise folgendermaßen geschehen:

<buch>
   <rezension datum="14.10.2000" quelle="Tip" referenz="rezensionen/tip/14-10-2007/rez1.xml"/>
   <rezension datum="3.12.2000" quelle="Zitty" referenz="rezensionen/zitty/3-12-2007/rez8.xml"/>
</buch>

Diese Rezensionen können nun mit der document()-Funktion durch Übergabe der URI in text ins Ausgabedokument geholt werden, etwa folgendermaßen:

<xsl:template match="buch">
<!-- die Rezension wird Current Node -->
  <xsl:for-each select="rezension">
    <h2>Rezension in <xsl:value-of select="@quelle"/></h2>
    <!-- der entspr. externe Text wird eingebunden: -->
    <xsl:apply-templates select="document(@referenz)"/>
  </xsl:for-each>
</xsl:template>

Hier ist @quelle ein Attribut, das einen URI als Textstring enthält.

Die potenzielle Gefahr ist, dass im referenzierten Dokument gleiche Element­namen mit anderer Bedeutung verwendet werden – für die Transformation werden aber, im Fall des obigen Beispiels, die gleichen Templates eingesetzt wie für das einbettende Dokument.

Ausweg wäre die Verwendung von (unterschiedlichen) Namespaces für beide Dokumentarten oder – was wohl besser wäre – der Einsatz des mode-Attributs beim Aufruf von xsl:apply-templates, also in der Form:

<xsl:apply-templates select="document(@text)" mode="rezension" />
Tipp der data2type-Redaktion:
Zum Thema XSLT bieten wir auch folgende Schulungen zur Vertiefung und professionellen Fortbildung an:

Copyright © Galileo Press, Bonn 2008
Für Ihren privaten Gebrauch dürfen Sie die Online-Version ausdrucken.
Ansonsten unterliegt dieses Kapitel aus dem Buch "XSLT 2.0 & XPath 2.0 ― Das umfassende Handbuch" 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.


Galileo Press, Rheinwerkallee 4, 53227 Bonn