vorheriges KapitelInhaltsverzeichnisStichwortverzeichnisFeedbacknächstes Kapitel


Tag 18

XBase und XInclude

Mehrere in Entwicklung befindliche Technologien sollten für zukünftige XML- Implementierungen in Betracht gezogen werden. Die XBase-Empfehlung (XML Base) vom W3C beschreibt eine Möglichkeit, Basis-URIs für Teile von XML-Dokumenten zu definieren. XML Inclusions 1.0 (XInclude) stellt eine Verarbeitungsspezifikation für die allgemeine Einbeziehung von XML-Dokumenten oder Dokumentteilen in einem Mischprozess bereit. Heute lernen Sie die folgenden Dinge kennen:

18.1 XML Base

Der XML Base-Vorschlag wurde am 27. Juni 2001 zur Empfehlung des W3C erhoben. XBase beschreibt ein einzelnes, Namensraum-fähiges Attribut (xml:base), das einen Basis- URI angeben soll, der verwendet wird, um einen vollständig qualifizierten relativen URI in einem XML-Dokument aufzulösen. HTML-Programmierer erkennen die Ähnlichkeit zwischen XBase und dem HTML-Element BASE, das verwendet wird, um einen Qualifizierungs-URI bereitzustellen, um URIs in HTML-Links auf Bilder, Style Sheets, Applets usw. aufzulösen.

Die XBase-Empfehlung spezifiziert ein Attribut, das Sie am besten in einem XLink- Element platzieren. In der Zukunft könnte es aber auch für die Verwendung zusammen mit anderen XML-Technologien geeignet sein, die aus der Auflösung eines vollständig qualifizierten URI profitieren können. Zum Zeitpunkt der Drucklegung dieses Buches findet das Attribut xml:base noch nicht viel Unterstützung auf Browser- und Applikationsebene, obwohl es mit Netscape 6 bereits möglich ist, einen auf diese Weise qualifizierten URI aufzulösen. Weil das Attribut xml:base das Präfix xml: verwendet, wird es automatisch zum URI http://www.w3.org/XML/1998/namespace gebunden.

Das Attribut xml:base

Das Dokument hat dank dem Host, auf dem es sich befindet, einen Basis-URI. Mit anderen Worten, wenn Sie einen relativen URI angeben, kann der Prozessor den vollständig qualifizierten URI auflösen, indem er davon ausgeht, dass der Host die implizite, wenn auch nicht spezifizierte Domain ist, die in den URI aufgenommen werden soll. Angenommen, Sie platzieren einen einfachen XLink in einem nachricht-Element in einem XML-Dokument, wie Sie es aus Kapitel 10 kennen. Der Link kann wie folgt aussehen:

1:   <nachricht xlink:type="simple"
2: xlink:href="ks.html">
3: Denke daran, auf dem Nachhauseweg von der Arbeit Milch zu kaufen
4: </nachricht>

In diesem Beispiel wird der Link simple eingerichtet, der auf das Dokument ks.html verweist (Zeilen 1-2). Es wird vorausgesetzt, dass die zu verknüpfende Ressource lokal in derselben Domain oder auf demselben Server zur Verfügung steht wie das XML- Instanzdokument.

Sie könnten diesen XLink unter Verwendung eines xml:base-Attributs so umschreiben, dass die Position des Links vollständig qualifiziert ist. Angenommen, Sie wollen einen Basis-URI von http://www.architag.com/devan/ für den Link einrichten. Die Syntax für das xml:base-Attribut sieht wie folgt aus:

xml:base="[URI]"

Der von Ihnen kodierte URI wird mit dem verwendeten relativen URI verknüpft - in diesem Fall im Xlink -, um einen vollständig qualifizierten URI bereitzustellen. Mit anderen Worten, der Teil http://www.architag.com/devan des URI wird am Anfang des Ressourcen-URI ks.html eingefügt. Der resultierende vollständig qualifizierte URI für den Link wird damit zu http://www.architag.com/devan/ks.html aufgelöst.

Sie würden dies so kodieren, dass dem nachricht-Element das xml:base-Attribut hinzugefügt wird, etwa wie hier zu sehen:

1:    <nachricht xml:base="http://www.architag.com/devan/" 
2: xlink:type="simple"
3: xlink:href="ks.html">
4: Denke daran, auf dem Nachhauseweg von der Arbeit Milch zu kaufen!
5: </nachricht>

