xml:space

xml:space 属性 (XML)

[2] XML の仕様書で定義されている属性 xml:space は、 内容中の空白の扱いを指定します。

[27] この属性は XML 処理器ではなく、 XML 応用の処理器が扱います。

[43] この属性は、実質的に意味のある使い方はされておらず、 XML 仕様書上の規定は死文化しています。

仕様書

意味

[37] xml:space 属性の意味は、 XML 仕様書の規定するところが歴史的に曖昧だったこともあり、混乱が見られました。

[38] HTML では空白は正規化してレンダリングされるのが基本です (white-space: normal)。 IE4 DOM のように、 DOM 上で空白を省いた実装も存在していました。しかし pre 要素のように、空白を保持するべき文脈も混在しています。 これを一般化し共通の属性で記述できるようにするのが本来の xml:space 属性の意味だったと推測されます。

[39]属性では空白を記述されたまま保持するべきか、 応用依存の「既定の方法」で処理するべきかを指定することができます。 XML の仕様書では既定の方法がどのような処理であるかを決めていません。 これは空白を処理するべきだとしても、具体的にどうするべきかは応用ごとに異なること、 XML の仕様書は XML文書の記述方法と適合性を規定するに留まり、 データモデルの生成も含めてどのような処理を行うかは一切を応用に委ねていることによると思われます。 いずれにせよ、「何かするべきかもしれないが何かはわからない」との指定がすべての XML要素で可能とされたことが、混乱の一因となってしまいました。

[40] XHTML1pre 要素script 要素など一部の要素のみで、 DTD既定値によって xml:space=preserve を指定していました。 また default の意味も明確にはしていませんでした。 既定のレンダリングのみで CSSDOM も使わないなら、これでも大きな問題はありません。 しかし CSSwhite-space 特性を変更した場合や DOM で他の要素にアクセスした場合に空白がどうなるのか、 pre 要素xml:space 属性を指定した場合にどう表示されるのか、といった疑問が生じます。

[41] XHTML2 はすべての要素xml:space=preserve とする (>>10) という半ば強引な解決策をとりました。 CSSDOM の問題は起きなくなりますが、 xml:space=default が指定されたらどう処理されるべきなのかは、なお明らかではありませんでした。 当時の HTML WG の見解 (>>10) には default なら空白DOM には現れなくなるような記述があります。これが XML構文解析器空白が削除されるべきとの理解なのか、 XML から DOM ないし XML から XHTML2 DOM への変換の過程で空白が削除されることにしたかったのかはわかりません。

[42] いずれにしても xml:space 属性の意味は、かなり早い時期に事実上消失していました。

属性名

[9] この属性は、 XML名前空間的には特別な名前空間 xml に属します。 xml: という名前空間接頭辞は特別なので、 xml:space 属性は常に xml:space という修飾名です。

なお、この属性は XML 名前空間を使わない XML 文書でも使えます。

属性値

[4] 属性値:

default
空白の取扱いは既定のものとします。 (「既定」の取扱いは応用により決定されます。)
preserve
空白を保持します。 (詳細は応用により決定されます。)

この2つ以外の値は取れません。他の値が指定された時は、 XML 処理器はその属性指定を無視しても構いませんし、 誤りとしても構いませんし、 不正な値をそのまま応用に報告しても構いません。 応用は不正な値を無視しても拒絶しても構いません

[5] DTD では xml:space (default|preserve) #IMPLIED のように定義します (列挙型なければなりません)。 (他の属性と同じく、 妥当であるためには属性定義が必須です。)

また、必要に応じて xml:space (preserve) #FIXED "preserve" のような形で定義することもできます。

[6] 指定が無い場合には、直近先祖要素への指定が継承されます。 根要素に指定がない場合の値は応用によります。

[7] >>5 列挙型として宣言されなければならないという規定、 XML 仕様書にはきちんと宣言される場合と限定されているので矛盾はないのですが、 一般に宣言されていない属性の型は CDATA として扱われてしまいます。その辺が余り美しくないと思います。

(<foo xml:space=" preserve "/> は宣言があれば適当、なければ不適当になってしまいます。)

[8] Exclusive XML Canonicalization Version 1.0 http://www.w3.org/TR/2002/REC-xml-exc-c14n-20020718/#sec-Enveloping では、怪しげな xml:space="retain" とかいう属性指定が使用例に含まれています。

訂正票 Errata of the Exclusive Canonicalization Version 1.0 Specification http://www.w3.org/2002/07/xml-exc-c14n-errata#E01 で修正されてはおりますが、 Exclusive XML Canonicalization Version 1.0 http://www.w3.org/TR/2001/WD-xml-exc-c14n-20011120 から1年間誰も気づかなかったというのが素敵です。

