Zunächst nimmt XLink die Möglichkeiten von HTML auf: Links zwischen Dateien und Dateiteilen, Adressangaben von Bildern und Image-Maps. Im Vergleich zu HTML sind Links in XML jedoch immer etwas genauer zu bestimmen, weil es grundsätzlich zunächst zwei Arten von Links gibt: einfache und erweiterte. Der einfache Link entspricht dem aus HTML bekannten und sieht nur in zwei Details anders aus:
HTML:
<A HREF="http://www.nimmermehr.de/w.html#w12">wow</A>
XML:
<ein-link xlink:type="simple" xlink:href="http://www.nimmermehr.de/w.html#w12">wow</ein-link>
Beachten Sie, dass XML-Elementnamen
unterschiedlich behandelt, wenn sie sich in Groß- und
Kleinbuchstaben unterscheiden. In XML gilt: A ist ungleich a und HREF ist ungleich hrefDas gilt auch für XHTML, die
Anfang 2000 verabschiedete neue Version von
HTML 4.0..
Eine Adressangabe in XML enthält
normalerweise einen Universal Resource Identifier
(URI), wie er in den RFCs 1738 und
1808Beide RFCs sind auf dem Web-Server
des W3C zu finden:
http://www.w3.org/Addressing/rfc1738.txt und
http://www.w3.org/Addressing/rfc1808.txt.
definiert ist. Das heißt unter anderem, dass die aus
HTML bekannten URLs auch in
XML verwendet werden können. Außerdem können
Adressangaben auf einen Teil von Dokumenten zeigen
(#..., wie in obigem Beispiel). Eine Adressangabe
#w12 kann in HTML ausreichend sein. In
diesem Fall muss es sich bei dem Fragmentbezeichner
(
fragment identifier
, die auf '#' folgenden Zeichen bis
zum Ende der Adressangabe) in XML allerdings um
einen XPointer handeln. Zum XPointer selbst kommen wir erst im nächsten
Abschnitt; so viel sei aber jetzt schon verraten: falls in einer
Adressangabe nach dem '#' kein expliziter XPointer folgt,
sondern ein Name, nehmen
XML-Prozessoren an, dass es sich um einen XPointer
handelt. Anstatt von Name gehen sie von dem Ausdruck
id(Name) aus. Das heißt, Name muss der
Attributwert einer id
sein.
Die einzigen Unterschiede, die auf den ersten Blick
bei den beiden Listingschnipseln zu sehen sind, bestehen neben
der Klein- und Großschreibung in den Attributen xlink:type und dessen Wert
simple sowie im Vorsatz xlink zum href. Wie und wann die verschiedenen
Attribute vorkommen können oder müssen, zeigt die folgende,
dem derzeit aktuellen Entwurf
[w3c00d]
[w3c00d]XML Linking Language (XLink)
, World Wide Web Consortium, Eve Maler, Steve DeRose, David Orchard, Ben Trafford, 2000, http://www.w3.org/TR/xlink
entnommene Tabelle. Sie enthält in der Waagerechten die
XLink-Typen und in der Senkrechten die Attribute und wo sie
notwendig (x) oder optional (o) sind.
Typ | simple | extended | locator | arc | resource | title | |
---|---|---|---|---|---|---|---|
Attribut | |||||||
type | x | x | x | x | x | x | |
href | o | x | |||||
role | o | o | o | o | o | ||
title | o | o | o | o | o | o | |
show | o | o | |||||
actuate | o | o | |||||
from | o | ||||||
to | o |
Zurück zum Attribut xlink:type, das als einziges Attribut in allen XLink-Elementen vorkommen muss. Hier liegen deutliche Unterschiede zur Verarbeitung von HTML-Daten. Die Tatsache, dass ein Element einen Link oder gar mehrere enthält, ist in XML nicht ohne ausdrücklichen Hinweis zu erkennen. In HTML ist ein solcher Hinweis dagegen nicht notwendig, weil die Browser die HTML-DTD einkompiliert haben und deshalb wissen, dass das A-Element ein Attribut HREF beinhaltet, dessen Wert der URI ist. Entweder tun XML-Autoren dies, indem sie es, wie in obigem Beispiel, explizit in die XML-Instanz schreiben, oder sie geben einem Element in der DTD nicht nur das Attribut, sondern auch einen festen Wert.
Soll das Attribut einen festen Wert besitzen, sieht die entsprechende Definition in der DTD wie im folgenden Beispiel aus:
<!ATTLIST a xlink:type CDATA #FIXED "simple" >
Soll dagegen die Tatsache, dass es sich um einen Link handelt, immer im Dokument stehen, sieht die Attributbeschreibung anders aus:
<!ATTLIST a xlink:type ( simple | extended ) #REQUIRED >
#REQUIRED muss hier stehen (statt etwa
#IMPLIED), damit jeder Link zwingend das Attribut
enthältXML-Editoren sorgen dafür,
dass Autoren es nicht vergessen..
Beide Vorgehensweisen haben Vor- und Nachteile. Legt man den Attributwert fest, weil man weiß, dass es nur einfache Links in den Dokumenten gibt, können nur validierende XML-Prozessoren (solche, die auch die DTD lesen), einen Link als solchen erkennen. Wenn auch nicht-validierende Parser Links erkennen können sollen, muss das Attribut — unabhängig von einer DTD — in allen Linkelementen stehen, was bei von Menschen generierten Daten die Fehleranfälligkeit erhöht.
Allein die Tatsache, dass es einen Wert simple gibt, suggeriert bereits, dass der nicht der einzige ist. Was stimmt, denn XLink kennt neben simple auch extended für erweiterte Linkelemente. Sowohl das einfache als auch das erweiterte Linkelement können über ihren Typ (oben type) und die Adressangabe (oben href) hinaus weitere Attribute enthalten, die die Bedeutung der Adressangabe sowie der referenzierten Ressourcen und ihre Rolle betreffen. Es handelt sich dabei um die in der Tabelle oben links ebenfalls genannten Attribute.
xlink:href ist das Attribut, das die Adressangabe als Wert enthält. Das sei hier noch einmal mit dem Vorsatz xlink betont, weil die in HTML-Dokumenten vorhandenen href-Attribute in a-Elementen keine XLink-Attribute sind: Sie gehören diesem Namensraum nicht an. Das XLink-href kommt optional im einfachen Link vor; fehlt es, gibt es keinen Verweis.
Die Werte von role und title sind a) eine Beschreibung der Funktion des Links und b), wie der zweite Name schon sagt, ein Titel. Die Besonderheit der Attribute to und from ist, dass sie nur in einem einzigen Element vorkommen können, dem Bogen (arc). Sie benennen, von wo nach wo verzweigt werden kann. Die Attribute show und actuate beziehen sich darauf, was mit dem so referenzierten Dokumentteil geschehen soll. show kann folgende Werte haben:
actuate kann drei Werte annehmen: onLoad, onRequest und wiederum undefined. Im ersten Fall wird beim Laden der Start-Ressource auch zur Ende-Ressource verzweigt (wie das automatische Laden von img in HTML, was letzlich auch ein Link ist); im zweiten Fall wird beispielsweise eine Aktion des Benutzers erwartet, und Undefiniert bleibt wie oben der Anwendung überlassen.
Wie all dies in einer DTD und in einem
XML-Dokument aussehen kann, sollen die folgenden
Abschnitte sowohl für einfache wie erweiterte Links
zeigen. Zunächst ein einfacher Link, der in XML
etwa dieselbe Aufgabe wie das A
in HTML übernimmtDie hier folgenden
Listings sind an den Entwurf angelehnt, verzichten aber auf
die dort genutzte Möglichkeit, mehrere Attribute zu einer
Parameter-Entity zusammenzufassen..
<!-- in der DTD --> <!ELEMENT ganzeinfach ANY> <!ATTLIST ganzeinfach xlink:type CDATA #FIXED "simple" xlink:href CDATA #REQUIRED >
Im Dokument könnte dann der aus HTML bekannte Ausdruck stehen:
<!-- im Dokument --> <ganzeinfach xlink:href="http://www.nimmermehr.de/foo/bar.xml"> dieses spezielle Tutorial</ganzeinfach>
Viel ist das nicht, aber wie oben zu sehen war, lassen sich der DTD-Ausschnitt und das Dokument ergänzen:
<!-- in der DTD --> <!ELEMENT einfach ANY> <!ATTLIST einfach xlink:type CDATA #FIXED "simple" xlink:href CDATA #REQUIRED xlink:role CDATA #IMPLIED xlink:title CDATA #IMPLIED xlink:show (embed|replace|new|undefined) #IMPLIED>
Aussagekräftig ist auf den ersten Blick die Festlegung auf den einfachen Link (wie im ersten Beispiel). In einem XML-Dokument könnte nach dieser Definition stehen:
<!-- im Dokument --> <einfach xlink:href="http://www.nimmermehr.de/foo/bar.xml" xlink:role="anleitung" xlink:title="Mehr X M L ist besser" show="new">dieses spezielle Tutorial</einfach>
xlink:type muss in diesem Beispiel, in Verbindung mit dem DTD-Schnipsel, im Code nicht erscheinen, weil es einen festen Wert hat, den der DTD-Schnipsel als Vorgabewert enthält. Ob und wie ein Browser oder eine andere Anwendung, mit Attributen wie xlink:title umgeht, ist ihr überlassen. xlink:role bekommt seine Bedeutung erst bei den erweiterten Links.