<html xmlns="http://www.w3.org/1999/xhtml" a0:Name="SuikaWiki" xmlns:a0="urn:x-suika-fam-cx:markup:suikawiki:0:9:" a0:Version="0.9"><head></head><body><p><a0:anchor-end a0:anchor="1">[1]</a0:anchor-end> <a0:anchor>XML</a0:anchor> での<a0:anchor>空白</a0:anchor>や<a0:anchor>改行</a0:anchor>の取扱いは、
<a0:anchor>SGML</a0:anchor> での場合 (<a0:anchor>SGML//空白</a0:anchor>参照。)
に比べると随分すっきりしています。
<em>Extensible Markup Language (XML) 1.0 2.10 White Space Handling</em> <a0:anchor-external a0:resScheme="URI" a0:resParameter="http://www.w3.org/TR/REC-xml#sec-white-space">http://www.w3.org/TR/REC-xml#sec-white-space</a0:anchor-external>,
<a0:anchor-external a0:resScheme="URI" a0:resParameter="http://www.w3.org/XML/xml-V10-2e-errata#E50">http://www.w3.org/XML/xml-V10-2e-errata#E50</a0:anchor-external>,
<em>Extensible Markup Language (XML) 1.0 2.11 End-of-Line Handling</em> <a0:anchor-external a0:resScheme="URI" a0:resParameter="http://www.w3.org/TR/REC-xml#sec-line-ends">http://www.w3.org/TR/REC-xml#sec-line-ends</a0:anchor-external></p><p><a0:anchor-end a0:anchor="2">[2]</a0:anchor-end> <a0:anchor>XML処理系</a0:anchor>は、その処理する<a0:anchor>解析実体</a0:anchor>の解析を始める前に、
<code class="XML">#xD #xA</code> → <code class="XML">#xA</code>,
<code class="XML">#xD</code> → <code class="XML">#xA</code>
という置換によって全ての改行を <code class="XML">#xA</code>
に統一しなければなりません。</p><p><a0:anchor-end a0:anchor="3">[3]</a0:anchor-end> <a0:weak><a0:anchor-internal a0:anchor="2">&gt;&gt;2</a0:anchor-internal> の規定はちょっときつすぎる気がします。 XML 処理系が<a0:anchor>応用</a0:anchor>にデータを渡す時には必ず <code class="XML">#xA</code> になっていなければならない、とかの方が気持ちがいいんじゃないですか? ただまあ、<a0:anchor>数値文字参照</a0:anchor>として出現した <code class="XML">#xD</code> とかの扱いの問題がありますから、事前に一気に変換しておくのが一番楽でしょう。だから妥当な制約であるとは思います。</a0:weak></p><p><a0:anchor-end a0:anchor="4">[4]</a0:anchor-end> <a0:anchor>要素</a0:anchor>の<a0:anchor>内容</a0:anchor>について、<ul><li>XML 処理系は<a0:anchor>マーク</a0:anchor>でない全ての文字を応用に渡さなければなりません。<ul><li>仕様書には「文書中の全ての」と書いてあるんですが、
実際に文書中でマークでないのは要素の内容くらいのもんです。</li></ul></li><li><a0:anchor>妥当性を検証</a0:anchor>する XML 処理系は、更に<a0:anchor>要素内容</a0:anchor>の空白を識別できる形で応用に渡さなければなりません。<ul><li>つまり、 SGML でいうところの分離子 <code class="SGML"><a0:anchor>s</a0:anchor></code>
として解釈される空白の合図をしろということです。</li><li>例: <samp class="XML">&lt;!ELEMENT element (e|f)&gt;</samp> <samp class="XML">&lt;element&gt;<em> </em>&lt;e&gt;foo&lt;/e&gt;<em> </em>&lt;f&gt;  &lt;/f&gt;<em> </em>&lt;/element&gt;</samp> の強調した部分。</li></ul></li></ul></p><p><a0:anchor-end a0:anchor="5">[5]</a0:anchor-end> <code class="XML"><a0:anchor>xml</a0:anchor>:<a0:anchor>space</a0:anchor></code> という特殊属性を
XML 仕様書が定義しています。
この属性はどんな要素型にも指定できます。
<a0:weak>(もちろん妥当であるためには<a0:anchor>属性並び宣言</a0:anchor>で定義する必要があります。)</a0:weak></p><p>この属性の取り得る値は <code class="XML">default</code>
又は <code class="XML">preserve</code> です。</p><dl><dt>default</dt><dd>応用は、既定の方法で空白を処理します。</dd><dt>preserve</dt><dd>応用は、空白を保持するべきです (should)。</dd></dl><p>処理の主体が処理系ではなく応用であることに注意して下さい。
<a0:anchor-internal a0:anchor="4">&gt;&gt;4</a0:anchor-internal> にある通り、処理系は応用に全ての空白を渡さなければならず、
この属性により動作を変えることは無いのです。</p><p><a0:anchor-end a0:anchor="6">[6]</a0:anchor-end> <a0:anchor-internal a0:anchor="5">&gt;&gt;5</a0:anchor-internal> 取り得る値が背反ではないし網羅的でもないのが興味深いところです。
応用によっては両方とも同じ意味に扱うかもしれません。
そもそも <code class="XML">preserve</code> も should
なので、応用が好きなように処理するかもしれません。
<a0:weak>この点を含めて XML 1.0 仕様書は応用には制限を課していません。</a0:weak></p><p>典型的な利用は、 <a0:anchor>CSS</a0:anchor> の <code class="CSS"><a0:anchor>white-space</a0:anchor></code>
属性の指定による自由な取扱いでしょう。</p><p><a0:anchor-end a0:anchor="7">[7]</a0:anchor-end> 次のような既定スタイル・シートを<a0:anchor>ブラウザ</a0:anchor>などの応用は持っているといいかもしれません。<pre>[xml|space=&quot;preserve&quot;] {
  white-space: pre;
}</pre></p><p><a0:anchor-end a0:anchor="8">[8]</a0:anchor-end> <cite xml:lang="EN">XQuery 3.1: An XML Query Language</cite>
(<time>2017-03-20 09:23:33 +09:00</time>)
<a0:anchor-external a0:resScheme="URI" a0:resParameter="https://www.w3.org/TR/2017/REC-xquery-31-20170321/#id-eol-handling">https://www.w3.org/TR/2017/REC-xquery-31-20170321/#id-eol-handling</a0:anchor-external></p><p><a0:anchor-end a0:anchor="9">[9]</a0:anchor-end> <cite xml:lang="EN">XML Path Language (XPath) 3.1</cite>
(<time>2017-03-20 09:18:04 +09:00</time>)
<a0:anchor-external a0:resScheme="URI" a0:resParameter="https://www.w3.org/TR/2017/REC-xpath-31-20170321/#id-eol-handling">https://www.w3.org/TR/2017/REC-xpath-31-20170321/#id-eol-handling</a0:anchor-external></p><p><a0:anchor-end a0:anchor="10">[10]</a0:anchor-end> <cite xml:lang="en">XSLT and XQuery Serialization 3.1</cite>
(<time>2017-03-20 12:35:18 +09:00</time>)
<a0:anchor-external a0:resScheme="URI" a0:resParameter="https://www.w3.org/TR/2017/REC-xslt-xquery-serialization-31-20170321/#whitespace-char">https://www.w3.org/TR/2017/REC-xslt-xquery-serialization-31-20170321/#whitespace-char</a0:anchor-external></p><p><a0:anchor-end a0:anchor="11">[11]</a0:anchor-end> <cite xml:lang="EN">XSL Transformations (XSLT) Version 3.0</cite>
(<time>2017-06-06 21:59:56 +09:00</time>)
<a0:anchor-external a0:resScheme="URI" a0:resParameter="https://www.w3.org/TR/2017/REC-xslt-30-20170608/#dt-whitespace-text-node">https://www.w3.org/TR/2017/REC-xslt-30-20170608/#dt-whitespace-text-node</a0:anchor-external></p><p><a0:anchor-end a0:anchor="12">[12]</a0:anchor-end> 
<a0:anchor>XML Schemaデータ型</a0:anchor>における処理: <code>whiteSpace</code></p></body></html>