XLink und XPointer

Seminarvortrag von Arkin Efeoglu

Web-Technologien, Sommersemester 2002

Status:

XLink W3C Recommendation 1.0 vom 27.06.2001

XPointer W3C Candidate Recommendation 1.0 vom 11.09.2001

Idee:

aus HTML aber mit Erweiterungen (Verknüpfungen steuern, aktivieren)

Hindernisse:

Verbreitung in Webbrowsern oder ähnlichen Anwendungen nur zögerlich [Netscape, Amaya]

XLink:

XPointer:

XLink

Wesentlicher Unterschied zu HTML-Ankern:

es können in das Dokument beliebig viele Gastdokumente eingebunden werden, die sich wiederum von Gastdokument zu Gastdokument steuern lassen.

Verweis auf (und Verwendung von) XML-Dokument, Graphik, HTML oder andere Dokumente 

[was mit dem linken passieren soll hängt vom XLink-Prozessor und dem Dokumenttypen ab]

HTML-Anker sind sowohl mit extended als auch mit simple erstellbar, simple sieht allerdings HTML-ähnlicher aus

und ein simple-link wiederum ist mit extended-links darstellbar

ein einfacher HTML-Anker mit simple-XLink:

<ein_link xmlns:xlink=http://www.w3.org/1999/xlink">
        <a xlink:type="simple"
                xlink:href="http://www.uni-mannheim.de
                         xlink: ...
                         xlink: ...> hier geht es zur Uni-Seite
        </a>

Begrifflichkeiten und Definitionen aus der Recommendation [W3C]:

Die Verknüpfungstypenelemente des type-Attributs:

simple - XLinks

