430 likes | 538 Views
Xlink / Xpointer - Framework. Seminar: Verteilte Systeme Markus Schulz. Gliederung 1/2. XLink Zielsetzung Syntax Simple Links Extended Links Zusammenfassung. Gliederung 2/2. XPath Zielsetzung Grundlagen Syntax Zusammenfassung XPointer Überblick
E N D
Xlink / Xpointer - Framework Seminar: Verteilte Systeme Markus Schulz
Gliederung 1/2 • XLink • Zielsetzung • Syntax • Simple Links • Extended Links • Zusammenfassung Verteilte Systeme
Gliederung 2/2 • XPath • Zielsetzung • Grundlagen • Syntax • Zusammenfassung • XPointer • Überblick • Bare-Names/Child Sequence/FullXPointer • Zusammenfassung • Anwendungen Verteilte Systeme
XLink - Zielsetzung 1/2 • Bekanntes aus der HTML Welt: • <ahref=“http://www.heise.de”>Heise</a> • <imgsrc=“http://www.heise.de/icons/ho/heise.gif”/> Link Page1.html Page2.html Verteilte Systeme
XLink - Zielsetzung 2/2 • Nachteil: • Links gerichtet: lokale -> entfernte Ressource • Gebunden an spezifische Elemente (Tagnamen) • Ziel: • Einheitliche Syntax • Flexibel • Implementierungsunabhängig Verteilte Systeme
XLink - Syntax • globale Attribute im Namensraum -> http://www.w3.org/1999/xlink • Jedes Element kann Xlink sein • <node xmlns:xlink=“http://www.w3.org/1999/xlink” xlink:type=„simple“ xlink:href=„http://www.heise.de“>Heise</node> • Mindestens type Attribut + Parameter • Beschreibende Elemente müssen direkte Kinder sein • Keine Verschachtelung von XLink Verteilte Systeme
Xlink – Simple 1/4 • Einfachste Form eines Xlink • <link xlink:type=„simple“ xlink:href=„http://www.heise.de“>Heise</link> Steuerung der Anzeige <link xlink:type=„simple“ xlink:href=„http://www.heise.de“ xlink:show=„new“>Heise</link> Verteilte Systeme
Xlink – Simple 2/4 • Werte für show Attribute: • Replace: ersetze das aktuelle Dokument • New: Öffne in neuem Fenster (target=“_blank”) • Embed: Ersetze Element durch Inhalt der Ressource (<img src=“”>) • Other: keine Vorgabe, suche im Kontext • None: keine Vorgabe Verteilte Systeme
Xlink – Simple 3/4 • Steuerung der Ausführung • Attribute Actuate: • onRequest: Auf Anforderung des Nutzers • onLoad: beim Laden des Dokumentes • Other: keine Vorgabe, suche im Kontext • None: keine Vorgabe • Bsp. < link xlink:type=„simple“ xlink:href=„http://www.heise.de/image.gif“ xlink:show=„embed“ xlink:actuate=„onLoad“>Heise</link> Verteilte Systeme
Xlink – Simple 4/4 • Beschreibung des Links • Attribute title: • Enthält für Menschen gedachte Beschreibung des Links • Attribute role: • Enthält URI, dessen Ressource den Zweck oder weitere Informationen des Links enthält • Bsp. <websuche xlink:type=“simple” xlink:href=“http://www.google.com“ xlink:role=“http://www.google.com/help.html”/> Verteilte Systeme
Xlink – Extended 1/6 • Bisher mit Simple Links: Link • Gewünscht: Link Verteilte Systeme
Lokale Ressource Entfernte Ressource Xlink – Extended 2/6 • Einsatz des Extended Links • Bsp. <link xlink:type=„extended“> <src xlink:type=„resource“ xlink:label=„src“>Download</src> <dst1 xlink:type=„locator“ xlink:href=„http://www.xyz.de/dl1.zip“ xlink:label=„dst“/> <dst2 xlink:type=„locator“ xlink:href=„http://www.abc.de/dl2.zip“ xlink:label=„dst“/> </link> Verteilte Systeme
Verknüpfung Xlink – Extended 3/6 <link xlink:type=„extended“> <src xlink:type=„resource“ xlink:label=„src“>Download</src> <dst1 xlink:type=„locator“ xlink:href=„http://www.xyz.de/dl1.zip“ xlink:label=„dst“/> <dst2 xlink:type=„locator“ xlink:href=„http://www.abc.de/dl2.zip“ xlink:label=„dst“/> <link xlink:type=„arc“ xlink:from=„src“ xlink:to=„dst“ xlink:actuate=„onRequest“/> </link> Verteilte Systeme
Xlink – Extended 4/6 Download http://www.xyz.de/dl1.zip http://www.abc.de/dl2.zip Verteilte Systeme
Xlink – Extended 5/6 • Linkbase • Auslagerung von Linkzielen in separate Dokumente • Angabe als spezielles Arcrole Attribute <link xlink:type=“extended”> <doc xlink:type=“locator” xlink:href=“doc.xml” xlink:label=“doc”/> <links xlink:type=“locator” xlink:href=“links.xml” xlink:label=“links”/> <arc xlink:type=“arc” xlink:from=“doc” xlink:to=“links” xlink:actuate=“onLoad” xlink:arcrole=“http://www.w3.org/1999/xlink/properties/linkbase”/> </link> Verteilte Systeme
Xlink – Extended 6/6 Dokument Links.xml Linkbase Doc.xml Externe Dokumente Verteilte Systeme
Xlink – Zusammenfassung • Beschreibung von Links zwischen Dokumenten • Auslagerung von Links in separate Dokumente • Frage: wie verlinke ich Teile von Dokumenten? • Antwort: -> XPointer Verteilte Systeme
XPath – Zielsetzung • Bekanntes aus der HTML Welt • <h2><aname=“kapitel1”>Kapitel 1</a></h2> • Verweis auf diese Stelle durch: • <ahref=“seite.html#kapitel1”>Zum Kapitel 1</a> • Nachteil: • Abhängig von speziellen Elementen • Schreibzugriff auf das zu verweisende Dokument • Lösung: • Adressierung über Elementbaum Verteilte Systeme
XPath – Grundlagen 1/2 • Modelliert XML Dokument als Baum • Knotentypen: Elementknoten, Attributknoten, Textknoten • Bsp. Dokument <rezept> <zutatid=“mehl”>200g Mehl</zutat> <anleitung> Zuerst nehmen <b>Sie das Mehl</b> und mischen </anleitung> </rezept> Verteilte Systeme
XPath – Grundlagen 2/2 / Rezept Zutat Anleit. Id b 200g Mehl Zuerst nehmen und mischen Sie das Mehl Verteilte Systeme
XPath – Syntax • Grundsätzlich besteht Ausdruck aus Lokalisierungspfad • Lokalisierungspfad = Relativer Pfad | Absoluter Pfad • Absoluter Pfad = ‘/’ Relativer Pfad • Relativer Pfad = Step | Relativer Pfad ‘/’ Step • Einfaches Bsp. /child::Rezepte/child::* Verteilte Systeme
XPath – Syntax - Schritte • 3 Bestandteile: • Eine Achse, spezifiziert Beziehung zwischen ausgewählten Knoten und Kontextknoten • Knotentest, gibt den Knotentyp an • Prädikate die die ausgewählte Knotenmenge weiter verfeinern können Child::Rezept[@Id=“mehl”][…] Child::Rezept[position()>1][…] Verteilte Systeme
XPath – Syntax - Achsen 1/3 • Child, direkte Kinder des Kontextknotens Verteilte Systeme
XPath – Syntax - Achsen 2/3 • Descendant, alle Nachkommen des Kontextknotens Verteilte Systeme
XPath – Syntax - Achsen 3/3 • Achsen einteilbar in: ancestor preceding following self descendant Verteilte Systeme
XPath – Syntax - Knotentest • Achse::*, wählt alle Knoten auf der spezifizierten Achse aus • Achse::xlink:* alle Knoten auf der Achse mit Namensraum xlink • Achse::text() wählt alle Textknoten • Achse::comment() wählt alle Kommentarknoten • Achse::Bezeichner wählt Knoten mit dem Namen Bezeichner aus (node() für alle Knoten) Verteilte Systeme
XPath – Syntax - Prädikate 1/2 • Wichtig: Richtung der Achse entscheidend (vorwärts oder rückwärts gerichtet) • Achse::*[position()=1] • Preceding-sibling::*[position()=1] • Following-sibling::*[position()=1] Verteilte Systeme
XPath – Syntax - Prädikate 2/2 • Count(Knotenset) liefert die Anzahl der Knoten • Id(Name) liefert Elemente mit der ID = „Name“ • String(object) konvertiert Objekt in Zeichenkette • Elementknoten: Verkettung der Zeichenkette aller Element- und Text-Kindknoten • Attributknoten: Attributwert • Textknoten: enthaltene Zeichendaten Verteilte Systeme
XPath – Syntax - Kurzformen • Für einfachere Schreibweise • //h2 => /descendant-or-self::node()/child::h2 => wählt alle h2 Knoten des Dokumentes aus • //Element/@Name => attribute::Name => wählt alle Knoten mit Namen Element und Attribut Name aus • Para[1] => ./child::Para/child::*[position()=1] wählt ersten Kindknoten vom Kind Para des Kontextknotens Verteilte Systeme
XPath – Zusammenfassung • Flexible Navigation im Dokumentenbaum möglich • Nachteil: • Ergebnis immer vollständige Knotenmenge • Wunsch: • Selektiere ab dem 5. Zeichen des zweiten <p> Elements bis zum 10.Zeichen des dritten <p> Elements? Verteilte Systeme
XPointer – Überblick • Adressierung wird an URI angehangen • Xlink:href=“http://www.heise.de#<XPointer Ausdruck>” • 3 verschiedene Adressierungsarten • Bar Names • Child Sequence • Full Xpointer Verteilte Systeme
XPointer – Bare Names • Einfachste Form • Bsp. Xlink:href=„http://www.heise.de/#Title“ • Adressiert das erste Element welches ein Attribut id=“Title” enthält <start> <elementid=“Title”>Titel</element> </start> Verteilte Systeme
XPointer – Child Sequence • Adressiert Elemente über schrittweise Auflösung von Zahlen getrennt durch ‚/‘ • /1/3/5 adressiert das gleiche Element wie XPath mit: /child::*[1]/child::*[3]/child::*[5] • Kombination mit vorangestelltem Bare-Names möglich • Title/1/3/5 Verteilte Systeme
XPointer – Full XPointer – Points • Syntax: xlink:href=„URI#xpointer(Ausdruck)“ • Kann auf Knoten, Knotenmengen aber auch Punkte innerhalb von Knoten zeigen • Bsp. Doc.xml#xpointer(/start/text()[1]/point()[3]) <start> Hallo <b>dies</b> ist ein Text </start> Zeigt auf die Stelle zwischen den beiden „l“ Verteilte Systeme
XPointer – Full XPointer – Points • Auch auf Attribute, Kommentare und Processing Instructions anwendbar Bsp. Doc.xml#xpointer(/start/b/@type/point()[0]) <start> Hallo <btype=“extra dick”>dies</b> ist ein Text </start> Zeigt vor das Zeichen „e“ des Attributes type Verteilte Systeme
XPointer – Full XPointer – Range • Festgelegt durch 2 Punkte • Funktionen: • Range(): gibt den Knoten mit Tags aus • Xpointer(range(/h2)) • Range-inside(): gibt den Inhalt des Knotens • Range-to(): gibt den Bereich zwischen 2 Elementen • Xpointer(/h1[1]/range-to(/h2[1])) Verteilte Systeme
Position Länge XPointer – Full XPointer –Stringrange • String-range() Funktion ignoriert Markup-Elemente zwischendrin • Bsp. Xpointer(string-range(/h2,“Überschrift“)) • <h2>Über<b>s</b>chrift</h2> • Bsp. Xpointer(string-range(/h2,”Überschrift”,4,7)) • <h2>Über<b>s</b>chrift</h2> Verteilte Systeme
XPointer – weitere Funktionen • Start-point(location-set) Xpointer(start-point(//Rezept)) • End-point(location-set) Xpointer(end-point(//Rezept/Anleitung)) • Here() Definiert die Stelle im Dokument an der der Xpointer notiert ist • Origin() Verweist auf Quell Link (nur mit XLink) des XPointers Verteilte Systeme
XPointer – weitere Funktionen • Xmlns(name=http://beispiel.de) • Ermöglicht Namespace basierte Adressierung • z.B. /name:element1/element2 <element1xmlns=“http://beispiel.de”> <element2>Beispiel</element2> </element1> <element1> <element2>Beispiel</element2> </element1> Verteilte Systeme
XPointer – Zusammenfassung • Bytegenaue Adressierung in XML Dokumenten • Beliebige Bereiche Selektierbar • Adressierung robust • Probleme: • Implementierungen aufwendig • Performance Probleme -> Stringoperationen Verteilte Systeme
Anwendungen • Geringe Unterstützung von XLink bisher • Browser wie Mozilla/Netscape -> Simple Links • Wenige relevanten XPointer Implementierungen • Fujitsu Xlink Processor (Xlip) Java Package • XLink/XPointer Beispiel Java App. Verteilte Systeme
Fragen? Verteilte Systeme