- PR -

CDATAとNMTOKEN(DTDの属性リスト宣言)

1
投稿者投稿内容
chienvert
ベテラン
会議室デビュー日: 2002/12/03
投稿数: 57
投稿日時: 2003-06-07 00:42
数字を扱う際にCDATAとNMTOKENのどっちを選んで良いものか、よく分かりません。
何が基準になるのでしょうか?
Gio
ぬし
会議室デビュー日: 2003/11/28
投稿数: 350
お住まい・勤務地: 都内から横浜の間に少量発生中
投稿日時: 2003-11-28 17:42
XML 1.1 仕様を読んでみましたが、CDATA の場合は Attribute-Value Normalization (以下 AVN)を一切行わないという点しか違いが見当たりませんでした。

AVN とは、大雑把に言うと改行コードやタブはスペースに、連続するスペースはスペース 1 個に変換し、語の前や後にあるスペースは取り除くということです。(詳しくは仕様を参照してください)
NMTOKEN の場合、XML パーザは AVN を行うことを(仕様上は)義務付けられています。

" 1 " のようなテキストが現れた時、これをアプリケーションで "1" と受け取りたいなら NMTOKEN、アプリケーションで処理するから何もしなくて良いなら CDATA ということでしょうか。

アプリケーションでこういう細々とした処理を書かなくて良いという点では NMTOKEN を推します。もっとも、NMTOKEN の場合は AVN というパーザのオーバーヘッドも発生しますが。
得られた語が数字として正しいかというチェックは必要になるので、空白処理くらい大した手間ではないかもしれません。

もちろん、型が定義できる XMLSchema も推します
Gio
ぬし
会議室デビュー日: 2003/11/28
投稿数: 350
お住まい・勤務地: 都内から横浜の間に少量発生中
投稿日時: 2003-11-28 17:55
すみません。仕様を一部読み違えていました。
CDATA でも改行→スペースの変換は行われます。
連続スペースの変換と前後の空白の除去は CDATA では行われません。
1

スキルアップ/キャリアアップ(JOB@IT)