ばけらの HTML リファレンス(未完成)

bakera.jp > 鳩丸リファレンス > ばけらの HTML リファレンス(未完成) > データ形式 > CDATA (文字データ)

CDATA (文字データ)

このデータを持つ要素 …… plaintext, style, script, xmp, listing

このデータを持つ属性 …… class, datafld, datapagesize, alt(input), archive, axis, code, content, event(script), face, for(script), n(nextid), name, name(a), name(applet), name(form), name, name(img), name(input), name(map), name(object), name(param), name(select), name(textarea), object, scheme, size(font), size(basefont), size(input), urn, value(button), value(input), value(option), value(param), version(html)

CDATAの解説

CDATA は Character Data の意味で、読んで字のごとく文字データを表します。#PCDATARCDATA と違う点は、マークが SGML的に解釈されないということです。これは任意の長さ (長さゼロでも良い) のべたのテキストだと考えて構いませんが、属性値として使われる場合と要素の中身として使われる場合で、その意味合いが少し違います。

要素内の CDATA

script要素style要素 の中身が CDATA とされています。かつての xmp要素listing要素plaintext要素の中身も CDATA として定義されていました。これは以下のような特徴を持ちます。

  • 文字参照は展開されず、そのままの文字として扱われる。& と書けば、それはそのまま & という文字列として扱われます。
  • マークアップの記号はそのまま文字として扱われる。< や > などは単なる文字と見なされます。<!-- --> を書いても、中身は無視されません。

それから、ETAGO が出現した時点で CDATA が終了することに注意してください。ETAGO とは「終了タグ開始区切り子」のことで、HTML では </ という文字列です。つまり、CDATA の中に </ を書くことはできません。そういうわけで、SCRIPT の中にも </ を書くことはできません。

※もっとも、現実にはこれを正しく実装しているブラウザは存在しませんから、あまり心配しなくて良いのかもしれません。逆に、SCRIPT の終了タグにエンプティタグを使ったりすると script要素の終わりが判断できず、以降がずっと script の中身だと見なされてしまいます。

属性内の CDATA

属性値の中の CDATA では、文字参照を解釈するようになっています。たとえば、onclick="alert(&quot;押すなよ&quot;)" は、onclick='alert("押すなよ")' と同じ効果を発揮します。

マークアップは無視されます。ですからたとえば

<PRE title="<br>タグの例文">

などという記述も可能です。しかし、ブラウザはこれをうまく解釈できないかも知れません。ですから、文字参照を使ってこのようにした方が良いでしょう。

<PRE title="&lt;br&gt;タグの例文">

これならブラウザを混乱させることはありません。

属性値が URI の場合も例外ではないので気をつけてください。CGI に渡すパラメータの区切りには & が使われる事が多いのですが、属性値中に記す際には、これを文字参照に書き換える必要があります。

<A href="dummy.cgi?lt=5&gt=6&copy=7">

のような例は不可で、& を &amp; に書き換えなければなりません。

※SGML的には、引用符で括られた属性値の中身は RCDATA として解釈されます。引用符を省略したときは CDATA や他のデータ形式になります。HTML では、文字参照を含む属性値の引用符は省略できませんので、常に文字参照が展開されるように見えます。

最近の日記

関わった本など