El Supremo: DTD: Regeln für Kindelementtypen

Beitrag lesen

Hallo,

ich versuche gerade, mir (vor allem damit) ein wenig über das Erstellen von DTDs bei zu bringen. (Ja, der Themenbereich XML ist wohl nicht ganz korrekt, aber welcher wäre besser?)

Ich habe nun ein Problem mit genaueren Regelungen für Kindelemente.
Stellt euch bitte mal einen Elementtyp mit drei möglichen Kindelementtypen vor, also grob:

<!ELEMENT element (sub1, sub2, sub3)>

Was ich gerne hätte ist Folgendes:

Erstmal soll die Reihenfolge beliebig sein. Laut des oben verlinkten selfHTML Artikels ginge das ja mit dieser Konstruktion:

<!ELEMENT element (sub1, sub2, sub3)*>

Doch da kommt schon das erste Problem (falls ich nicht schon vorher eines übersehen haben sollte …).
Durch das Sternchen wird ja nicht nur die Reihenfolge beliebig, sondern auch die Anzahl der Vorkommen. Kann ich nicht die Reihenfolge beliebig machen, ohne dabei etwas darüber aus zu sage, wie oft das Element vorkommen darf?
Denn ich will im Endeffekt noch etwas Anderes:
sub1 soll immer ein Mal vorkommen müssen, sub2 ein Mal oder mehrmals und sub3 ein Mal oder garnicht. Und dazu eben alle drei Elemente in beliebiger Reihenfolge.

Klar, ein Mal vorkommen ist ja im Prinzip Standard und erfordert keine weiteren Angaben, ein Mal oder mehrmals kann ich mit einem Plus erzeugen und ein Mal oder garnicht mit einem Fragezeichen. Nur, wie ich all das kombinieren kann – dazu auch noch in beliebiger Reihenfolge – ist mir etwas schleierhaft.

Ich denke, am nächsten komme ich meinem Ziel mit

<!ELEMENT element (sub1, sub2+, sub3?)*>

aber ich fürchte, dass das Sternchen mir da einen Strich durch die Rechnug macht … kann mir da jemand bitte weiterhelfen?

Zum anderen noch eine Sache (die so blöd klingt, dass sie mir fast peinlich ist): wo finde ich einen Validator, mit dem ich mein XML Dokument, das die eigene DTD verwendet, mit dieser DTD überprüfen lassen kann? Für XHTML habe ich bisher immer diesen XML Schema Validator verwendet, doch wenn ich ihm mein XML mit externer verlinkter eigener DTD füttere, meint er immer „No supported document type declaration was found, thus a standalone document declaration is assumed.“ (Die DTD ist aber unter dem in der XML Datei angegebenen URI verfügbar.)

Ich würde mich auch hier über einen Rat freuen.

Das wars erstmal, schönen Abend noch,

Gruß,

El Supremo

--
Ich weiß, dass ich nichts weiß. (Sokrates)