[35] CSS の @namespace
@規則は、名前空間接頭辞を宣言すると共に、
名前空間URLと関連付けます >>30 3.。
[32] CSS名前空間は、 XML名前空間を使った要素や属性を表すために使うことができます。 しかし、 XML名前空間以外の名前空間に対して適用することもできます >>30 2.1.。
[36] @namespace
で宣言した名前空間接頭辞は、
CSS修飾名で使うことができるようになります >>30 3., 3.3。
[50] @namespace
@規則の構文は次のように定義されています >>30 3.1.。
@namespace
: ASCII大文字・小文字不区別;
[51] @namespcae
は、 @charset
や @import
よりも後、
無視されない他の@規則や規則集合よりも前になければなりません >>30 3.1.。
[52] 構文的に非妥当な @namespace
は無視しなければなりません
>>30 3.1.。非妥当な @namespace
を含むスタイル・シートは妥当なスタイル・シートではありません
>>30 3.1.。
[65] 同じ名前空間接頭辞を複数回宣言したり、既定名前空間を複数回宣言したりするのは不適合です。 利用者エージェントは複数回宣言されている場合には最後の宣言だけを使わなければなりません。 >>30 3.3.
[13]
規則集合の後の @namespace
は無視しなければなりません。
[55] @namespace
で宣言された名前空間接頭辞の適用範囲は当該スタイル・シートです。
@import
などによって他のスタイル・シートに波及することはありません。
>>30 3.2
[58] 名前空間接頭辞は大文字・小文字を区別します >>30 3.3.。
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>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>[17] >>16 Firefox 2、Opera 9 とも、 大文字・小文字の扱いは正しいです。
Firefox 2 は @namespace
の
cssText
で名前空間接頭辞の部分を小文字に正規化し、
それを参照している selectorText
でも小文字に正規化するようです。
一方 Opera 9 は、より後に出てきた @namespace
で使われている大文字・小文字の使い方を
selectorText
で採用するようです。
[18] >>16-17 Firefox 2, Opera 9 とも、 Unicode の大文字・小文字不区別のようです。 (名無しさん)
[19]
大文字・小文字以外の違いがある、同じ名前空間URI
の名前空間接頭辞 (や既定名前空間) が複数定義されている場合、
selectorText
で使われるのは、
|
) に
(これは明らかにバグ)。@namespace
で定義された名前空間接頭辞 (または既定名前空間の場合名前空間接頭辞なし
(属性名でもそうなってしまうのは明らかにバグ))。(名無しさん)
[20]
Firefox 2 の insertRule
、
deleteRule
、
selectorText
、
名前空間接頭辞の解釈についての推測
insertRule
で指定されたもの) における
@namespace
の出現順
(insertRule
の挿入点は関係なく、
実行順) にそれぞれ、deleteRule
は上述の2つの写像に影響しないdeleteRule
で削除された名前空間接頭辞も解決できてしまうことがあるselectorText
を得る場合、
名前空間URI から名前空間接頭辞の並びへの写像の当該名前空間URI に対応する並びの先頭の名前空間接頭辞を用いる
(ただし、並びが空または存在しない場合には、
空文字列とする)deleteRule
された名前空間接頭辞が使われることがあるし、
適当な名前空間接頭辞がなければ勝手に既定名前空間にされてしまう[74] Chrome では名前空間接頭辞が宣言されてなくても CSSOM にスタイル規則が現れます。 ただし適用はされません。 (Firefox では仕様通り CSSOM に現れません。)
[60] 既定名前空間は、名前空間接頭辞が明示されていない名前に対して適用されます >>30 3.3.。
[62] 既定名前空間の既定値はありません。名前空間接頭辞がなく、既定名前空間も指定されていない時、 どう解釈されるかはそれぞれの文脈によって定められていなければなりません。 >>30 3.3.
[53] 名前空間URIは STRING として指定されている場合であっても URI
(url()
) として指定されている場合であっても、
URL としての正規化などは行われません >>30 3.1。
[54] 名前空間URLが空文字列や URL として非妥当であったとしても、
@namespace
としては妥当です >>30 3.1。
[22] Firefox 2 も Opera 9 も、名前空間URI の前後の空白を除去しません (正しい動作)。
[6] Firefox 2 も Opera 9 も、勝手に名前空間URIを絶対URI参照に解決したりなんてことはしないようです。
Opera 9 検証用 (Firefox 2 では base
が機能しない):
[33] 空文字列の名前空間URLを指定することは、null名前空間 (名前空間なし) を指定するのと同じことです >>30 2.1.。
[34] 従って
@namespace empty ""; @namespace "";
... という状態で elem
(既定名前空間の要素), |elem
(null名前空間の要素), empty|elem
という型選択子はいずれも同じ意味となります >>30 2.1.。
Firefox 2 では赤色、 Opera 9 では緑色になります。 Firefox は名前空間URIが空文字列だと指定しなかったのと同義とみなし、 Opera は空文字列の名前空間URIが指定されているとみなすようです。 (名無しさん)
[8]
@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名前空間と関連付けられているとみなすようです。
selectorText
では名前空間接頭辞が空文字列に正規化
(|p
) されています。
(名無しさん)
[9]
>>8
Opera は名前空間URIが空文字列だと
@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 だと
x
だとみなします。
[4]
Opera 9 では CSSOM や cssText
に現れません。
CSSRule
[3]
Firefox 2 では、 UNKNOWN_RULE
として
CSSOM]] に現れます (UNKNOWN_RULE
の項を参照)。
[5]
CSSOM ED では NAMESPACE_RULE
という新しい定数が定義されています。
[11]
Firefox 2 は、重複により無視される @namespace
規則も CSSOM に出現させます。
[67] @namespace
で宣言された名前空間接頭辞や既定名前空間が使われる場所:
[1] CSS Module: Namespaces <http://www.w3.org/TR/2006/WD-css3-namespace-20060828/>
[2]
CSS3 Module: Namespace Declarations (2007-09-27 06:34:33 +09:00
版) <http://dev.w3.org/cvsweb/~checkout~/csswg/css3-namespace/Overview.html>
[71] CSS Namespaces Module ( 版) <http://dev.w3.org/cvsweb/~checkout~/csswg/css3-namespace/Overview.src.html>
[29] CSS Namespaces Module ( 版) <http://dev.w3.org/csswg/css3-namespace/>
[21]
CSS Namespaces Module (2008-02-16 03:06:01 +09:00
版) <http://www.w3.org/TR/2008/WD-css3-namespace-20080215/>
[23] CSS Namespaces Module ( 版) <http://www.w3.org/TR/2008/CR-css3-namespace-20080523/>
[24] From the North — Anne’s Weblog ( 版) <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] CSS Namespaces Implementation Report ( 版) <http://www.w3.org/Style/CSS/Test/CSS3/Namespace/20090210/reports/implement-report.html>
[25] CSS Namespaces Module ( ( 版)) <http://www.w3.org/TR/2011/PR-css3-namespace-20110811/>
[26] CSS Namespaces Module ( ( 版)) <http://www.w3.org/TR/2011/REC-css3-namespace-20110929/>
[31] <http://www.w3.org/TR/css3-namespace/> は現時点で >>26 を指しています。
[27] >>26 の正誤表のリンク先が <http://www.w3.org/Style/2011/REC-css3-color-20110607-errata.html> になっています。面白いですねwwwww
[28] Errata in REC-css3-namespace-20110929 ( ( 版)) <http://www.w3.org/Style/2011/REC-css3-namespace-20110929-errata.html>
[76] >>75 の2014年版のW3C勧告では2011年版勧告と比べて、
qname
, wqname
, wqwname
の3つの生成規則が追加されています。
[68] XML では xml
など特定の名前空間接頭辞が暗黙のうちに宣言された状態になっていますが、
CSS ではそのような制約はありません。また xmlns
など特別な属性名に関する制約も
CSS にはありません。
@namespace "http://www.w3.org/1999/xhtml";
これは名前空間接頭辞が指定されていないので、既定名前空間を設定する宣言となります >>30 3.。
@namespace svg "http://www.w3.org/2000/svg";
これは svg
という名前空間接頭辞の名前空間URLを設定する宣言です >>30 3.。
[72] HTML Editor (page 4) ( ( 版)) <http://www.siteexperts.com/ie5/htmlarea/page4.asp>
[73] HTML Editor (page 4) ( ( 版)) <http://www.siteexperts.com/ie5/htmlarea/page4.asp>
[77] CSS Namespaces Module Level 3 ( ( 版)) <http://www.w3.org/TR/2014/REC-css-namespaces-3-20140320/>
[78] CSS Namespaces Module Level 3 ( ( 版)) <http://www.w3.org/TR/2014/REC-css-namespaces-3-20140320/>
@namespace
の後が前記の構文に沿ってないものや、 他の@規則よりも後にある@namespace
や他の規則集合や@規則の中に含まれている@namespace
が該当するのでしょう。