#?SuikaWiki/0.9 - [1] ''マーク付けノート 2001年12月 - マークの付けかた。'' : [CODE(SGML)[CDATA]] と[[属性値]]と[[属性値リテラル]]について。 - [2] [CODE(SGML)[CDATA]] == Character Data == [[文字データ]]。 - [3] [[SGML]] では一般に、[[マーク]]を認知しない[[文字]]の[[並び]]のこと。 - [4] 類似品として [CODE(SGML)[[[PCDATA]]]] (解析文字データ == マークを認知する文字データ) や [CODE(SGML)[[[RCDATA]]]] ([[参照]]を認知する文字データ) がある。 [[#comment]] * HTML 4 の場合 ** 属性値の型としての CDATA [5] HTML 4 仕様書には [CODE(SGML)[CDATA]] の取り扱いについての言及がありますが、 完全な定義は [[ISO8879]] を参照し、その要約を示すにとどめるとしています。 ( 参照。) [6] HTML 4 [[利用者エージェント]]が行うべき (should) [CODE(SGML)[CDATA]] 属性値(表記)の解釈は : [WEAK[(cf. SGML の規定 : [CODE(WikiPage)[[[SGML//空白]]]])]] = [[文字実体]]を文字に置換 = [[改行]] ([[LF]]) を無視 = [[復帰]] ([[CR]]) と[[タブ]]を1つの[[間隔]]に置換 Must ではなく should なのは、旧来の応用の救済でしょう。 SGML 的には必ずこう正規化しないといけないはずです。 更に、文字実体のみならず[[文字参照]]も文字に置換してもらわないと困ります。 [7] HTML 4 利用者エージェントは、更に最初と最後の空白を無視しても構いません (may)。 たとえば [SAMP(HTML)[ myval ]] は [SAMP(HTML)[myval]] としても構いません。 しかし、[[著者]]はそのような値を使うべきではありません (should not)。 この規定は旧来の UA・文書を救済するためのものでしょう。 SGML 的にはこのような扱いはありません。 [WEAK[(SGML 的な属性値を更にどう解釈するかという問題ですから、 SGML 違反ではありません。)]] HTML 4 の規定では無視していいのは [CODE[white space]] (単数) ですが、実際に仕様書に挙げられている例では最初と最後に複数個の空白があって無視されています。。。 [8] 利用者エージェントの中には連続する空白を1つの間隔にまとめてしまうものがありますが、 そういう話は特に書かれていません。 これについての救済はなしですか。そうですか。別に構いませんが。 [9] なお、 [[DTD]] 的に [CODE(SGML)[CDATA]] であっても、 DTD で表現できない更なる制限があることもあります。 [[#comment]] ** 要素の内容としての CDATA [10] 要素の内容の型が [CODE(SGML)[CDATA]] である場合、すなわち [CODE(HTMLe)[[[style]]]] 要素と [CODE(HTMLe)[[[script]]]] 要素では、 [[タグ]]で囲まれた文字列がそのまま要素の内容の文字列として解釈されます。 ただし、文字列 [CODE(HTML)[]] を書いてもそれは[[注釈宣言]]とは見なされず、[[文字データ]]とみなされます。 そういうのを書いても適宜無視してくれるのは実は HTML の規定ではなく、[[スタイル言語]]や[[スクリプト言語]]の側の規定に由来します。 [WEAK[そのような規定がない言語では SGML 注釈宣言もどきを書いてはいけないのです。]] [[#comment]] * メモ