323 Stimmen

Was bedeutet die Richtlinie "standalone" in XML?

Was bedeutet das standalone ' in einem XML-Dokument bedeuten?

233voto

nullability Punkte 10169

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.

134voto

Rinke Punkte 5571
  • Die Standalone-Richtlinie ist ein optionales Attribut der XML-Deklaration.
  • Gültige Werte sind yes y no , wobei no 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, und standalone="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

22voto

Stefan Gehrig Punkte 80686

standalone beschreibt, ob das aktuelle XML-Dokument von einer externen Markup-Deklaration abhängt.

Das W3C beschreibt seinen Zweck in "Extensible Markup Language (XML) 1.0 (Fifth Edition)":

20voto

user657267 Punkte 20082

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 y quot 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 y quot )
    • 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.

10voto

Chris Diver Punkte 18942

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)].

http://www.w3.org/TR/xml/#sec-rmd

CodeJaeger.com

CodeJaeger ist eine Gemeinschaft für Programmierer, die täglich Hilfe erhalten..
Wir haben viele Inhalte, und Sie können auch Ihre eigenen Fragen stellen oder die Fragen anderer Leute lösen.

Powered by:

X