Erweiterte Links

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

Während ein einfacher Link eine einzelne unidirektionale Verbindung zwischen einem XML-Element und einer externen Ressource darstellt, beschreibt ein erweiterter Link eine Sammlung von Ressourcen und eine Sammlung von Pfaden zwischen diesen Ressourcen. Jeder Pfad verbindet genau zwei Ressourcen. Jede einzelne Ressource kann mit einer der anderen Ressourcen, zwei der anderen Ressourcen, keiner der anderen Ressourcen, allen anderen Ressourcen oder beliebigen Teilmengen von Ressourcen aus dieser Sammlung verbunden sein. Sie kann sogar eine Verbindung zu sich selbst herstellen. In Begriffen der Informatik ausgedrückt, ist ein erweiterter Link ein gerichteter, gekennzeichneter (labeled) Graph, in dem die Pfade die Kanten sind, die Dokumente die Knoten und die URIs Label.

Einfache Links sind durch die Analogie zu HTML-Links sehr leicht zu verstehen. Es gibt jedoch keine vergleichbare Analogie zu erweiterten Links. Wie sie aussehen, wie die Anwendungen sie behandeln und in welcher äußeren Form sie den Benutzern präsentiert werden – all das ist völlig ungewiss. Für erweiterte Links wurden keine einfachen visuellen Metaphern erfunden, wie »klicken Sie auf den blauen, unterstrichenen Text, um zu einer neuen Seite zu springen«, und es gibt keine Browser, die sie unterstützen. Wie sie einmal eingesetzt werden und welche Benutzungsschnittstellen für sie entworfen werden, bleibt abzuwarten.

In XML wird ein erweiterter Link durch ein entsprechendes Link-Element repräsentiert, d.h. ein Element beliebigen Typs, das ein xlink:type-Attribut mit dem Wert extended besitzt. Das hier ist zum Beispiel ein erweitertes Link-Element, das auf den Roman The Wonderful Wizard of Oz verweist:

<roman xlink:type="extended">
   <titel>The Wonderful Wizard of Oz</titel>
   <autor>L. Frank Baum</autor>
   <jahr>1900</jahr>
</roman>

Obwohl dieser erweiterte Link hier noch ziemlich spartanisch ist, enthalten die meisten erweiterten Links lokale und externe Ressourcen sowie Bögen zwischen diesen Ressourcen. Eine externe Ressource wird durch ein Locator-Element repräsentiert, ein Element beliebigen Typs, das ein xlink:type-Attribut mit dem Wert locator besitzt. Eine lokale Ressource wird durch ein Ressourcenelement dargestellt, ein Element beliebigen Typs, das ein xlink:type-Attribut mit dem Wert resource hat. Und ein Bogen zwischen zwei Ressourcen, lokal oder entfernt, wird durch ein Bogenelement repräsentiert, d.h. ein Element beliebigen Typs, das ein xlink:type-Attribut mit dem Wert arc hat.

Locator-Elemente

Jedes Locator-Element besitzt ein xlink:type-Attribut mit dem Wert locator und ein xlink:href-Attribut, das einen URI für die Ressource enthält, die es adressiert. Zum Beispiel enthält dieses roman-Element für The Wonderful Wizard of Oz drei Locator-Elemente, die bestimmte Ausgaben des Buchs kennzeichnen:

<roman xlink:type="extended">
   <titel>The Wonderful Wizard of Oz</titel>
   <autor>L. Frank Baum</autor>
   <jahr>1900</jahr>
   <ausgabe xlink:type="locator" xlink:href="urn:isbn:0688069444" />
   <ausgabe xlink:type="locator" xlink:href="urn:isbn:0192839306" />
   <ausgabe xlink:type="locator" xlink:href="urn:isbn:0700609857" />
</roman>

Meistens besitzt jedes Locator-Element noch das Attribut xlink:label, das als Name des Elements dient. Der Wert dieses Attributs kann jeder XML-Name sein, der keinen Doppelpunkt enthält (d.h., der kein Namensraum-Präfix enthält). Im vorherigen Beispiel könnten wir auf der Grundlage der ISBN folgendermaßen Label hinzufügen:

