MrWurf: Wie undeklarierte Elemente zulassen

Hallo allerseits,

ich habe folgendes Problem: in eine per DTD definierte XML-Struktur soll eine beliebige Unterstruktur eingebettet werden, ohne dass diese in der DTD erwähnt wird.

Also z.B. aus dem XML-Element:

<container>
</container>

wird dann

<container>
 <variablerinhalt1>blu</variablerinhalt1>
 <variablerinhalt2>bla</variablerinhalt2>
</container>

Gibts in der DTD eine Möglichkeit, das container-Element so zu deklarieren, dass es beliebige undeklarierte Unterelemente zuläßt?

Gruß,
MrWurf

  1. Hi,

    ich habe folgendes Problem: in eine per DTD definierte XML-Struktur soll eine beliebige Unterstruktur eingebettet werden, ohne dass diese in der DTD erwähnt wird.

    Hm. Meiner Meinung nach widerspricht sich das ein bißchen - einerseits eine DTD, damit die Dokumentstruktur geprüft werden kann, andererseits, beliebigen Inhalt in einem Element zulassen...

    ANY könnte als Content model das bewirken, was Du willst (sicher bin ich mir aber nicht).

    Laut http://www.thescarms.com/XML/DTDTutorial.asp bedeutet das "any type of data".
    Laut http://www.rpbourret.com/xml/xmldtd.htm müssen die Kind-Elemente aber deklariert sein ("ANY means that the element can contain zero or more child elements of any declared type, as well as character data.")

    cu,
    Andreas

    --
    MudGuard? Siehe http://www.Mud-Guard.de/
    Fachfragen per E-Mail halte ich für unverschämt und werde entsprechende E-Mails nicht beantworten. Für Fachfragen ist das Forum da.
    1. Hallo Andreas,

      Hm. Meiner Meinung nach widerspricht sich das ein bißchen - einerseits eine DTD, damit die Dokumentstruktur geprüft werden kann, andererseits, beliebigen Inhalt in einem Element zulassen...

      Stimmt eigentlich, ich will es eben nur ein bischen prüfen lassen :-)

      ANY könnte als Content model das bewirken, was Du willst (sicher bin ich mir aber nicht).

      leider nicht, habe ich schon probiert.

      Laut http://www.rpbourret.com/xml/xmldtd.htm müssen die Kind-Elemente aber deklariert sein ("ANY means that the element can contain zero or more child elements of any declared type, as well as character data.")

      Die Fehlermeldung sagt was ähnliches.

      Trotzdem danke für die Hilfe, ich werde wohl in meinem Progrämmsche die automatische Validierung deaktivieren müssen.

      Gruß.
      Wurf

    2. Hallo,

      ANY könnte als Content model das bewirken, was Du willst (sicher bin ich mir aber nicht).

      So wie er es möchte: kann nicht.

      Laut http://www.thescarms.com/XML/DTDTutorial.asp bedeutet das "any type of data".
      Laut http://www.rpbourret.com/xml/xmldtd.htm müssen die Kind-Elemente aber deklariert sein ("ANY means that the element can contain zero or more child elements of any declared type, as well as character data.")

      Tz tz ...immer diese fremde Links. So schlecht ist SELFHTML nun wirkich nicht! ;-)

      http://de.selfhtml.org/xml/dtd/elemente.htm#beliebiger_inhalt
      "Elemente mit beliebigem Inhalt [...]  deren Inhalt in keiner Weise festgelegt ist. Alle übrigen in der DTD definierten Elementtypen können in einem Element mit beliebigem Inhalt vorkommen."

      Aber er kann eine XML-Schema verwenden, da ginge sowas.

      Grüße
      Thomas

      1. Ahoi Thomas,

        Aber er kann eine XML-Schema verwenden, da ginge sowas.

        könntest du diesen Gedanken etwas erläutern?

        thx,
        Wurf

        1. Hallo,

          Aber er kann eine XML-Schema verwenden, da ginge sowas.

          könntest du diesen Gedanken etwas erläutern?

          Ich zitiere hier die Schema Spez. weil das hier recht gut erklärt wird:
          ------------
           Der anyType repräsentiert die Abstraktion des ur-type, dem Basistyp, von dem alle einfachen und komplexen Typen abgeleitet sind. Ein anyType schränkt seinen Inhalt in keiner Weise ein. Er kann wie jeder andere Typ verwendet werden:

          <xsd:element name="irgendwas" type="xsd:anyType"/>

          Der Inhalt des so deklarierten Elements ist in keiner Weise eingeschränkt, der Wert des Elements könnte also 423.46 sein, aber es könnte genauso gut jede andere Zeichenkette oder sogar eine Mischung aus Zeichen und Elementen sein.
          --------------

          D.h. wenn du für deine XML-Dokumente statt eine DTD, eine XML-Schema entwickelst, kannst du <xsd:element name="container" type="xsd:anyType"/> oder auch nur
          <xsd:element name="container" /> verwenden. Dann kannst du im <container>-Element alles mögliche als Inhalt haben.

          Grüße
          Thomas

          1. Hallo Thomas,

            danke für die Erklärung, mal sehen was ich damit anfangen kann...

            Gruß,
            Wurf

  2. Hi,

    <container>
    <variablerinhalt1>blu</variablerinhalt1>
    <variablerinhalt2>bla</variablerinhalt2>
    </container>

    <container>
      <variablerinhalt name="inhalt1">blu</variablerinhalt>
      <variablerinhalt name="inhalt2">bla</variablerinhalt>
    </container>

    ?

    Cheatah

    --
    X-Will-Answer-Email: No
    X-Please-Search-Archive-First: Absolutely Yes
    1. Hi Cheatah

      <container>
        <variablerinhalt name="inhalt1">blu</variablerinhalt>
        <variablerinhalt name="inhalt2">bla</variablerinhalt>
      </container>
      ?

      nette Idee, leider kann ich den Inhalt des Containers nur begrenzt beeinflussen, weil es sich um ein standalone-Format handelt, dass auch woanders verwendet wird.

      Gruß,
      Wurf