* 仕様書
[REFS[
- [30] [CITE@en[CSS Namespaces Module]]
]REFS]
* 構文解析
[10]
[[空白]]の扱いのテスト用:
[REFS[
-
-
-
-
-
-
-
-
-
-
]REFS]
[13]
[[規則集合]]の後の [CODE(CSS)@en[@[[namespace]]]]
は[[無視]]しなければなりません。
[14]
>>13 のテスト用:
-
-
[15]
>>13-14 [[Firefox]] 2 は正しいですが、 [[Opera]] 9
は[[無視]]しないみたいです。
* 名前空間接頭辞
[16]
[[大文字]]・[[小文字]]の区別のテスト用:
- [[ASCII]] [[大文字]]・[[小文字]]を区別しない
- [[Unicode]] [[大文字]]・[[小文字]]を区別しない (その1)
- [[Unicode]] [[大文字]]・[[小文字]]を区別しない (その2)
- [CODE(charname)@en[[[LATIN CAPITAL LETTER I WITH DOT ABOVE]]]]
- [CODE(charname)@en[[[LATIN SMALL LETTER DOTLESS I]]]]
[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]]]]
がある場合、途中で[[大文字]]・[[小文字]]が変化します:
[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[
-
]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]]]] された[[名前空間接頭辞]]が使われることがあるし、
適当な[[名前空間接頭辞]]がなければ勝手に[[既定名前空間]]にされてしまう
* 名前空間 URL
[22]
[[Firefox]] 2 も [[Opera]] 9 も、[[名前空間URI]] の前後の[[空白]]を除去しません (正しい動作)。
[REFS[
-
]REFS]
** 相対 URL
[6]
[[Firefox]] 2 も [[Opera]] 9 も、勝手に[[名前空間URI]]を[[絶対URI参照]]に[[解決]]したりなんてことは''しない''ようです。
[[Opera]] 9 検証用 ([[Firefox]] 2 では [CODE(HTMLe)@en[[[base]]]]
が機能しない):
[REFS[
- [[絶対URI]]
- [[相対参照]]
]REFS]
;; 前者は背景画が描画されるが、後者はされないことでわかる。
** 空文字列 URL
[REFS[
- [7] [CODE(CSS example)@en[@[[namespace]] '';'']]
]REFS]
[[Firefox]] 2 では赤色、 [[Opera]] 9 では緑色になります。
[[Firefox]] は[[名前空間URI]]が[[空文字列]]だと指定しなかったのと同義とみなし、
[[Opera]] は[[空文字列]]の[[名前空間URI]]が指定されているとみなすようです。
([[名無しさん]])
[8]
[CODE(CSS example)@en[@namespace x '';'']]
[[Opera]] 9 は[[名前空間接頭辞]]が宣言されていないとみなします。
[[Firefox]] 2 は[[名前空間接頭辞]]が[[null名前空間]]と関連付けられているとみなすようです。
[CODE(DOMa)@en[[[selectorText]]]] では[[名前空間接頭辞]]が[[空文字列]]に[[正規化]]
([CODE(CSS example)@en[|p]]) されています。
([[名無しさん]])
[9]
>>8
[[Opera]] は[[名前空間URI]]が[[空文字列]]だと
[CODE(CSS)@en[@[[namespace]]]] [[規則]]自体を[[無視]]しているようです。
は [[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[
- [[既定名前空間]]
- [[名前空間接頭辞]]
]REFS]
* 歴史
[1]
[CITE[CSS Module: Namespaces]]
[2]
[CITE@en[CSS3 Module: Namespace Declarations]] ([CODE[2007-09-27 06:34:33 +09:00]] 版)
[29] [CITE@en[CSS Namespaces Module]] ([TIME[2011-08-10 18:00:29 +09:00]] 版)
[21]
[CITE@en[CSS Namespaces Module]] ([CODE[2008-02-16 03:06:01 +09:00]] 版)
[23]
[CITE@en[CSS Namespaces Module]] ([TIME[2008-05-23 20:34:01 +09:00]] 版)
[24] [CITE[From the North — Anne’s Weblog]] ([TIME[2009-02-17 10:44:00 +09:00]] 版)
>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.
[25] [CITE@en[CSS Namespaces Module]]
( ([TIME[2011-08-12 00:31:50 +09:00]] 版))
[26] [CITE@en[CSS Namespaces Module]]
( ([TIME[2011-09-29 00:20:39 +09:00]] 版))
[31] は現時点で >>26 を指しています。 [TIME[2011-10-02T10:44:10.800Z]]
[27] >>26 の正誤表のリンク先が
になっています。面白いですね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]] 版))