[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] XHTML1 は pre
要素や
script
要素など一部の要素のみで、
DTD の既定値によって xml:space=preserve
を指定していました。
また default
の意味も明確にはしていませんでした。
既定のレンダリングのみで CSS も DOM も使わないなら、これでも大きな問題はありません。
しかし CSS で white-space
特性を変更した場合や DOM
で他の要素にアクセスした場合に空白がどうなるのか、
pre
要素に xml:space
属性を指定した場合にどう表示されるのか、といった疑問が生じます。
[41] XHTML2 はすべての要素を xml:space=preserve
とする (>>10) という半ば強引な解決策をとりました。 CSS や DOM
の問題は起きなくなりますが、 xml:space=default
が指定されたらどう処理されるべきなのかは、なお明らかではありませんでした。
当時の HTML WG の見解 (>>10) には default
なら空白が
DOM には現れなくなるような記述があります。これが XML構文解析器で空白が削除されるべきとの理解なのか、
XML から DOM ないし XML から XHTML2 DOM への変換の過程で空白が削除されることにしたかったのかはわかりません。
[9] この属性は、 XML名前空間的には特別な名前空間
xml
に属します。 xml:
という名前空間接頭辞は特別なので、
xml:space
属性は常に xml:space
という修飾名です。
なお、この属性は XML 名前空間を使わない XML 文書でも使えます。
[4] 属性値:
この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 仕様書により認められているとし
>>29、 HTML要素での利用も禁止していません。しかし、意味はありません (>>31)。
[32] text/html
の HTML要素で xml:space
属性を直列化する方法はありません >>29。 HTML文書に
xml:space
と書いても、 null名前空間の xml:space
属性となり、 xml
名前空間の space
属性とは解釈されません。
[34] HTML文書 / text/html
であっても、 SVG要素や
MathML要素なら xml:space
属性は直列化できます。
指定された場合、 SVG や MathML の仕様に従い解釈されます。
[31] HTML要素では、 xml:space
属性は効果を持ちません。
HTML での既定の動作は、空白を保持します。 >>29
[55]
DTBook の style
要素や code
要素,
samp
要素にも謎規定がありました。
XHTML 由来かもしれません。
[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
in XHTML2, otherwise the CSS '
xml:space
="preserve"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<
, but you will be free to change them.pre
>
[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
ではそれを直接記述できませが。)
[24] Node.text は xml: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
[44] Use text-space-collapse property for xml:space="preserve" handling in… · w3c/svgwg@72e4df7 ( 版) https://github.com/w3c/svgwg/commit/72e4df79e0805e700b7be4532fbae700b04ca506
[50] SVG Working Group Teleconference -- 03 Mar 2011 ( ()) https://www.w3.org/2011/03/03-svg-minutes.html#item04
[52] XLIFF Version 2.0 () http://docs.oasis-open.org/xliff/xliff-core/v2.0/os/xliff-core-v2.0-os.html#xml_space
xml:space
属性を持っても適合するかどうかは、明記されていませんが、 XML の場合だけで HTML の場合には言及されていないのですから、認められていない = 不適合と解釈するべきものです。 (直列化はできませんが、スクリプトで追加することは可能です。)