Calocybe: DTD - Warum geht das nicht ....

Beitrag lesen

Tag fredy!

Erstmal Deine zweite Frage (fuer die Du uebrigens nicht haettest einen extra Thread aufmachen muessen):

Wenn ich in einer DTD
<!ELEMENT book (title, author, price)>
angebe, dann muß zuerst title dann author und dann price kommen, oder ?

Richtig.

Wie codiere ich diese Anweisung, wenn die Reihenfolge egal sein soll ?

Wenn nicht alle vorhanden sein muessen, oder manche auch mehrmals vorhanden sein duerfen, einfach
    <!ELEMENT book (title author price)>
Wenn aber jedes der drei Element genau einmal enthalten sein soll, dann faellt mir leider nichts anderes ein, als alle sechs Moeglichkeiten als Choice aufzuzaehlen, was man etwas vereinfacht dann als
    <!ELEMENT book (
        (title, ((author, price) (price, author)))
        (author, ((title, price) (price, title)))
        (price, ((title, author) (author, title)))
    )>
schreiben kann.

<autor>
  <first-name>fred</first-name>
  <last-name>xyz</last-name>
</autor>
oder nur den Namen angeben muß:
<autor>
  <name>fred xyz</name>
</autor>
oder einfach nur PCDATA angeben kann:
<autor>das ist irgendein text</autor>

Ich hab's mit folgender Coderierung versucht - klappt aber nicht:
<!ELEMENT author ( (#PCDATA) (first-name,last-name) (name) )>

Eine Choice zwischen Mixed content und Element content kannst Du nicht machen. Du kannst also nur eine Choice zwischen den ersten beiden Moeglichkeiten bauen, oder Du machst halt
    <!ELEMENT author (#PCDATA first-name last-name name)*>
was Du aber sicherlich nicht willst, da dann ja viele der Restriktionen einfach wegfallen. Wozu Du die letzte Moeglichkeit <autor>das ist irgendein text</autor> brauchst, ist mir aber ohnehin nicht ganz klar, sie ist ja im Endeffekt dasselbe wie die zweite.

So long