Ein simple-XLink ist ein link, das genau eine local und eine remote Resource mit einem arc, ausgehend vom vorhergehenden zum letzteren (zweiten
miteinander, verknüpft. Dh. ein simple link immer ein outbound link. Er ist ähnlich wie der HTML-Anker. Braucht keinen linktext, da er nicht auf den End-tag angewiesen ist.

Quelle: XLink Recommendation [W3C]

die Linien ohne Pfeil deutet auf die Verbindung der Resource, allerdings ohne Richtungsangabe

Eigenschaften:

Die Semantik-Attribute

Attribute, die die Bedeutung und den Zweck von Resourcen innerhalb eines Linkzusammenhanges beschreiben.
Sie beschreiben die Bedeutung der ending-Resource des arcs bzgl. der starting-Resource -kontextabhängig-

Die Verknüpfungsverhalten-Attribute

Bsp-CODE:

<!DOCTYPE popstars [
<!ELEMENT popstars (lied+)>
<!ELEMENT lied (saenger, titel)>
<!ELEMENT saenger (#PCDATA)>
<!ELEMENT titel (#PCDATA)>
<!ATTLIST saenger
                xmlns:xlink CDATA #FIXED "http://www.w3.org/1999/xlink"
                xlink:type (simple | extended | locator) "simple"
                xlink:title CDATA "ihr Star"
                xlink:role (michael | j-lo ) "michael"
                xlink:show (new | embed | replace) "new"
                xlink:actuate (onLoad | onRequest) "onLoad"
                xlink:href CDATA #IMPLIED>
<!ATTLIST titel
                         genre (pop | rnb) #REQUIRED>
]>
<popstars>
        <lied>
                <saenger xlink:type="simple"
                                xlink:title="mj's bild"
                                xlink:href="file:///C:/Eigene%20Dateien/Eigene%20Bilder/images.jpg"
                                xlink:role="michael">michael jackson</saenger>
                <titel genre="pop">heal the world</titel>
        </lied>
        <lied>
                <saenger xlink:title="j-lo"
                                xlink:show="new"
                                xlink:href="http://www.j-lo.com">jennifer lopez
                </saenger>
                <titel genre="pop">music</titel>
        </lied>
        <lied>
                <saenger xlink:title="sexy-kylie"
                                xlink:href="http://www.mtv.de">kylie minogue</saenger>
                <titel genre="pop">cant get</titel>
        </lied>
        <lied>
                <saenger xlink:title="yo-man">busta rymes</saenger>
                <titel genre="rnb">break ya neck</titel>
        </lied>
</popstars>

Tipp: Sinn macht das Attribute-Value-Defaulting in der DTD um schreibarbeit zu ersparen

extended - XLinks

Quelle: XLink Recommendation [W3C]

Die Durchquerungsattribute:

Der Elementtyp extended lässt folgende Verknüpfungstypen als child-Elemente zu:

  1. locator

  2. arc

  3. resource

  4. title

Merke: hat einer dieser Elementtypen nicht das extended als Elternelement, hat es keine XLink-spezifische Bedeutung

Parent typeSignificant child types
simplenone
extended locator, arc, resource, title
locatortitle
arc title
resourcenone
titlenone

Quelle: XLink Recommendation [W3C]

  1. locator:

    Der Elementtyp locator verweist auf eine remote-Resource, href-Attribut ist deshalb zwingend;

    locator ist gleichwertig mit dem Inhalt eines Hyperlinks in HTML, mit dem man erkennen kann wo ein Link liegt

    kann optional beinhalten:


  2. resource:

    verweist/zeigt auf eine local-Resource. So ein Element vom Typ resource stellt mit allen seinen Unterelementen eine lokale Resource dar.

    kann optional beinhalten:

  3. arc:

    definiert innerhalb erweiterter Links mit den traversal rules das Durchquerungsverhalten wie sich ein link verhalten soll. es bestimmt, wie das Paar der Ressource traversiert wird und die Richtung der Durchquerung;

    Quelle: XLink Recommendation [W3C]


    extended link, 5 remote Resourcen verlinkt mit deren Durchquerungsregeln bzw; Durchquerungsverhalten untereinander (traversal rules)

    Allen A's und C's ist es erlaubt alle B's anzulaufen

     

    Bsp mit dem Verknüpfungselementen; <go>

    
                    <go xlink:type="arc" xlink:from="A" xlink:to="B"/>
    
                    <go xlink:type="arc" xlink:from="C" xlink:to="B"/>
    
    

    Das Semantikattribut:;

    arcrole: gibt eine Eigenschaft des Links an, relativ, kontextabhängig. Für eine starting-Resource spielt die ending-Resource die Rolle; "arcrole" Verwendet von arc oder simple.;


    zum Bsp:

    • eine Person kann kontextabhängig bei einem arc die Rolle "Mutter" als auch bei einem anderen arc die Rolle "Tochter" einnehmen.
    • Für eine „Student-Ressource" hat eine „Professor-Ressource" die Rolle "hat_Vorlesung_bei"; "ist_Tutor_von".
    • In unserem Bsp "wurde_aufgegessen_von" oder "isst auf"; Tiger->Schlange->Joker!->Vogel->Wurm. [Content: URI]

     

    angenommen, man hat

    <familie xlink:type="extended">
            <mama
                    xlink:type="locator" xlink:href="..."
    		xlink:label="parent" xlink:title="p1" />
            <papa
                    xlink:type="locator" xlink:href="..."
    		xlink:label="parent" xlink:title="p2" />
            <sohn
    		xlink:type="locator" xlink:href="..."
    		xlink:label="child" xlink:title="c1" />
            <tochter xlink:type="locator" xlink:href="..."
    		xlink:label="child" xlink:title="c2" />
    </familie>
    

    Fälle:

    1. regulär
    2. <go xlink:type="arc" xlink:from="parent" xlink:to="child" />

      dann hat man p1_nach_c1 ; p1_nach_c2 ; p2_nach_c1 und p2_nach_c2

    3. ohne Wertangabe für from oder to, Default des fehlenden ist all
    4. fehlt bspw das komplette Attribut mit Wert: xlink:from="parent" wird einfach angenommen: alle (parent und child) --> child

      damit hat man mit
      <go xlink:type="arc" xlink:to="child" />

    5. ohne Wertangabe für from und to --> jedes label mit jedem
    6. <go xlink:type="arc" />

      p1_nach_p1 ; p1_nach_p2 ;; p1_nach_c1; p1_nach_c2

      p2_nach_p1 ; p2_nach_p2 ; p2_nach_c1 ; p2_nach_c2

      c1_nach_c1 ; c1_nach_c2 ; c1_nach_p1; c1_nach_p2

      c2_nach_c1; c2_nach_c2; c2_nach_p1; c2_nach_p2

      traversal rules erlauben damit: von-sich-selbst_nach_sich-selbst-Beziehungen

       

  4. title:

    als Attribut: menschenlesbare Beschreibung des Links

    als Elementtyp: als child-Elementtyp bei extended, locator und arc. Beispiel eine mehrsprachige Seite, in welcher der Titel in verschiedenen Sprachen dargestellt werden soll.

Vorgehen:

  1. Namespace und DTD

  2. Referenzpunkte definieren

  3. Verknüpfungen definieren

<natur>
  <tierreich xlink:type="extended";
                        xlink:role="naturbild mit tieren"
                        xlink:title="tiere unserer zeit">
                <tier xlink:type="locator"
                        xlink:href="tiger.xml"
                        xlink:title="tiger-fleischfresser"
                        xlink:role="jaeger"
                        xlink:label="tig"/>
                <tier xlink:type="locator"
                        xlink:href="kolibri.xml"
                        xlink:title="vogel_kolibri-pflafresser"
                        xlink:role="http://www.vogel.de"
                        xlink:label="opfer"/>
                <tier xlink:type="locator"
                        xlink:href="amsel.xml"
                        xlink:title="vogel_ams-wurmfresser"
                        xlink:role="http://www.vogel.de"
                        xlink:label="opfer"/>
                <tier xlink:type="locator"
                        xlink:href="schlange.xml"
                        xlink:title="schlange-fleischfresser"
                        xlink:role="#schlangenURI"
                        xlink:label="schla"/>
                <tier xlink:type="locator"
                        xlink:href="fisch.xml"
                        xlink:title="goldfisch-planktonfresser"
                        xlink:role="..gofi"
                        xlink:label="opfer"/>
-XPointer-      <korn xlink:type="locator"
  siehe                 xlink:href="http://planzenwelt.de/koerner.xml#xpointer((mais[]="3")/range-to
			(mais[]="4"))
  unten                 xlink:label="maiskorn"/>
                <tier xlink:type="resource"
                        -kein href-
                        xlink:title="wurm-pflafresser"
                        xlink:role="..wu"
 			xlink:label="opfer"/>
                <go_isst_auf xlink:type="arc"
                        xlink:from="tig"
                        xlink:show="new"
                        xlink:actuate="onLoad"
                        xlink:to="opfer"/>
                <go_isst_auf xlink:type="arc"
                        xlink:from="tig"
                        xlink:show="new"
                        xlink:actuate="onLoad"
                        xlink:to="schla"/>
-XPointer-      <go_isst_auf xlink:type="arc"
   siehe                xlink:from="vogams"
   unten                xlink:show="new"
                        xlink:actuate="onLoad"
                        xlink:to="maiskorn"/>
                <go_isst_auf xlink:type="arc"
                        xlink:from="schla"
                        xlink:show="embed"
                        xlink:actuate="onLoad"
                        xlink:to="opfer"/>

        </tierreich>
        <pflanzen>...</pflanzen>
  </natur>

ein simple-XLink, dargestellt mit extended-XLink:

<ein_link xlink:type="extended">
	<resource_lokaler-link
		xlink:type="resource"
		xlink:label="lokalerOrt">hier geht es zur Uni</resource>
	<locator_remote-link
		xlink:type="locator"
		xlink:href="..."
		xlink:label="entfernterOrt"
		xlink:role="..."
		xlink:title="..." />
	<go_verbind-link
		xlink:type="arc"
		xlink:from="lokalerOrt"
		xlink:to="entfernterOrt"
		xlink:arcrole="..."
		xlink:show="..."
		xlink:actuate="..." />
</ein_link>

ein HTML-Anker lässt sich durch einen simple-Link darstellen und dieser wiederum durch einen extended-Link.

Zusammenfassend

Regeltabelle für die Nutzung von Attributen und Elementtypen

simple

extended

locator

arc

resource

title

type

R

R

R

R

R

R

href

O

R

role

O

O

O

O

arcrole

O

O

title

O

O

O

O

O

show

O

O

actuate

O

O

label

O

O

from

O

to

O

Quelle: XLink Recommendation [W3C]

Derzeitige XLink-Unterstüzung (Mai 2002):

Implementierung mit

XPointer

Fehlermeldungen:

Definitionen:

Escaping bei XPointer: Da die Klammer der XPointer-Synthax vorbehalten ist, muss jede alleinstehende Klammer mit dem ^ als Klammerpaar ergänzt werden. Soll das ^-Zeichen vorkommen bekommt es selbst wieder ein ^ vorangestellt " ^^" . Auch "<" muß wie gewohnt mit &lt ersetzt werden.

XPointer-Funktionen

Adressierungsformen:

angenommen:

<buchhandlung>
	<buch id="roman" sprache="dt">bwl</buch>
	<buch id="lehrbuch" sprache="eng">informatik ...pipapo..
		<titel isbn="999" autor="Max"> inform I </titel>
		<titel isbn="888"  autor="Moritz"> inform II </titel>
		<titel isbn="777"  autor="Michael"> inform III </titel>
	</buch>
	<zeitschrift id="ztsch">
     ..bla..bla</zeitschrift>
</buchhandlung>

Funktionen:

Beispiele für XLink und XPointer

mit simple Link:

<ein_link xmlns:xlink=http://www.w3.org/1999/xlink">
        <a xlink:type="simple"
                xlink:href="http://www.uni-mannheim.de/mitarbeiter.xml#xpointer(dozenten[position()=1]/range-to
					(dozenten[position()=4]))
                         xlink: ...
                         xlink: ...> hier geht es zu den Professoren
        </a>

mit extended Link:

	      <korn xlink:type="locator"
	                xlink:href="http://planzenwelt.de/koerner.xml#xpointer((mais[]="3")/range-to
										(mais[]="4"))
	                xlink:label="maiskorn"/>



	      <go_isst_auf xlink:type="arc"
	                xlink:from="vogams"
	                xlink:show="new"
                        xlink:actuate="onLoad"
                        xlink:to="maiskorn"/>

Tipp:

Kombinationen aus den Adressierungsmöglichkeiten sind durchaus zulässig, damit könnte ein XPointer auch so aussehen: #xpointer(id("lehrbuch")/titlel[2])"

Tumbler-child-Sequenzen (/2/1) vermeiden, da diese am instabilsten sind; das pointen ist nicht mehr korrekt wird, sobald man einen Knoten (Elementen) ändert oder zusammenfasst. Besser dagegen ist die Verwendung von Elementnamen (/buch[2]/titel[2]), Problem hierbei kann zB das Einfügen oder Löschen von neuen Elementen sein. Am sichersten ist die Verwendung von IDs!

Implementierung:

Literaturquellen: