[1] 【SGML】 マーク区間の有効状態が文字データ
(CDATA
) であるマーク区間(宣言)。
[2] XML では、CDATA 区間は文字データが出現可能なところにどこにでも出現可能です。
CDATA 区間は、そうしなければマークとして認知される文字を含む文塊を
escape するのに使います。 CDATA 区間は文字列
<![CDATA[
で始まり、文字列
]]>
で終わります。
仕様書:
[3] CDATA 区間では、マーク区間終了
(規格参照具象構文や XML では ]]>
)
だけが認知されます。
逆に言えば、マーク区間の内容に文字列 ]]>
を書くことは出来ません。
また、 CDATA 区間内では文字列は文字データとして、
つまりかかれたままに
解釈されます。
ですから実体参照は展開されません。
[4] ]]> という文字列を書きたいときは、 <![CDATA[ ... ]]]]>><![CDATA[ ... ]]> とでもするか、 CDATA 区間の使用を諦めるしか方法はありません。
[5] XML では、状態見出し語指定は正確に CDATA
だけでなければなりません。 ps
を使うことは出来ませんから、
引数実体参照を使ったり、前後に空白を入れることは出来ません。
複数或いは空の状態見出し語を指定することもできません。
[6] XML では、 CDATA 区間が文書実現値中で使用できる唯一のマーク区間です。
[11]
一部で CDATA
区間内であっても
]]>
と書けば
]]>
と解釈されているという解説がありますが、
これは間違いです。
CDATA
区間内で
]]>
と書いたら本当に ]]>
(CDATA
区間の外で ]]&gt; と書くのと同じこと。) になります。
(名無しさん)
[12]
いつ使うのか?:
というのは存在しません。
CDATA
区間を必ず使わなければならない場面CDATA
区間はいわゆる構文糖で、
あったら便利かもしれないけど無くても困らない
ものです。
XML の要素の内容では <
や &
や ]]>
を直接書けず、
<
や &
や
]]>
などと書かなければなりません
(そうしなければタグなど特別な意味で解釈されてしまいます)。
これらが沢山含まれる時は、書き換えが面倒です。
そこで CDATA
区間を使うと、 <
や &
をそのまま書くことができるようになります。
(]]>
だけは CDATA
区間の終わりを表すので、
CDATA
区間でも書けません。)
(名無しさん)
[13]
タグが含まれる内容の例:
XHTML の pre
要素を使って
XML の使用例を示したいとします。
例の中には XML のタグが沢山含まれます。
一々 <
と書くのは面倒なので、
CDATA
区間を使います。
<pre><![CDATA[ <根> <葉/> <節点> <節点> <葉/> </節点> <葉/> <節点> <節点> <葉/> <葉/> </節点> <葉/> </節点> </節点> </根> ]]></pre>
(名無しさん)
[14]
スクリプトを書く例:
XHTML の script
要素で JavaScript
のコードを書きますが、比較演算子の <
や論理演算子の &&
を沢山使います。一々
<
や &&
に書き直すのは面倒なので、 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
として宣言された実体を参照することで、
(文字データを書く場所こそマーク区間内容ではなく実体文ですが)
似たような結果を得られます。