[34] 特徴は、 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 では、 HTML と XML
の2つの値だけが認められていました
DOM 1 FE hasFeature
。
DOM 1 SE と DOM 2 は、
XML 1.0 の Name
でなければならないとしています
DOM 1 SE hasFeature
, DOM 2 Core hasFeature
。
DOM 3 にはこのような制限はないようです。
[9]
>>3 だけしか規定がないようですが、
features
で使い物になる値にしたければ、次の配慮が必要です。
版は、メソッドの引数として使われるところで version number
とされていますから、数しか認められないと思われます。
DOM 1 では 1.0 だけ、 DOM 2 では 1.0 と
2.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 の規定も変更されたのでしょう。
[29] DOM の幾つかのメソッドには、
機能を指定する引数 features
があります。
この引数は、必要な機能の名前と版を含んだ文字列 (DOMString
)
です。
features
:= feature *(space feature)
feature := ["+"] feature-name [space feature-version]
space
は一つ (a space)。
+
が付いている場合はその機能が
Node
.getFeature
()
および DOMImplementation
.getFeature
()
から access 可能でなければなりません。feature-name
と feature-version
の値域は規定されていません。どちらも space
は含まないし、先頭に +
が来ないし、
feature-version
は数字から始まるが feature-name
は数字から始まらない、くらいの仮定がないと困ります。[30] 仕様書:
[31] XML 3.0 Traversal +Events 2.0
は XML モジュール (3.0 版)、 Traversal モジュール (版任意) に対応していて、
を表します。getFeature
を使って Events モジュール (2.0 版) が利用可能
機能名 | 版 | 説明 | |
Core | 2.0 | Core Module (Level 2) DOM 2 Core 1.2 | DOM 3 Core 1.4]] |
Core | 3.0 | Core Module (Level 3) DOM 3 Core 1.4 | |
DDE-T | 1.0 | DDE | |
HTML | 1.0 | HTML Module (Level 1) DOM 1 2.1 | |
org.atsc.dom.core | DASE | ||
org.atsc.dom.environment | DASE | ||
org.atsc.dom.events | DASE | ||
org.atsc.dom.html | DASE | ||
org.atsc.dom.native | DASE | ||
org.atsc.dom.views | DASE | ||
org.w3c.dom.smil | SMIL DOM の例 DOM 1 SE hasFeature | ||
org.w3c.dom.svg | SVG DOM の例 DOM 2 Core hasFeature | ||
XML | 1.0 | XML Module (Level 1) DOM 1 1.3 | DOM 3 Core 1.5]] |
XML | 2.0 | XML Module (Level 2) DOM 2 Core 1.3 | DOM 3 Core 1.5]] |
XML | 3.0 | XML Module (Level 3) DOM 3 Core 1.5 | |
XMLVersion | 1.0 | XML 1.0 DOM 3 Core xmlVersion | DOM 3 Core 1.5]] |
XMLVersion | 1.1 | XML 1.1 DOM 3 Core xmlVersion |
xmlVersion
IW:DOM3:"Core/core.html#Document3-version"[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)
を使って得られるものも考慮に入れられます。
[1] 各 DOM モジュールは1つ以上の機能 (名前と版) を定義します。
hasFeature
IW:DOM1:"level-one-core.html#ID-5CED94D7"hasFeature
IW:DOM2:"Core/core.html#ID-5CED94D7"getDOMImplementation
IW:DOM3:"Core/core.html#ID-getDOMImpl"getDOMImplementationList
IW:DOM3:"Core/core.html#ID-getDOMImpls"getFeature
IW:DOM3:"Core/core.html#DOMImplementation3-getFeature"hasFeature
IW:DOM3:"Core/core.html#ID-5CED94D7"getFeature
IW:DOM3:"Core/core.html#Node3-getFeature"[38] Element Traversal Specification Errata ( ( 版)) http://www.w3.org/2008/12/REC-ElementTraversal-20081222-errata.html#S1
[8] 型変換の例:
my EventTarget $evt; if ($node.isSupported (
) { ## 直接型変換可能な場合 $evt = (EventTarget) $node; } else if ($node."Events"
,"3.0"
)isSupported (
) { ## 間接的に型変換可能な場合 $evt = (EventTarget) $node."+Events"
,"3.0"
)getFeature (
; }"Events"
,"3.0"
)
[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