molily: Keine Anker in XHTML Strict?

Beitrag lesen

Hallo,

Unter dem Link zu CDATA steht:
"For some HTML 4 attributes with CDATA attribute values, the specification imposes further constraints on the set of legal values for the attribute that may not be expressed by the DTD."

Ein solches "further constraint", eine weitere Einschränkung, steht an der Stelle auf die du oben verlinkt hast:
"Note that this attribute shares the same name space as the id attribute."

Das bedeutet zunächst einmal nur, dass man nicht id="blub" und name="blub" an zwei verschiedenen Elementen benutzen darf.
Dieser Absatz, den du als further constraint liest, begrenzt aber nicht ausdrücklich die zwei Sätze vorher definierte Regel »CDATA für den name-Attributwert beim a-Element«. Das kann man natürlich hineininterpretieren, aber <a name="ö"> ist in HTML 4 ohne tiefergehende Exegese gemäß der natürlichsprachigen Definition erlaubt - inwiefern die Thematik des gleichen Namensraums die erlaubten Attributwerte begrenzt, leuchtet mir nicht ein.

Also ist m.E. ein # im name-Attribut eines Links auch in HTML 4.01 nicht erlaubt - auch wenn das zu den Sachen gehört, die nicht in der DTD hinterlegt werden können, und die somit der Validator auch nicht zu erkennen in der Lage ist.

Natürlich hätte es in der DTD ausgedrückt werden können. Ich nehme an, dass die Autoren der Spezifikation den eindeutigsten Weg gewählt haben. Hätten Sie für name bei a ausdrücklich ID gewollt, hätten Sie ID genommen (wollten Sie es? »The value of this attribute must be a unique anchor name« weist mehr oder weniger darauf hin, wenn man das als »dokumentweit eindeutig« versteht). Falls das Widersprüche gegeben hätte (weil dafür das id-Attribut reserviert ist und somit <a name="bla" id="bla"> problematisch gewesen wäre), hätten sie immer noch NAME nehmen können, für das ja ausdrücklich dieselben Syntaxregeln wie für ID gelten. (Die Einschränkung auf »unique anchor name« müsste dann wie jetzt natürlichsprachig ausgedrückt werden, weil mehrere <a name="bla"> sonst qua menschenlesbarer Spezifikation erlaubt wären.)
Dann gibt es noch ganz offensichtliche Gründe: name bei a war schon in HTML 3.2 als CDATA (fehl)definiert. Wenn sie die Kontinuität bewahren wollten, konnten sie an der Definition nichts ändern, sondern nur <a name="..."> für Anker durch die id-Neudefinition komplett obsolet machen. Dann wäre es aber inkonsistent, wenn sie name als CDATA hinterrücks auf ID eingeschränken würden.

Mathias