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