[1] [CODE(DOMi)[CharacterData]] 界面は、 [CODE(DOMi)[[[Node]]]]
界面を継承し、文字データの操作に関わる機能を提供します。

この界面そのものは [[XML]] の[[節]]には対応せず、
この界面を継承した節界面を通して利用します。

なお、文字位置は [CODE(DOM)[0]] から数えます。

* 継承関係

[8] [CODE(DOMi)@en[[[CharacterData]]]] [[インターフェイス]]は、
[CODE(DOMi)@en[[[Node]]]] [[インターフェイス]]を[[継承]]しています。

[FIG(corollary)[
[9] 従って [CODE(DOMi)@en[[[EventTarget]]]] [[インターフェイス]]も[[継承]]しています。
]FIG]

[10] [CODE(DOMi)@en[[[CharacterData]]]] [[インターフェイス]]は次の[[インターフェイス]]により[[継承]]されています。

[FIG(short list)[
- [CODE(DOMi)@en[[[Comment]]]]
- [CODE(DOMi)@en[[[ProcessingInstruction]]]]
- [CODE(DOMi)@en[[[Text]]]]
]FIG]

;; [11] [CODE(DOMi)@en[[[Attr]]]] [[インターフェイス]]と一部性質が似ているところもありますが、
継承関係にはありません。

* メンバー

[2]
,属性	,[[data]]	,文字データ	,[DOM1]
,読取専用属性	,[[length]]	,文字データ長	,[DOM1]
,method	,[[substringData]]	,文字データの一部を取出す	,[DOM1]
,method	,[[appendData]]	,文字データに付加	,[DOM1]
,method	,[[insertData]]	,文字データを挿入	,[DOM1]
,method	,[[deleteData]]	,文字データを削除	,[DOM1]
,method	,[[replaceData]]	,文字データを置換	,[DOM1]

[3] >>2 特定言語の作法に強く影響されている気がしないでもありませんが(w

- [DOM1] ''Document Object Model (Core) Level 1'' <http://www.w3.org/TR/REC-DOM-Level-1/level-one-core.html#ID-FF21A306>
- [4] [CODE(DOMi)[CharacterData]] は、任意の長さの文字列を扱えなければなりません。しかしながら、束縛によっては [CODE(DOM)[[[DOMString]]]] で扱える長さの制限があって、よって [CODE(DOM)[data]] 属性で値全体を取出すことが出来ないかもしれません (その時は [CODE(DOM)[DOMSTRING_SIZE_ERR]] 例外が発生します)。そのような場合には、 [CODE(DOMmethod)[substringData]] method を使うように、と仕様書は言っています。
- [5] [DOM2] ''Document Object Model Core'' <http://www.w3.org/TR/DOM-Level-2-Core/core.html#ID-FF21A306>
- [6] >>3 実際、 method の多くは [CODE(DOMp)[offset]] パラメーターを持ってますが、これは UTF-16 で表した時のオクテット列中の文字の位置 (16ビット1単位) です。だから [CODE(DOM)[DOMString]] を勝手に UTF-8 とかにして実装すると、面倒なことになります。だから、言語中立なはずの界面としての DOM で [CODE(DOMi)[CharacterData]] は駄目すぎます。
- [7] >>6 変な見栄?はってどんな言語でも使えますよ〜なんていわずに、最初から文字列型を UTF-16 に出来るどんな言語でも使えますよ〜と言っとけばいいのにねぇ。


[12] [CITE@en[Fix Web IDL extended attribute usage for recent changes]]
([[domenic]]著, [TIME[2017-04-25 08:33:14 +09:00]])
<https://github.com/whatwg/dom/commit/f9ede86ea35753b40f6070352e2f150bc1bd2482>