info@a-coding-project.de

XPointer: Sprachschatz

Der Sprachschatz von XPointer umfaßt alle nötigen Anweisungen um auf einen bestimmten Bestandteil eines XML-Datensatzes zeigen zu können. Der Sprachschatz umfaßt eine Reihe von Zeigerdefinitionen, die einen XML-Datensatz als Quelle durchsuchen und auf einen treffenden Bereich verweisen.

Zeiger in Kurzschreibweise

Bei Zeigern in Kurzschreibweise wird lediglich auf ein einziges Element des zu durchsuchenden Datensatzes gezeigt. Dazu wird ein Name angegeben, nach dem der Datensatz durchsucht werden soll. Existiert mehrere treffende Elemente im Datensatz, so wird auf das erste gezeigt. Durch die folgenden Regeln wird ein Element als treffend ausgewählt:

  • hat ein Element ein id-Attribut dessen Wert mit dem gesuchten Namen übereinstimmt gilt es als treffend
  • hat ein Element ein Kindelement auf das 1. zutrifft, so gilt dieses Kindelement als treffend
Bitte beachten Sie, dass das id-Attribut sowohl durch das XML-Schema, durch die jeweiligeDTDals auch durch eine externe Definition festgelegt sein kann. Ein durch eineDTDdefiniertes id-Attribut muss dabei dem Typ ID abstammen. Auch bei id-Attributen, die durch das XML-Schema definiert werden, muss gelten, dass diese dem Typ ID abstammen und zum XML-Schema Namensraum gehören. Externe id-Attribute können durch das jeweilige verarbeitende Programm auffindbar gemacht werden.

Wird kein solches Element gefunden, ist das ausführende Programm angewiesen einen Fehler auszugeben.

Zeiger in ausführlicher Schreibweise

Ein Zeiger in ausführlicher Schreibweise besteht aus einem Zeigernamen/-bezeichner und einem Zeigerteil innerhalb von runden Klammern (also z.B.: zeigername(zeigerdefinition1 zeigerdefinition2 usw.) ). Der Zeigername gibt Auskunft darüber, wie der in Klammern stehende Inhalt verarbeitet werden soll. XPointer definiert dazu 2 verschiedene Zeigertypen sowie eine Verknüpfung: xpointer(), element() und xmlns().

Zeigertyp: xpointer()

Der Zeigertyp xpointer() entspricht einem normalen XPath-Ausdruck, mit dem Unterschied, dass hier auch Funktionen und Schreibweisen von XPointer verwendet werden können. Beispiel:

quelle.xml#xpointer(id("zielid"))

Durch die im Beispiel gezeigte Schreibweise wird auf das Element im Dokument quelle.xml gezeigt, dass die ID zielid besitzt. Ebenso können auch mehrere Zeiger durch Whitespaces verknüpft werden. Beispiel:

quelle.xml#xpointer(id("zielid1")) xpointer(id("zielid2"))

... zeigt auf ein Element mit der ID zielid1, das sich im Dokument quelle.xml befindet. Existiert dieses Element nicht, werden alle alternativen Ausdrücke von links nach rechts überprüft. D.h. hier, dass anschließend nach einem Element der ID zielid2 gesucht wird. Wurde ein entsprechendes Element gefunden, werden keine weiteren Alternativen gesucht.

Zeigertyp: element()

Der Zeigertyp element() zeigt auf ein einzelnes Element innerhalb des Dokuments. Dazu kann entweder die Element-ID oder eine Indexsequenz notiert werden. Eine Indexsequenz besteht aus einer Reihe von Indexnummern der einzelnen Elemente die durch einen Schrägstrich voneinander getrennt werden. Sie beginnt selbst auch mit einem Schrägstrich. Durch jeden Strich wird verdeutlicht, dass die nächste Zahl der Index eines Kindelements ist der letzten ist. Existiert beispielsweise folgendes Dokument ...

<A id="erster">
 <B></B>
 <C>
  <D />
 </C>
</A>

... so kann das Element D über die Indexsequenz

#element(/1/2/1)

... ausgewählt werden.

Ebenso läßt sich die Sequenz auch mit der ID verknüpfen:

#element(erster/2/1)

Verknüpfung: xmlns()

Die Verknüpfung xmlns() wird verwendet um eine XML-Resource an einen Namespace zu binden (ähnlich xmlns:Name="http://..."). Innerhalb der Klammern wird dazu der Name des Namespaces, ein Gleichheitszeichen sowie die zu verknüpfendeURLangegeben. Trifft ein Programm auf eine solche Verknüpfung, wird diese ausgeführt und danach dennoch der nächste Zeiger behandelt (obwohl es normalerweise nach dem ersten Erfolg keine weitere Verarbeitung geben würde). Der praktische Nutzen soll anhand des folgenden Beispiels demonstriert werden. Als Quelle verwenden wir:

<A xmlns="http://elementA">
 <B xmlns="http://elementB">
 </B>
</A>

Mit dem Ausdruck ...

xmlns(NameA=http://elementA) xmlns(NameB=http:// elementA) 
xpointer(/NameA:A/NameB:B)

kann so über die Namensräume hinweg auf die Elemente zugegriffen werden. Dies ist besonders dann nützlich, wenn mehrere Elemente mit dem gleichen Namen, aber aus einem anderen Namensraum existieren.

Über uns

Stefan Wienströer

Wir entwickeln Webanwendungen mit viel Leidenschaft. Unser Wissen geben wir dabei gerne weiter. Mehr über a coding project

Auch interessant