<roman xlink:type="extended">
   <titel>The Wonderful Wizard of Oz</titel>
   <autor>L. Frank Baum</autor>
   <jahr>1900</jahr>
   <ausgabe xlink:type="locator" xlink:href="urn:isbn:0688069444" xlink:label="ISBN0688069444"/>
   <ausgabe xlink:type="locator" xlink:href="urn:isbn:0192839306" xlink:label="ISBN0192839306"/>
   <ausgabe xlink:type="locator" xlink:href="urn:isbn:0700609857" xlink:label="ISBN0700609857"/>
</roman>

Die Nummer allein kann nicht benutzt werden, da XML-Namen nicht mit einer Ziffer beginnen dürfen. In diesem und den meisten Fällen sind die Label innerhalb des erweiterten Links eindeutig, sie müssen es aber absolut nicht sein.

Locator-Elemente können auch die optionalen semantischen Attribute xlink:title und xlink:role enthalten, um weitere Informationen über die externe Ressource und den Link darauf bereitzustellen. Diese Attribute haben die gleichen Bedeutungen wie für einfache XLinks. Das Attribut xlink:title enthält einen kurzen Text, der die externe Ressource beschreibt, und das Attribut xlink:role enthält einen absoluten URI, der in irgendeiner Weise die Art des Links kennzeichnet. Die ausgabe-Elemente z.B. könnten mit diesen Attributen so in xlink:title den Namen des Herausgebers angeben und einen Dublin Core-URI einsetzen, um zu kennzeichnen, dass der Link ein formaler Identifier ist, der nicht nachverfolgt werden soll:

<roman xlink:type="extended">
  <titel>The Wonderful Wizard of Oz</titel>
  <autor>L. Frank Baum</autor>
  <jahr>1900</jahr>
  <ausgabe xlink:type="locator" xlink:href="urn:isbn:0688069444" xlink:title="William Morrow" xlink:role="http://purl.org/dc/elements/1.1/publisher" xlink:label="ISBN0688069444"/>
  <ausgabe xlink:type="locator" xlink:href="urn:isbn:0192839306" xlink:title="Oxford University Press" xlink:role="http://purl.org/dc/elements/1.1/publisher" xlink:label="ISBN0192839306"/>
  <ausgabe xlink:type="locator" xlink:href="urn:isbn:0700609857" xlink:title="University Press of Kansas" xlink:role="http://purl.org/dc/elements/1.1/publisher" xlink:label="ISBN0700609857"/>
</roman>

Bögen (Kanten)

Die Pfade zwischen den Ressourcen werden Bögen (arcs) oder auch Kanten genannt. Bögen werden durch Bogenelemente repräsentiert – Elemente beliebigen Typs, die ein xlink:type-Attribut mit dem Wert arc besitzen. Jedes Bogenelement sollte über die Attribute xlink:from und xlink:to verfügen. Das Attribut xlink:from identifiziert die Quelle des Links, und das Attribut xlink:to kennzeichnet das Ziel. Diese Attribute enthalten keine URIs, wie Sie vielleicht erwartet hätten. Stattdessen enthalten sie einen Namen, der dem Wert des Attributs xlink:label eines der Locator-Elemente in dem erweiterten Link entspricht.

Das folgende Beispiel zeigt einen erweiterten Link, der die ersten drei Romane der Wizard of Oz-Reihe enthält: The Wonderful Wizard of Oz, The Marvelous Land of Oz und Ozma of Oz. Bögen stellen die Verbindungen vom ersten Roman der Reihe zum zweiten her, vom zweiten zum dritten und wieder zurück. In diesem Beispiel ist das Wurzelelement reihe der erweiterte Link, jedes roman-Element stellt ein Locator-Element dar, und die Elemente nächster und vorheriger sind die Bogenelemente.

