Rolf b: Warum ist dieses DTD ungültig

Hallo,

mein Sohn muss sich gerade für die Uni mit DTDs herumschlagen. Ich selbst bin in meinem Leben bisher immer drumherumgekommen und lerne deshalb auch gerade erst den Umgang damit :)

Themeneingrenzung: Dies hier ist ein reduziertes XML zur Darstellung des Problems. Es hat keinerlei inhaltliche Bedeutung. Es geht mir ausschließlich um das Thema "Verwendung von Parameter Entities".

<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE test [
<!ELEMENT test (bla)>
<!ENTITY % schnurz "foo, bar">
<!ELEMENT bla (%schnurz;)>
<!ELEMENT foo (#PCDATA)>
<!ELEMENT bar (#PCDATA)>
]>
<test>
    <bla>
        <foo>Huhu</foo>
        <bar>SelfHTML</bar>
    </bla>
</test>

Alle XML Validatoren, die ich online gefunden habe, und auch der in NetBeans integrierte, regen sich über <!ELEMENT bla (%schnurz;)> auf. Die Fehlermeldung ist:

Das Zeichen "(" oder ein Elementtyp ist in der Deklaration des Elementtyps "bla" erforderlich.

Dabei sollte doch, auch gemäß dem SelfHTML Wiki, %schnurz; einfach textuell durch "foo, bar" ersetzt werden und zu einer Elementdefintion <!ELEMENT bla (foo, bar)> führen. Wenn ich die Ersetzung manuell im Sourcecode mache, ist alles gut.

Was mache ich falsch, was habe ich falsch verstanden?

Rolf

  1. Hi,

    <?xml version="1.0" encoding="UTF-8"?>
    <!DOCTYPE test [
    <!ELEMENT test (bla)>
    <!ENTITY % schnurz "foo, bar">
    <!ELEMENT bla (%schnurz;)>
    <!ELEMENT foo (#PCDATA)>
    <!ELEMENT bar (#PCDATA)>
    ]>
    

    Alle XML Validatoren, die ich online gefunden habe, und auch der in NetBeans integrierte, regen sich über <!ELEMENT bla (%schnurz;)> auf.

    Ich hab jetzt nicht nachgeschaut; könnte es sein, daß die ENTITY-Dinger vor den ELEMENT-Dingern kommen müssen?

    cu,
    Andreas a/k/a MudGuard

    1. Sorry, nein. Habe jetzt verschiedene Positionen ausprobiert. Und immerhin ist es im meinem OP vor der Verwendung deklariert.

      Rolf

  2. Habe gerade mal was "verrücktes" gemacht: Habe das DTD in eine externe Datei verrückt. Und dann klappt es. Daraufhin habe ich gegooogelt und das hier gefunden.

    Danke für eure Hilfe beim Denken ;-)

    Rolf

    1. Hallo Rolf,

      Habe gerade mal was "verrücktes" gemacht […]

      und es auch direkt ins Wiki geschrieben. Danke. Ich hab das mal aus dem Text geholt und in die Vorlage "Beachten" gepackt, damit man das was deutlicher sieht.

      Gruß
      Dennis