Das xml:base-Attribut für das nachricht-Element (Zeile 1) richtet den Basis-URI als http://www.architag.com/devan ein. Das xlink:href-Attribut hat den Wert ks.html. Der vollständig qualifizierte Ressourcen-URI für diesen XLink wird also aufgelöst zu http://www.architag.com/devan/ks.html.

Einer der Vorteile des XBase-Ansatzes ist, dass Sie einen Basis-URI spezifizieren können und dass dieser auch dann im Dokument bleiben kann, wenn das Dokument auf einen neuen Host verschoben wird. Sie können auch eine XBase-Technik verwenden, um eine einfache Möglichkeit zu bekommen, relative URIs in einer großen XML-Dokument- Instanz zu verändern, indem einfach ein XBase-URI geändert wird, statt jedes Vorkommen des URI im gesamten Dokument abändern zu müssen.

Mehrere XBase-Attribute

Weil das xml:base-Attribut einem Element zugeordnet wird, ist es möglich, dass innerhalb eines XML-Instanzdokuments mehrere solcher Kodierungen vorkommen. Der Gültigkeitsbereich des xml:base-Attributs ist das Element, für das es gesetzt wird, sowie seine untergeordneten Elemente.

Der Basis-URI eines Elements ist also der von einem xml:base-Attribut des Elements angegebene Basis-URI, falls es einen solchen gibt. Falls das Element keinen Basis-URI hat, erbt es den Basis-URI des übergeordneten Elements, falls es einen solchen gibt. Andernfalls ist der Basis-URI für ein Element auch der Basis-URI für das Dokument, in dem das Element enthalten ist. Betrachten Sie beispielsweise den folgenden XML-Ausschnitt:

 1:    <nachricht xml:base="http://www.architag.com/devan/" 
2: xlink:type="simple"
3: xlink:href="ks.html">
4: Denke daran, auf dem Nachhauseweg von der Arbeit Milch zu kaufen
5: <referenz xml:base=http://www.architag.com/
6: xlink:type="simple"
7: xlink:href="index.html">
8: Homepage
9: </referenz>
10: </nachricht>

Das referenz-Element wird in Zeile 5 zum Basis-URI http://www.architag.com gebunden. Der Hypertext-Verweis index.html wird deshalb in den vollständig qualifizierten URI http://www.architag.com/index.html aufgelöst. Würde das xml:base-Attribut in Zeile 5 aus der Dokument-Instanz entfernt, wäre der Hypertext-Verweis zum Basis-URI des übergeordneten nachricht-Elements gebunden und würde sich damit in http://www.architag.com/devan/index.html auflösen, was eine völlig andere Adressposition darstellte. Werden also die xml:base-Attribute in den Zeilen 1 und 5 entfernt, lösen sich die Hypertext-Verweise in den Zeilen 3 und 7 in den Basis-URI des XML-Instanzdokuments auf. Das würde normalerweise zu einer Auflösung zu dem Server führen, auf dem sich das Dokument befindet.

18.2 XML Inclusions

Die XInclude 1.0-Spezifikation ist ein W3C-Arbeitsentwurf in der letzten Phase. Die Empfehlung beinhaltet ein Verarbeitungsmodell sowie einen Vorschlag für die Syntax der Aufnahme separater XML-Dokumente in eine einzelne Instanz. Sie kennen das Konzept der wiederverwendbaren Komponenten vielleicht bereits aus der objektorientierten Programmierung. Sprachen wie C++ oder Java erlauben Ihnen, Klassen von Methoden und Importen als Komponenten zu implementieren. XInclude verspricht, eine Möglichkeit bereitzustellen, denselben modularen Ansatz mit komplexen XML-Dokument-Instanzen zu realisieren. Mithilfe von XInclude können Sie ein Dokument aufbauen, indem Sie andere über einen URI referenzierte Dokumente kombinieren.

Die Verarbeitung der Einbindungen, die während des Parsens erfolgt, ist eine beschränkte Form der Transformation. In Kapitel 16 haben Sie XSL-Transformationen kennen gelernt. Dies ist eine viel einfachere Form der Transformation und dient nur dazu, die betreffenden Dokumente zu einem einzigen Ausgabedokument zu kombinieren. Das resultierende Dokument stellt jedoch eine neue Baumstruktur dar, die aus dem Inhalt besteht, der während der Einbindung hinzugefügt wurde. Vor dem Einbindungsprozess wird das Ausgabedokument in der Sprache des W3C-Vorschlags auch als Quell-Infoset bezeichnet. Nach der Einbindung wird das Ausgabedokument als Ergebnis-Infoset bezeichnet.

