[1] XML での空白や改行の取扱いは、 SGML での場合 (SGML//空白参照。) に比べると随分すっきりしています。 Extensible Markup Language (XML) 1.0 2.10 White Space Handling http://www.w3.org/TR/REC-xml#sec-white-space, http://www.w3.org/XML/xml-V10-2e-errata#E50, Extensible Markup Language (XML) 1.0 2.11 End-of-Line Handling http://www.w3.org/TR/REC-xml#sec-line-ends
[2] XML処理系は、その処理する解析実体の解析を始める前に、
#xD #xA
→ #xA
,
#xD
→ #xA
という置換によって全ての改行を #xA
に統一しなければなりません。
[3] >>2 の規定はちょっときつすぎる気がします。 XML 処理系が応用にデータを渡す時には必ず #xA
になっていなければならない、とかの方が気持ちがいいんじゃないですか? ただまあ、数値文字参照として出現した #xD
とかの扱いの問題がありますから、事前に一気に変換しておくのが一番楽でしょう。だから妥当な制約であるとは思います。
s
として解釈される空白の合図をしろということです。[5] xml:space
という特殊属性を
XML 仕様書が定義しています。
この属性はどんな要素型にも指定できます。
(もちろん妥当であるためには属性並び宣言で定義する必要があります。)
この属性の取り得る値は default
又は preserve
です。
処理の主体が処理系ではなく応用であることに注意して下さい。 >>4 にある通り、処理系は応用に全ての空白を渡さなければならず、 この属性により動作を変えることは無いのです。
[6] >>5 取り得る値が背反ではないし網羅的でもないのが興味深いところです。
応用によっては両方とも同じ意味に扱うかもしれません。
そもそも preserve
も should
なので、応用が好きなように処理するかもしれません。
この点を含めて XML 1.0 仕様書は応用には制限を課していません。
典型的な利用は、 CSS の white-space
属性の指定による自由な取扱いでしょう。
[7] 次のような既定スタイル・シートをブラウザなどの応用は持っているといいかもしれません。
[xml|space="preserve"] { white-space: pre; }
[8] XQuery 3.1: An XML Query Language () https://www.w3.org/TR/2017/REC-xquery-31-20170321/#id-eol-handling
[9] XML Path Language (XPath) 3.1 () https://www.w3.org/TR/2017/REC-xpath-31-20170321/#id-eol-handling
[10] XSLT and XQuery Serialization 3.1 () https://www.w3.org/TR/2017/REC-xslt-xquery-serialization-31-20170321/#whitespace-char
[11] XSL Transformations (XSLT) Version 3.0 () https://www.w3.org/TR/2017/REC-xslt-30-20170608/#dt-whitespace-text-node
[12]
XML Schemaデータ型における処理: whiteSpace