SnowOne: CDATA in DTD's

Hallo lieber Forumer und Forumerinnen ....

ich habe mal wieder ein kleines Problem, und hoffe das Ihr mit dabei helfen könnt ...

Ich habe mit eine kleine XML Datei zusammengestellt die ungefähr wie folgt aussieht:

<?xml version="1.0"?>
<!DOCTYPE template
  [
  <!ELEMENT template (#PCDATA)>
  <!ELEMENT template (part+)>
  <!ELEMENT part (#PCDATA)>

<!ATTLIST part name CDATA #REQUIRED>
  ]

<template>
  <part name=“test“>
<html>
  <head>
    <title>TestSeite</title>
  </head>
  ….
</html>
  </part>
</template>

... und nun bin ich bei folgendem Problem angekommen: In der DTD steht als Datentyp bei <part> 'PCDATA' ... das heißt er wird mit den Inhalt von <part> auch weiter durchparsen .. ich möchte aber das der Text zwischen <part> der Inhalt (Value) von <part> ist ...

is das soweit verständlich? ;o)

Nachdem ich in einer XML Doku nachgelesen hab ist dafür der Typ CDATA vorgesehen ...

Bis hier hin schön und gut ...

Wenn ich aber nun in der DTD anstand PCDATA CDATA eintrage hat mein XML Dokument einen Fehler... wenn ich aber in dem XML Teil folgendes eintrage:
...
<part name=“test“>
<![CDATA[
<html>
  <head>
    <title>TestSeite</title>
  </head>
  ….
</html>
]]>
</part>
...
funktioniert das alles wunderbar ... so will ich das aber nicht ...

gibt es da irgendeine Möglichkeit in der DTD einzutragen das das CDATA ist?

Ich bedanke mich recht herzlich für alle eure Versuche mir zu helfen ...

Bis dann

SnowOne

  1. Hallo,

    Ich habe mit eine kleine XML Datei zusammengestellt die ungefähr wie folgt aussieht:

    gibt es da irgendeine Möglichkeit in der DTD einzutragen das das CDATA ist?

    nein, das Maximum an reiheit ist ANY, d.h. alle Elemente die in der DTD deklariert sind sind gültig.

    Gruß
    Franz

  2. Hallo,

    mal davon was franz schon gesagt hat:

    <?xml version="1.0"?>
    <!DOCTYPE template
      [
      <!ELEMENT template (#PCDATA)>
      <!ELEMENT template (part+)>

    das ist es falsch. du deklarierst 2 mal das element template, einmal mit dem inhalt PCDATA und einmal mit dem inhalt vom typ element (part).

    grüße
    thomas

    1. Hallo,

      Na gut ... dann bleibt mir wohl nix anderes übrig als in dem eigentlichen part mit <![CDATA[ ... ]]> zu füllen ....

      <?xml version="1.0"?>
      <!DOCTYPE template
        [
        <!ELEMENT template (#PCDATA)>
        <!ELEMENT template (part+)>

      das ist es falsch. du deklarierst 2 mal das element template, einmal mit dem inhalt PCDATA und einmal mit dem inhalt vom typ element (part).

      Wie kann ich denn dann beides zusammen definieren?

      Danke erstmal an Euch beide für Eure Hilfe ...

      SnowOne

      1. Hallo,

        Wie kann ich denn dann beides zusammen definieren?

        <!ELEMENT template (#PCDATA|part)+>

        MfG, Thomas