standalone in XML-Deklaration
Thomas Mell
- xml
0 Ashura0 Thomas J.S.
Hallo,
ich versuche nun schon seit einiger Zeit herauszufinden wie das standalone-Attribut in der XML-Deklaration zu verstehen ist.
Soweit ich es kapiert habe, bedeutet standalone="yes" das die Angabe einer externen DTD/Schema zu ignorieren ist.
folgendes Beispiel:
<?xml version="1.0" encoding="utf-8" standalone="yes"?>
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Strict//EN"
"http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd">
<html xmlns="http://www.w3.org/1999/xhtml">
<head>
<title>.</title>
</head>
<body>
<p><img /></p>
</body>
</html>
Demnach ist das <img/>-Tag kein Fehler?!
Bei standalone="no" müssten dagegen die fehlenden Attribute src und alt angemeckert werden?!
Ein Validator müsste bei standalone="yes" demnach jedes Tag und Attribut anmeckern, da diese nirgends definiert sind?
Sehe ich das richtig so?
Das glaube ich aber nicht, da zum Beispiel gängige XML-Editoren (XML-Spy) bei standalone="yes" das img-Tag anmeckern, also doch die externe DTD verwenden.
Vielleicht kann mich mal jemand aufklären wie sich die Sache verhält ;-)
Grüße
Thomas
Hallo Thomas.
ich versuche nun schon seit einiger Zeit herauszufinden wie das standalone-Attribut in der XML-Deklaration zu verstehen ist.
Soweit ich es kapiert habe, bedeutet standalone="yes" das die Angabe einer externen DTD/Schema zu ignorieren ist.
http://de.selfhtml.org/xml/regeln/xmldeklaration.htm#zusatzangaben@title=Gewissermaßen schon:
Mit dem Attribut standalone können Sie dem XML-Parser vorab mitteilen, ob die vorliegende Datei sich auf eine externe DTD bezieht oder nicht. Mit standalone="yes" geben Sie an, dass sich die DTD innerhalb der aktuellen Datei befindet. Mit standalone="no" teilen Sie mit, dass sich die DTD in einer separaten Datei befindet. Die Quelle müssen Sie in diesem Fall mit Hilfe der Dokumenttyp-Deklaration angeben.
Einen schönen Samstag noch.
Gruß, Ashura
Hallo
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?
Es kommt mir eher so vor, das bei "yes" sowohl die interne als auch die externe DTD verarbeitet wird.
Bei "no" wird aber auf jeden Fall die interne DTD ignoriert?!
Egal welche Spec ich zu dem Thema gefunden habe, ich konnte nirgends eine übereinstimmung zwischen diesen und dem Verhalten der Editoren/Parser feststellen.
*Hilfe*
Grüße
Thomas
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.
Hi Thomas,
wie gesagt standalone ist ein Hinweis, aber kein Vorschrift für den Parser.
Auf deutsch gesagt, es ist ist scheißegal was in standalone steht?
Ein Validator (keine Wohlgeformtheitsprüfung) muss sowohl die interne wie die externe DTD verarbeiten, egal was in standalone steht?!
Dann muss ich doch mal die Frage stellen wozu standalone überhaupt gut ist...
Grüße
Thomas
Hallo Thomas,
wie gesagt standalone ist ein Hinweis, aber kein Vorschrift für den Parser.
Auf deutsch gesagt, es ist ist scheißegal was in standalone steht?
Nein, bei/für "no" gibt es ja Vorgaben.
Ein Validator (keine Wohlgeformtheitsprüfung) muss sowohl die interne wie die externe DTD verarbeiten, egal was in standalone steht?!
Nein, vor allem weil standalone="yes" deutet ja an, dass es keine externe Markupdeklarationen gibt (geben sollte). Wenn es doch eine DTD gibt und der Parser das verarbeitet, ist es seine Sache.
Grüße
Thomas
Hallo,
ich versuche nun schon seit einiger Zeit herauszufinden wie das standalone-Attribut in der XML-Deklaration zu verstehen ist.
Hmm...
http://edition-w3c.de/TR/2000/REC-xml-20001006/#sec-rmd
Soweit ich es kapiert habe, bedeutet standalone="yes" das die Angabe einer externen DTD/Schema zu ignorieren ist.
Genau genommen, bedeutet es nicht, dass es zu ignorieren ist (also kein "soll"). Generell ist das standalone-Attribut mehr ein Hinweis als eine Anweisung für den Parser. Z.B. einem nicht validierender XML-Parser ist es erlaubt, Referenzen auf externe Entities komplett zu ignorieren, wobei er einen Fehler melden muss, wenn standalone="yes" gesetzt und eine nichtdeklalierte Entity gefunden wird.
folgendes Beispiel:
<?xml version="1.0" encoding="utf-8" standalone="yes"?>
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Strict//EN"
"http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd"><html xmlns="http://www.w3.org/1999/xhtml">
<head>
<title>.</title>
</head><body>
<p><img /></p>
</body>
</html>Demnach ist das <img/>-Tag kein Fehler?!
Nein, aber ein Parser kann das so werten.
Bei standalone="no" müssten dagegen die fehlenden Attribute src und alt angemeckert werden?!
Ja, sollten sie.
Ein Validator müsste bei standalone="yes" demnach jedes Tag und Attribut anmeckern, da diese nirgends definiert sind?
Nein, muss er nicht. Warum auch denn? Erstens es kann einer interner Teilmenge der DTD geben und zweitens kann bei "yes" dann einfach eine Wohlgeformtheitsprüfung stattfinden.
Sehe ich das richtig so?
Das glaube ich aber nicht, da zum Beispiel gängige XML-Editoren (XML-Spy) bei standalone="yes" das img-Tag anmeckern, also doch die externe DTD verwenden.
Wie gesagt, standalone ist eher ein Hinweis, als eine Vorschrift an den Parser.
Grüße
Thomas