Hallo,
(ich wurde zu diesem Posting gezwungen, nachdem ich im SelfChat darüber
lamentierte, daß das Forum langweilig sei. Nun denn.)
Etwas, das ich mich schon länger Frage ist, weshalb man pro HTML-Element
nur einen Wert für das ID-Attribut angeben kann. (alternativ auch SGML oder
XML-Element, wobei ich mir bei SGML mangels des Standards das Wissen fehlt.)
Zur Erinnerung: Eine ID zeichnet sich dadurch aus, daß sie in einem
Dokument eindeutig sein muß, sie darf also kein zweites Mal vorkommen.
Also kein:
<element1 id="bla">...</element1>
...
<element2 id="bla">...</element2>
Dies ließe sich so darstellen:
__________
____ | |
| | ----> | element1 |
| id | |__________|
|____| __________ = BÖSE!
\ | |
----> | element2 |
|__________|
Diesen Fall meine ich aber nicht.
Schließlich ist eine eindeutig ID für ein Dokument recht praktisch, sei
es in CSS oder - wie sie in XHTML - verwendet wird, als Anker.
Ich meine diesen Fall:
<element id="id1 id2"> ... </element>
Oder als Kästchen:
_____
| |
| id1 | _________
|_____| ---> | |
_____ | element |
| | ---> |_________|
| id2 |
|_____|
In diesem Fall ist die Eindeutigkeit der IDs immer noch gewahrt, nur
treffen jetzt zwei IDs auf ein Element zu. Bei allen Funktionalitäten
der ID sollte es keine Probleme geben, ob CSS, Anker-Funktionalität,
XSL(T), XPath und ähnliche wichtige Abkürzungen.
In den jeweiligen Standards ist so eine Flexibilität nicht gegeben,
es würde keine größere Änderung erfordern, nur die Änderung des
Datentypes des id-Attributes, ähnlich den NMTOKENS des name-Attributes.
(Aus XHTML-Mod, in HTML 4 ist es noch CDATA-LIST, was für ID falsch
wäre.)
...
Weswegen komme ich überhaupt darauf? Ich habe mir mal ein hypothetisches
XHTML-Dokument einer hypothetischen Seite vorgestellt. Ein typisches
langweiliges Textdokument, auf dem in einzelnen Abschnitten irgendwas
über irgendwas steht:
<h2 id="newton">Isaak Newton</h2>
<p>...</p>
<h2 id="leibnitz">Gottfried Wilhelm Leibnitz</h2>
<p>...</p>
<h2 id="descartes">René Descartes</h2>
<p>...</p>
<h2 id="huygens">Christiaan Huygens</h2>
<p>...</p>
Soweit so gut. Die IDs werden hier zum Beispiel als Anker benutzt, so
daß man zum Beispiel URIs der Form http://example.org/1600#descartes
hat. An und für sich sollte sich das Dokument nicht unbedingt ändern,
Cool URIs don't change und so. Aber vielleicht ist es eine Übersichtsseite
oder sowas wie Natur-Philosoph der Woche und die können sich ja ändern.
Also mal angenommen Descartes fliegt von der Seite, weil eh niemand weiß,
mit welchem Accent der Kerl seinen Vornamen jetzt schreibt, man will aber
nicht die URI http://example.org/1600#descartes verschwinden lassen, siehe
obiges jetzt mal nicht in Frage gestelltes Dogma. Was macht man nun? Ich
hatte mir folgendes vorgestellt: Man erstellt unten auf der Seite einen
Archiv-Bereich, auf denen sich immer noch rudimentäre Informationen finden
lassen, beispielsweise:
<h2>Archiv</h2>
<p>Früher von Interesse waren hier diese netten Persönchen. Aus
Platzgründen existieren nur noch die Einzelseiten:</p>
<ul>
<li><a href="/archiv/descartes">René Descartes</a></li>
</ul>
Da man ein netter Kerl ist, will man die Anker-Funktionalität nicht
aushebeln. Wo also nun die IDs hinpacken? An den Anker oder an die
Liste nicht unbedingt, vielleicht interessiert ja noch das p-Element
mit dem erklärenden Text darüber. Also an die Überschrift:
<h2 id="descartes">Archiv</h2>
Und nun soll auch Huygens rausfliegen. (Wer schon zwei As auf einmal
im Vornamen hat...) Aber wohin? Weswegen ich dieses toll finden würde:
<h2 id="descartes huygens">Archiv</h2>
Geht aber nicht.
...
Warum? Mir fällt kein Grund ein, der gegen eine solche Beziehung sprechen
würde, siehe die Kästchengrafiken weiter oben. Fällt irgendjemanden außer
mir was ein?
...
Ist es womöglich ein Relikt aus SGML-Zeiten? Und warum sollte man das da
machen?
Ich komme darauf, wegen dieser Stelle in der von Tim Bray kommentierten
Version der XML Spezifikation, Tim Bray war einer der ursprünglichen
Autoren. Auf das »T« klicken, um seinen Kommentar dazu zu lesen. Frames
kann man eben nicht toll verlinken:
http://www.xml.com/axml/target.html#AX-OneIDPer
...
So. Die Exegese ist eröffnet. Sagt was. Aber nix langweiliges. :-)
Tim