Was bedeutet das standalone
' in einem XML-Dokument bedeuten?
Antworten
Zu viele Anzeigen?El standalone
Deklaration ist eine Möglichkeit, dem Parser mitzuteilen, dass er alle Auszeichnungsdeklarationen in der DTD . Die DTD wird danach nur noch zur Validierung verwendet.
Nehmen wir als Beispiel die bescheidene <img>
Tag. Wenn Sie sich die XHTML 1.0 DTD sehen Sie eine Markup-Deklaration, die dem Parser mitteilt, dass <img>
Tags müssen EMPTY sein und besitzen src
y alt
Attribute. Wenn ein Browser ein XHTML 1.0-Dokument durchsucht und ein <img>
Tag, sollte er feststellen, dass die DTD Folgendes verlangt src
y alt
Attribute und fügen sie hinzu, wenn sie nicht vorhanden sind. Es schließt auch selbständig die <img>
Tag, da er eigentlich LEER sein sollte. Das ist es, was der XML-Spezifikation bedeutet, dass "Auszeichnungsdeklarationen den Inhalt des Dokuments beeinflussen können". Sie können dann die standalone
Deklaration, 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.
Beachten Sie, dass die Standalone-Deklaration "keine Bedeutung" hat, wenn Sie keine DTD angeben. Es gibt also keinen Grund, sie zu verwenden, wenn Sie nicht auch eine DTD angeben.
- Die Standalone-Richtlinie ist ein optionales Attribut der XML-Deklaration.
- Gültige Werte sind
yes
yno
, wobeino
ist der Standardwert. - Das Attribut ist nur relevant, wenn ein DTD verwendet wird. (Das Attribut ist irrelevant bei der Verwendung eines Schema anstelle einer DTD).
standalone="yes"
bedeutet, dass der XML-Prozessor die DTD nur zur Validierung verwenden darf. In diesem Fall wird sie no verwendet werden:- Standardwerte für Attribute
- Entity-Erklärungen
- Normalisierung
- Beachten Sie, dass
standalone="yes"
kann Gültigkeitsbeschränkungen hinzufügen, wenn das Dokument eine externe DTD verwendet. Wenn das Dokument Dinge enthält, die eine Änderung des XML erfordern würden, wie z. B. Standardwerte für Attribute, undstandalone="yes"
verwendet wird dann ist das Dokument ungültig . standalone="yes"
kann dazu beitragen, die Leistung der Dokumentenverarbeitung zu optimieren.
Quelle: Das eigenständige Pseudo-Attribut ist nur relevant, wenn eine DTD verwendet wird
Die Absicht der standalone=yes
Deklaration soll garantieren, dass die Informationen innerhalb des Dokuments nur auf der Grundlage der internen DTD zuverlässig abgerufen werden können, d. h. das Dokument kann ohne externe Verweise "allein stehen". Durch die Validierung eines eigenständigen Dokuments wird sichergestellt, dass nicht validierende Prozessoren über alle Informationen verfügen, um das Dokument korrekt zu parsen.
Die Standalone-Deklaration hat keinen Zweck, wenn ein Dokument keine externe DTD hat und die interne DTD keine Parameter-Entity-Referenzen enthält, da diese Dokumente bereits implizit eigenständig sind.
Nachstehend sind die tatsächlichen Auswirkungen der Verwendung von standalone=yes
.
-
Zwingt Prozessoren dazu, beim Parsen von Dokumenten mit einer externen DTD oder Parameterentitätsreferenzen einen Fehler auszulösen, wenn das Dokument Referenzen auf Entitäten enthält, die nicht in der internen DTD deklariert sind (mit Ausnahme von Ersetzungstext von Parameterentitäten, da nicht-validierende Prozessoren diesen nicht parsen müssen);
amp
,lt
,gt
,apos
yquot
sind die einzigen Ausnahmen -
Beim Parsen eines nicht als eigenständig deklarierten Dokuments steht es einem nicht-validierenden Prozessor frei, das Parsen der internen DTD zu beenden, sobald er auf eine Parameterentitätsreferenz stößt. Die Deklaration eines Dokuments als Standalone zwingt nicht-validierende Prozessoren dazu, Markup-Deklarationen in der internen DTD zu parsen, auch wenn sie eine oder mehrere Parameter-Entity-Referenzen ignorieren.
-
Erzwingt, dass validierende Prozessoren einen Fehler auslösen, wenn eines der folgenden Elemente im Dokument gefunden wird und die entsprechenden Deklarationen in der externen DTD oder im Parameterentity-Ersatztext enthalten sind:
- Attribute mit Standardwerten, wenn ihr Wert nicht ausdrücklich angegeben ist
- Verweise auf Entitäten (andere als
amp
,lt
,gt
,apos
yquot
) - Attribute mit tokenisierten Typen, wenn der Wert des Attributs durch die Normalisierung verändert werden würde
- Elemente mit Elementinhalt, wenn in deren Inhalt ein Leerzeichen vorkommt
Ein nicht validierender Prozessor könnte in Erwägung ziehen, die externe DTD abzurufen und alle Parameterentitätsreferenzen für nicht eigenständige Dokumente zu erweitern, auch wenn er dazu nicht verpflichtet ist, d. h. standalone=yes
könnte theoretisch die Leistung für nicht validierende Prozessoren verbessern (Spoiler-Alarm: es wird wahrscheinlich keinen Unterschied machen).
Die anderen Antworten sind entweder unvollständig oder falsch, das Hauptmissverständnis ist, dass
Mit der Standalone-Deklaration wird dem Parser mitgeteilt, dass er alle Markup-Deklarationen in der DTD ignorieren soll. 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 ein Dokument als eigenständig deklariert wird, wird ein nicht-validierender Prozessor gezwungen, interne Deklarationen zu parsen, die er normalerweise ignorieren muss (d.h. die nach einer ignorierten Parameter-Entity-Referenz). 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.
Markup-Deklarationen können sich auf die Inhalt des Dokuments beeinflussen, wie er von einem XML-Prozessor an eine Anwendung weitergegeben wird; Beispiele sind Attribute Standardwerte und Entitätsdeklarationen. Die eigenständige Dokumentendeklaration, die als Bestandteil der XML-Deklaration erscheinen kann Deklaration erscheinen kann, zeigt an, ob es solche Deklarationen gibt, die außerhalb der Dokumentenentität erscheinen oder in Parameter-Entitäten erscheinen. [Definition: Eine externe Markup-Deklaration ist definiert als eine Auszeichnungsdeklaration die in der externen Untermenge oder in einer Parameterentität (extern oder intern, wobei letztere enthalten ist weil nicht-validierende Prozessoren nicht verpflichtet sind, sie zu lesen)].