#?SuikaWiki/0.9 [1] [CODE(DOM)[DOMString]] は、 [[DOM]] の仕様書やその [[IDL]] 定義で使われている[[型]]です。 多くの[[プログラム言語]]等に存在する[[文字列型]]の DOM 版を特にこう呼ぶと考えて良いでしょう。 [2] DOM は言語非依存を頑張ってるとか言ってるくせに、 この [CODE(DOM)[DOMString]] にはかなり厳しい制限があります。 それに場合によっては不合理な挙動も規定されています。 [3] -[CODE(DOM)[DOMString]] は連続する16ビット値です。 IDL 的に書くと、 [CODE(IDL)[typedef sequence DOMString;]] と表されます。 -[[応用]]は [CODE(DOM)[DOMString]] を [[UTF-16]] で符号化しなければなりません。従って1文字が2つの16ビット値で表現される ([[サロゲート・ペア]]) こともあります。 -[[束縛]]は [CODE(DOM)[DOMString]] という名前を使う必要はありません。例えば [[Java]] 束縛では、 [WEAK[(Java 標準の)]] [CODE(Java)[String]] 型 (こちらも UTF-16 で文字を表現。) を使います。 [4] >>2 でいう不合理とは、具体的には、次の事項が挙げられます。 -処理系 native の文字列型の表現が UTF-16 以外の場合、それを流用できない。 --例えば [[perl]] の内部表現は [[UTF-8]] を使っているが、この規定に厳密に従うなら、別途 UTF-16 表現の型を用意しないといけない。一つの script 内で、本質的に不必要な符号変換をしなければならなくなる。 -UTF-16 の具体的な種類が規定されていない。 UTF-16 には [[LE]] か [[BE]] かの違い、 [[BOM]] を使うか否かの違いがあるが、そこまで規定しないのは片手落ちだ。 [5] 文字列比較について。文字列比較は基本的に、それを構成する各符号を順に比較することで行います。 つまり、大文字・小文字を区別します。 [[HTML]] の[[要素型名]] の大文字化などは DOM 構造を作る前の処理とし、 DOM の処理では基本的に無視します。 -[DOM1] ''Document Object Model (Core) Level 1'' -[DOM1ERRATA] ''Errata in REC-DOM-Level-1-19981001'' -[DOM2] ''Document Object Model Core'' - [6] [[length]] とかの DOM の文字列の長さを調べる仕組みが返す値は、すべて文字の数ではなく、16ビット単位の数になっています。ですから >>3 の規定を破る場合は、 [CODE(char)[U+10000]] 以上の値の文字が含まれる時に値を適当に増やすとかの工作が必要になります。 - [7] >>5 [[正規化]]の問題については、 DOM 1 は検討中だとしています。