<reihe xlink:type="extended" xmlns:xlink="http://www.w3.org/1999/xlink">
  <autor>L. Frank Baum</autor>
  <!-- Locator-Elemente -->
  <roman xlink:type="locator" xlink:label="oz1" xlink:href="ftp://archive.org/pub/etext/etext93/wizoz10.txt">
    <titel>The Wonderful Wizard of Oz</titel>
    <jahr>1900</jahr>
  </roman>
  <roman xlink:type="locator" xlink:label="oz2" xlink:href="ftp://archive.org/pub/etext/etext93/ozland10.txt">
    <titel>The Marvelous Land of Oz</titel>
    <jahr>1904</jahr>
  </roman>
  <roman xlink:type="locator" xlink:label="oz3" xlink:href="ftp://archive.org/pub/etext/etext93/wizoz10.txt">
    <titel>Ozma of Oz</titel>
    <jahr>1907</jahr>
  </roman>
  <!-- Bögen -->
  <nächster   xlink:type="arc" xlink:from="oz1" xlink:to="oz2" />
  <nächster   xlink:type="arc" xlink:from="oz2" xlink:to="oz3" />
  <vorheriger xlink:type="arc" xlink:from="oz2" xlink:to="oz1" />
  <vorheriger xlink:type="arc" xlink:from="oz3" xlink:to="oz2" />
</reihe>

Code-Beispiel: Ein erweiterter Link mit drei Adressangaben und vier Bögen

Die folgende Abbildung stellt diesen erweiterten Link in einer Grafik dar. Die Ressourcen werden durch Bücher und die Bögen durch Pfeile repräsentiert. Obwohl wir den Link in diesem abstrakten Sinn verstehen können, ist nicht gesagt, wie ihn ein Browser für den Benutzer darstellen könnte und wie die Benutzer entscheiden, welchem Link sie folgen wollen. Dieser erweiterte Link beispielsweise könnte lediglich als Liste der Reihenfolge interpretiert werden, in der diese Dokumente gedruckt werden, nichts weiter. Die Einzelheiten der Interpretation bleiben der Anwendung vorbehalten.

Erweiterter Link mit Ressourcen und Bögen zwischen ihnen

Abbildung: Ein erweiterter Link mit drei Ressourcen und vier Bögen zwischen ihnen

Mehrere Bögen von einem Bogenelement

Ein einzelnes Bogenelement definiert gelegentlich mehrere Bögen. Falls sich mehrere Elemente ein Label teilen, definiert ein Bogenelement, das dieses Label entweder in seinem xlink:to- oder seinem xlink:from-Attribut verwendet, Bögen zwischen allen Ressourcen, die dieses Label benutzen. Das folgende Beispiel zeigt einen erweiterten Link, der Locator-Elemente für drei unterschiedliche Online-Buchgeschäfte und eine Ausgabe von The Wonderful Wizard of Oz enthält. Jedes buchladen-Element besitzt das Label kaufen, und ein einziges Bogenelement erwerben verbindet sie alle. Die folgende Abbildung zeigt die Graphen-Struktur dieses erweiterten Links.

<buch xlink:type="extended" xmlns:xlink="http://www.w3.org/1999/xlink">
  <autor>L. Frank Baum</autor>
  <titel>The Wonderful Wizard of Oz</titel>
  <!-- Locator-Elemente -->
  <ausgabe xlink:type="locator" xlink:href="urn:isbn:0192839306" xlink:title="Oxford University Press" xlink:role="http://www.oup-usa.org/" xlink:label="ISBN0192839306"/>
  <buchladen xlink:type="locator" xlink:href="http://www.amazon.com/exec/obidos/ASIN/0192839306" xlink:label="kaufen">Amazon</buchladen>
  <buchladen xlink:type="locator" xlink:href="http://www.powells.com/cgi-bin/biblio?isbn=0192839306" xlink:label="kaufen">Powell's</buchladen>
  <buchladen xlink:type="locator" xlink:href="http://shop.bn.com/booksearch/isbninquiry.asp?isbn=0192839306" xlink:label="kaufen">Barnes &amp;amp; Noble</buchladen>
  <!-- Bögen -->
  <erwerben xlink:type="arc" xlink:from="ISBN0192839306" xlink:to="kaufen" />
</buch>

Code-Beispiel: Ein erweiterter Link mit einem Bogenelement, aber drei Bögen

Wenn ein Bogenelement kein xlink:to-Attribut besitzt, verwendet es alle Ressourcen im erweiterten Link als Ziele. Besitzt ein Bogenelement kein xlink:from-Attribut, verwendet es alle Ressourcen im erweiterten Link als Quellen.

