Thomas J.S.: Warum ist eigentlich nur eine ID pro Element erlaubt?

Beitrag lesen

Hallo,

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.

Dann ist, wie schon gesagt wäre aber eine 1:1 beziehung nicht mehr gegeben.

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.

Ein attribut mit NMTOKEN-Typ wird eh oft dazu genutzt als ID zu fungieren, denn da kann man auch mit Zahlen einen Wert beginnen.

Ich verwende in sehr vielen Fällen IDs um Links zu generieren, oder bestimmte Inhalte anzuzeigen, da wäre es fatal, wenn ein Element plötzlich mehr als einen ID-Wert hätte. Z.B. bei Anzeige einer Unterseite eines Dokuments, oder den Link auf dieselbe.
Da würden Vergleiche wie: /pages/subpages/subpage[@id < $pageid][1] etc. nicht mehr funktionieren, weil die ID nicht mehr eindeutig ist. Ebenso in vielen anderen Bereichen wo ein ID als Vergleichbasis dient.

Cool URIs don't change und so.

Das finde ich zwar auch immer wieder nett (und wo es geht lohnt sich auch daran zu halten), aber nicht immer sinnvoll.

Also mal angenommen Descartes fliegt von der Seite,  Was macht man nun?

Nichts.
Der Browser wird die Seite normal darstellen.

Da man ein netter Kerl ist, will man die Anker-Funktionalität nicht aushebeln.

Gut, dass ich nicht nett bin. ;-)

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?

Wenn wir schon genau sein wollen: genaugenommen ist deine ID id="descartes huygens" kein ID-Typ sonder ein IDREFS-Typ, denn weder Descarter noch Huygens sind verschwunden, sondern nur wo anders hingekommen (in dem Fall ins Archiv). Und wenn sie doch ganz verschwunden sind, brauchst du auch keine ID.

Außderdem: deine Antwort löst deine Frage auch nicht, denn es kann auch vorkommen, dass aus id="descartes huygens"  ein id="descartes" wird, womit ein Anker  href="#huygens" auch wieder ins Leere führen würde.

Dürfte eine ID mehr als nur einen Wert haben, würde das auch sehr viel mehr von der Software verlangen: Parsen würde viel aufwendiger ausfallen. Es müssten viele Funktionalitäten geändert werden.
Aber auch SGML und XML würden nicht ungeschont davonkommen: IDREF und IDREFS müssen dann ebenfalls neu definiert werden.
Gut, das sind keine Argumente die _explizit_ dagegen sprechen, einer ID mehrere Werte geben zu können, aber sie spielen bei den Überlegungen dazu eine nicht unwesentliche Rolle.
"B.9 Unique Identifier Attributes
A urlique identifier ("ID") is an attribute that names an element to distinguish it from all other elements. An SGML markup parser can perform common processing for ID attributes, thereby minimizing the implementation effort for procedures.
The purpose of IDS is to allow one element to refer to another: for [...] "

Grüße
Thomas