1 |
wakaba |
1.3 |
|
2 |
|
|
* 仕様書
|
3 |
|
|
|
4 |
|
|
[REFS[
|
5 |
wakaba |
1.4 |
- [20] [CITE@en-US[DOM Standard]] ([TIME[2012-11-23 14:12:13 +09:00]] 版) <http://dom.spec.whatwg.org/#dom-domimplementation-hasfeature>
|
6 |
wakaba |
1.5 |
- [22] [CITE[Scalable Vector Graphics (SVG) 2]] ([TIME[2012-11-29 19:07:20 +09:00]] 版) <https://svgwg.org/svg2-draft/single-page.html#chapter-feature>
|
7 |
|
|
- [23] [CITE[Scalable Vector Graphics (SVG) 2]] ([TIME[2012-11-29 19:07:20 +09:00]] 版) <https://svgwg.org/svg2-draft/single-page.html#svgdom-FeatureStrings>
|
8 |
|
|
- [24] [CITE[Scalable Vector Graphics (SVG) 2]] ([TIME[2012-11-29 19:07:20 +09:00]] 版) <https://svgwg.org/svg2-draft/single-page.html#struct-ConditionalProcessingRequiredFeaturesAttribute>
|
9 |
wakaba |
1.3 |
]REFS]
|
10 |
|
|
|
11 |
|
|
* 構文
|
12 |
|
|
|
13 |
|
|
[3] 機能名では、大文字・小文字は区別されません [SRC[DOM 1 [ABBR[FE] [First Edition]] [CODE(DOMm)[hasFeature]], DOM 1 [ABBR[SE] [Second Edition]] [CODE(DOMm)[hasFeature]], DOM 2 Core [CODE(DOMm)[hasFeature]], DOM 3 Core 1.3.6]]。
|
14 |
|
|
|
15 |
|
|
DOM 1 [ABBR[FE] [First Edition]] では、 [SAMP(DOM)[HTML]] と [SAMP(DOM)[XML]]
|
16 |
|
|
の2つの値だけが認められていました
|
17 |
|
|
[SRC[DOM 1 [ABBR[FE] [First Edition]] [CODE(DOMm)[hasFeature]]]]。
|
18 |
|
|
DOM 1 [ABBR[SE] [Second Edition]] と DOM 2 は、
|
19 |
|
|
[[XML 1.0]] の [CODE(ABNF)[[[Name]]]] でなければならないとしています
|
20 |
|
|
[SRC[DOM 1 [ABBR[SE] [Second Edition]] [CODE(DOMm)[hasFeature]], DOM 2 Core [CODE(DOMm)[hasFeature]]]]。
|
21 |
|
|
DOM 3 にはこのような制限はないようです。
|
22 |
|
|
|
23 |
|
|
[9]
|
24 |
|
|
>>3 だけしか規定がないようですが、
|
25 |
|
|
[CODE(DOMp)[[[features]]]] で使い物になる値にしたければ、次の配慮が必要です。
|
26 |
|
|
- 最初の1文字に [CODE(char)[+]] を使わない
|
27 |
|
|
- [CODE(char)[[[SP]]]] を使わない
|
28 |
|
|
- 名前は数字からはじめない。
|
29 |
|
|
版は数字からはじめる。
|
30 |
|
|
|
31 |
|
|
版は、メソッドの引数として使われるところで [Q[version number]]
|
32 |
|
|
とされていますから、数しか認められないと思われます。
|
33 |
|
|
DOM 1 では [SAMP(DOM)[1.0]] だけ、 DOM 2 では [SAMP(DOM)[1.0]] と
|
34 |
|
|
[SAMP(DOM)[2.0]] だけが指定できるとされていました
|
35 |
|
|
[SRC[DOM 1 [ABBR[FE] [First Edition]] [CODE(DOMm)[hasFeature]], DOM 1 [ABBR[SE] [Second Edition]] [CODE(DOMm)[hasFeature]], DOM 2 Core [CODE(DOMm)[hasFeature]]]]。
|
36 |
|
|
DOM 3 ではそのような制限はないようです。
|
37 |
|
|
|
38 |
|
|
[11]
|
39 |
|
|
衝突の虞を防ぐため、 DOM 仕様書以外で定義する機能の名前は固有にするべきです。
|
40 |
|
|
衝突を防ぐ方法として、以前は[[逆ドメイン名]]を使うべきとされていました
|
41 |
|
|
[SRC[DOM 1 [ABBR[SE] [Second Edition]] [CODE(DOMm)[hasFeature]], DOM 2 Core [CODE(DOMm)[hasFeature]]]] が、
|
42 |
|
|
後に DOM 仕様書の規定外に改められました [SRC[DOM 2 Errata core-5, DOM 3 Core 1.3.6]]。
|
43 |
|
|
|
44 |
|
|
[[SVG 1.0]] の DOM は逆ドメイン名の機能名を使っていましたが、
|
45 |
|
|
[[SVG 1.1]] では [[URI参照]]を使っています。 SVG の DOM
|
46 |
|
|
以外の機能名やプログラム言語・ライブラリ等で機能名を識別するために
|
47 |
|
|
URI 参照が使われることが増えており、そのため逆ドメイン名より自由度が高い
|
48 |
|
|
URI 参照を使えるようにと DOM の規定も変更されたのでしょう。
|
49 |
|
|
|
50 |
|
|
[[#comment]]
|
51 |
|
|
|
52 |
|
|
|
53 |
|
|
* 既知の値
|
54 |
|
|
|
55 |
|
|
[4]
|
56 |
|
|
,機能名 ,版 ,説明
|
57 |
|
|
,[CODE(DOM)[[[Core]]]] ,[CODE(DOM)[2.0]] ,Core Module (Level 2) [SRC[DOM 2 Core 1.2]] ,DOM 3 Core 1.4]]
|
58 |
|
|
,[CODE(DOM)[Core]] ,[CODE(DOM)[3.0]] ,Core Module (Level 3) [SRC[DOM 3 Core 1.4]]
|
59 |
|
|
,[CODE(DOM)[[[DDE-T]]]] ,[CODE(DOM)[1.0]] ,[SRC[DDE]]
|
60 |
|
|
,[CODE(DOM)[[[HTML]]]] ,[CODE(DOM)[1.0]] ,HTML Module (Level 1) [SRC[DOM 1 2.1]]
|
61 |
|
|
,[CODE(DOM)[[[org.atsc.dom.core]]]] , , ,[SRC[DASE]]
|
62 |
|
|
,[CODE(DOM)[[[org.atsc.dom.environment]]]] , , ,[SRC[DASE]]
|
63 |
|
|
,[CODE(DOM)[[[org.atsc.dom.events]]]] , , ,[SRC[DASE]]
|
64 |
|
|
,[CODE(DOM)[[[org.atsc.dom.html]]]] , , ,[SRC[DASE]]
|
65 |
|
|
,[CODE(DOM)[[[org.atsc.dom.native]]]] , , ,[SRC[DASE]]
|
66 |
|
|
,[CODE(DOM)[[[org.atsc.dom.views]]]] , , ,[SRC[DASE]]
|
67 |
|
|
,[CODE(DOM)[[[org.w3c.dom.smil]]]] , ,SMIL DOM の例 [SRC[DOM 1 [ABBR[SE] [Second Edition]] [CODE(DOMm)[hasFeature]]]]
|
68 |
|
|
,[CODE(DOM)[[[org.w3c.dom.svg]]]] , ,SVG DOM の例 [SRC[DOM 2 Core [CODE(DOMm)[hasFeature]]]]
|
69 |
|
|
,[CODE(DOM)[[[XML]]]] ,[CODE(DOM)[1.0]] ,XML Module (Level 1) [SRC[DOM 1 1.3]] ,DOM 3 Core 1.5]]
|
70 |
|
|
,[CODE(DOM)[XML]] ,[CODE(DOM)[2.0]] ,XML Module (Level 2) [SRC[DOM 2 Core 1.3]] ,DOM 3 Core 1.5]]
|
71 |
|
|
,[CODE(DOM)[XML]] ,[CODE(DOM)[3.0]] ,XML Module (Level 3) [SRC[DOM 3 Core 1.5]]
|
72 |
|
|
,[CODE(DOM)[[[XMLVersion]]]] ,[CODE(DOM)[1.0]] ,[[XML 1.0]] [SRC[DOM 3 Core [CODE(DOMa)[xmlVersion]]]] ,DOM 3 Core 1.5]]
|
73 |
|
|
,[CODE(DOM)[XMLVersion]] ,[CODE(DOM)[1.1]] ,[[XML 1.1]] [SRC[DOM 3 Core [CODE(DOMa)[xmlVersion]]]]
|
74 |
|
|
|
75 |
|
|
[10]
|
76 |
|
|
- [[DOM 1]]
|
77 |
|
|
-- [ABBR[SE] [Second Edition]] Compliance
|
78 |
|
|
<IW:DOM1:"introduction.html#ID-Compliance">
|
79 |
|
|
-- 1.3. Extended Interfaces
|
80 |
|
|
<IW:DOM1:"level-one-core.html#ID-E067D597">
|
81 |
|
|
-- 2.1. Introduction
|
82 |
|
|
<IW:DOM1:"level-one-html.html#ID-1176245063">
|
83 |
|
|
- [[DOM 2]]
|
84 |
|
|
-- Core Conformance
|
85 |
|
|
<IW:DOM2:"Core/introduction.html#ID-Conformance">
|
86 |
|
|
-- Core 1.2. Fundamental Interfaces
|
87 |
|
|
<IW:DOM2:"Core/core.html#ID-BBACDC08">
|
88 |
|
|
-- Core 1.3. Extended Interfaces
|
89 |
|
|
<IW:DOM2:"Core/core.html#ID-E067D597">
|
90 |
|
|
- [[DOM 3]]
|
91 |
|
|
-- Core Conformance
|
92 |
|
|
<IW:DOM3:"Core/introduction.html#ID-Conformance">
|
93 |
|
|
-- Core 1.4 Fundamental Interfaces: Core Module
|
94 |
|
|
<IW:DOM3:"Core/core.html#ID-BBACDC08">
|
95 |
|
|
-- Core [CODE(DOMa)[xmlVersion]]
|
96 |
|
|
<IW:DOM3:"Core/core.html#Document3-version">
|
97 |
|
|
-- Core 1.5 Extended Interfaces: XML Module
|
98 |
|
|
<IW:DOM3:"Core/core.html#ID-E067D597">
|
99 |
|
|
- [DASE] [CITE[DTV A S E L 1 (DASE-1) P 2: D A E ATSC Standard]]
|
100 |
|
|
<http://www.atsc.org/standards/a_100_2.pdf>
|
101 |
|
|
-- [CSECTION[5.3.1.2.1.4.1 DOMImplementation::hasFeature]]
|
102 |
|
|
- [DDE] [CITE[Declarative Data Essence -- Transitional]] <http://www.smpte.org/standards/pdf/s397m.pdf>
|
103 |
|
|
-- [CSECTION[8.1 DOM and Host Object Basis]]
|
104 |
|
|
|
105 |
|
|
[[#comment]]
|
106 |
|
|
|
107 |
|
|
|
108 |
|
|
* 他との関係
|
109 |
|
|
|
110 |
|
|
[5] 応用は、メソッド
|
111 |
|
|
[CODE(DOMm)[[[getDOMImplementation]] ([VAR(DOMp)[features]])]] やメソッド
|
112 |
|
|
[CODE(DOMm)[[[getDOMImplementationList]] ([VAR(DOMp)[features]])]]
|
113 |
|
|
を使うと特定の機能を実装した DOM [[実装]]を要求できます。
|
114 |
|
|
|
115 |
|
|
メソッド [CODE(DOMm)[[[hasFeature]] ([VAR(DOMp)[feature]], [VAR(DOMp)[version]])]]
|
116 |
|
|
やメソッド [CODE(DOMm)[[[isSupported]] ([VAR(DOMp)[feature]], [VAR(DOMp)[version]])]]
|
117 |
|
|
を使うと特定の機能が実装されているか調べることができます。
|
118 |
|
|
(版を問わない時は [CODE(DOM)[[[null]]]] や空文字列を指定できます。)
|
119 |
|
|
|
120 |
|
|
[6]
|
121 |
|
|
DOM 2 モジュールまででは、既存の界面の拡張である界面はみな、
|
122 |
|
|
その拡張に対応する機能に対応していれば、束縛規定の型変換機構を使って利用することができました。
|
123 |
|
|
(例えば、 [CODE(DOM)[[[Events]]]] 機能に対応していれば
|
124 |
|
|
[CODE(DOMi)[[[Node]]]] の実現値から [CODE(DOMi)[[[EventTarget]]]]
|
125 |
|
|
(is‐a [CODE(DOMi)[Node]]) の実現値を得ることができました。)
|
126 |
|
|
DOM 3 では、特定の DOM を実装する部分部品と強調できるべきとされています
|
127 |
|
|
([[DOM//実装//混合]]を参照してください)。このため、メソッド
|
128 |
|
|
[CODE(DOMm)[[[getFeature]] ([VAR(DOMp)[feature]], [VAR(DOMp)[version]])]]
|
129 |
|
|
が用意されており、特定の機能を実装した実現値を得ることができます。
|
130 |
|
|
|
131 |
|
|
[7] メソッド
|
132 |
|
|
[CODE(DOMm)[hasFeature ([VAR(DOMp)[feature]], [VAR(DOMp)[version]])]]
|
133 |
|
|
やメソッド
|
134 |
|
|
[CODE(DOMm)[isSupported ([VAR(DOMp)[feature]], [VAR(DOMp)[version]])]]
|
135 |
|
|
では、 [CODE(DOMp)[feature]] 名の前に [CODE(char)[+]]
|
136 |
|
|
を付けることができます。付けなければ直接型変換可能な界面の機能だけが考慮されますが、
|
137 |
|
|
付けた場合は [CODE(DOMm)[getFeature ([VAR(DOMp)[feature]], [VAR(DOMp)[version]])]]
|
138 |
|
|
を使って得られるものも考慮に入れられます。
|
139 |
|
|
|
140 |
|
|
* 歴史
|
141 |
|
|
|
142 |
|
|
** W3C DOM
|
143 |
|
|
|
144 |
|
|
[1] 各 [[DOM]] モジュールは1つ以上の[DFN[[RUBYB[機能] [feature]]]]
|
145 |
|
|
(名前と版) を定義します。
|
146 |
|
|
|
147 |
|
|
[REFS[
|
148 |
|
|
- [2] [[DOM 1]]
|
149 |
|
|
-- Core [CODE(DOMm)[hasFeature]]
|
150 |
|
|
<IW:DOM1:"level-one-core.html#ID-5CED94D7">
|
151 |
|
|
-- Errata Section 1.2 Interface DOMImplementation
|
152 |
|
|
<http://www.w3.org/DOM/updates/REC-DOM-Level-1-19981001-errata.html>
|
153 |
|
|
- [[DOM 2]]
|
154 |
|
|
-- Core [CODE(DOMm)[hasFeature]]
|
155 |
|
|
<IW:DOM2:"Core/core.html#ID-5CED94D7">
|
156 |
|
|
-- Errata core-5. 2001-01-17. [error]. DOMImplementation.hasFeature
|
157 |
|
|
<http://www.w3.org/2000/11/DOM-Level-2-errata#core-5>
|
158 |
|
|
-- Errata core-14. 2001-07-11. [clarification]. DOMImplementation.hasFeature
|
159 |
|
|
<http://www.w3.org/2000/11/DOM-Level-2-errata#core-14>
|
160 |
|
|
- [[DOM 3]]
|
161 |
|
|
-- Core 1.3.6 DOM Features
|
162 |
|
|
<IW:DOM3:"Core/core.html#DOMFeatures">
|
163 |
|
|
-- Core [CODE(DOMm)[getDOMImplementation]]
|
164 |
|
|
<IW:DOM3:"Core/core.html#ID-getDOMImpl">
|
165 |
|
|
-- Core [CODE(DOMm)[getDOMImplementationList]]
|
166 |
|
|
<IW:DOM3:"Core/core.html#ID-getDOMImpls">
|
167 |
|
|
-- Core [CODE(DOMm)[getFeature]]
|
168 |
|
|
<IW:DOM3:"Core/core.html#DOMImplementation3-getFeature">
|
169 |
|
|
-- Core [CODE(DOMm)[hasFeature]]
|
170 |
|
|
<IW:DOM3:"Core/core.html#ID-5CED94D7">
|
171 |
|
|
-- Core [CODE(DOMm)[getFeature]]
|
172 |
|
|
<IW:DOM3:"Core/core.html#Node3-getFeature">
|
173 |
|
|
]REFS]
|
174 |
|
|
|
175 |
|
|
** SVG
|
176 |
|
|
|
177 |
wakaba |
1.5 |
[REFS[
|
178 |
|
|
- [15] [CITE[SVG Document Object Model (DOM) – SVG 1.1 (Second Edition)]] ([TIME[2011-08-10 03:35:27 +09:00]] 版) <http://www.w3.org/TR/SVG/svgdom.html#FeatureStrings>
|
179 |
|
|
- [14] [CITE[Feature Strings – SVG 1.1 (Second Edition)]] ([TIME[2011-08-10 03:35:27 +09:00]] 版) <http://www.w3.org/TR/SVG/feature.html>
|
180 |
|
|
]REFS]
|
181 |
|
|
|
182 |
wakaba |
1.3 |
*** SVG 1.0
|
183 |
|
|
|
184 |
|
|
[REFS[
|
185 |
|
|
- [17] [CITE[Document Structure - SVG 1.0 - 20010904]] ([TIME[2001-09-01 01:37:36 +09:00]] 版) <http://www.w3.org/TR/2001/REC-SVG-20010904/struct.html#RequiredFeaturesAttribute>
|
186 |
|
|
- [16] [CITE[SVG Document Object Model (DOM) - SVG 1.0 - 20010904]] ([TIME[2001-09-01 01:37:36 +09:00]] 版) <http://www.w3.org/TR/2001/REC-SVG-20010904/svgdom.html#FeatureStrings>
|
187 |
|
|
]REFS]
|
188 |
|
|
|
189 |
|
|
*** SVG 1.1
|
190 |
|
|
|
191 |
|
|
@@
|
192 |
|
|
|
193 |
|
|
*** SVG 1.2
|
194 |
|
|
|
195 |
|
|
[REFS[
|
196 |
|
|
- [18] [CITE[Feature Strings – SVG Tiny 1.2]] ([TIME[2008-12-19 17:31:29 +09:00]] 版) <http://www.w3.org/TR/SVGTiny12/feature.html>
|
197 |
|
|
- [19] [CITE[Document Structure – SVG Tiny 1.2]] ([TIME[2008-12-19 17:31:29 +09:00]] 版) <http://www.w3.org/TR/SVGTiny12/struct.html#RequiredFeaturesAttribute>
|
198 |
|
|
]REFS]
|
199 |
|
|
|
200 |
wakaba |
1.4 |
** WHATWG
|
201 |
|
|
|
202 |
|
|
@@ HTML5
|
203 |
|
|
|
204 |
|
|
[REFS[
|
205 |
|
|
- [21] [CITE@en-US[DOM Standard]] ([TIME[2012-11-23 14:12:13 +09:00]] 版) <http://dom.spec.whatwg.org/#dom-domimplementation-hasfeature>
|
206 |
|
|
]REFS]
|
207 |
|
|
|
208 |
wakaba |
1.3 |
* 例
|
209 |
|
|
|
210 |
|
|
[8] 型変換の例:
|
211 |
|
|
[PRE[
|
212 |
|
|
my EventTarget $evt;
|
213 |
|
|
if ($node.[CODE(DOMm)[isSupported ([CODE(DOMp)["Events"]], [CODE(DOMp)["3.0"]])]]) {
|
214 |
|
|
## 直接型変換可能な場合
|
215 |
|
|
$evt = (EventTarget) $node;
|
216 |
|
|
} else if ($node.[CODE(DOMm)[isSupported ([CODE(DOMp)["+Events"]], [CODE(DOMp)["3.0"]])]]) {
|
217 |
|
|
## 間接的に型変換可能な場合
|
218 |
|
|
$evt = (EventTarget) $node.[CODE(DOMm)[getFeature ([CODE(DOMp)["Events"]], [CODE(DOMp)["3.0"]])]];
|
219 |
|
|
}
|
220 |
|
|
]PRE]
|
221 |
|
|
|
222 |
|
|
[[#comment]]
|
223 |
|
|
|
224 |
|
|
|
225 |
|
|
* memo
|
226 |
|
|
|
227 |
|
|
[12]
|
228 |
|
|
実装によっては Core, 1.0 に true を返します。
|
229 |
|
|
([[名無しさん]])
|
230 |
|
|
|
231 |
|
|
|
232 |
|
|
|
233 |
|
|
[13] [CITE@en[DOM features - WHATWG Wiki]]
|
234 |
|
|
( ([TIME[2012-04-07 02:07:28 +09:00]] 版))
|
235 |
wakaba |
1.6 |
<http://wiki.whatwg.org/wiki/DOM_features> |
236 |
|
|
|
237 |
|
|
[25] [CITE@en[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.]] |
238 |
|
|
( ([TIME[2012-12-05 08:55:00 +09:00]] 版)) |
239 |
|
|
<http://html5.org/tools/web-apps-tracker?from=7561&to=7562> |