DOMString

DOMString

[14] DOMString は、 Web IDL における主たる文字列型です。 実質的に JavaScript文字列型と同じものを表しているといえるものです。

呼称

[21] DOMString とは、「DOM における文字列」 という程度の意味の名称です。 「DOM」とついていることにさしたる意味はありません。

JavaScript String との関係

[15] Web IDLDOMString 型とされているものは、 JavaScriptString (プリミティブ型) に相当しています。

[16] JavaScriptStringWeb IDLDOMString にそのまま無変換で引き渡すことができますし、 そうでないものは ToString による型変換を経て引き渡されます。

[17] 逆に Web IDLDOMStringJavaScript に引き渡されると String (プリミティブ型) となります。

文字コード

[18] DOMString16ビット符号単位配列として文字列を表しています (これは JavaScriptString と同じです)

[19] 一般的にはこれは UTF-16 と呼ばれていますが、 サロゲート符号位置が単体で出現する不正な UTF-16 となる場合があります。つまり WTF-16 です。

[22] もっともこれは必ずしも内部的に WTF-16文字コードとして実装しなければならないわけではありません。 諸々の挙動が観測できない限りにおいて、利用者エージェントは好きな文字コードを使えます。 例えば WTF-8 を使って実装することができます。

関連

[20] Web IDL には他に USVStringCSSOMString もあります。

DOM

歴史

[1] DOMString は、 DOM の仕様書やその IDL 定義で使われているです。 多くのプログラム言語等に存在する文字列型の DOM 版を特にこう呼ぶと考えて良いでしょう。

[2] DOM は言語非依存を頑張ってるとか言ってるくせに、 この DOMString にはかなり厳しい制限があります。 それに場合によっては不合理な挙動も規定されています。

[8] >>2 DOM 3 仕様書では DOMString の章は基本型の章の一部になりまして、 基本型の章には bindings may use different types と書いてあるので、 DOMString を使わないことでこの問題は回避できると思われます。

(ただ、 length 系で UTF-16 でないことによる面倒臭さは残りますが。)

[3]

[4] >>2 でいう不合理とは、具体的には、次の事項が挙げられます。

[12] Definition of DOMString (Cameron McCormack 著, 版) <http://lists.w3.org/Archives/Public/www-dom/2007AprJun/0005.html> (名無しさん)

比較

[5] 文字列比較について。

原則: 文字列を構成する16ビット値をバイナリ比較します。 すなわち、大文字・小文字は区別します。

HTML の場合: XML でなく従来の HTML を扱う場合、

  • HTML 処理器は名前を大文字 (ときたま小文字) に正規化する。 [DOM 1,2]
  • HTML 処理器はしばしばマークを要素型名は大文字、属性名は小文字に正規化する。 [DOM 3]
  • DOM 構造を構築する前に大文字・小文字正規化が行う。 [DOM 1,2]
  • DOM 構造を構築する前にしばしば大文字・小文字正規化を行う。 [DOM 3]
  • DOM 的に比較の扱いは原則通り。 [DOM 1,2]
  • 応用は DOM 実装から返された要素型名・属性名を大文字・小文字区別せずに比較するべき。 [DOM 3]

正規化:

  • 大文字・小文字以外の正規化は検討中。 [DOM 1,2]
  • 完全正規化形変換は直列化時その他に行う。 [DOM 3]

[9] 仕様書:

正規化

[10] 文字群は次の時、 XML 1.1 附属書 B で定義された通り完全正規化されています。 [DOM 3]

この2つのメソッドの場合を除いて、一般に DOM メソッドを使用した文字の操作で完全正規化状態が保存されることは保証されません。

メモ

[11] 特に DOMStringURI を表現する場合のことは DOM//URI をご覧ください。

[13] IRC logs: freenode / #whatwg / 20130809 ( ( 版)) <http://krijnhoetmer.nl/irc-logs/whatwg/20130809>