Hallo Mathias,
entschuldige bitte den etwas wirren Betreff (Gut, inzwischen nicht mehr
ganz so wirr, nachdem mit CKs Software genötigt hat, den eigentlich
exakteren Betreff zu kürzen).
ich zweifle an der Vereinbarung, dass der Nummerierungstyp von geordneten
Listen (ol) zur Präsentation gehört und deshalb ins Stylesheet und nicht
ins Markup gehört.
Ich auch. Nachdem ich mich jetzt durch mehrere CSS3-Module, durch XHTML2
und archivierte Maildebatten auf www-style gewühlt und trotzdem nichts
gefunden habe, kam ich nicht drumherum, mir auch dazu eine Meinung zu
bilden. Und zwar ist das Grundproblem dieses: Wie referenziert man bereits
genanntes im späteren Verlauf des Dokumentes nochmal? Ich denke, daß macht
man am besten automatisch, nicht in textueller Form wie Du vorgeschlagen
hast.
Ich gebe mal ein ähnliches Beispiel aus Latex. Dort kann man auch
automatisch vergebene Kapitelnummern später wieder referenzieren:
...
\section{Blablablabla} \label{bla}
...
...
\section{Heiße Luft}
...
Ähnliche Argumentationsstrategien finden Sie auch im Kapitel~\ref{bla}.
...
Wenn jetzt das Latex-Dokument kompiliert wird, kann zum Beispiel so etwas
dabei herauskommen (natürlich auf diktengleichen Text umgesetzt):
2.1.3 Blablablabla
...
...
4.3.2.1 Heiße Luft
...
Ähnliche Argumentationsstrategien finden Sie auch im Kapitel 2.1.3.
Man sieht: Hierbei wird die Nummerierung übernommen und eingesetzt. (Wobei,
bei dem sehr nacheinander ablaufenden Tex wird hierbei die Nummer der
vorhergehenden Kompilation genommen. Sehr nervig, sowas)
Welche Möglichkeiten gibt es denn in HTML, um solche dokumenteninternen
Referenzierungen auszuführen? Die ID eines Elementes und die href-Verweise
mit Ankern. Allerdings wird hierbei nur die Information gegeben, daß
zwischen diesen beiden Stellen ein Verweis existiert, nicht den Inhalt
der referenzierten Stelle.
Hier zeigt sich eine Schwäche von CSS, auch anscheinend von CSS 3. Ich
zeige das mal mit einem Beispiel wie bei at auf:
<li id="apfel">Apfel</li>
...
<p>Wir nehmen <a href="#apfel" class="intern-ref"></a>
und tun dies und das</p>
Das Ziel ist es jetzt, in CSS eine Regel zu definieren, die die (als
gegeben angenommene) Nummerierung von li#apfel einfügt. Dieses geht,
so meine ich, mit bestehender und zukünftiger Syntax von CSS nicht.
Man müßte ungefähr eine Regel samt Selektor bastelt, die ungefähr
folgendes leistet:
Für jedes a mit der Klasse intern-ref definiere mit content einen
Inhalt, der gleich dem Inhalt vom berechneten :before-Pseudoelement
des Elementes ist, dessen ID im href-Attribut angesprochen ist.
(Für CSS 3 denke man sich das entsprechend mit ::marker. Außerdem
wäre auch ein Einsatz des cite-Attributes denkbar.)
Ich sehe nicht, daß dieses mit der Syntax von CSS geht. Auch CSS 3 wird
dieses nicht erlauben, meine ich verstanden zu haben. Zwar gibt es
Funktionen, die es erlauben Elementinhalt woanders im Dokument wieder
anzeigen zu lassen (::alternate und move-to), allerdings scheint es mir,
das dieses auf einen einmaligen Einsatz beschränkt ist, so zum Beispiel
für Fußnoten.
Warum schreibe ich nun all dieses von automatischer Referenzierung? Weil
dieses meiner Meinung nach aus der Trennung von Struktur und Präsentation
folgt. Du schriebst dieses:
Es kann doch nicht sein, dass man für alle Zeiten auf die
Standard-Dezimalnummerierung festgelegt ist (..)
Das ist man sowieso. Durch die Struktur der einzelnen Elemente im
Dokument kann man jedes Element durch eine Nummer identifizieren.
Wie dann diese Nummer dargestellt wird, bleibt der Präsentation
überlassen, ob binär, dezimal, hexadezimal, latein-alphabetisch,
armenisch. Das heißt die Nummer ist von ihrer Präsentation getrennt.
Und schließlich kann man auch ganz andere Nummerierungen nutzen:
li:nth-child(1):before {content:'Kawummmm!';}
li:nth-child(2):before {content:'Raabömms!';}
li:nth-child(3):before {content:'Dingding!';}
Das heißt man hat eine unendliche Menge von möglichen Darstellungen einer
Nummerierung zur Verfügung.
Man könnte sagen, daß Du, als Du dieses geschrieben hast ...
<p>Wir schneiden a) klein und würfeln b), pürieren c) und pressen d)
aus. Fertig ist die Sauerei.</p>
... die Trennung von Struktur und Präsentation unterlaufen hast. Du hast
nämlich ein Merkmal der Präsentation benutzt ("d)"), das nur ein Platzhalter
für ein Element ist, dieses also referenziert (Element 4 der Liste bla).
CSS, als Mittel für die Präsentation gibt jedoch kein Mittel für die
automatische Darstellung eines Identifizikator des referenzierten
Elementes zur Verfügung. Nein, ich kann diese Bezeichnung wirklich
nicht verkürzen ohne einen entscheidenen Verlust auf Exaktheit.
Deswegen leider auch das Theater mit dem Titel.
Weswegen ich sagen würde, dieses ist eher eine Schwäche von CSS als
Mittel der angestrebten Trennung von Inhalt und Präsentation, weniger
eine Fehleinschätzung, ob die Darstellung der Ordinalzahl einer
Reihenfolge von Elementen doch zur Struktur gehöre. Allerdings: ich
kann mir auch die entgegengesetzte Meinung als vorstellbare Argumentation
vorstellen. Irgendwie ein Graubereich, in dem man eine Entscheidung
zu treffen hat. Latex ist da offensichtlich im Vorteil, weil es nur
eine Ausgabemöglichkeit hat.
Lösungsvorschläge? Naja. Nur die von Dir vorgeschlagene Festverdrahtung,
eventuell angereichert durch die von HTML (und at) vorgeschlagene
Verweise auf Anker, um eine Referenzierung aufzuzeigen.
Oder aber der Verzicht auf solche Referenznummern. Wie oft braucht man
dieses denn in der Wirklichkeit? Wohl eher nur in mathematisch-technischen
Dokumenten (»Vergleiche Theorem 4.23.5.1a«). Und streng genommen, wenn
man das weiterdenkt: Es wären dann auch theoretisch CSS-Regeln möglich,
die, wenn man einen Link auf eine andere Ressource setzt, den Titel
dieses Dokumentes übernehmen. Und so verweist man normalerweise nicht,
man setzt etwas eigenes als Inhalt des Linkes.
Ja, alles sehr unbefriedigend.
Tim