DTD ANY mit beliebiger Verschachtelungs-Tiefe
DreamFlasher
- xml
0 ThomasM0 Thomas J.S.
Hallo,
ich möchte gerne das folgende Dokument mit inline-DTD validieren:
D.h. ich möchte gerne, dass unter dem chart Element beliebige andere Elemente kommen können, und diese sollen auch beliebig tief geschachtelt unbekannte Elemente enthalten können.
<?xml version="1.0" encoding="utf-8"?>
<!DOCTYPE chart [
<!ELEMENT chart ANY >
]>
<chart>
<anyElement></anyElement>
</chart>
Das Ergebnis des Validators: http://www.validome.org/xml/validate/
ist "Elemententyp "anyElement" muss deklariert werden."
Wie ist es also möglich keine Angaben über die Elemente selbst machen zu müssen die in ANY stehen können?
Vielen Dank für eure Hilfe,
Marcel
Hallo DreamFlasher,
<?xml version="1.0" encoding="utf-8"?>
<!DOCTYPE chart [
<!ELEMENT chart ANY >
]>
<chart>
<anyElement></anyElement>
</chart>
Deklariere z. B. noch `<!ELEMENT anyElement (#PCDATA)>`{:.language-xml}, da sich ANY auf alle in der DTD deklarierten Elemente bezieht.
> Wie ist es also möglich keine Angaben über die Elemente selbst machen zu müssen die in ANY stehen können?
Was soll dann überhaupt validiert werden? Verzichte in diesem Fall auf Validierung und prüfe lediglich auf Wohlgeformtheit.
Grüße,
Thomas
Hallo Thomas,
danke für deine Antwort.
Das Problem war hier auch nur vereinfacht dargestellt.
Die Situation ist folgende: Ich muss das Dokument validieren. Das ist gerade die Aufgabe, es geht also nicht darum das validieren ganz sein zu lassen. Die Dokumente sind aber zu komplex um sie mit einer DTD vollständig zu beschreiben. Bisher liegt keine DTD vor, das ist auch meine Aufgabe diese zu erstellen. Bis zu einer bestimmten Tiefe sind die Elemente noch klar definiert, diese möchte ich auch gerne in meine DTD aufnehmen. Ab der 3. Ebene jedoch ist nicht abzusehen welche Elemente auftreten, diese sollen und müssen wir also egal sein.
Deshalb die letzte Frage in meinem Ersten Posting:
Gibt es so etwas wie ein Catch-All Element, kann ich ANY als "nehme auch undefinierte" umschalten, oder gibt es irgendeine andere Möglichkeit nicht näher spezifierte Elemente zu erlauben?
Besten Dank und viele Grüße,
Marcel
Hallo,
ich möchte gerne das folgende Dokument mit inline-DTD validieren:
D.h. ich möchte gerne, dass unter dem chart Element beliebige andere Elemente kommen können, und diese sollen auch beliebig tief geschachtelt unbekannte Elemente enthalten können.
Geht nicht. Stichwort "unbekannt".
Das Ergebnis des Validators: http://www.validome.org/xml/validate/
ist "Elemententyp "anyElement" muss deklariert werden."
Wie ist es also möglich keine Angaben über die Elemente selbst machen zu müssen die in ANY stehen können?
Nein, ist nicht möglich, denn ANY sagt nur, dass in dem mit ANY definierten Element beliebige andere Elemente vorkommen können, _zu denen es in der DTD einen Elementtyp gibt_.
D.h. du musst alle deine Elemente in der DTD definieren.
Grüße
Thomas
Danke Thomas,
für die klare Aussage. Sehr schade, dass dies nicht möglich ist aber auch verständlich. Weißt du ob es da Möglichkeiten mit XML Schema gibt?
Viele Grüße,
Marcel
Hallo,
Sehr schade, dass dies nicht möglich ist aber auch verständlich. Weißt du ob es da Möglichkeiten mit XML Schema gibt?
Mit XML-Schema ist es möglich ein Element zu definieren dessen Inhalt aus beliebigen wohlgeformten XML besteht (beliebig meint hier wirklich beliebig, wie du es auch meintest). z.B.:
<xsd:complexType name="text">
<xsd:complexContent mixed="true">
<xsd:restriction base="xsd:anyType">
<xsd:sequence>
<xsd:any processContents="lax" minOccurs="0" maxOccurs="unbounded"/>
</xsd:sequence>
<xsd:attribute ref="xml:lang"/>
</xsd:restriction>
</xsd:complexContent>
</xsd:complexType>
Aber auch mit DTDs kannst du sehr komplexe Strukturen abbilden (und 3 Verschachtelungsebenden sind nicht wirklich komplex)
Siehe z.B.: https://redaktion.selfhtml.org/browser/selfhtml/trunk/dtd/sdml1-full.dtd
Grüße
Thomas