Es ist jedoch ein Fehler, wenn mehr als ein Bogenelement einen Bogen zwischen den gleichen zwei Ressourcen definiert, ob nun implizit oder explizit. Wenn z.B. ein erweiterter Link N Ressourcen und ein Bogenelement wie <ausgabe xlink:type="arc"/> ohne die Attribute xlink:to oder xlink:from enthält, kann er keine weiteren Bogenelemente besitzen, da dieses eine Bogenelement alle N 2 möglichen Bögen zwischen den Ressourcen des erweiterten Links definiert.

Ein Bogenelement kann mehrere Bögen erzeugen

Abbildung: Ein Bogenelement kann mehrere Bögen erzeugen

Bogentitel

Jedes Bogenelement kann wie alle anderen XLink-Elemente optional ein xlink:title-Attribut besitzen. Dieses enthält einen kurzen Text, der den Bogen beschreibt und zum Lesen durch die menschlichen Betrachter gedacht ist. Im Code-Beispiel "Ein erweiterter Link mit drei Adressangaben und vier Bögen" könnten wir den Bögen beispielsweise folgende Titel zuweisen:

<nächster   xlink:type="arc" xlink:from="oz1" xlink:to="oz2" xlink:title="Nächster" />
<nächster   xlink:type="arc" xlink:from="oz2" xlink:to="oz3" xlink:title="Nächster" />
<vorheriger xlink:type="arc" xlink:from="oz2" xlink:to="oz1" xlink:title="Vorheriger" />
<vorheriger xlink:type="arc" xlink:from="oz3" xlink:to="oz2" xlink:title="Vorheriger" />

Beim Verarbeiten eines erweiterten Links könnte ein Browser dem Benutzer den Titel als Inhalt des Links anzeigen, so dass er die Möglichkeit hat, sich zu entscheiden, welchem Bogen er von seiner aktuellen Position aus folgen will. Der Inhalt könnte aber auch in einem Popup-Menü auftauchen, wenn ein Benutzer auf einer der referenzierten Seiten war. XLink gibt keine spezielle Benutzungsschnittstelle für Bögen oder Bogentitel vor.

Die Bogenrollen

Bogenelemente können keine xlink:role-Attribute aufnehmen. Ein Bogenelement kann dafür aber ein xlink:arcrole-Attribut haben, das einen absoluten URI enthält, der die Natur des Bogens kennzeichnet. Um genau zu sein: Dieser URI sollte auf eine Ressource verweisen, die die Beziehung kennzeichnet, die der Bogen beschreibt (z.B. Eltern-Kind oder Arbeitgeber-Angestellter). Es gibt jedoch über das reine Überprüfen hinaus, ob xlink:arcrole einen zulässigen URI enthält, keine Möglichkeit, diese Information zu validieren; und selbst dieser URI ist nicht unbedingt erforderlich. Im Code-Beispiel "Ein erweiterter Link mit einem Bogenelement, aber drei Bögen" könnten wir z.B. dem erwerben-Bogen ein xlink:arcrole-Attribut hinzufügen, das auf "http://www.example.com/erwerben_details.txt" verweist:

<erwerben xlink:type="arc" xlink:from="ISBN0192839306" xlink:to="kaufen" xlink:arcrole="http://www.example.com/erwerben_details.txt" />

Die Datei erwerben_details.txt könnte dann beispielsweise den Text »wird gekauft bei« enthalten. Dieser Text würde anzeigen, dass die Quelle des Links beim Ziel des Links gekauft worden wäre, zum Beispiel »The Wonderful Wizard of Oz wird gekauft bei Amazon«, »The Wonderful Wizard of Oz wird gekauft bei Fatbrain« oder »The Wonderful Wizard of Oz wird gekauft bei Barnes & Noble«. Dieses Vorgehen wird zwar vorgeschlagen, XLink-Prozessoren erzwingen es jedoch nicht. Das wäre auch gar nicht möglich, da es voraussetzen würde, dass sie verstehen, was sie lesen. Das Attribut xlink:arcrole ist optional. Sie müssen es in Ihre Bögen nicht einfügen, und falls Sie es doch tun, müssen XLink-Prozessoren es nicht verarbeiten.

Lokale Ressourcen

