DreamFlasher: DTD ANY mit beliebiger Verschachtelungs-Tiefe

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

  1. 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
    
    1. 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

  2. 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

    1. 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

      1. 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