Leerraum
Mit der XML-Spezifikation des W3C (World Wide Web Consortium) werden verschiedene Konventionen für das Ende von Zeilen zu einer einzigen Konvention normalisiert, es wird jedoch sämtlicher anderer Leerraum beibehalten, außer in Attributwerten. XML stellt außerdem Tools bereit, mit denen Dokumente Anwendungen signalisieren können, ob Leerraum beibehalten werden muss.
Leerraum und XML-Deklaration
Nach dem aktuellen XML-Standard 1.0 ist vor der XML-Deklaration kein Leerraum zulässig.
Leerraum vor der XML-Deklaration wird als Verarbeitungsanweisung behandelt. Die Informationen, insbesondere die Codierung, wird vom Parser möglicherweise nicht verwendet.
Weitere Informationen über die XML-Deklaration finden Sie unter XML-Deklaration.
Leerraum im Elementinhalt
XML-Parser müssen jeden Leeraum wiedergeben, der sich im Inhalt eines Elements innerhalb eines Dokuments befindet. Daher sind die folgenden drei Dokumente für einen XML-Parser verschieden.
<document>
<data>1</data>
<data>2</data>
<data>3</data>
</document>
und:
<document><data>1</data><data>2</data><data>3</data></document>
und:
<document><data>1</data> <data>2</data> <data>3</data></document>
Bei manchen Anwendungen sind die Werte der drei Datenpunkte wichtiger als der Schöndruck. Bei dokumentorientierten XML-Anwendungen kann das Beibehalten von Leerraum entscheidend sein.
Autoren von Dokumenten können das xml:space
-Attribut zum Angeben von Teilen des Dokuments verwenden, in denen Leerraum als wichtig betrachtet wird. In Stylesheets kann das xml:space
-Attribut ebenfalls als Hook zum Beibehalten von Leerraum in der Darstellung verwendet werden. Da viele XML-Anwendungen das xml:space
-Attribut nicht kennen, ist die Verwendung nur als Hinweis zu betrachten.
Das xml:space
-Attribut akzeptiert zwei Werte.
default
Bei diesem Wert behandelt die Anwendung Leerraum wie gefordert. Wenn keinxml:space
-Attribut eingebunden wird, führt dies zu demselben Wert wie die Verwendung vondefault
.
preserve
Dieser Wert fordert die Anwendung auf, Leerraum beizubehalten, und legt damit nahe, dass dieser eine Bedeutung haben könnte.
Die Werte von xml:space
-Attributen gelten für alle Nachfolger des Elements, das das Attribut enthält, sofern es nicht von einem der untergeordneten Elemente überschrieben wird.
Die folgenden Dokumente geben dasselbe Verhalten bezüglich Leerraum an.
und:
In beiden Beispielen wird die Anwendung darüber benachrichtigt, dass der Leerraum in allen Zeilen des Gedichts beibehalten werden muss, und dass Leerraum in anderen Teilen des Dokuments wie erforderlich behandelt werden kann.
Ebenso wie das Gegenstück xml:lang
zur Angabe einer Sprache muss das xml:space
-Attribut bei Verwendung in einer Validierungsumgebung in einer DTD (Document Type Definition) angegeben werden. Der XML-Namespace muss nicht deklariert werden, da er von der XML-Spezifikation reserviert ist.
Standardmäßig wird das xml:space
-Attribut von MSXML (Microsoft XML Core Services) nicht beachtet. Wenn eine Anwendung das xml:space
-Attribut beachten soll, muss die preserveWhiteSpace
-Eigenschaft des DOMDocument
-Objekts vor dem Analysieren auf True
festgelegt werden.
xmldoc= new ActiveXObject("Msxml2.DOMDocument.5.0");
xmldoc.preserveWhiteSpace = true;
xmldoc.load(url);
MSXML besitzt außerdem Einstellungen, mit denen die Behandlung von Leerraum durch die Anwendung an den Parser delegiert werden kann. Weitere Informationen finden Sie im Thema "White Space and the DOM" in der MSXML SDK-Dokumentation.
Hinweis: |
---|
Durch Beibehalten von Leerraumdaten können sich DOM-Strukturen (Document Object Model) beträchtlich vergrößern. Dies ist auf den höheren Verwaltungsaufwand zurückzuführen, wenn Leerraumknoten zwischen Elementen beibehalten werden. |
Leerraum in Attributen
Obwohl XML-Prozessoren den gesamten Leerraum im Inhalt von Elementen beibehalten, normalisieren sie ihn häufig in Attributwerten. Tabstopps, Wagenrückläufe und Leerzeichen werden als einzelne Leerzeichen wiedergegeben. Bei bestimmten Attributtypen wird Leerraum vor oder hinter dem Hauptteil des Werts abgeschnitten und Leerraum innerhalb des Werts zu einem einzelnen Leerzeichen zusammengefasst. (Wenn eine DTD vorhanden ist, erfolgt das Abschneiden für alle Attribute, die nicht den Typ CDATA haben.)
Ein XML-Dokument könnte beispielsweise Folgendes enthalten:
<whiteSpaceLoss note1="this is a note." note2="this
is
a
note.">
Der XML-Parser gibt beide Attributwerte als "this is a note."
wieder, indem er die Zeilenumbrüche in einzelne Leerzeichen konvertiert.
Hinweis: Leerzeichen werden in MSXML3 weder von DOM noch von SAX normalisiert. In MSXML6 werden Leerzeichen von SAX normalisiert, nicht jedoch von DOM.
Wenn eine DTD für das Dokument vorhanden ist, wird bei allen Attributen, deren deklarierter Typ nicht CDATA lautet, Leerraum am Anfang und am Ende des Attributwerts entfernt und alle Folgen von Leerraumzeichen innerhalb des Werts werden durch einzelne Leerzeichen ersetzt. Wenn keine DTD vorhanden ist, nimmt der Parser an, dass alle Attribute vom Typ CDATA sind.
Behandlung des Zeilenendes
XML-Prozessoren behandeln die Zeichenfolge "CRLF" (Carriage Return-Line Feed, Wagenrücklauf-Zeilenvorschub) wie die einzelnen Zeichen "CR" oder "LF". Sie werden alle als ein einzelnes "LF"-Zeichen wiedergegeben. Anwendungen können Dokumente entsprechend einer bestimmten Konvention für Zeilenenden speichern.