Locator-Elemente repräsentieren externe Ressourcen, d.h. Ressourcen, die nicht Bestandteil des Dokuments sind, das den erweiterten Link enthält. Erweiterte Links können aber auch lokale Ressourcen besitzen, in denen die Daten innerhalb des erweiterten Link-Elements enthalten sind. Jede dieser Ressourcen wird durch ein Ressourcenelement repräsentiert. Es handelt sich dabei um ein Element beliebigen Typs, das ein xlink:type-Attribut mit dem Wert resource besitzt. Im Code-Beispiel "Ein erweiterter Link mit drei Adressangaben und vier Bögen" enthält der erweiterte Link reihe beispielsweise ein Kindelement autor. Wenn dieses Element dann noch ein Attribut xlink:type="resource" bekommt, wird daraus ganz einfach eine lokale Ressource:

 

<autor xlink:type="resource">L. Frank Baum</autor>

Ein Ressourcenelement kann und wird im Allgemeinen die gleichen Attribute wie ein Locator-Element besitzen, das heißt xlink:label, xlink:role und xlink:title. Alle haben sie die gleiche Semantik wie bei Locator-Elementen. Zum Beispiel kann das Label ein Name sein, mit dem Bögen Ressourcen verbinden können. Ein Bogen kann eine Ressource mit einer Ressource, eine Ressource mit einem Locator, einen Locator mit einer Ressource oder einen Locator mit einem Locator verbinden. Bögen kümmern sich wirklich nicht darum, ob die Ressourcen lokal oder extern sind. Um eine Verbindung zu oder von dieser Ressource herzustellen, braucht sie ein xlink:label-Attribut wie dieses:

 

<autor xlink:type="resource" xlink:label="baum">L. Frank Baum</autor>

Um von dieser lokalen Ressource Links zu allen Büchern aufzubauen, fügen wir einfach diese drei Bogenelemente hinzu:

<buch xlink:type="arc" xlink:from="baum" xlink:to="oz1" />
<buch xlink:type="arc" xlink:from="baum" xlink:to="oz2" />
<buch xlink:type="arc" xlink:from="baum" xlink:to="oz3" />

Um in die andere Richtung zu gehen, vertauschen Sie einfach die Werte der Attribute xlink:from und xlink:to.

Titelelemente

Wie Sie gesehen haben, können erweiterte Link-Elemente, Locator-Elemente, Bogenelemente und Ressourcenelemente xlink:title-Attribute besitzen, die eine Kurzbeschreibung liefern, mit der der Link identifiziert wird. Das reicht jedoch nicht immer. In einem Dokument beispielsweise, das ein ziemlich umfangreicher, erweiterter Link ist, sollten Sie vielleicht die Titel mit XHTML oder einem anderen Vokabular auszeichnen. Dazu kann ein Titel stattdessen (oder zusätzlich) als Kindelement mit dem Typ Titel angegeben werden, d.h. als ein Element, dessen xlink:type-Attribut den Wert title hat.

Angenommen, Sie wollten eine vollständigere Beschreibung aller Ausgaben von The Wonderful Wizard of Oz bereitstellen, als nur die Verlage zu nennen. Dann erweitern Sie das Element ausgabe um ein entsprechendes Element, das das gewünschte Markup enthält:

<ausgabe xlink:type="locator" xlink:href="urn:isbn:0700609857" xlink:title="University Press of Kansas" xlink:role="http://www.kansaspress.ku.edu/" xlink:label="ISBN0700609857">
   <herausgeber-info xlink:type="title">
      <ul>
        <li>The Kansas Centennial Edition</li>
        <li>Illustriert von Michael McCurdy</li>
        <li>Vorwort von Ray Bradbury</li>
        <li>1999</li>
        <li>216 Seiten</li>
        <li>Preis: $24.95</li>
      </ul>
   </herausgeber-info>
</ausgabe>

Welches Markup Sie innerhalb des title-Elements verwenden, liegt ganz bei Ihnen, solange es sich um wohlgeformtes XML handelt. XLink beschränkt das Markup in keiner Weise. Wie die Anwendung dieses Markup interpretiert, ist ihre Sache. Wir haben hier einfaches HTML verwendet, das ein Browser vielleicht darstellen kann. Allerdings sollten Sie immer bedenken, dass das genaue Verhalten eines Browsers sich nur schwer vorhersagen lässt, auch wenn er erweiterte XLinks unterstützt.

  

<< 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