[linux-l] Leerzeichen in XML

Steffen Dettmer steffen at dett.de
Mo Mai 8 00:47:21 CEST 2006


* Volker Grabsch wrote on Fri, May 05, 2006 at 17:26 +0200:
> > > <foo><bar>Text</bar></foo>
> > 
> > >schreibe. Ich weiss aber auch nicht, was der XML-Standard dazu sagt (zur 
> > >Einrückung mit Spaces+Newlines).
> > 
> > Das ist völliger Quatsch, das geht so nicht.
> > 
> > Hintergrund: Zwischen zwei Tags steht einfach nur "raw character data", 
> > d.h. man zwischen '\n    Text\n  ' und 'Text' keine Unterschiede 
> > festmachen (per Maschine, im Kopf schon).
> 
> Nein, stimmt nicht. Die Spaces (Leerzeichen/Neuzeilen) zwischen
> <foo> und <bar> sind "ignorable".
> 
> Die Leerzeichen zwischen <bar> und </bar> sind es jedoch nicht, weil
> dort auch nicht-Spaces stehen.
> 
> Allgemein gilt, soweit ich weiß: Wenn ein Element nur Unterknoten
> hat (wie z.B. <foo>), dann sind alle Leerzeichen "ignorable".
> Steht hingegen auch Text dort, sind sie es nicht.
> (Ich lasse mir durch Verweis auf W3C-Dokumente gern vom Gegenteil
> überzeugen)

Ich find da sowas nicht, nur:

http://edition-w3c.de/TR/2000/REC-xml-20001006/#white

> 2.10 Behandlung von Leerraum
> 
> Bei dem Editieren von XML-Dokumenten ist es oft angenehm »Leerraum«
> (White Space; Leerzeichen (spaces), Tabulatoren, Leerzeilen; innerhalb
> dieser Spezifikation mit dem Nicht-Terminal S bezeichnet) zu verwenden,
> um das Markup für eine bessere Lesbarkeit voneinander abzusetzen. Dieser
> Leerraum soll üblicherweise beim Versenden des Dokuments nicht erhalten
> bleiben. Auf der anderen Seite gibt es häufig »signifikanten« Leerraum,
> der auch beim Versenden erhalten bleiben soll, beispielsweise in
> Gedichten und Quellcode.
> 
> Ein XML-Prozessor muss stets alle Zeichen in einem Dokument, die nicht
> zum Markup gehören, an die Anwendung weiterreichen. Ein validierender
> XML-Prozessor muss die Anwendung außerdem darüber informieren, welche
> Leerraumzeichen im Inhalt eines Elements stehen.
> 
> Ein besonderes Attribut names xml:space kann einem Element zugewiesen
> werden, um anzuzeigen, dass Leerraum in diesem Element von Anwendungen
> erhalten werden soll. In gültigen Dokumenten muss dieses Attribut, wie
> jedes andere, deklariert werden, falls es benutzt wird. Bei der
> Deklaration muss es als Aufzählungstyp geschrieben werden, dessen Werte
> entweder »default« oder »preserve« oder beide sind. Zum Beispiel:
> 
> <!ATTLIST gedicht  xml:space (default|preserve) 'preserve'>
> 
> <!-- -->
> <!ATTLIST pre xml:space (preserve) #FIXED 'preserve'>
> 
> Der Wert »default« zeigt an, dass die normale Leerraumbehandlung einer
> Anwendung für dieses Element akzeptabel ist. Der Wert »preserve« zeigt
> die Absicht an, dass Anwendungen sämtlichen Leerraum erhalten. Diese
> erklärte Absicht gilt für alle Elemente innerhalb des Elements, für das
> »preserve« angegeben wurde, es sei denn, es ist für ein eingebettetes
> Element explizit mit dem Attribut xml:space überschrieben worden.
> 
> Vom Wurzelelement eines beliebigen Dokuments wird angenommen, dass es
> keine Leerraumbehandlung der Anwendung vorsieht, es sei denn, es gibt
> einen Wert für dieses Attribut vor -- oder das Attribut ist mit einem
> Vorgabewert deklariert.

Verstehe ich als: ist kein xml:space preserve gesetzt, sollen
whitespaces nicht übertragen werden.

Ich finde die Erklärung "Behandlung von Leerraum" aber als ziemlich
verwirrend: was ist "die normale Leerraumbehandlung"? "akzeptabel"? Wenn
nicht "preserve", warum dann "Ein validierender XML-Prozessor muss die
Anwendung außerdem darüber informieren, welche Leerraumzeichen im Inhalt
eines Elements stehen"? und "alle Zeichen" schliesst doch Leerzeichen
und Zeilenvorschübe ein? Warum sollen dann alle Zeilenvorschübe nach \n
übersetzt werden ("Alle Zeilenumbrüche in externen analysierten Entities
(einschließlich des Dokument-Entity) werden beim Einlesen vor dem
Parsing dadurch normalisiert, dass sowohl die Zwei-Zeichenfolge #xD#xA
als auch jedes #xD, das nicht einem #xA voran geht, in ein einzelnes
#xA-Zeichen umgewandelt wird.").

Würde aber erwarten, dass man sich auf Whitespaceerhaltung nicht so ohne
weiteres Verlassen kann, wie's bei HTML ja ist, allerdings "dürfte" dann
"<pre>" nicht funktionieren, es sei denn, es ist "xml:space preserve".

oki,

Steffen

-- 
Dieses Schreiben wurde maschinell erstellt,
es trägt daher weder Unterschrift noch Siegel.




Mehr Informationen über die Mailingliste linux-l