feature

特徴 (DOM)

[34] 特徴 (feature) は、 DOM の機能群を表すものでした。 実装ごとに異なる DOM API 群を実装している環境下でアプリケーションがどの機能を使えるか判定するために使うことが想定されていました。

[35] 現実には、実装が対応する機能の単位は仕様書の編集の都合で分けられた特徴ではなく、 より細かなインターフェイスメソッドなどの単位でした。 しかも、実装ごとに異なる機能群に対応するという世界観は、 Webアプリケーション相互運用性の向上にむしろ有害でした。

[36] 結局特徴はほとんど有効に使われることなく廃止されました。

仕様書

構文

[3] 機能名では、大文字・小文字は区別されません DOM 1 FE hasFeature, DOM 1 SE hasFeature, DOM 2 Core hasFeature, DOM 3 Core 1.3.6

DOM 1 FE では、 HTMLXML の2つの値だけが認められていました DOM 1 FE hasFeature。 DOM 1 SE と DOM 2 は、 XML 1.0Name でなければならないとしています DOM 1 SE hasFeature, DOM 2 Core hasFeature。 DOM 3 にはこのような制限はないようです。

[9] >>3 だけしか規定がないようですが、 features で使い物になる値にしたければ、次の配慮が必要です。

版は、メソッドの引数として使われるところで version number とされていますから、数しか認められないと思われます。 DOM 1 では 1.0 だけ、 DOM 2 では 1.02.0 だけが指定できるとされていました DOM 1 FE hasFeature, DOM 1 SE hasFeature, DOM 2 Core hasFeature。 DOM 3 ではそのような制限はないようです。

[11] 衝突の虞を防ぐため、 DOM 仕様書以外で定義する機能の名前は固有にするべきです。 衝突を防ぐ方法として、以前は逆ドメイン名を使うべきとされていました DOM 1 SE hasFeature, DOM 2 Core hasFeature が、 後に DOM 仕様書の規定外に改められました DOM 2 Errata core-5, DOM 3 Core 1.3.6

SVG 1.0 の DOM は逆ドメイン名の機能名を使っていましたが、 SVG 1.1 では URI参照を使っています。 SVG の DOM 以外の機能名やプログラム言語・ライブラリ等で機能名を識別するために URI 参照が使われることが増えており、そのため逆ドメイン名より自由度が高い URI 参照を使えるようにと DOM の規定も変更されたのでしょう。

引数 features (DOM)

[29] DOM の幾つかのメソッドには、 機能を指定する引数 features があります。

この引数は、必要な機能の名前と版を含んだ文字列 (DOMString) です。

[30] 仕様書:

[31] XML 3.0 Traversal +Events 2.0XML モジュール (3.0 版)、 Traversal モジュール (版任意) に対応していて、 getFeature を使って Events モジュール (2.0 版) が利用可能を表します。

既知の値

[4]

機能名説明
Core2.0Core Module (Level 2) DOM 2 Core 1.2DOM 3 Core 1.4]]
Core3.0Core Module (Level 3) DOM 3 Core 1.4
DDE-T1.0DDE
HTML1.0HTML Module (Level 1) DOM 1 2.1
org.atsc.dom.coreDASE
org.atsc.dom.environmentDASE
org.atsc.dom.eventsDASE
org.atsc.dom.htmlDASE
org.atsc.dom.nativeDASE
org.atsc.dom.viewsDASE
org.w3c.dom.smilSMIL DOM の例 DOM 1 SE hasFeature
org.w3c.dom.svgSVG DOM の例 DOM 2 Core hasFeature
XML1.0XML Module (Level 1) DOM 1 1.3DOM 3 Core 1.5]]
XML2.0XML Module (Level 2) DOM 2 Core 1.3DOM 3 Core 1.5]]
XML3.0XML Module (Level 3) DOM 3 Core 1.5
XMLVersion1.0XML 1.0 DOM 3 Core xmlVersionDOM 3 Core 1.5]]
XMLVersion1.1XML 1.1 DOM 3 Core xmlVersion

[10]

他との関係

[5] 応用は、メソッド getDOMImplementation (features) やメソッド getDOMImplementationList (features) を使うと特定の機能を実装した DOM 実装を要求できます。

メソッド hasFeature (feature, version) やメソッド isSupported (feature, version) を使うと特定の機能が実装されているか調べることができます。 (版を問わない時は null や空文字列を指定できます。)

[6] DOM 2 モジュールまででは、既存の界面の拡張である界面はみな、 その拡張に対応する機能に対応していれば、束縛規定の型変換機構を使って利用することができました。 (例えば、 Events 機能に対応していれば Node の実現値から EventTarget (is‐a Node) の実現値を得ることができました。) DOM 3 では、特定の DOM を実装する部分部品と強調できるべきとされています (DOM//実装//混合を参照してください)。このため、メソッド getFeature (feature, version) が用意されており、特定の機能を実装した実現値を得ることができます。

[7] メソッド hasFeature (feature, version) やメソッド isSupported (feature, version) では、 feature 名の前に + を付けることができます。付けなければ直接型変換可能な界面の機能だけが考慮されますが、 付けた場合は getFeature (feature, version) を使って得られるものも考慮に入れられます。

歴史

W3C DOM

[1]DOM モジュールは1つ以上の機能 (feature) (名前と版) を定義します。

[38] Element Traversal Specification Errata ( ( 版)) http://www.w3.org/2008/12/REC-ElementTraversal-20081222-errata.html#S1

SVG

SVG 1.0

SVG 1.1

SVG 1.2

WHATWG

HTML5

[8] 型変換の例:

my EventTarget $evt;
if ($node.isSupported ("Events", "3.0")) {
  ## 直接型変換可能な場合
  $evt = (EventTarget) $node;
} else if ($node.isSupported ("+Events", "3.0")) {
  ## 間接的に型変換可能な場合
  $evt = (EventTarget) $node.getFeature ("Events", "3.0");
}

memo

[12] 実装によっては Core, 1.0 に true を返します。 (名無しさん)

[13] DOM features - WHATWG Wiki ( ( 版)) http://wiki.whatwg.org/wiki/DOM_features

[25] Web Applications 1.0 r7562 Update references to DOM spec so they call it its real name. (Boy am I late to _this_ party.) This update will also make <iframe seamless> do event retargetting once DOM is updated to support that (see bug 18780 - marked this bug 'editorial' since this change doesn't work without the DOM stuff). Also, a lot of clean-up to affected areas. ( ( 版)) http://html5.org/tools/web-apps-tracker?from=7561&to=7562

[26] Document Object Model for MathML ( ( 版)) http://www.w3.org/TR/2001/REC-MathML2-20010221/chapter8.html

[27] Delivery Context: Client Interfaces (DCCI) 1.0 ( ( 版)) http://www.w3.org/TR/2007/CR-DPF-20071221/#iddiv296456272

[28] DOM features - WHATWG Wiki ( ( 版)) http://wiki.whatwg.org/wiki/DOM_features

[32] Conditional processing edits ( (AmeliaBR著, )) https://github.com/w3c/svgwg/commit/94e639431a7ea12947acaf7a7bef65c0807bda30

[33] Rewrite conformance requirements to not use feature strings. Closes #84. ( (nikosandronikos著, )) https://github.com/w3c/svgwg/commit/527c1916d51ae23a1886536fb457d1ba5521eea3

[37] Deprecations and Removals in Chrome 59  |  Web  |  Google Developers () https://developers.google.com/web/updates/2017/04/chrome-59-deprecations