-
Notifications
You must be signed in to change notification settings - Fork 4
/
786.txt
438 lines (333 loc) · 27.1 KB
/
786.txt
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
168
169
170
171
172
173
174
175
176
177
178
179
180
181
182
183
184
185
186
187
188
189
190
191
192
193
194
195
196
197
198
199
200
201
202
203
204
205
206
207
208
209
210
211
212
213
214
215
216
217
218
219
220
221
222
223
224
225
226
227
228
229
230
231
232
233
234
235
236
237
238
239
240
241
242
243
244
245
246
247
248
249
250
251
252
253
254
255
256
257
258
259
260
261
262
263
264
265
266
267
268
269
270
271
272
273
274
275
276
277
278
279
280
281
282
283
284
285
286
287
288
289
290
291
292
293
294
295
296
297
298
299
300
301
302
303
304
305
306
307
308
309
310
311
312
313
314
315
316
317
318
319
320
321
322
323
324
325
326
327
328
329
330
331
332
333
334
335
336
337
338
339
340
341
342
343
344
345
346
347
348
349
350
351
352
353
354
355
356
357
358
359
360
361
362
363
364
365
366
367
368
369
370
371
372
373
374
375
376
377
378
379
380
381
382
383
384
385
386
387
388
389
390
391
392
393
394
395
396
397
398
399
400
401
402
403
404
405
406
407
408
409
410
411
412
413
414
415
416
417
418
419
420
421
422
423
424
425
426
427
428
429
430
431
432
433
434
435
436
437
438
[35] [[CSS]] の [DFN[[CODE(CSS)@en[[[@namespace]]]]]] [[@規則]]は、[[名前空間接頭辞]]を宣言すると共に、
[[名前空間URL]]と関連付けます [SRC[>>30 3.]]。
* 仕様書
[REFS[
- [30] [CITE@en[CSS Namespaces Module]] ([TIME[2013-08-09 23:50:23 +09:00]] 版) <http://dev.w3.org/csswg/css-namespaces/>
]REFS]
* 意味
[32] [[CSS名前空間]]は、 [[XML名前空間]]を使った[[要素]]や[[属性]]を表すために使うことができます。
しかし、 [[XML名前空間]]以外の[[名前空間]]に対して適用することもできます [SRC[>>30 2.1.]]。
[36] [CODE(CSS)[[[@namespace]]]] で[[宣言]]した[[名前空間接頭辞]]は、
[[CSS修飾名]]で使うことができるようになります [SRC[>>30 3., 3.3]]。
[39] [[名前空間接頭辞]]自体に意味はなく、[[展開名]] ([[名前空間URL]]と[[局所名]]の組)
に意味があります [SRC[>>30 3.]]。
[EG[
[40] ですから、 [[XML文書]]
[PRE(XML code)[
'''<'''qml:elem xmlns:qml="http://example.com/q-markup"></qml:elem'''>'''
]PRE]
... と [[CSS]] [[スタイル・シート]]
[PRE(CSS code)[
@namespace Q "http://example.com/q-markup";
@namespace lq "http://example.com/q-markup";
]PRE]
... があるとき、[[型選択子]] [CODE(CSS)[Q|elem]] や [CODE(CSS)[lq|elem]] はいずれも
[WEAK[([[名前空間接頭辞]]こそ異なりますが、[[名前空間URL]]と[[局所名]]が同じなので)]]
先の[[要素]]と一致します。[[型選択子]] [CODE(CSS)[qml|elem]] は、 [[CSS]]
において[[名前空間接頭辞]]が[[宣言]]されていないので、[[非妥当]]となります。 [SRC[>>30 3.]]
]EG]
[57] [[名前空間接頭辞]]を省略すると、[[既定名前空間]]の[[名前空間URL]]を宣言していることになります
[SRC[>>30 3.3.]]。
* 構文
[50] [CODE(CSS)@en[[[@namespace]]]] [[@規則]]の構文は次のように定義されています [SRC[>>30 3.1.]]。
- [41] [CODE(CSS)@en[@namespace]] : [[ASCII大文字・小文字不区別]]
- [42] [[S]] 零文字以上
- [43] 省略可能:
-- [44] [[IDENT]] : [[名前空間接頭辞]]
-- [45] [[S]] 零文字以上
- [46] [[STRING]] または [[URI]] : [[名前空間URL]]
- [47] [[S]] 零文字以上
- [48] [CODE(CSS)[[[;]]]]
- [49] [[S]] 零文字以上
[51] [CODE(CSS)@en[[[@namespcae]]]] は、 [CODE(CSS)@en[[[@charset]]]] や [CODE(CSS)@en[[[@import]]]] よりも後、
[[無視]]されない他の[[@規則]]や[[規則集合]]よりも前になければ[['''なりません''']] [SRC[>>30 3.1.]]。
[52] 構文的に[[非妥当]]な [CODE(CSS)@en[[[@namespace]]]] は[[無視]]し[['''なければなりません''']]
[SRC[>>30 3.1.]]。[[非妥当]]な [CODE(CSS)@en[[[@namespace]]]] を含む[[スタイル・シート]]は[[妥当なスタイル・シート]]ではありません
[SRC[>>30 3.1.]]。
;; [66] 構文的に非妥当な宣言には、 [CODE(CSS)@en[[[@namespace]]]] の後が前記の構文に沿ってないものや、
他の[[@規則]]よりも後にある [CODE(CSS)@en[[[@namespace]]]] や他の[[規則集合]]や[[@規則]]の中に含まれている
[CODE(CSS)@en[[[@namespace]]]] が該当するのでしょう。
[65] 同じ[[名前空間接頭辞]]を複数回宣言したり、[[既定名前空間]]を複数回宣言したりするのは不適合です。
[[利用者エージェント]]は複数回宣言されている場合には最後の[[宣言]]だけを使わなければ[['''なりません''']]。
[SRC[>>30 3.3.]]
** 構文解析
[10]
[[空白]]の扱いのテスト用:
[REFS[
- <http://suika.fam.cx/gate/2007/cssom/viewer?c=%40namespace%20'http%3A%2F%2Ffail.test%2F'%3B%0A%40namespace%2F**%2F'http%3A%2F%2Fwww.w3.org%2F1999%2Fxhtml'%3B%0A*%7Cp%20%7B%0A%20%20color%3A%20red%3B%0A%7D%0Ap%20%7B%0A%20%20color%3A%20green%3B%0A%7D%0A;h=%3Cp%3EThis%20paragraph%20should%20be%20green.;p=n;x=style-element>
- <http://suika.fam.cx/gate/2007/cssom/viewer?c=%40namespace%20'http%3A%2F%2Ffail.test%2F'%3B%0A%40namespace%2F**%2Furl(http%3A%2F%2Fwww.w3.org%2F1999%2Fxhtml)%3B%0A*%7Cp%20%7B%0A%20%20color%3A%20red%3B%0A%7D%0Ap%20%7B%0A%20%20color%3A%20green%3B%0A%7D%0A;h=%3Cp%3EThis%20paragraph%20should%20be%20green.;p=n;x=style-element>
- <http://suika.fam.cx/gate/2007/cssom/viewer?c=%40namespace%20'http%3A%2F%2Ffail.test%2F'%3B%0A%40namespace%2F**%2Furl(%22http%3A%2F%2Fwww.w3.org%2F1999%2Fxhtml%22)%3B%0A*%7Cp%20%7B%0A%20%20color%3A%20red%3B%0A%7D%0Ap%20%7B%0A%20%20color%3A%20green%3B%0A%7D%0A;h=%3Cp%3EThis%20paragraph%20should%20be%20green.;p=n;x=style-element>
- <http://suika.fam.cx/gate/2007/cssom/viewer?c=%40namespace%20'http%3A%2F%2Ffail.test%2F'%3B%0A%40namespace%20%22http%3A%2F%2Fwww.w3.org%2F1999%2Fxhtml%22%2F**%2F%3B%0A*%7Cp%20%7B%0A%20%20color%3A%20red%3B%0A%7D%0Ap%20%7B%0A%20%20color%3A%20green%3B%0A%7D%0A;h=%3Cp%3EThis%20paragraph%20should%20be%20green.;p=n;x=style-element>
- <http://suika.fam.cx/gate/2007/cssom/viewer?c=%40namespace%20'http%3A%2F%2Ffail.test%2F'%3B%0A%40namespace%22http%3A%2F%2Fwww.w3.org%2F1999%2Fxhtml%22%3B%0A*%7Cp%20%7B%0A%20%20color%3A%20red%3B%0A%7D%0Ap%20%7B%0A%20%20color%3A%20green%3B%0A%7D%0A;h=%3Cp%3EThis%20paragraph%20should%20be%20green.;p=n;x=style-element>
- <http://suika.fam.cx/gate/2007/cssom/viewer?c=%40namespace%20x%20'http%3A%2F%2Ffail.test%2F'%3B%0A%40namespace%20x%20%22http%3A%2F%2Fwww.w3.org%2F1999%2Fxhtml%22%3B%0Ap%20%7B%0A%20%20color%3A%20red%3B%0A%7D%0Ax%7Cp%20%7B%0A%20%20color%3A%20green%3B%0A%7D%0A;h=%3Cp%3EThis%20paragraph%20should%20be%20green.;p=n;x=style-element>
- <http://suika.fam.cx/gate/2007/cssom/viewer?c=%40namespace%20x%20'http%3A%2F%2Ffail.test%2F'%3B%0A%40namespace%20x%22http%3A%2F%2Fwww.w3.org%2F1999%2Fxhtml%22%3B%0Ap%20%7B%0A%20%20color%3A%20red%3B%0A%7D%0Ax%7Cp%20%7B%0A%20%20color%3A%20green%3B%0A%7D%0A;h=%3Cp%3EThis%20paragraph%20should%20be%20green.;p=n;x=style-element>
- <http://suika.fam.cx/gate/2007/cssom/viewer?c=%40namespace%20x%20'http%3A%2F%2Ffail.test%2F'%3B%0A%40namespace%20x'http%3A%2F%2Fwww.w3.org%2F1999%2Fxhtml'%3B%0Ap%20%7B%0A%20%20color%3A%20red%3B%0A%7D%0Ax%7Cp%20%7B%0A%20%20color%3A%20green%3B%0A%7D%0A;h=%3Cp%3EThis%20paragraph%20should%20be%20green.;p=n;x=style-element>
- <http://suika.fam.cx/gate/2007/cssom/viewer?c=%40namespace%20x%20'http%3A%2F%2Ffail.test%2F'%3B%0A%40namespace%20x%2F**%2F'http%3A%2F%2Fwww.w3.org%2F1999%2Fxhtml'%3B%0Ap%20%7B%0A%20%20color%3A%20red%3B%0A%7D%0Ax%7Cp%20%7B%0A%20%20color%3A%20green%3B%0A%7D%0A;h=%3Cp%3EThis%20paragraph%20should%20be%20green.;p=n;x=style-element>
- <http://suika.fam.cx/gate/2007/cssom/viewer?c=%40namespace%20x%20'http%3A%2F%2Ffail.test%2F'%3B%0A%40namespace%2F**%2Fx%20'http%3A%2F%2Fwww.w3.org%2F1999%2Fxhtml'%3B%0Ap%20%7B%0A%20%20color%3A%20red%3B%0A%7D%0Ax%7Cp%20%7B%0A%20%20color%3A%20green%3B%0A%7D%0A;h=%3Cp%3EThis%20paragraph%20should%20be%20green.;p=n;x=style-element>
]REFS]
[13]
[[規則集合]]の後の [CODE(CSS)@en[@[[namespace]]]]
は[[無視]]しなければなりません。
[14]
>>13 のテスト用:
- <http://suika.fam.cx/gate/2007/cssom/viewer?c=%40namespace%20'http%3A%2F%2Fwww.w3.org%2F1999%2Fxhtml'%3B%0Ap%20%7B%0A%20%20color%3A%20red%3B%0A%7D%0A%40namespace%20'http%3A%2F%2Finvalid.test%2F'%3B%0Ap%20%7B%0A%20%20color%3A%20green%3B%0A%7D%0A;h=%3Cp%3EThis%20paragraph%20should%20be%20green.;p=n;x=style-element>
-
<http://suika.fam.cx/gate/2007/cssom/viewer?c=%40namespace%20x%20'http%3A%2F%2Fwww.w3.org%2F1999%2Fxhtml'%3B%0Ax%7Cp%20%7B%0A%20%20color%3A%20red%3B%0A%7D%0A%40namespace%20x%20'http%3A%2F%2Finvalid.test%2F'%3B%0Ax%7Cp%20%7B%0A%20%20color%3A%20green%3B%0A%7D%0A;h=%3Cp%3EThis%20paragraph%20should%20be%20green.;p=n;x=style-element>
[15]
>>13-14 [[Firefox]] 2 は正しいですが、 [[Opera]] 9
は[[無視]]しないみたいです。
* 適用範囲
[55] [CODE(CSS)@en[[[@namespace]]]] で宣言された[[名前空間接頭辞]]の[[適用範囲]]は当該[[スタイル・シート]]です。
[CODE(CSS)@en[[[@import]]]] などによって他の[[スタイル・シート]]に波及することはありません。
[SRC[>>30 3.2]]
;; [56] 明記されていませんが、[[既定名前空間]]も同じだと思われます。
* 名前空間接頭辞
[58] [[名前空間接頭辞]]は[[大文字・小文字を区別します]] [SRC[>>30 3.3.]]。
;; [59] 以前は大文字・小文字を区別しないとされていました。
[16]
[[大文字]]・[[小文字]]の区別のテスト用:
[REFS[
- [[ASCII]] [[大文字]]・[[小文字]]を区別しない
<http://suika.fam.cx/gate/2007/cssom/viewer?c=%40namespace%20x%20'http%3A%2F%2Foverridden.test%2F'%3B%0A%40namespace%20X%20'http%3A%2F%2Fwww.w3.org%2F1999%2Fxhtml'%3B%0Ap%20%7B%0A%20%20color%3A%20red%3B%0A%7D%0Ax%7Cp%20%7B%0A%20%20color%3A%20green%3B%0A%7D%0A;h=%3Cp%3EThis%20paragraph%20should%20be%20green.;p=n;x=style-element>
- [[Unicode]] [[大文字]]・[[小文字]]を区別しない (その1)
<http://suika.fam.cx/gate/2007/cssom/viewer?c=%40namespace%20%5Ce1%20'http%3A%2F%2Fwww.w3.org%2F1999%2Fxhtml'%3B%0Ap%20%7B%0A%20%20color%3A%20red%3B%0A%7D%0A%5Cc1%7Cp%20%7B%0A%20%20color%3A%20green%3B%0A%7D%0A;h=%3Cp%3EThis%20paragraph%20should%20be%20green.;p=n;x=style-element>
- [[Unicode]] [[大文字]]・[[小文字]]を区別しない (その2)
<http://suika.fam.cx/gate/2007/cssom/viewer?c=%40namespace%20%5Cc1%20'http%3A%2F%2Fwww.w3.org%2F1999%2Fxhtml'%3B%0Ap%20%7B%0A%20%20color%3A%20red%3B%0A%7D%0A%5Ce1%7Cp%20%7B%0A%20%20color%3A%20green%3B%0A%7D%0A;h=%3Cp%3EThis%20paragraph%20should%20be%20green.;p=n;x=style-element>
- [CODE(charname)@en[[[LATIN CAPITAL LETTER I WITH DOT ABOVE]]]]
<http://suika.fam.cx/gate/2007/cssom/viewer?c=%40namespace%20%5C130%20'http%3A%2F%2Fwww.w3.org%2F1999%2Fxhtml'%3B%0Ap%20%7B%0A%20%20color%3A%20red%3B%0A%7D%0Ai%7Cp%20%7B%0A%20%20color%3A%20green%3B%0A%7D%0A;h=%3Cp%3EThis%20paragraph%20should%20be%20green.;p=n;x=style-element>
- [CODE(charname)@en[[[LATIN SMALL LETTER DOTLESS I]]]]
<http://suika.fam.cx/gate/2007/cssom/viewer?c=%40namespace%20%5C131%20'http%3A%2F%2Fwww.w3.org%2F1999%2Fxhtml'%3B%0Ap%20%7B%0A%20%20color%3A%20green%3B%0A%7D%0Ai%7Cp%20%7B%0A%20%20color%3A%20red%3B%0A%7D%0A;h=%3Cp%3EThis%20paragraph%20should%20be%20green.;p=n;x=style-element>
]REFS]
[17]
>>16 [[Firefox]] 2、[[Opera]] 9 とも、
[[大文字]]・[[小文字]]の扱いは正しいです。
[[Firefox]] 2 は [CODE(CSS)[@[[namespace]]]] の
[CODE(DOMa)@en[[[cssText]]]] で[[名前空間接頭辞]]の部分を[[小文字]]に[[正規化]]し、
それを[[参照]]している [CODE(DOMa)@en[[[selectorText]]]]
でも[[小文字]]に[[正規化]]するようです。
一方 [[Opera]] 9 は、より後に出てきた [CODE(CSS)@en[@[[namespace]]]]
で使われている[[大文字]]・[[小文字]]の使い方を
[CODE(DOMa)@en[[[selectorText]]]] で採用するようです。
;; >>14 のように[[規則集合]]の後から [CODE(CSS)@en[@[[namespace]]]]
がある場合、途中で[[大文字]]・[[小文字]]が変化します:
[REFS[
- <http://suika.fam.cx/gate/2007/cssom/viewer?c=%40namespace%20X%20'http%3A%2F%2Fwww.w3.org%2F1999%2Fxhtml'%3B%0D%0Ax%7Cp%20%7B%7D%0D%0A%40namespace%20x%20'xx'%3B%0D%0AX%7Cp%20%7B%7D;h=;p=n;x=style-element>
]REFS]
[18]
>>16-17 [[Firefox]] 2, [[Opera]] 9 とも、
[[Unicode]] の[[大文字]]・[[小文字]]不区別のようです。
([[名無しさん]])
[19]
[[大文字]]・[[小文字]]以外の違いがある、同じ[[名前空間URI]]
の[[名前空間接頭辞]] (や[[既定名前空間]]) が複数定義されている場合、
[CODE(DOMa)@en[[[selectorText]]]] で使われるのは、
- [[Opera]] 9 では元々の[[名前空間接頭辞]]。ただし[[既定名前空間]]だったら[[空文字列]]の[[名前空間接頭辞]] ([CODE(CSS)[[[|]]]]) に
(これは明らかにバグ)。
- [[Firefox]] 2 では最初の [CODE(CSS)@en[@[[namespace]]]]
で定義された[[名前空間接頭辞]] (または[[既定名前空間]]の場合[[名前空間接頭辞]]なし
([[属性名]]でもそうなってしまうのは明らかにバグ))。
([[名無しさん]])
[20]
[[Firefox]] 2 の [CODE(DOMm)@en[[[insertRule]]]]、
[CODE(DOMm)@en[[[deleteRule]]]]、
[CODE(DOMa)@en[[[selectorText]]]]、
[[名前空間接頭辞]]の解釈についての推測
;; 実験用:
[REFS[
- <http://suika.fam.cx/gate/2007/cssom/viewer?c=%40namespace%20x%20'about%3A'%3B%0A%40namespace%20a%20'about%3A'%3B%0A%40namespace%20%20%20'about%3A'%3B%0Aa%20%7Ca%20*%7Ca%20a%7Ca%20%7B%7D%0A;h=%3Cbutton%20type%3D%22button%22%20onclick%3D%22%0A%20%20ss%20().deleteRule%20(0)%3B%0A%20%20ss%20().deleteRule%20(0)%3B%0A%20%20ss%20().insertRule%20('%40namespace%20d%20%5C'about%3A%5C'%3B'%2C%200)%3B%0A%20%20ss%20().insertRule%20('%40namespace%20x%20%5C'http%3A%2F%2Fwww.w3.org%2F1999%2Fxhtml%5C'%3B'%2C%200)%3B%0A%20%20ss%20().insertRule%20('%40namespace%20a%20%5C'http%3A%2F%2Fwww.w3.org%2F1999%2Fxhtml%5C'%3B'%2C%200)%3B%0A%20%20ss%20().insertRule%20('%40namespace%20%20%20%5C'http%3A%2F%2Fwww.w3.org%2F1999%2Fxhtml%5C'%3B'%2C%200)%3B%0A%20%20ss%20().insertRule%20('%40namespace%20d%20%5C'http%3A%2F%2Fwww.w3.org%2F1999%2Fxhtml%5C'%3B'%2C%200)%3B%0A%2F*%0A%20%20ss%20().deleteRule%20(0)%3B%0A%20%20ss%20().insertRule%20('%40namespace%20a%20%5C'http%3A%2F%2Fwww.w3.org%2F1999%2Fxhtml%5C'%3B'%2C%200)%3B%0A%20%20ss%20().insertRule%20('%40namespace%20b%20%5C'about%3A%5C'%3B'%2C%200)%3B%0A%20%20ss%20().deleteRule%20(0)%3B%0A%20%20ss%20().insertRule%20('%40namespace%20a%20%5C'about%3A%5C'%3B'%2C%200)%3B%0A%20%20ss%20().insertRule%20('a%7Ca%7Bcolor%3Ablue%7D'%2C%202)%3B%0A%20%20ss%20().insertRule%20('%40namespace%20a%20%5C'http%3A%2F%2Fwww.w3.org%2F1999%2Fxhtml%5C'%3B'%2C%200)%3B%0A%20%20ss%20().insertRule%20('a%7Ca%7Bcolor%3Agreen%7D'%2C%203)%3B%0A*%2F%0A%20%20u%20()%3B%0A%22%3Exxxx%3C%2Fbutton%3E%3Ca%3Eaxxxxx%3C%2Fa%3E;p=n;x=style-element>
]REFS]
- 次の2つの状態を保持している:
-- [[名前空間接頭辞]] (この説明中では、[CODE(CSS)[[VAR[p]]|]]
または[[空文字列]] = [[既定名前空間]]) から[[名前空間URI]]
への[[写像]]
-- [[名前空間URI]] から[[名前空間接頭辞]] (同上) の[[並び]]への[[写像]]
- [[CSS]] ([[スタイル・シート]]中および
[CODE(DOMm)@en[[[insertRule]]]] で指定されたもの) における
[CODE(CSS)@en[@[[namespace]]]] の出現順
([CODE(DOMm)@en[[[insertRule]]]] の挿入点は関係なく、
実行順) にそれぞれ、
-- 指定された[[名前空間接頭辞]]から[[名前空間URI]] への[[写像]]を登録する
(指定された[[名前空間接頭辞]]からの[[写像]]が既に登録されていれば、
上書きする)
-- 指定された[[名前空間URI]] から[[名前空間接頭辞]]の[[並び]]への[[写像]] (なければ[[空]]の[[並び]]への[[写像]]を新たに作る。)
の[[並び]]の末尾に[[名前空間接頭辞]]を追加する
-- 指定された[[名前空間URI]] ''以外''から[[名前空間接頭辞]]への[[並び]]の[[写像]]において、
指定された[[名前空間接頭辞]]が含まれていれば、それらをすべて削除する
- [CODE(DOMm)@en[[[deleteRule]]]] は上述の2つの[[写像]]に影響しない
- [[CSS]] の[[構文解析]]中に[[名前空間接頭辞]]を[[解決]]する必要がある場合、
[[名前空間接頭辞]]から[[名前空間URI]] への[[写像]]を使う
-- なので、 [CODE(DOMm)@en[[[deleteRule]]]] で削除された[[名前空間接頭辞]]も[[解決]]できてしまうことがある
- [CODE(DOMa)@en[[[selectorText]]]] を得る場合、
[[名前空間URI]] から[[名前空間接頭辞]]の[[並び]]への[[写像]]の当該[[名前空間URI]] に対応する[[並び]]の先頭の[[名前空間接頭辞]]を用いる
(ただし、[[並び]]が[[空]]または存在しない場合には、
[[空文字列]]とする)
-- なので、 [CODE(DOMm)@en[[[deleteRule]]]] された[[名前空間接頭辞]]が使われることがあるし、
適当な[[名前空間接頭辞]]がなければ勝手に[[既定名前空間]]にされてしまう
[74] [[Chrome]] では[[名前空間接頭辞]]が宣言されてなくても [[CSSOM]] に[[スタイル規則]]が現れます。
ただし適用はされません。 ([[Firefox]] では仕様通り [[CSSOM]] に現れません。) [TIME[2013-08-28T12:51:08.100Z]]
* 既定名前空間
[60] [[既定名前空間]]は、[[名前空間接頭辞]]が明示されていない名前に対して適用されます [SRC[>>30 3.3.]]。
[EG[
[61] 例えば[[型選択子]]で[[名前空間接頭辞]]がない時に[[既定名前空間]]が適用されます。
しかし[[属性選択子]]は同じように見えても[[既定名前空間]]は適用されません。
]EG]
[62] [[既定名前空間]]の既定値はありません。[[名前空間接頭辞]]がなく、[[既定名前空間]]も指定されていない時、
どう解釈されるかはそれぞれの文脈によって定められていなければ[['''なりません''']]。 [SRC[>>30 3.3.]]
[EG[
[63] 例えば[[型選択子]]では[[既定名前空間]]が指定されていなければ [CODE(CSS)[[[*]]]]
と同じ意味になると定義されています。
[64] なお、[[既定名前空間]]が指定されていると [CODE(CSS)[[[@namespace]]]]
に対応している[[利用者エージェント]]と対応していない[[利用者エージェント]]で[[型選択子]]の解釈が変わってしまいます。
]EG]
* 名前空間 URL
[53] [[名前空間URI]]は [[STRING]] として指定されている場合であっても [[URI]]
([CODE(CSS)@en[[[url()]]]]) として指定されている場合であっても、
[[URL]] としての[[正規化]]などは行われません [SRC[>>30 3.1]]。
[54] [[名前空間URL]]が[[空文字列]]や [[URL]] として[[非妥当]]であったとしても、
[CODE(CSS)@en[[[@namespace]]]] としては[[妥当]]です [SRC[>>30 3.1]]。
[22]
[[Firefox]] 2 も [[Opera]] 9 も、[[名前空間URI]] の前後の[[空白]]を除去しません (正しい動作)。
[REFS[
- <http://suika.fam.cx/gate/2007/cssom/viewer?c=%40namespace%20x%20url(%22%20http%3A%2F%2Fwww.w3.org%2F1999%2Fxhtml%20%22)%3B%0Ap%20%7B%20color%3A%20green%20%7D%0Ax%7Cp%20%7B%20color%3Ared%20%7D%0A;h=%3Cp%3EThis%20paragraph%20should%20be%20green.%3C%2Fp%3E;p=n;x=style-element;i=html-div>
]REFS]
** 相対 URL
[6]
[[Firefox]] 2 も [[Opera]] 9 も、勝手に[[名前空間URI]]を[[絶対URI参照]]に[[解決]]したりなんてことは''しない''ようです。
[[Opera]] 9 検証用 ([[Firefox]] 2 では [CODE(HTMLe)@en[[[base]]]]
が機能しない):
[REFS[
- [[絶対URI]] <http://suika.fam.cx/gate/2007/cssom/viewer?c=%40namespace%20url(http%3A%2F%2Fwww.w3.org%2F1999%2Fxhtml)%3B%0D%0Ap%7Bbackground%3Aurl(%2FIcons%2Fw3c_main)%7D;h=%3Cbase%20href%3Dhttp%3A%2F%2Fwww.w3.org%2F%3E%0D%0A%3Cp%3EXXXXXX%0D%0A;p=n;x=style-element>
- [[相対参照]]
<http://suika.fam.cx/gate/2007/cssom/viewer?c=%40namespace%20url(%2F1999%2Fxhtml)%3B%0D%0Ap%7Bbackground%3Aurl(%2FIcons%2Fw3c_main)%7D;h=%3Cbase%20href%3Dhttp%3A%2F%2Fwww.w3.org%2F%3E%0D%0A%3Cp%3EXXXXXX%0D%0A;p=n;x=style-element>
]REFS]
;; 前者は背景画が描画されるが、後者はされないことでわかる。
** 空文字列 URL
[33] [[空文字列]]の[[名前空間URL]]を指定することは、[[null名前空間]] ([[名前空間]]なし)
を指定するのと同じことです [SRC[>>30 2.1.]]。
[EG[
[34] 従って
[PRE(CSS code)[
@namespace empty "";
@namespace "";
]PRE]
... という状態で [CODE(CSS)[elem]] ([[既定名前空間]]の[[要素]]), [CODE(CSS)[|elem]]
([[null名前空間]]の[[要素]]), [CODE(CSS)[empty|elem]]
という[[型選択子]]はいずれも同じ意味となります [SRC[>>30 2.1.]]。
]EG]
[REFS[
- [7] [CODE(CSS example)@en[@[[namespace]] '';'']]
<http://suika.fam.cx/gate/2007/cssom/viewer?c=%40namespace%20''%3B%0A*%7Cp%20%7B%0A%20%20color%3A%20green%3B%0A%7D%0Ap%20%7B%0A%20%20color%3A%20red%3B%0A%7D%0A;h=%3Cp%3Exxxx;p=n;x=style-element>
]REFS]
[[Firefox]] 2 では赤色、 [[Opera]] 9 では緑色になります。
[[Firefox]] は[[名前空間URI]]が[[空文字列]]だと指定しなかったのと同義とみなし、
[[Opera]] は[[空文字列]]の[[名前空間URI]]が指定されているとみなすようです。
([[名無しさん]])
[8]
[CODE(CSS example)@en[@namespace x '';'']]
<http://suika.fam.cx/gate/2007/cssom/viewer?c=%40namespace%20x%20''%3B%0Ax%7Cp%20%7B%0A%20%20color%3A%20green%3B%0A%7D%0A;h=%3Cp%3Exxxx;p=n;x=style-element>
[[Opera]] 9 は[[名前空間接頭辞]]が宣言されていないとみなします。
[[Firefox]] 2 は[[名前空間接頭辞]]が[[null名前空間]]と関連付けられているとみなすようです。
[CODE(DOMa)@en[[[selectorText]]]] では[[名前空間接頭辞]]が[[空文字列]]に[[正規化]]
([CODE(CSS example)@en[|p]]) されています。
([[名無しさん]])
[9]
>>8
[[Opera]] は[[名前空間URI]]が[[空文字列]]だと
[CODE(CSS)@en[@[[namespace]]]] [[規則]]自体を[[無視]]しているようです。
<http://suika.fam.cx/gate/2007/cssom/viewer?c=%40namespace%20x%20''%3B%0A%40namespace%20x%20'x'%3B%0A%40namespace%20x%20''%3B%0Ax%7Cp%20%7B%0A%20%20color%3A%20green%3B%0A%7D%0A;h=%3Cp%3Exxxx;p=n;x=style-element>
は [[Firefox]] 2 だと[[null名前空間]]、 [[Opera]] 9 だと
[CODE(URI example)[x]] だとみなします。
* CSSOM
[4]
[[Opera]] 9 では [[CSSOM]] や [CODE(DOMa)@en[[[cssText]]]]
に現れません。
** [CODE(DOMi)@en[CSSRule]]
[3]
[[Firefox]] 2 では、 [CODE(DOMc)@en[[[UNKNOWN_RULE]]]] として
[[CSSOM]]]] に現れます ([CODE(DOMc)@en[[[UNKNOWN_RULE]]]]
の項を参照)。
[5]
[[CSSOM]] [[ED]] では [CODE(DOMc)@en[[[NAMESPACE_RULE]]]]
という新しい[[定数]]が定義されています。
** 無視される規則の扱い
[11]
[[Firefox]] 2 は、重複により[[無視]]される [CODE(CSS)@en[@[[namespace]]]]
[[規則]]も [[CSSOM]] に出現させます。
[12] >>11 のテスト用:
[REFS[
- [[既定名前空間]]
<http://suika.fam.cx/gate/2007/cssom/viewer?c=%40namespace%20'http%3A%2F%2Fnamespace1.test%2F'%3B%0A%40namespace%20'http%3A%2F%2Fnamespace2.test%2F'%3B%0A;h=;p=n;x=style-element>
- [[名前空間接頭辞]]
<http://suika.fam.cx/gate/2007/cssom/viewer?c=%40namespace%20x%20'http%3A%2F%2Fnamespace1.test%2F'%3B%0A%40namespace%20x%20'http%3A%2F%2Fnamespace2.test%2F'%3B%0A;h=;p=n;x=style-element>
]REFS]
* 応用
[67] [CODE(CSS)@en[[[@namespace]]]] で宣言された[[名前空間接頭辞]]や[[既定名前空間]]が使われる場所:
- [[選択子]]
-- [[型選択子]]
-- [[属性選択子]]
- [CODE(CSS)@en[[[attr()]]]]
* 歴史
[1]
[CITE[CSS Module: Namespaces]] <http://www.w3.org/TR/2006/WD-css3-namespace-20060828/>
[2]
[CITE@en[CSS3 Module: Namespace Declarations]] ([CODE[2007-09-27 06:34:33 +09:00]] 版) <http://dev.w3.org/cvsweb/~checkout~/csswg/css3-namespace/Overview.html>
[71] [CITE@en[CSS Namespaces Module]] ([TIME[2007-11-01 08:11:24 +09:00]] 版) <http://dev.w3.org/cvsweb/~checkout~/csswg/css3-namespace/Overview.src.html>
[29] [CITE@en[CSS Namespaces Module]] ([TIME[2011-08-10 18:00:29 +09:00]] 版) <http://dev.w3.org/csswg/css3-namespace/>
[21]
[CITE@en[CSS Namespaces Module]] ([CODE[2008-02-16 03:06:01 +09:00]] 版) <http://www.w3.org/TR/2008/WD-css3-namespace-20080215/>
[23]
[CITE@en[CSS Namespaces Module]] ([TIME[2008-05-23 20:34:01 +09:00]] 版) <http://www.w3.org/TR/2008/CR-css3-namespace-20080523/>
[24] [CITE[From the North — Anne’s Weblog]] ([TIME[2009-02-17 10:44:00 +09:00]] 版) <http://annevankesteren.nl/2009/02/css-namespaces>
>Lately I’ve been working on the CSS Namespaces Module Test Suite (not exclusively). @namespace must be one of the most pointless pieces of CSS syntax. Normal authors are not actually using namespaces in Web content. If MathML and SVG become more popular it is still not necessary because they work with scoped trees. RDFa hides namespaces in attribute values and therefore does not play well with the DOM or CSS per definition. I heard we use @namespace for something in the mail client. Some user agents use it in their user agent style sheet. HTML5 uses it to describe certain rendering rules. Yay! Definitely sounds like something that needs to be standardized including spending all the resources it takes to get several interoperable implementations. Here is hoping we more carefully consider these things going forward.
[69] [CITE@en[CSS Namespaces Implementation Report]] ([TIME[2011-04-07 21:58:16 +09:00]] 版) <http://www.w3.org/Style/CSS/Test/CSS3/Namespace/20090210/reports/implement-report.html>
[25] [CITE@en[CSS Namespaces Module]]
( ([TIME[2011-08-12 00:31:50 +09:00]] 版))
<http://www.w3.org/TR/2011/PR-css3-namespace-20110811/>
[26] [CITE@en[CSS Namespaces Module]]
( ([TIME[2011-09-29 00:20:39 +09:00]] 版))
<http://www.w3.org/TR/2011/REC-css3-namespace-20110929/>
[31] <http://www.w3.org/TR/css3-namespace/> は現時点で >>26 を指しています。 [TIME[2011-10-02T10:44:10.800Z]]
[27] >>26 の正誤表のリンク先が <http://www.w3.org/Style/2011/REC-css3-color-20110607-errata.html>
になっています。面白いですねwwwww [TIME[2011-10-01T04:44:18.900Z]]
[28] [CITE@en[Errata in REC-css3-namespace-20110929]]
( ([TIME[2011-09-27 22:47:24 +09:00]] 版))
<http://www.w3.org/Style/2011/REC-css3-namespace-20110929-errata.html>
[REFS[
- [75] [CITE@en[CSS Namespaces Module Level 3]]
( ([TIME[2014-03-20 04:21:12 +09:00]] 版))
<http://www.w3.org/TR/2014/REC-css-namespaces-3-20140320/>
]REFS]
[76] >>75 の2014年版の[[W3C勧告]]では2011年版[[勧告]]と比べて、
[CODE@en[[[qname]]]], [CODE@en[[[wqname]]]], [CODE@en[[[wqwname]]]]
の3つの[[生成規則]]が追加されています。
* 関連
[68] [[XML]] では [CODE(XML)@en[[[xml]]]] など特定の[[名前空間接頭辞]]が暗黙のうちに宣言された状態になっていますが、
[[CSS]] ではそのような制約はありません。また [CODE(XMLa)@en[[[xmlns]]]] など特別な[[属性名]]に関する制約も
[[CSS]] にはありません。
* テスト・ケース
[REFS[
- [70] [CITE@en[CSS Namespaces Conformance Test Suite]] ([TIME[2011-06-22 18:05:38 +09:00]] 版) <http://www.w3.org/Style/CSS/Test/CSS3/Namespace/current/>
]REFS]
* 例
[37]
[PRE(CSS example code)[
@namespace "http://www.w3.org/1999/xhtml";
]PRE]
これは[[名前空間接頭辞]]が指定されていないので、[[既定名前空間]]を設定する宣言となります [SRC[>>30 3.]]。
[38]
[PRE(CSS example code)[
@namespace svg "http://www.w3.org/2000/svg";
]PRE]
これは [CODE(CSS)[svg]] という[[名前空間接頭辞]]の[[名前空間URL]]を設定する宣言です [SRC[>>30 3.]]。
[72] [CITE[HTML Editor (page 4)]]
( ([TIME[2012-12-20 05:09:16 +09:00]] 版))
<http://www.siteexperts.com/ie5/htmlarea/page4.asp>
[73] [CITE[HTML Editor (page 4)]]
( ([TIME[2012-12-20 05:09:16 +09:00]] 版))
<http://www.siteexperts.com/ie5/htmlarea/page4.asp>
[77] [CITE@en[CSS Namespaces Module Level 3]]
( ([TIME[2014-03-19 19:21:12 +09:00]] 版))
<http://www.w3.org/TR/2014/REC-css-namespaces-3-20140320/>
[78] [CITE@en[CSS Namespaces Module Level 3]]
( ([TIME[2014-03-19 19:21:12 +09:00]] 版))
<http://www.w3.org/TR/2014/REC-css-namespaces-3-20140320/>