Jedes Dokument, das in das Ergebnis-Infoset aufgenommen wird, wird über seinen eigenen URI angesprochen. Das Ergebnis-Infoset ist also das Quell-Infoset, nachdem der Inhalt jedes der eingebundenen Infosets das entsprechende XInclude-Element ersetzt hat. Ein zwingend erforderliches href-Attribut für ein XInclude-Element deklariert den URI des referenzierten XML-Dokuments, das in das Ergebnis-Infoset aufgenommen werden soll. Das include-Element gehört zum XInclude-Namensraum (http://www.w3.org/1999/XM/ xinclude) und wird normalerweise über ein xinclude:-Präfix angesprochen, das als Proxy für den Namensraum dient. Daraus folgt, dass die einfachste Syntax für das XInclude- Element mit einem href-Attribut so aussieht:

<xinclude:include href="[URL]"/>

Angenommen, Sie arbeiten an einem Strategiehandbuch für Ihr Unternehmen und verschiedene Abteilungen tragen zu den Kapiteln dieses Handbuchs bei. Jede Abteilung könnte ein XML-Dokument bereitstellen, das verschiedene Strategien enthält, die in das resultierende Dokument eingebunden werden sollen. Vielleicht möchte die Personalabteilung Details für Richtlinien zum Urlaubsanspruch und zu Gesundheitsvorsorgeuntersuchungen veröffentlichen (HR.xml). Die Buchhaltung will Richtlinien für Bestellungen und Reisekostenabrechungen bekannt machen (Finanz.xml). Die Verwaltung will etwas zu den Unternehmenszielen sagen (Verwa.xml). Sie könnten ein Master-Dokument einrichten (Politik.xml), das das vollständige Handbuch aufnimmt, und die Beiträge der einzelnen Abteilungen, aus denen sich das fertige Handbuch zusammensetzen soll, einbinden. Abbildung 18.1 zeigt dieses Szenario.

Abbildung 18.1:  Dokumente mithilfe von XInclude kombinieren

Ihr Dokument policy.xml würde die XInclude-Elemente mit den href-Attributen HR.xml, Finanz.xml und Verwa.xml enthalten. Listing 18.1 zeigt eine mögliche Kodierung eines policy.xml-Dokuments, das XInclude verwendet.

Listing 18.1: Ein Quell-Infoset mit XInclude-Elementen - policy.xml

 1: <?xml version="1.0"?>
2: <!-- listing 18.1 - policy.xml -->
3:
4: <handbuch xmlns:xinclude="http://www.w3.org/1999/XML/xinclude">
5: <prolog>Handbuch für Unternehmensstrategien</prolog>
6: <abschnitt><xinclude:include href="HR.xml"/></abschnitt>
7: <abschnitt><xinclude:include href="Finanz.xml"/></abschnitt>
8: <abschnitt><xinclude:include href="Verwa.xml"/></abschnitt>
9: </handbuch>

Das Wurzelelement handbuch beinhaltet ein xmlns:include-Attribut, das den XInclude-Namensraum (http://www.w3.org/1999/XML/xinclude) deklariert. Jedes untergeordnete abschnitt-Element des Wurzelelements (Zeilen 6-9) enthält ein xinclude:include-Element mit einem href-Wert, der jeweils einem der betreffenden XML-Dokumente (HR.xml, Finanz.xml oder Verwa.xml) entspricht, die zu policy.xml kombiniert werden sollen.

XML-Parsen während der Einbindung

Für das XInclude-Element kann ein optionales xinclude:parse-Attribut gesetzt werden, das angibt, ob das referenzierte Dokument als XML oder als einfacher Text betrachtet werden soll. Hat das Attribut den Wert xml, wird das referenzierte Dokument als XML betrachtet und vor dem Einbinden erfolgen ganz normale Parsing-Aufgaben wie beispielsweise Entity-Substitution, Auswertung oder XInclude. Der zweite mögliche Wert für dieses Attribut ist text, was dazu führt, dass das eingebundene Dokument als reine Text- Zeichendaten betrachtet und nicht geparst werden.

XPointer-Ausdrücke

Das href-Attribut kann XPointer-Ausdrücke enthalten, um einen Teil eines referenzierten Dokuments statt das gesamte Dokument aufzunehmen. In Kapitel 11 wurden XPointer- Fragmente vorgestellt. Angenommen, Sie kennen die Struktur der zuvor beschriebenen Datei HR.xml und sie enthält mehrere untergeordnete abschnitt-Elemente in verschiedenen Abschnitten, wie beispielsweise einleitung, policy_1 und policy_2. Wenn Sie beispielsweise die untergeordneten abschnitt-Elemente des einleitung-Elements einbinden wollen, können Sie XInclude mit XPointer einsetzen. Der Teil des Quell- Infosets, in dem die Einbindung stattfindet, könnte wie folgt aussehen:

<abschnitt>
<xinclude:include href="HR.xml#xpointer(einleitung/abschnitt)"/>
</abschnitt>

XInclude-Unterstützung

Zum Zeitpunkt der Drucklegung dieses Buches wird XInclude noch nicht in vielen Applikationen unterstützt. Browser führen keine XInclude-Transformationen aus; Sie müssen Ihre eigene Logik entwickeln, um Einbindungen zu verarbeiten. Das kann beispielsweise in Java erfolgen, um eine bestimmte Anforderung abzudecken. Sobald XInclude weiter gereift ist und die formale W3C-Empfehlungsprozedur durchlaufen hat, wird es auf Browserebene unterstützt.

Es hat den Anschein, dass XInclude ganz ähnlich wie XLink ist, wenn das show-Attribut den Wert embed erhält, aber letztlich unterscheiden sie sich sehr wohl. Der XLink/embed-Ansatz erzeugt keine neue Baumstruktur. XML-Einbindungen verwenden das Ergebnis eines Transformationsansatzes in einem völlig anderen Ergebnis-Infoset. Mit anderen Worten, Xlink mit dem Attribut show="embed" erzeugt keine neue XML-Baumstruktur.

18.3 Zusammenfassung

Dies war ein relativ kurzes Kapitel, in dem Sie zwei in Entstehung begriffene Technologien kennen gelernt haben: XBase und XInclude. Sie haben erfahren, dass XBase eine Möglichkeit bietet, Basis-URIs für relative Links in einem XML-Dokument zur Verfügung zu stellen. Das ist grundsätzlich vergleichbar mit dem HTML-Element BASE. Außerdem haben Sie XInclude kennen gelernt, eine Möglichkeit, Daten aus mehreren Dokumenten in ein transformiertes Ergebnis-Infoset einzufügen. Wenn ein XInclude- fähiger Prozessor ein Quell-Infoset-Dokument parst und auf xinclude-Elemente trifft, werden dafür die am betreffenden URI befindlichen Daten eingesetzt. Sie können ein referenziertes Dokument optional als XML-Instanz parsen. Obwohl XInclude von den Browsern noch nicht allgemein unterstützt wird, kann man davon ausgehen, dass mehr Prozessoren entwickelt werden, nachdem die W3C den Vorschlag formalisiert hat.

18.4 Fragen und Antworten

Frage:
Wie wird ein Basis-URI durch das Verschieben eines XML-Dokuments auf eine neue Host-Domain beeinflusst?

Antwort:
Der Basis-URI auf Dokumentebene reflektiert den neuen Host. Wenn Sie jedoch einen XBase-URI für relative Links in Ihrem Dokument kodiert haben, können diese gleich bleiben, selbst wenn das Dokument verschoben wird.

Frage:
Gibt es eine Obergrenze für die Anzahl der Dokumente, die mit XInclude eingebunden werden können?

Antwort:
Es gibt keine Beschränkung für die Anzahl der Dokumente, die mit XML Inclusion eingebunden werden können. Es ist möglich, eine sehr große und komplexe XML-Instanz zu konstruieren, welche die XInclude-Modularität extensiv nutzt.

Frage:
Welche Einschränkungen weist XInclude auf?

Antwort:
Die einzige und größte Einschränkung von XML Inclusions ist die fehlende Prozessor-Unterstützung. Wenn die Browser irgendwann XInclude unterstützen werden, wird auch modulares XML zur Realität.

Frage:
Gibt es momentan Prozessoren, die XInclude unterstützen?

Antwort:
Zum Zeitpunkt der Drucklegung dieses Buches unterstützt die Apache XML Project Software Cocoon XInclude. Cocoon ist ein Gerüst für Veröffentlichungen, das als Open Source Java-Software implementiert ist. Cocoon verwendet mehrere W3C-Technologien wie beispielsweise XMl, XSL, DOM und XInclude, um Webinhalt zur Verfügung zu stellen.



vorheriges KapitelInhaltsverzeichnisStichwortverzeichnisFeedbackKapitelanfangnächstes Kapitel


© Markt+Technik Verlag, ein Imprint der Pearson Education Deutschland GmbH