XPointer • Die Xpointer beschreiben einen Ort oder Bereich innerhalb einer XML-Instanz. • Die XPointer bauen auf der XML Path Language auf. • Die XPointer ist eine kleine Mini-Sprache, die Sie am Ende eines URI nach haften können #, im Fall, wohin das URI auf ein XML-Dokument zeigt. (Z.B http://www.wrox.com/Catalog/catalog.xml#xpointer(book1 )) einige Begriffe Bezeichnung Erklärung axis(Achse) Folge von Daten, die XPointer nutzt location(Ort) kann hier ein Punkt oder Bereich sein location-set(Ortmenge) predicate(Prädikat) Geordnete Liste aus dem, was ein XPointer-Ausdruck ergibt Boolscher Ausdruck; von XPointer dazu genutzt Teil-Ressourcen im Verhältnis zu anderen auszuwählen point(Punkt) Ort im Dokument range(Bereich) Auswahl aus dem gesamten Inhalt zwischen zwei Punkten Es gibt drei Arten, wie sich die XPointer ausdrücken lassen: Bare Name (ein Name), Child Sequence (kindfolge) und Full XPointer (ein Fragment). Bare Name • Falls das Element die Attribute vom Typ ID (in DTD oder Schema definiert wird) hat, kann man direkt diesen Attributwert vom Typ ID nutzen, um dieses Element zu finden. • Beispiele: • http://www.xlinksample.com/xpointer.xml#xpointer(id("_ loc")) • Abkürzung:http://www.xlinksample.com/xpointer.xml#_l oc • Auf diese Weise gibt es ein Vorteil: Falls man die Elemente mit Attributen vom Typ ID nutzt, entsteht auf keinen Fall diese Verbindung während der Änderung der Struktur von Dateien den Fehler. Full XPointer • Ein vollstädiger XPointer-Ausdruck kann ein XPointerteil oder mehre XPointerteile enthalten. • Jeder XPointerteil muss mit "xpointer" beginnen. Aufgrund dieses Ausdruck kann man die Verweisoperation tun. • Beispiele: xpointer(/child::spec/child::body) xpointer(descendant::language[position()=2]) Child Sequence: • Außerdem ermöglicht XPointer es, auf Elemente durch Aufschreiben ihres Ortes zuzugreifen: Dafür steht die Kindfolge(ChildSeq). • Auf diese Weise lassen sich Elemente – nicht Attribute oder andere Knoten – über Schrägstriche (/) und Ziffern (n) ansprechen. • Natürlich kann man auch in einem XPointer-Ausdruck vor “Child Sequence“ die “ Bare Name“ benutzen. Dann ist das Wurzelelement das Element mit Attribute vom Typ ID. Sonst muss dieser Ausdruck mit /1 anfangen. 1.Beispiel: #/1/4/2 Mit “Full XPointer“ kann man dieses Beispiel so schreiben: #xpointer(/child::*[position()=1]/child::*[position()=4]/ child::*[position()=2]) 2.Beispiel:#book1/4/3 Mit “Full XPointer” kann man auch dieses Beispiel so schreiben: #xpointer(id(“book1")/child::*[position()=4]/child::*[position()= 3]) • <Catalog> • < Book color =“red“ ID=“book1“> • <Title>IE5 – Eine Referenz für XML-Programmierer</Title> • <Pages>480</Pages> • <ISBN>1-861001-57-6</ISBN> • <RecSubjCategories> • <Category>Internet</Category> • <Category>Web Publishing</Category> • <Category>XML</Category> • </RecSubjCategories> • <Price>49.99</Price> • </Book> • </Catalog> XPath-Erweiterungen in XPointer • Die Verweismöglichkeiten von XPath basieren auf Knoten in XML-Dokumenten. • Aber vielmehr geht es in XPointer um die Suche nach Orten im Dokument. Dabei kann es auch um Bereiche gehen, die sich über Elementgrenzen oder Teilbäume erstrecken. Zwei notwendige Begriffe • Point: Ein Punkt (point) besteht aus einem Behälterknoten (container node) und Index (größer oder gleich Null). • Range: Ein Bereich (range) ist durch zwei Punkte definiert. (Allerdings müssen sich die beiden Punkte im selben Dokument befinden.) • RangeExpr ::= Expr ‘to‘ Expr (Beispiel: Xpointer (id(“abschnitt2.1“) / descendant::P [last()]to id(“abschnitt2.2“) / descendant::P[last()]) Funktionen 1.string-range(location-set string number? number?): Sucht in jedem Ort der Ortmenge (1.Parameter) nach der Zeichenkette (2.Parameter); die beiden Zahlen benennen den Anfang (Default:1) und die Länge des gesuchten Bereichs (Default: bis zum Ende) Beispiel: string-range(//P. “Am Anfang war“)[3] 2.range(location-set): Ort im Argument 3.range-inside(location-set): Inhalt von Orten im Argument 4.start-point(location-set):Rückgabe eines oder mehrerer Punkte; ein Start-Punkt für jeden Ort im Argument 5.end-point(location-set): Rückgabe eines oder mehrerer Punkte; ein Start-Punkt für Jeden Ort im Argument Beispiel: end-point(//Kapitel[3]) 6.here(): Rückgabe eines Elements als Ortmenge 7.origin(): Rückgabe eines Elements, von dem eine Verzweigung ausging 8.boolean unique(): Rückgabe des Wert “wahr“ für den Fall, dass die kontextgröße=1 ist (sonst “unwahr“) Fehler für die XPointer • • • Ein Syntaxfehler liegt vor, wenn eine Zeichenkette nicht der in XPointer definierten Syntax vorliegt (Software sollte solche XPointer nicht verfolgen). Ein Ressourcen-Fehler liegt vor, wenn die XPointerSoftware keine Ressource findet, von der sie Ausgehen kann (etwa ein falscher URI). Ein Teil-Ressourcen-Fehler liegt vor, wenn die Anwendung keine Teil-Ressource findet, die der Beschreibung entspricht.