Gunnar Bittersmann: Hilfe bei doctype-Deklaration

Beitrag lesen

@@Karl M.:

<!DOCTYPE mydoctype /[

Nein. „Der Name in der Dokumenttyp-Deklaration muss mit dem Elementtyp des Wurzel-Elements übereinstimmen.“ [XML10 §2.8]

<!ELEMENT datensatz (ANY)> <!-- ANY ist hierfür wahrscheinlich falsch -->

Du müsstest auch sämtliche möglichen Kindelemente ('spalteA', 'spalteB', 'spalteC') in der DTD deklarieren: „Ein Element ist gültig, wenn es eine Deklaration gibt, die zu elementdecl  passt, wobei der Name zu dem Elementtyp passt und eine der folgenden Bedingungen gilt: […] 4. Die Deklaration passt zu ANY, und die Typen aller Kind-Elemente sind deklariert worden.“ [XML10 §3]

Denkbar wäre sowas:

<!ELEMENT datensatz (id, spalteA?, spalteB?, spalteC?)> [SELFHTML]

Unschön ist, dass die Elemente (sofern vorhanden) in der festgelegten Reihenfolge auftreten müssen.

Auch denkbar:

<!ELEMENT datensatz (id, (spalteA | spalteB | spalteC)*)>

Dann muss als erstes Kindelement 'id' kommen, danach die anderen in beliebiger Reihenfolge und Anzahl.

Auszudrücken, dass jeder Elementtyp maximal einmal, die Kindelemente aber in beliebiger Reihenfolge vorkommen dürfen, ist IIRC in einer DTD nicht möglich (außer durch Aufzählung aller möglichen Reihenfolgen). Mit einem XML Schema sollte auch das gehen.

Mich dünkt, 'id' könnte eher ein Attribut von 'datensatz' sein denn ein Kindelement.

Live long and prosper,
Gunnar

--
„Das Internet ist ein großer Misthaufen, in dem man allerdings auch kleine Schätze und Perlen finden kann.“ (Joseph Weizenbaum)