XPointer in Links

(Auszug aus "XML in a Nutshell" von Elliotte Rusty Harold & W. Scott Means)

Worauf ein XPointer verweist, hängt ganz offensichtlich von dem Dokument ab, auf das er angewendet wird. Dieses Dokument wird durch die URL bestimmt, mit der der XPointer verknüpft ist. Wenn Sie beispielsweise eine URL haben wollen, die auf das erste name-Element im Dokument unter "http://beispiel.org/leute.xml" verweist, geben Sie Folgendes ein:

"http://beispiel.org/leute.xml#xpointer(//name[position( )=1])"

Verwendet der XPointer irgendwelche Zeichen, die in URIs nicht erlaubt sind – wie das Kleiner-als-Zeichen <, die doppelten Anführungszeichen " oder Nicht-ASCII-Zeichen wie é –, müssen diese der URI-Spezifikation gemäß hexadezimal geschützt werden, bevor der XPointer mit dem URI verknüpft wird: Jedes dieser Zeichen wird durch ein Prozentzeichen, gefolgt vom Hexadezimalwert jedes Bytes des Zeichens in der UTF-8-Kodierung von Unicode ersetzt. Das heißt, aus < würde dann %3C, aus " würde %22 und aus é %C3%A9.

In HTML können die URLs in a-Elementen einen XPointer-Fragmentbezeichner enthalten:

<a href="http://beispiel.org/leute.xml#xpointer(//name[position( )=1])">Der Name einer Person</a>

Würde ein Browser diesem Link folgen, würde er vermutlich das gesamte Dokument laden, das sich unter "http://beispiel.org/leute.xml" befindet, und dann das Fenster an den Anfang des ersten name-Elements in diesem Dokument verschieben. Es gibt allerdings noch keine Browser, die das XPointer-Schema unterstützen, das genaue Verhalten ist daher unklar und kann noch diskutiert werden. In manchen Situationen wäre es sicher sinnvoll, wenn der Browser anstelle des gesamten Dokuments nur den oder die Elementknoten darstellen würde, auf die mittels XPointer verwiesen wird.

Anmerkung: Mozilla 1.4 und spätere Versionen unterstützen das von Simon St.Laurent vorgeschlagene XPointer-Schema xpath1(). xpath1( ) ist im Wesentlichen mit dem hier besprochenen Schema xpointer( ) identisch. xpath1( ) schließt allerdings nicht die XPath-Erweiterungen für Punkte und Bereiche ein, die das Schema xpointer( ) unterstützt. Es unterstützt nur reine XPath 1.0-Ausdrücke, was die Implementierung erleichtert.

Da XPath nur Knoten in einem wohlgeformten XML-Dokument finden kann, können XPointer nur auf XML-Dokumente zeigen. Sie können sie nicht benutzen, um auf nicht wohlgeformtes HTML, einfache Textdateien oder andere Nicht-XML-Dokumente zu verweisen. Es ist jedoch vollkommen in Ordnung, von HTML-Dokumenten aus zu verweisen, genau wie XPointer in Bücher zu drucken, sie auf die Mauern von Gebäuden zu malen oder sie in irgendeiner Weise zu übermitteln, in der Text übermittelt werden kann.

XPointer werden häufiger in XLinks verwendet. Dieser einfache Link z.B. zeigt auf das erste buch-Kindelement des Kindelements buecher des Wurzelelements testament in dem Dokument unter der relativen URL at.xml:

<Am_Anfang xlink:type="simple" xlink:href="at.xml#xpointer(/testament/buecher/buch[position( )=1])">Die Genesis</Am_Anfang>

In erweiterten Links kann ein XPointer bei der Identifizierung sowohl der Anfangs- wie der Zielressourcen eines Bogens helfen. Dieser erweiterte XLink z.B. etabliert einen Bogen zwischen dem letzten v-Element in dem Dokument unter der relativen URL at.xml und dem ersten v-Element des Dokuments unter der relativen URL nt.xml. Dann erstellt er einen Link vom ersten v-Element in nt.xml zum letzten v-Element in at.xml:

<Bibel xlink:type="extended" xmlns:xlink="http://www.w3.org/1999/xlink">
  <testament xlink:type="locator" xlink:label="at.2" xlink:href="at.xml#xpointer(//v[position()=last(  )])" />
  <testament xlink:type="locator" xlink:label="nt" xlink:href="nt.xml#xpointer(//v[position(  )=1])" />
  <nächstes xlink:from="at" xlink:to="nt"/>
  <vorheriges xlink:from="nt" xlink:to="at"/>
</Bibel>

Links können sogar völlig intern verlaufen; d.h., sie können von einer Stelle in einem Dokument auf eine andere Stelle im gleichen Dokument verweisen. Das Element folie aus diesem Präsentationsbeispiel enthält einfache XLinks, die auf die ersten und letzten Folienelemente verweisen:

<folie xmlns:xlink="http://www.w3.org/1999/xlink">
  <punkt>Acme Wonder Goo ist ein ausgesprochen leckeres Dessert!</punkt>
  <punkt>Acme Wonder Goo ist ein kräftiger Fliesenreiniger!</punkt>
  <punkt>Sie erhalten zwei Produkte in einem!</punkt>
  <erste xlink:type="simple" xlink:href="#xpointer(//folie[position(  )=1])">Anfang</erste>
  <letzte xlink:type="simple" xlink:href="#xpointer(//folie[position(  )=last()])">Ende</letzte>
</folie>

Wenn die XPath-Ausdrücke in einem XPointer selbst relativ sind, ist der Kontextknoten das Wurzelelement des Entity, das den XPointer enthält.

  

<< zurück vor >>

 

 

 

Tipp der data2type-Redaktion:
Zum Thema XML bieten wir auch folgende Schulungen zur Vertiefung und professionellen Fortbildung an:

  


Copyright © 2005 O'Reilly Verlag GmbH & Co. KG
Für Ihren privaten Gebrauch dürfen Sie die Online-Version ausdrucken.
Ansonsten unterliegt dieses Kapitel aus dem Buch "XML in a Nutshell" 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.

O’Reilly Verlag GmbH & Co. KG, Balthasarstraße 81, 50670 Köln, kommentar(at)oreilly.de