Antworten:
Mit der standalone
Deklaration wird der Parser angewiesen, alle Markup-Deklarationen in der DTD zu ignorieren . Die DTD wird danach nur noch zur Validierung verwendet.
Betrachten Sie als Beispiel das bescheidene <img>
Tag. Wenn Sie sich die XHTML 1.0-DTD ansehen , sehen Sie eine Markup-Deklaration, die dem Parser mitteilt, dass <img>
Tags leer sein und Besitz src
und alt
Attribute haben müssen. Wenn ein Browser ein XHTML 1.0-Dokument durchläuft und ein <img>
Tag findet, sollte er beachten, dass die DTD Anforderungen src
und alt
Attribute benötigt , und diese hinzufügen, wenn sie nicht vorhanden sind. Das <img>
Tag wird auch selbst geschlossen, da es leer sein soll. Dies bedeutet die XML-Spezifikation unter "Markup-Deklarationen können sich auf den Inhalt des Dokuments auswirken". Sie können dann die standalone
Deklaration verwenden, um den Parser anzuweisen, diese Regeln zu ignorieren.
Ob Ihr Parser dies tatsächlich tut oder nicht, ist eine andere Frage, aber ein standardkonformer validierender Parser (wie ein Browser) sollte dies tun.
Wenn Sie keine DTD angeben, hat die eigenständige Deklaration "keine Bedeutung". Es gibt also keinen Grund, sie zu verwenden, es sei denn, Sie geben auch eine DTD an.
standalone=yes
werden Markup-Deklarationen nicht ignoriert, sondern führen dazu, dass das Dokument ungültiges XML ist. Würde es Ihnen etwas ausmachen, wenn ich das in die Antwort einbaue?
yes
und no
, wobei no
der Standardwert ist.standalone="yes"
bedeutet, dass der XML-Prozessor die DTD nur zur Validierung verwenden darf.In diesem Fall wird es nicht verwendet für:
standalone="yes"
Gültigkeitsbeschränkungen führen kann, wenn das Dokument eine externe DTD verwendet. Wenn das Dokument Dinge enthält, die eine Änderung des XML erfordern würden, z. B. Standardwerte für Attribute, und standalone="yes"
verwendet wird, ist das Dokument ungültig .standalone="yes"
kann helfen, die Leistung der Dokumentverarbeitung zu optimieren.Quelle: Das eigenständige Pseudoattribut ist nur relevant, wenn eine DTD verwendet wird
standalone
beschreibt, ob das aktuelle XML-Dokument von einer externen Markup-Deklaration abhängt.
W3C beschreibt seinen Zweck in "Extensible Markup Language (XML) 1.0 (Fifth Edition)":
Markup-Deklarationen können sich auf den Inhalt des Dokuments auswirken, das von einem XML-Prozessor an eine Anwendung übergeben wird. Beispiele sind Attributvorgaben und Entitätsdeklarationen. Die eigenständige Dokumentdeklaration, die als Bestandteil der XML-Deklaration angezeigt werden kann, signalisiert, ob solche Deklarationen außerhalb der Dokumententität oder in Parameterentitäten vorhanden sind. [Definition: Eine externe Markup-Deklaration ist definiert als eine Markup-Deklaration, die in der externen Teilmenge oder in einer Parameterentität auftritt (extern oder intern, wobei letztere enthalten ist, da nicht validierende Prozessoren diese nicht lesen müssen).]
Die Absicht der standalone=yes
Erklärung soll sichergestellt werden, dass die Informationen im Dokument nur auf der Grundlage der internen DTD zuverlässig abgerufen werden können, dh das Dokument kann ohne externe Referenzen "eigenständig" sein. Durch die Validierung eines eigenständigen Dokuments wird sichergestellt, dass nicht validierende Prozessoren über alle Informationen verfügen, um das Dokument korrekt zu analysieren.
Die eigenständige Deklaration hat keinen Zweck, wenn ein Dokument keine externe DTD enthält und die interne DTD keine Verweise auf Parameterentitäten enthält, da diese Dokumente bereits implizit eigenständig sind.
Im Folgenden sind die tatsächlichen Auswirkungen der Verwendung aufgeführt standalone=yes
.
Erzwingt, dass Prozessoren beim Parsen von Dokumenten mit einer externen DTD oder Parameterentitätsreferenzen einen Fehler auslösen, wenn das Dokument Verweise auf Entitäten enthält, die nicht in der internen DTD deklariert sind (mit Ausnahme des Ersatztextes von Parameterentitäten, die nicht validierende Prozessoren benötigen) analysiere dies); amp
, lt
, gt
, apos
, Und quot
sind die einzigen Ausnahmen
Wenn ein nicht als eigenständig deklariertes Dokument analysiert wird, kann ein nicht validierender Prozessor das Parsen der internen DTD beenden, sobald er auf eine Parameterentitätsreferenz stößt. Wenn Sie ein Dokument als eigenständig deklarieren, werden nicht validierende Prozessoren gezwungen, Markup-Deklarationen in der internen DTD zu analysieren, selbst nachdem sie eine oder mehrere Parameterentitätsreferenzen ignoriert haben.
Erzwingt die Validierung von Prozessoren, um einen Fehler auszulösen, wenn im Dokument eine der folgenden Angaben gefunden wird und ihre jeweiligen Deklarationen in der externen DTD oder im Text zum Ersetzen von Parameterentitäten enthalten sind:
amp
, lt
, gt
, apos
, und quot
)Ein nicht validierender Prozessor könnte in Betracht ziehen, die externe DTD abzurufen und alle Parameterentitätsreferenzen für Dokumente zu erweitern, die nicht eigenständig sind, obwohl er nicht dazu verpflichtet ist. Das heißt, die Einstellung standalone=yes
könnte theoretisch die Leistung für nicht validierende Prozessoren verbessern (Spoiler-Warnung: es wird wahrscheinlich keinen Unterschied machen).
Die anderen Antworten hier sind entweder unvollständig oder falsch, das Hauptmissverständnis ist das
Die eigenständige Deklaration weist den Parser an, alle Markup-Deklarationen in der DTD zu ignorieren. Die DTD wird danach nur noch zur Validierung verwendet.
standalone = "yes" bedeutet, dass der XML-Prozessor die DTD nur zur Validierung verwenden darf.
Im Gegenteil, wenn Sie ein Dokument als eigenständig deklarieren, wird ein nicht validierender Prozessor gezwungen, interne Deklarationen zu analysieren, die er normalerweise ignorieren muss (dh diejenigen nach einer ignorierten Parameterentitätsreferenz). Nicht validierende Prozessoren müssen weiterhin die Informationen in der internen DTD verwenden, um Standardattributwerte bereitzustellen und tokenisierte Attribute zu normalisieren, da dies unabhängig von der Validierung ist.