文脈

[35] XML 仕様書は、 xml:space 属性の利用できる文脈について、 DTD を用いる場合は通常の属性同様に属性定義並び宣言で規定できるとしています。 XML 仕様書は整形式妥当の他の適合性を規定していませんから、 xml:space 属性が一般にいつ利用できるかは明らかではありません。 一般的には XML文書中の任意の要素で (当該要素の規定で禁止されない限り) 利用できるものと解されています。

[30] HTML Standard は、XML文書の任意の要素xml:space 属性の利用が XML 仕様書により認められているとし >>29HTML要素での利用も禁止していません。しかし、意味はありません (>>31)。

[32] text/htmlHTML要素xml:space 属性直列化する方法はありません >>29HTML文書xml:space と書いても、 null名前空間xml:space 属性となり、 xml名前空間space 属性とは解釈されません。

[33] HTML文書たる DOM HTMLHTML要素xml:space 属性を持っても適合するかどうかは、明記されていませんが、 XML の場合だけで HTML の場合には言及されていないのですから、認められていない = 不適合と解釈するべきものです。 (直列化はできませんが、スクリプトで追加することは可能です。)

[34] HTML文書 / text/html であっても、 SVG要素MathML要素なら xml:space 属性直列化できます。 指定された場合、 SVGMathML の仕様に従い解釈されます。

処理

[31] HTML要素では、 xml:space 属性は効果を持ちません。 HTML での既定の動作は、空白を保持します。 >>29

歴史

HTML

[55] DTBookstyle 要素code 要素, samp 要素にも謎規定がありました。 XHTML 由来かもしれません。

XML 1.1

[28] XML 1.1 でもまったく同内容の規定がありました。

[13] フィードを表示しています ( 版) http://groups.google.com/group/japan.test/feed/atom_v1_0_msgs.xml (Atom フィード)

  <summary type="html" xml:space="preserve">
  test
  </summary>

メモ

[10] XHTML Frequently Answered Questions (2004年7月付け) http://www.w3.org/MarkUp/2004/xhtml-faq#xmlspace

Why is xml:space set to 'preserve' on all elements of XHTML? I don't want to see extra space in my output.

The attribute xml:space is about input: that is to say, it controls if the spaces will be present in the DOM (i.e. in the internal version of the document inside the browser); it says nothing about what will appear on your screen. Output whitespace is controlled by the CSS property 'whitespace'. Set it to 'pre' and the spaces in the DOM will be preserved on output; set it to 'normal' and the whitespace will be collapsed (CSS3 will have more properties to enable greater control).

This is the reason that all elements are set to xml:space="preserve" in XHTML2, otherwise the CSS 'whitespace' property would have no effect, and you would have no control over visible whitespace. The default stylesheet will set 'whitespace' to 'normal' for all elements except <pre>, but you will be free to change them.

[11] XHTML Modularization 1.1 - Conformance Definition http://www.w3.org/TR/2006/WD-xhtml-modularization-20060705/conformance.html#s_conform_user_agent

[12] Re: xml:space (Ian Hickson <ian@...> 著, 版) http://permalink.gmane.org/gmane.org.w3c.whatwg.discuss/13893

[14] SMIL 3.0 smilText ( 版) http://www.w3.org/TR/2008/REC-SMIL3-20081201/smil-text.html#adef-textSpace

[15] Document Structure – SVG Tiny 1.2 ( 版) http://www.w3.org/TR/2008/REC-SVGTiny12-20081222/struct.html#XMLSpaceAttribute

[16] Text – SVG Tiny 1.2 ( 版) http://www.w3.org/TR/2008/REC-SVGTiny12-20081222/text.html#WhiteSpace

[17] ECMA-376 Part 1 Second Edition 17.3.3.7

xml:space (Content Contains Significant Whitespace)

Namespace: http://www.w3.org/XML/1998/namespace

Specifies how white space should be handled for the contents of this element using the W3C space preservation rules.

