Hallo,
ich habe eine Frage zur DTD für folgendes Stück aus einem XML-Konstrukt:
Um die Antworten aus den zwei anderen Postings auf dem Punkt zu bringen (bzw. sie zu korrigieren):
<inhaltsverzeichnis>
<ivz_ueberschrift>Inhaltsverzeichnis</ivz_ueberschrift>
<ivz_kapiteleintrag>Meine frühen Jahre</ivz_kapiteleintrag>
<ivz_abschnittseintrag>Kindheit</ivz_abschnittseintrag>
<ivz_abschnittseintrag>Jugend</ivz_abschnittseintrag><ivz_kapiteleintrag>Wie ich zum Manne wurde</ivz_kapiteleintrag>
<ivz_abschnittseintrag>Die erste Liebe</ivz_abschnittseintrag>
</inhaltsverzeichnis>
>
> Gibt es irgendeine Möglichkeit, die DTD so zu schreiben, dass die Reihenfolge der drei inneren Elemente egal ist und nur deren Anzahl innerhalb "inhaltsverzeichnis" (also genau einmal, mindestens einmal, 0 bis n mal) überprüft wird ?
>
Nein.
Was du brauchst ist im Grunde folgendes:
<!ELEMENT inhaltsverzeichnis (((ivz\_abschnittseintrag | ivz\_kapiteleintrag)\*, ((ivz\_ueberschrift, ivz\_kapiteleintrag+) | (ivz\_kapiteleintrag+, ivz\_ueberschrift)), (ivz\_kapiteleintrag | ivz\_abschnittseintrag)\*))>
Aber! So wird ein nicht deterministisches\* Inhaltsmodell erzeugt.
\*) Der Parser kann nicht - ohne vorauszusehen - wissen, welches Element kommen wird und so kann er das Dokument nicht 100%-ig valideren.
<http://edition-w3c.de/TR/2000/REC-xml-20001006/#determinism>
Einige Parser valideren das Dokument, andere sind strenger und melden den Fehler.
> P.S.: das XML-Stück ist nicht auf meinem Mist gewachsen, es stammt aus einer Klausuraufgabe.
>
Aha.
Grüße
Thomas