[XML] Frage zur DTD zu folgender XML...

CrazySash

Well-known member
ID: 93631
L
20 April 2006
2.273
103
Hallo zusammen,

ich habe eine XML Datei
Code:
<?xml version="1.0" encoding="UTF-8"?> 
<!DOCTYPE container SYSTEM "container.dtd">
<container>
<response>
    <responsecode>100</responsecode>
    <data>
        <entry>
            <bla1>bla</bla1>
            <bla2>bla</bla2>
        </entry>
        <entry>
            <bla1>bla</bla1>
            <bla3>bla</bla3>
        </entry>
    </data>
</response>
</container>

dazu folgende DTD
Code:
<!ELEMENT container (response)>
<!ELEMENT response (responsecode, data)>
<!ELEMENT responsecode (#PCDATA) >
<!ELEMENT data (entry)*>
[COLOR=Red]<!ELEMENT entry ANY>[/COLOR]

jetzt zu meiner Frage:

<entry> kann eine belibige Anzahl von Elementen beinhalten, deren Namen ich nicht kenne. Im Beispielcode (bla1, bla3, bla2, etc.). Diese Elemente enthalten alle auf jedenfall #PCDATA

Ich glaube ich hab die Definition mit ANY nicht ganz verstanden, weil so funktioniert es jedenfalls nicht.


Wer kann mir auf die Sprünge helfen?
 
Muss die XML-Datei denn unbedingt valide sein?
Bei SelfHTML findet sich folgendes:
SelfHTML schrieb:
Elemente mit beliebigem Inhalt sind eine Steigerungsform von Elementen mit gemischtem Inhalt. Es handelt sich dabei gewissermaßen um Joker- oder Wildcard-Elemente, deren Inhalt in keiner Weise festgelegt ist. Alle übrigen in der DTD definierten Elementtypen können in einem Element mit beliebigem Inhalt vorkommen.
Nicht definierte Elemente dürfen also auf keinen Fall vorkommen!

Falls das Dokument unbedingt valide sein muss, bleibt nur die CDATA-Alternative:
Code:
<?xml version="1.0" encoding="UTF-8"?> 
<!DOCTYPE container SYSTEM "container.dtd">
<container>
<response>
    <responsecode>100</responsecode>
    <data>
        <entry><![CDATA[
            <bla1>bla</bla1>
            <bla2>bla</bla2>
        ]]></entry>
        <entry><![CDATA[
            <bla1>bla</bla1>
            <bla3>bla</bla3>
        ]]></entry>
    </data>
</response>
</container>
Die entsprechende DTD sähe dann so aus:
Code:
<!ELEMENT entry (#PCDATA)>
 
glaube ich habs verstanden...

Aber vielleicht hat ja noch irgendwer ne Lösung.
 
Zuletzt bearbeitet:
Was stört dich denn daran?
Wenn das ganze eine Webbasierte Sache ist, könntest du die DTD dynamisch erzeugen lassen und alle benutzten Elemente einbauen, aber so wirklich schön finde ich das auch nicht^^
 
jetzt zu meiner Frage:

<entry> kann eine belibige Anzahl von Elementen beinhalten, deren Namen ich nicht kenne.
Einfache Antwort:
Du kannst eine DTD nur schreiben, wenn du weißt, wie das XML-Dokument aussehen soll. In der DTD legst du Regeln fest, wie ein zukünftiger "Autor" ein XML-Dokument schreiben soll. Wenn du selber nicht weißt, wie es sein soll, wie soll es dann ein Dritter (z.B. ein XML-Validator) wissen? :ugly:

Du kannst ANY schon benutzen, allerdings musst du selbst dann die Elemente <bla1>, <bla2> und <bla3> definieren! ANY erspart dir nur, dass du explizit bestimmst, welche Elemente vorkommen dürfen; ANY sagt: alles darf vorkommen.