CDATA区間

CDATA区間

[1]SGMLマーク区間の有効状態文字データ (CDATA) であるマーク区間(宣言)。

[2] XML では、CDATA 区間 (section) 文字データが出現可能なところにどこにでも出現可能です。 CDATA 区間は、そうしなければマークとして認知される文字を含む塊を escape するのに使います。 CDATA 区間は文字列 <![CDATA[ で始まり、文字列 ]]> で終わります。

仕様書:

[3] CDATA 区間では、マーク区間終了 (規格参照具象構文XML では ]]>) だけが認知されます。 逆に言えば、マーク区間の内容に文字列 ]]> を書くことは出来ません。

また、 CDATA 区間内では文字列は文字データとして、 つまりかかれたままに解釈されます。 ですから実体参照は展開されません。

[4] ]]> という文字列を書きたいときは、 <![CDATA[ ... ]]]]>&gt;<![CDATA[ ... ]]> とでもするか、 CDATA 区間の使用を諦めるしか方法はありません。

[5] XML では、状態見出し語指定は正確に CDATA だけでなければなりません。 ps を使うことは出来ませんから、 引数実体参照を使ったり、前後に空白を入れることは出来ません。 複数或いは空の状態見出し語を指定することもできません。

[6] XML では、 CDATA 区間が文書実現値中で使用できる唯一のマーク区間です。

[11] 一部で CDATA 区間内であっても ]]&gt; と書けば ]]> と解釈されているという解説がありますが、 これは間違いです。 CDATA 区間内で ]]&gt; と書いたら本当に ]]&gt; (CDATA 区間の]]&amp;gt; と書くのと同じこと。) になります。

(名無しさん)

[12] いつ使うのか?: CDATA 区間を必ず使わなければならない場面というのは存在しません。 CDATA 区間はいわゆる構文糖で、 あったら便利かもしれないけど無くても困らないものです。

XML要素内容では <&]]> を直接書けず、 &lt;&amp;]]&gt; などと書かなければなりません (そうしなければタグなど特別な意味で解釈されてしまいます)。 これらが沢山含まれる時は、書き換えが面倒です。

そこで CDATA 区間を使うと、 <& をそのまま書くことができるようになります。 (]]> だけは CDATA 区間の終わりを表すので、 CDATA 区間でも書けません。)

(名無しさん)

[13] タグが含まれる内容の例: XHTMLpre 要素を使って XML の使用例を示したいとします。 例の中には XMLタグが沢山含まれます。 一々 &lt; と書くのは面倒なので、 CDATA 区間を使います。

<pre><![CDATA[
  <根>
    <葉/>
    <節点>
      <節点>
        <葉/>
      </節点>
      <葉/>
      <節点>
        <節点>
          <葉/>
          <葉/>
        </節点>
        <葉/>
      </節点>
    </節点>
  </根>
]]></pre>

(名無しさん)

[14] スクリプトを書く例: XHTMLscript 要素で JavaScriptコードを書きますが、比較演算子の <論理演算子の && を沢山使います。一々 &lt;&amp;&amp; に書き直すのは面倒なので、 CDATA 区間を使います。

<script type="text/javascript">
<![CDATA[
  var els = document.getElementsByTagName ('dfn');
  var elsLength = el.length;
  if ((0 < elsLength) && (elsLength < 100)) {
    for (var i = 0; i < elsLength; i++) {
      var el = els[i];
      index.addItem (el, el.textContent);
    }
  }
]]>
</script>

(名無しさん)

[15] HTML と CDATA 区間: 仕様上は HTML でも CDATA 区間は使えますが、 対応している Webブラウザはほとんどありません。 (名無しさん)

関連

[7] CDATA 区間は、マーク区間の一種です。 XML で使用できるマーク区間には、他に条件区間があります。

SGML では、 CDATA 区間と似た RCDATA 区間が利用できます。 RCDATA 区間では、 参照だけは認知されます。

[8] DOM では、 CDATA 区間は CDATASection 節として扱われます。

XML情報集合XPath では、 CDATA 区間は取り扱いません。 CDATA 区間を含む文書実現値に対応するでは、 CDATA 区間の文字データはそのまわりのデータと一緒に文節になります。

[10] 要素型宣言CDATA として宣言された要素型要素内容は CDATA 区間と似た状態になります。

[9] CDATA として宣言された実体を参照することで、 (文字データを書く場所こそマーク区間内容ではなく実体文ですが) 似たような結果を得られます。

メモ