Danke für eure Ausführungen. Jetzt hab ich's verstanden. Wäre ich gestern schon dazu in der Lage gewesen, meine Frage genau genug zu stellen, hätt's wohl keine Diskussion gegeben. Hier ein paar hoffentlich klärende Kommentare :
Das Attribut zuletzt-weggelaufen aus meiner ersten Frage sollte optional sein, sonst braucht man eh keinen Vorgabewert.
Der Benutzer sollte später in seinem Datensatz dem Attribut auch beliebige andere Werte geben können (z.B. "23.04.2001"). Deshalb hat das Attribut den Typ CDATA.
Im W3C-Dokument habe ich jetzt gelesen, dass nach dem Typ die Default Declaration kommt :
DefaultDecl ::= '#REQUIRED' | '#IMPLIED' | (('#FIXED' S)? AttValue)
Wenn man einen Vorgabewert angibt, ist das Attribut automatisch optional. Nur wenn man einen Vorgabewert angibt, darf man #FIXED verwenden (irgendwie klar). Wenn man einen Vorgabewert mit #FIXED versieht, ist das Attribut immernoch optional, muss aber den Vorgabewert zugewiesen bekommen, wenn es angegeben wird.
<!ATTLIST haustier
zuletzt-weggelaufen CDATA "noch nie"
ist also erlaubt und tut exakt das, was ich wollte.
<!ATTLIST haustier
zuletzt-weggelaufen CDATA #FIXED "noch nie"
würde den Benutzer dazu zwingen, zuletzt-weggelaufen entweder wegzulassen oder auf den Vorgabewert "noch nie" zu setzen.
Über die ENTITY-Ersetzung hab ich noch nichts weiter gelesen, aber das wird sich auch noch finden. Ich gehe davon aus, dass die Korrektur zu meinem Fragebeispiel richig ist :
So gehts:
<!ENTITY % vokal "(a|e|i|o|u)">
<!ELEMENT quatsch EMPTY>
<!ATTLIST quatsch
laut %vokal; #IMPLIED
laut2 (%vokal;|y) #IMPLIED
laut3 %vokal; a