<html xmlns="http://www.w3.org/1999/xhtml"><head></head><body><p><anchor-end xmlns="urn:x-suika-fam-cx:markup:suikawiki:0:9:" a0:anchor="1" xmlns:a0="urn:x-suika-fam-cx:markup:suikawiki:0:9:">[1]</anchor-end> 【<anchor xmlns="urn:x-suika-fam-cx:markup:suikawiki:0:9:">SGML</anchor>】 <anchor xmlns="urn:x-suika-fam-cx:markup:suikawiki:0:9:">マーク区間の有効状態</anchor>が<anchor xmlns="urn:x-suika-fam-cx:markup:suikawiki:0:9:">文字データ</anchor>
(<code class="SGML"><anchor xmlns="urn:x-suika-fam-cx:markup:suikawiki:0:9:">CDATA</anchor></code>) である<anchor xmlns="urn:x-suika-fam-cx:markup:suikawiki:0:9:">マーク区間</anchor>(宣言)。</p><p><anchor-end xmlns="urn:x-suika-fam-cx:markup:suikawiki:0:9:" a0:anchor="2" xmlns:a0="urn:x-suika-fam-cx:markup:suikawiki:0:9:">[2]</anchor-end> <anchor xmlns="urn:x-suika-fam-cx:markup:suikawiki:0:9:">XML</anchor> では、<dfn>CDATA <rubyb xmlns="urn:x-suika-fam-cx:markup:suikawiki:0:9:">区間<rt xmlns="http://www.w3.org/1999/xhtml">section</rt></rubyb></dfn>は<anchor xmlns="urn:x-suika-fam-cx:markup:suikawiki:0:9:">文字データ</anchor>が出現可能なところにどこにでも出現可能です。
CDATA 区間は、そうしなければ<anchor xmlns="urn:x-suika-fam-cx:markup:suikawiki:0:9:">マーク</anchor>として認知される<anchor xmlns="urn:x-suika-fam-cx:markup:suikawiki:0:9:">文字</anchor>を含む<anchor xmlns="urn:x-suika-fam-cx:markup:suikawiki:0:9:">文</anchor>塊を
<anchor xmlns="urn:x-suika-fam-cx:markup:suikawiki:0:9:">escape</anchor> するのに使います。 CDATA 区間は文字列
<code class="XML">&lt;!<strong>[</strong>CDATA<strong>[</strong></code> で始まり、文字列
<code class="XML"><strong>]</strong><strong>]</strong>&gt;</code> で終わります。</p><p>仕様書:<ul><li><anchor xmlns="urn:x-suika-fam-cx:markup:suikawiki:0:9:">XML 1.0</anchor> <anchor-external xmlns="urn:x-suika-fam-cx:markup:suikawiki:0:9:" a0:resParameter="http://www.w3.org/TR/REC-xml#NT-CharData" xmlns:a0="urn:x-suika-fam-cx:markup:suikawiki:0:9:" a0:resScheme="URI">http://www.w3.org/TR/REC-xml#NT-CharData</anchor-external></li><li><anchor xmlns="urn:x-suika-fam-cx:markup:suikawiki:0:9:">XML 1.1</anchor> <anchor-external xmlns="urn:x-suika-fam-cx:markup:suikawiki:0:9:" a0:resParameter="http://www.w3.org/TR/xml11#NT-CharData" xmlns:a0="urn:x-suika-fam-cx:markup:suikawiki:0:9:" a0:resScheme="URI">http://www.w3.org/TR/xml11#NT-CharData</anchor-external></li></ul></p><p><anchor-end xmlns="urn:x-suika-fam-cx:markup:suikawiki:0:9:" a0:anchor="3" xmlns:a0="urn:x-suika-fam-cx:markup:suikawiki:0:9:">[3]</anchor-end> CDATA 区間では、<anchor xmlns="urn:x-suika-fam-cx:markup:suikawiki:0:9:">マーク区間終了</anchor>
(<anchor xmlns="urn:x-suika-fam-cx:markup:suikawiki:0:9:">規格参照具象構文</anchor>や <anchor xmlns="urn:x-suika-fam-cx:markup:suikawiki:0:9:">XML</anchor> では <code class="SGML"><strong>]</strong><strong>]</strong>&gt;</code>) 
だけが<anchor xmlns="urn:x-suika-fam-cx:markup:suikawiki:0:9:">認知</anchor>されます。
逆に言えば、マーク区間の内容に文字列 <samp class="SGML"><strong>]</strong><strong>]</strong>&gt;</samp>
を書くことは出来ません。</p><p>また、 CDATA 区間内では文字列は<anchor xmlns="urn:x-suika-fam-cx:markup:suikawiki:0:9:">文字データ</anchor>として、
つまり<q>かかれたままに</q>解釈されます。
ですから<anchor xmlns="urn:x-suika-fam-cx:markup:suikawiki:0:9:">実体参照</anchor>は展開されません。</p><p><anchor-end xmlns="urn:x-suika-fam-cx:markup:suikawiki:0:9:" a0:anchor="4" xmlns:a0="urn:x-suika-fam-cx:markup:suikawiki:0:9:">[4]</anchor-end> <samp><strong>]</strong><strong>]</strong>&gt;</samp> という文字列を書きたいときは、
<samp class="SGML">&lt;!<strong>[</strong>CDATA<strong>[</strong> ... <strong>]</strong><strong>]</strong><strong>]</strong><strong>]</strong>&gt;&amp;gt;&lt;!<strong>[</strong>CDATA<strong>[</strong> ... <strong>]</strong><strong>]</strong>&gt;</samp>
とでもするか、 CDATA 区間の使用を諦めるしか方法はありません。</p><p><anchor-end xmlns="urn:x-suika-fam-cx:markup:suikawiki:0:9:" a0:anchor="5" xmlns:a0="urn:x-suika-fam-cx:markup:suikawiki:0:9:">[5]</anchor-end> XML では、<anchor xmlns="urn:x-suika-fam-cx:markup:suikawiki:0:9:">状態見出し語指定</anchor>は正確に <code class="XML">CDATA</code> 
だけでなければなりません。 <code class="SGML"><anchor xmlns="urn:x-suika-fam-cx:markup:suikawiki:0:9:">ps</anchor></code> を使うことは出来ませんから、
<anchor xmlns="urn:x-suika-fam-cx:markup:suikawiki:0:9:">引数実体参照</anchor>を使ったり、前後に<anchor xmlns="urn:x-suika-fam-cx:markup:suikawiki:0:9:">空白</anchor>を入れることは出来ません。
複数或いは空の<anchor xmlns="urn:x-suika-fam-cx:markup:suikawiki:0:9:">状態見出し語</anchor>を指定することもできません。</p><p><anchor-end xmlns="urn:x-suika-fam-cx:markup:suikawiki:0:9:" a0:anchor="6" xmlns:a0="urn:x-suika-fam-cx:markup:suikawiki:0:9:">[6]</anchor-end> XML では、 CDATA 区間が<anchor xmlns="urn:x-suika-fam-cx:markup:suikawiki:0:9:">文書実現値</anchor>中で使用できる唯一の<anchor xmlns="urn:x-suika-fam-cx:markup:suikawiki:0:9:">マーク区間</anchor>です。</p><p><anchor-end xmlns="urn:x-suika-fam-cx:markup:suikawiki:0:9:" a0:anchor="11" xmlns:a0="urn:x-suika-fam-cx:markup:suikawiki:0:9:">[11]</anchor-end>
一部で <code class="SGML">CDATA</code> 区間内であっても
<code class="XML"><strong>]</strong><strong>]</strong>&amp;gt;</code> と書けば
<code><strong>]</strong><strong>]</strong>&gt;</code> と解釈されているという解説がありますが、
これは<em>間違い</em>です。
<code class="XML">CDATA</code> 区間内で
<code class="XML"><strong>]</strong><strong>]</strong>&amp;gt;</code> と書いたら本当に <code><strong>]</strong><strong>]</strong>&amp;gt;</code>
(<code class="XML">CDATA</code> 区間の<em>外</em>で <samp class="XML"><strong>]</strong><strong>]</strong>&amp;amp;gt;</samp> と書くのと同じこと。) になります。</p><p>(<anchor xmlns="urn:x-suika-fam-cx:markup:suikawiki:0:9:">名無しさん</anchor>)</p><p><anchor-end xmlns="urn:x-suika-fam-cx:markup:suikawiki:0:9:" a0:anchor="12" xmlns:a0="urn:x-suika-fam-cx:markup:suikawiki:0:9:">[12]</anchor-end>
<strong>いつ使うのか?</strong>:
<q><code class="XML" xml:lang="en">CDATA</code> 区間を必ず使わなければならない場面</q>というのは存在しません。
<code class="XML" xml:lang="en">CDATA</code> 区間はいわゆる<anchor xmlns="urn:x-suika-fam-cx:markup:suikawiki:0:9:">構文糖</anchor>で、
<q>あったら便利かもしれないけど無くても困らない</q>ものです。</p><p><anchor xmlns="urn:x-suika-fam-cx:markup:suikawiki:0:9:">XML</anchor> の<anchor xmlns="urn:x-suika-fam-cx:markup:suikawiki:0:9:">要素</anchor>の<anchor xmlns="urn:x-suika-fam-cx:markup:suikawiki:0:9:">内容</anchor>では <code class="char">&lt;</code> や <code class="char">&amp;</code>
や <code class="char"><strong>]</strong><strong>]</strong>&gt;</code> を直接書けず、 
<code class="XML" xml:lang="en">&amp;lt;</code> や <code class="XML" xml:lang="en">&amp;amp;</code> や
<code class="XML" xml:lang="en"><strong>]</strong><strong>]</strong>&amp;gt;</code>
などと書かなければなりません
<weak xmlns="urn:x-suika-fam-cx:markup:suikawiki:0:9:">(そうしなければ<anchor>タグ</anchor>など特別な意味で解釈されてしまいます)</weak>。
これらが沢山含まれる時は、書き換えが面倒です。</p><p>そこで <code class="XML" xml:lang="en">CDATA</code> 区間を使うと、 <code class="char">&lt;</code>
や <code class="char">&amp;</code> をそのまま書くことができるようになります。
(<code class="char"><strong>]</strong><strong>]</strong>&gt;</code>
だけは <code class="XML" xml:lang="en">CDATA</code> 区間の終わりを表すので、
<code class="XML" xml:lang="en">CDATA</code> 区間でも書けません。)</p><p>(<anchor xmlns="urn:x-suika-fam-cx:markup:suikawiki:0:9:">名無しさん</anchor>)</p><p><anchor-end xmlns="urn:x-suika-fam-cx:markup:suikawiki:0:9:" a0:anchor="13" xmlns:a0="urn:x-suika-fam-cx:markup:suikawiki:0:9:">[13]</anchor-end>
<strong>タグが含まれる内容の例</strong>:
<anchor xmlns="urn:x-suika-fam-cx:markup:suikawiki:0:9:">XHTML</anchor> の <code class="HTMLe" xml:lang="en"><anchor xmlns="urn:x-suika-fam-cx:markup:suikawiki:0:9:">pre</anchor></code> 要素を使って
<anchor xmlns="urn:x-suika-fam-cx:markup:suikawiki:0:9:">XML</anchor> の使用例を示したいとします。
例の中には <anchor xmlns="urn:x-suika-fam-cx:markup:suikawiki:0:9:">XML</anchor> の<anchor xmlns="urn:x-suika-fam-cx:markup:suikawiki:0:9:">タグ</anchor>が沢山含まれます。
一々 <code class="XML" xml:lang="en">&amp;lt;</code> と書くのは面倒なので、
<code class="XML" xml:lang="en">CDATA</code> 区間を使います。</p><pre class="HTML example code">&lt;pre&gt;&lt;!<strong>[</strong>CDATA<strong>[</strong>
  &lt;根&gt;
    &lt;葉/&gt;
    &lt;節点&gt;
      &lt;節点&gt;
        &lt;葉/&gt;
      &lt;/節点&gt;
      &lt;葉/&gt;
      &lt;節点&gt;
        &lt;節点&gt;
          &lt;葉/&gt;
          &lt;葉/&gt;
        &lt;/節点&gt;
        &lt;葉/&gt;
      &lt;/節点&gt;
    &lt;/節点&gt;
  &lt;/根&gt;
<strong>]</strong><strong>]</strong>&gt;&lt;/pre&gt;</pre><p>(<anchor xmlns="urn:x-suika-fam-cx:markup:suikawiki:0:9:">名無しさん</anchor>)</p><p><anchor-end xmlns="urn:x-suika-fam-cx:markup:suikawiki:0:9:" a0:anchor="14" xmlns:a0="urn:x-suika-fam-cx:markup:suikawiki:0:9:">[14]</anchor-end>
<strong>スクリプトを書く例</strong>:
<anchor xmlns="urn:x-suika-fam-cx:markup:suikawiki:0:9:">XHTML</anchor> の <code class="HTMLe" xml:lang="en"><anchor xmlns="urn:x-suika-fam-cx:markup:suikawiki:0:9:">script</anchor></code> 要素で <anchor xmlns="urn:x-suika-fam-cx:markup:suikawiki:0:9:">JavaScript</anchor>
の<anchor xmlns="urn:x-suika-fam-cx:markup:suikawiki:0:9:">コード</anchor>を書きますが、<anchor xmlns="urn:x-suika-fam-cx:markup:suikawiki:0:9:">比較</anchor>演算子の <code class="JS">&lt;</code>
や<anchor xmlns="urn:x-suika-fam-cx:markup:suikawiki:0:9:">論理</anchor>演算子の <code class="JS">&amp;&amp;</code> を沢山使います。一々
<code class="XML" xml:lang="en">&amp;lt;</code> や <code class="XML" xml:lang="en">&amp;amp;&amp;amp;</code>
に書き直すのは面倒なので、 <code class="XML" xml:lang="en">CDATA</code> 区間を使います。</p><pre class="HTML example code">&lt;script type=&quot;text/javascript&quot;&gt;
&lt;!<strong>[</strong>CDATA<strong>[</strong>
  var els = document.getElementsByTagName ('dfn');
  var elsLength = el.length;
  if ((0 &lt; elsLength) &amp;&amp; (elsLength &lt; 100)) {
    for (var i = 0; i &lt; elsLength; i++) {
      var el = els[i];
      index.addItem (el, el.textContent);
    }
  }
<strong>]</strong><strong>]</strong>&gt;
&lt;/script&gt;</pre><p>(<anchor xmlns="urn:x-suika-fam-cx:markup:suikawiki:0:9:">名無しさん</anchor>)</p><p><anchor-end xmlns="urn:x-suika-fam-cx:markup:suikawiki:0:9:" a0:anchor="15" xmlns:a0="urn:x-suika-fam-cx:markup:suikawiki:0:9:">[15]</anchor-end>
<strong>HTML と <code class="XML" xml:lang="en">CDATA</code> 区間</strong>:
仕様上は <anchor xmlns="urn:x-suika-fam-cx:markup:suikawiki:0:9:">HTML</anchor> でも <code class="XML" xml:lang="en">CDATA</code> 区間は使えますが、
対応している <anchor xmlns="urn:x-suika-fam-cx:markup:suikawiki:0:9:">Webブラウザ</anchor>はほとんどありません。
(<anchor xmlns="urn:x-suika-fam-cx:markup:suikawiki:0:9:">名無しさん</anchor>)</p><form xmlns="urn:x-suika-fam-cx:markup:suikawiki:0:9:" ref="comment"></form><section><h1>関連</h1><p><anchor-end xmlns="urn:x-suika-fam-cx:markup:suikawiki:0:9:" a0:anchor="7" xmlns:a0="urn:x-suika-fam-cx:markup:suikawiki:0:9:">[7]</anchor-end> CDATA 区間は、<anchor xmlns="urn:x-suika-fam-cx:markup:suikawiki:0:9:">マーク区間</anchor>の一種です。
<anchor xmlns="urn:x-suika-fam-cx:markup:suikawiki:0:9:">XML</anchor> で使用できるマーク区間には、他に<anchor xmlns="urn:x-suika-fam-cx:markup:suikawiki:0:9:">条件区間</anchor>があります。</p><p><anchor xmlns="urn:x-suika-fam-cx:markup:suikawiki:0:9:">SGML</anchor> では、 CDATA 区間と似た <code class="SGML"><anchor xmlns="urn:x-suika-fam-cx:markup:suikawiki:0:9:">RCDATA</anchor></code>
区間が利用できます。 <code class="SGML">RCDATA</code> 区間では、
<anchor xmlns="urn:x-suika-fam-cx:markup:suikawiki:0:9:">参照</anchor>だけは認知されます。</p><p><anchor-end xmlns="urn:x-suika-fam-cx:markup:suikawiki:0:9:" a0:anchor="8" xmlns:a0="urn:x-suika-fam-cx:markup:suikawiki:0:9:">[8]</anchor-end> <anchor xmlns="urn:x-suika-fam-cx:markup:suikawiki:0:9:">DOM</anchor> では、 CDATA 区間は <code class="DOM"><anchor xmlns="urn:x-suika-fam-cx:markup:suikawiki:0:9:">CDATASection</anchor></code>
節として扱われます。</p><p><anchor xmlns="urn:x-suika-fam-cx:markup:suikawiki:0:9:">XML情報集合</anchor>や <anchor xmlns="urn:x-suika-fam-cx:markup:suikawiki:0:9:">XPath</anchor> では、 CDATA 区間は取り扱いません。
CDATA 区間を含む文書実現値に対応する<anchor xmlns="urn:x-suika-fam-cx:markup:suikawiki:0:9:">木</anchor>では、
CDATA 区間の<anchor xmlns="urn:x-suika-fam-cx:markup:suikawiki:0:9:">文字データ</anchor>はそのまわりの<anchor xmlns="urn:x-suika-fam-cx:markup:suikawiki:0:9:">データ</anchor>と一緒に<anchor xmlns="urn:x-suika-fam-cx:markup:suikawiki:0:9:">文節</anchor>になります。</p><p><anchor-end xmlns="urn:x-suika-fam-cx:markup:suikawiki:0:9:" a0:anchor="10" xmlns:a0="urn:x-suika-fam-cx:markup:suikawiki:0:9:">[10]</anchor-end> <anchor xmlns="urn:x-suika-fam-cx:markup:suikawiki:0:9:">要素型宣言</anchor>で <code class="SGML"><anchor xmlns="urn:x-suika-fam-cx:markup:suikawiki:0:9:">CDATA</anchor></code> 
として宣言された<anchor xmlns="urn:x-suika-fam-cx:markup:suikawiki:0:9:">要素型</anchor>の<anchor xmlns="urn:x-suika-fam-cx:markup:suikawiki:0:9:">要素</anchor>の<anchor xmlns="urn:x-suika-fam-cx:markup:suikawiki:0:9:">内容</anchor>は
CDATA 区間と似た状態になります。</p><p><anchor-end xmlns="urn:x-suika-fam-cx:markup:suikawiki:0:9:" a0:anchor="9" xmlns:a0="urn:x-suika-fam-cx:markup:suikawiki:0:9:">[9]</anchor-end> <code class="SGML"><anchor xmlns="urn:x-suika-fam-cx:markup:suikawiki:0:9:">CDATA</anchor></code> として宣言された<anchor xmlns="urn:x-suika-fam-cx:markup:suikawiki:0:9:">実体</anchor>を参照することで、
(文字データを書く場所こそマーク区間内容ではなく<anchor xmlns="urn:x-suika-fam-cx:markup:suikawiki:0:9:">実体文</anchor>ですが)
似たような結果を得られます。</p><form xmlns="urn:x-suika-fam-cx:markup:suikawiki:0:9:" ref="comment"></form></section><section><h1>メモ</h1></section></body></html>