Thomas J.S.: standalone in XML-Deklaration

Beitrag lesen

Hallo Thomas,

Mit standalone="yes" geben Sie an, dass sich die DTD innerhalb der aktuellen Datei befindet.

Warum verarbeiten dann alle gängigen Editoren/Parser bei standalone="yes" auch die externe DTD?

Weil die Spezifikation einem Parser nicht vroschribt, was er im Falle eines Standalone Dokument Declaration (SDD) machen muss.

Bei "no" wird aber auf jeden Fall die interne DTD ignoriert?!

Das habe ich mit drei versch. XML-Parser getestet und alle drei meldeten den Fehler in dem XML:
--------------------------
<!ELEMENT  test (foo, bar)+>
<!ATTLIST test
                    a-test CDATA "testdaten">

<!ELEMENT foo (#PCDATA)>
<!ATTLIST foo
                    a-foo CDATA #REQUIRED>

<!ELEMENT bar (#PCDATA)>
<!ATTLIST bar
                    a-bar CDATA #FIXED "barbar">

-------------------------
<?xml version="1.0" encoding="UTF-8" standalone="no"?>
<!DOCTYPE test SYSTEM "test.dtd" [
   <!ATTLIST bar id ID #REQUIRED>
]>
<test>
   <foo a-foo="foodata">foo text</foo>
   <bar>bar text</bar>
</test>
-------------------------

Egal welche Spec ich zu dem Thema gefunden habe, ich konnte nirgends eine übereinstimmung zwischen diesen und dem Verhalten der Editoren/Parser feststellen.

Weil die Spez. nichts dazu vorschreibt?

XML-Spy und Xerces validert nicht ein solches XML yes/no egal:

<?xml version="1.0" encoding="UTF-8" standalone="yes"?>
<test>
   <foo a-foo="foodata">foo text</foo>
   <bar id="bar1">bar text</bar>
</test>

Die Fehlermeldung lautet dabei zusammengefasst, dass die Deklaration für die Elemente etc. nicht gefunden werden konnte. Also es ist nur eine Wohlgeformtheit-Prüfung möglich.
MSXML validert das XML, wobei das nur eine Wohlgeformtheit-Prüfung ist.
Also verhalten sich alle drei Korrekt.

Alles drei Valideren mit yes/no bei einer internen DTD:

<?xml version="1.0" encoding="UTF-8" standalone="no"?>
<!DOCTYPE test [
 <!ELEMENT test (foo, bar)>
 <!ATTLIST test
 a-test CDATA "testdaten"

<!ELEMENT foo (#PCDATA)>
 <!ATTLIST foo
 a-foo CDATA #REQUIRED

<!ELEMENT bar (#PCDATA)>
 <!ATTLIST bar
 a-bar CDATA #FIXED "barbar"
  id ID #REQUIRED

]>
<test>
 <foo a-foo="foodata">foo text</foo>
 <bar id="bar1">bar text</bar>
</test>

Grüße
Thomas

PS: wie gesagt standalone ist ein Hinweis, aber kein Vorschrift für den Parser.