Philipp Hasenfratz: DTD Auszeichnungs(lücke|problem)

Beitrag lesen

Halihallo Thomas

--auswahl.dtd--
<?xml version="1.0" encoding="UTF-8"?>
Das ist ein einer DTD nicht nur überflüssig, sonder auch falsch, eine DTD ist keine XML-Datei und wird auch nie wellformed oder valide sein.

Nun, ich glaube du folgerst dies aus der XML-Deklaration, natürlich, z.B. ELEMENT-
Definitions gehören in die DOCTYPE und externe DTD's werden dort sozusagen "eingefügt",
folglich ist dort <?xml version...?> sowie die Aussagen well-formed, valide fehl am
Platz. Wer lesen kann, bzw. etwas "um die Ecke denkt", ist klar im Vorteil, du hast
recht ;-)

Dann ist die angedachte Struktur falsch, bzw. man könnte es als Nachteil des gemischten Inhaltsmodells auslegen.

Nun, dann ist es eben so. XML-Schema bietet hierfür evtl. einige Möglichkeiten (AFAIK,
das werde ich noch nachlesen).

Gehören jetzt deiner Meinung nach die beiden Zeilenumbrüche (&#xA;) in das Element <a> oder nicht? Ist das jetzt #PCDATA oder nur "Lesbarkeitshilfe"? Der Parser kann es auch nicht wissen.

Ah, ich habe befürchtet, dass das Beispiel mit #PCDATA nicht gut gewählt war (es war so
als Beispiel behandelt worden und ich habe es übernommen). Aber genau _das_ war das
Problem, denn

<!ELEMENT auswahl (name|vorname)+>
<!ELEMENT name (#PCDATA)>
<!ELEMENT vorname (#PCDATA)>

funktioniert perfekt. Jetzt habe ich auch verstanden, dass #PCDATA der Übeltäter ist.
Zuerst wollte ich einfach "mindestens ein Element", aber das hat sich jetzt auch gelöst.

Und wenn er sich jetzt an deine DTD halten würde, wäre dein XML nicht valide, weil du mit dem ersten Zeilenumbruch bereits ein #PCDATA hattest, wonach Element <b> schon nicht mehr erlaubt ist.

Warum?
Bei <!ELEMENT auswahl (#PCDATA|name)+>  (wenn es denn ginge), dürfte nachher sehr wohl
ein Element name folgen, genauso wie noch weitere #PCDATA. Aber die Begründung, dass
ein "richtiges" #PCDATA nicht von strukturierenden Zeilenumbrüchen und Einzügen zu
unterscheiden sind, ist eine gute Begründung, warum (#PCDATA|name)+ nicht möglich sein
sollte. Danke für die Argumentation!

du kannst höchstens sowas versuchen:
<!ELEMENT auswahl ((#PCDATA) | (#PCDATA|name)* | (name+))>

Negativ. Aber warum? - Es erscheint derselbe Fehler. Naja, man muss ja nicht alles bis
ins letzte Detail definieren können.

Viele Grüsse und Danke für Deine Antwort

Philipp

--
RTFM! - Foren steigern das Aufkommen von Redundanz im Internet, danke für das lesen der Manuals.
Selbstbedienung! - Das SelfForum ist ein Gratis-Restaurant mit Selbstbedienung, Menüangebot steht in den </faq/> und dem </archiv/>.