[Example: Consider the following run contained within a WordprocessingML document:

w:r
w:t significant whitespace </w:t>
</w:r>
Although there are three spaces on each side of the text content in the run, that whitespace has not been specifically marked as significant, therefore it is subject to the space preservation rules currently specified in that run's scope. end example]

The possible values for this attribute are defined by §2.10 of the XML 1.0 specification.

[18] >>17 はこれだけしか説明がないのですが・・・。文脈から察するに、 default だと OOXML の既定の処理にしたがって空白は除去されることがあり、 preserve だと XML で定義されているようにそのまま保持されるみたいです。

[19] Web Applications 1.0 r5527 Mention xml:space since people seem unable to read the XML spec.Fixing http://www.w3.org/Bugs/Public/show_bug.cgi?id=10197 ( ( 版)) http://html5.org/tools/web-apps-tracker?from=5526&to=5527

[20] XSLT 2.0 and XQuery 1.0 Serialization (Second Edition) ( ( 版)) http://www.w3.org/TR/2010/REC-xslt-xquery-serialization-20101214/#xml-indent

[21] Document Structure – SVG 1.1 (Second Edition) ( ( 版)) http://www.w3.org/TR/2011/REC-SVG11-20110816/struct.html#LangSpaceAttrs

[22] Scalable Vector Graphics (SVG) Tiny 1.2 Specification ( ( 版)) http://www.w3.org/TR/SVGTiny12/single-page.html#text-WhiteSpace

[23] xml:space 属性HTML文書中のHTML要素で使用することは禁じられていません。 (text/html ではそれを直接記述できませが。)

xml:lang では禁止されていませんが。 xml:space は実用性皆無で誰も使っていないので禁止してもしなくても無害だからでしょうか。

[24] Node.textxml:space によって挙動が変わるそうです。

[25] Internationalization Tag Set (ITS) Version 2.0 ( ( 版)) http://www.w3.org/TR/its20/#preservespace

[26] Proposals/dropxmlattributes - SVG ( 版) https://www.w3.org/Graphics/SVG/WG/wiki/Proposals/dropxmlattributes

[36] XAML における xml:space の処理 ( 版) https://msdn.microsoft.com/ja-jp/library/ms788720(v=vs.110).aspx

xml:space 属性の既定値は、リテラル値の "default" です。 値が "default" の場合、または xml:space がまったく示されていない場合、重要な空白の解析は、トピック「XAML での空白の処理」で定義されているように、既定の動作で処理されます。

オブジェクト要素のコンテンツ内で空白を保持するには、そのオブジェクト要素で xml:space="preserve" を指定します。

ほとんどの解釈では、xml:space 属性の効果と属性の値は、子要素に反映されます。

[44] Use text-space-collapse property for xml:space="preserve" handling in… · w3c/svgwg@72e4df7 ( 版) https://github.com/w3c/svgwg/commit/72e4df79e0805e700b7be4532fbae700b04ca506

[45] RFC 7749 - The "xml2rfc" Version 2 Vocabulary ( 版) https://tools.ietf.org/html/rfc7749#section-2.5.8

"preserve" is both the default value and the only meaningful setting

(because that's what the <artwork> element is for).

[46] RFC 7749 - The "xml2rfc" Version 2 Vocabulary ( 版) https://tools.ietf.org/html/rfc7749#section-2.36.2

According to the DTD, the default value is "preserve". However,

tests show that it doesn't have any effect on processing; thus, this

attribute will be removed in future versions of the vocabulary.

[47] ( 版) https://lists.w3.org/Archives/Public/www-archive/feed.rss

<content type="xhtml">

<div xmlns="http://www.w3.org/1999/xhtml">

<pre id="body" xml:space="preserve">

[48] Text – SVG 1.1 (Second Edition) ( ()) https://www.w3.org/TR/SVG11/text.html#WhiteSpace

SVG supports the standard XML attribute ‘xml:space’ to specify the handling of white space characters within a given ‘text’ element's character data. Note that any child element of a ‘text’ element may also have an ‘xml:space’ attribute which will apply to that child element's text content.

[49] Scalable Vector Graphics (SVG) 2 ( ()) https://svgwg.org/svg2-draft/single-page.html#struct-WhitespaceProcessingXMLSpaceAttribute

Deprecated XML attribute to specify whether white space is preserved in character data. The only possible values are the strings 'default' and 'preserve', without white space.

[50] SVG Working Group Teleconference -- 03 Mar 2011 ( ()) https://www.w3.org/2011/03/03-svg-minutes.html#item04

[51] () http://www.niso.org/apps/group_public/download.php/15933/z39_96-2015.pdf

@xml:space Space

When printing or displaying the associated element, all white space (such as tabs, ordinary spaces,

and line breaks) should be preserved.

[52] XLIFF Version 2.0 () http://docs.oasis-open.org/xliff/xliff-core/v2.0/os/xliff-core-v2.0-os.html#xml_space

[53] RFC 5323 - Web Distributed Authoring and Versioning (WebDAV) SEARCH () https://tools.ietf.org/html/rfc5323#section-5.10

White space in literal values is significant in comparisons. For

consistency with [RFC4918], clients SHOULD NOT specify the attribute

"xml:space" (Section 2.10 of [XML]) to override this behavior.

[54] AMP HTML Specification – AMP () https://www.ampproject.org/docs/reference/spec

XML-related attributes, such as xmlns, xml:lang, xml:base, and xml:space are disallowed in AMP HTML.