#?SuikaWiki/0.9 [1] 各 [[DOM]] モジュールは1つ以上の[DFN[[RUBYB[機能] [feature]]]] (名前と版) を定義します。 [2] 仕様書: - [DOM 3] 1.3.6 DOM Features [[#comment]] * 構文 [3] 大文字・小文字は区別されません [SUP[ [DOM 3] ]]。 衝突の虞を防ぐため、 DOM 仕様書以外で定義する機能の名前は固有にするべきです [SUP[ [DOM 3] ]]。 [9] >>3 だけしか規定がないようですが、 [CODE(DOMp)[[[features]]]] で使い物になる値にしたければ、次の配慮が必要です。 - 最初の1文字に [CODE(char)[+]] を使わない - [CODE(char)[[[SP]]]] を使わない - 名前は数字からはじめない。 版は数字からはじめる。 ([[名無しさん]]) [[#comment]] * 既知の値 [4] ,機能名 ,版 ,説明 ,[CODE(DOM)[[[Core]]]] ,[CODE(DOM)[1.0]] ,Core Module (Level 1) ,[CODE(DOM)[Core]] ,[CODE(DOM)[2.0]] ,Core Module (Level 2) ,[CODE(DOM)[Core]] ,[CODE(DOM)[3.0]] ,Core Module (Level 3) ,[CODE(DOM)[[[XML]]]] ,[CODE(DOM)[1.0]] ,XML Module (Level 1) ,[CODE(DOM)[XML]] ,[CODE(DOM)[2.0]] ,XML Module (Level 2) ,[CODE(DOM)[XML]] ,[CODE(DOM)[3.0]] ,XML Module (Level 3) ,[CODE(DOM)[[[XMLVersion]]]] ,[CODE(DOM)[1.0]] ,[[XML 1.0]] ,[CODE(DOM)[XMLVersion]] ,[CODE(DOM)[1.1]] ,[[XML 1.1]] [[#comment]] * 他との関係 [5] 応用は、メソッド [CODE(DOMm)[[[getDOMImplementation]] ([VAR(DOMp)[features]])]] やメソッド [CODE(DOMm)[[[getDOMImplementationList]] ([VAR(DOMp)[features]])]] を使うと特定の機能を実装した DOM [[実装]]を要求できます。 メソッド [CODE(DOMm)[[[hasFeature]] ([VAR(DOMp)[feature]], [VAR(DOMp)[version]])]] やメソッド [CODE(DOMm)[[[isSupported]] ([VAR(DOMp)[feature]], [VAR(DOMp)[version]])]] を使うと特定の機能が実装されているか調べることができます。 (版を問わない時は [CODE(DOM)[[[null]]]] や空文字列を指定できます。) [6] DOM 2 モジュールまででは、既存の界面の拡張である界面はみな、 その拡張に対応する機能に対応していれば、束縛規定の型変換機構を使って利用することができました。 (例えば、 [CODE(DOM)[[[Events]]]] 機能に対応していれば [CODE(DOMi)[[[Node]]]] の実現値から [CODE(DOMi)[[[EventTarget]]]] (is‐a [CODE(DOMi)[Node]]) の実現値を得ることができました。) DOM 3 では、特定の DOM を実装する部分部品と強調できるべきとされています ([[DOM//実装//混合]]を参照してください)。このため、メソッド [CODE(DOMm)[[[getFeature]] ([VAR(DOMp)[geature]], [VAR(DOMp)[version]])]] が用意されており、特定の機能を実装した実現値を得ることができます。 [7] メソッド [CODE(DOMm)[hasFeature ([VAR(DOMp)[feature]], [VAR(DOMp)[version]])]] やメソッド [CODE(DOMm)[isSupported ([VAR(DOMp)[feature]], [VAR(DOMp)[version]])]] では、 [CODE(DOMp)[feature]] 名の前に [CODE(char)[+]] を付けることができます。付けなければ直接型変換可能な界面の機能だけが考慮されますが、 付けた場合は [CODE(DOMm)[getFeature ([VAR(DOMp)[feature]], [VAR(DOMp)[version]])]] を使って得られるものも考慮に入れられます。 [8] 例: [PRE[ my EventTarget $evt; if ($node.[CODE(DOMm)[isSupported ([CODE(DOMp)["Events"]], [CODE(DOMp)["3.0"]])]]) { ## 直接型変換可能な場合 $evt = (EventTarget) $node; } else if ($node.[CODE(DOMm)[isSupported ([CODE(DOMp)["+Events"]], [CODE(DOMp)["3.0"]])]]) { ## 間接的に型変換可能な場合 $evt = (EventTarget) $node.[CODE(DOMm)[getFeature ([CODE(DOMp)["Events"]], [CODE(DOMp)["3.0"]])]]; } ]PRE] [[#comment]] * memo