この文書「CSS 名前空間モジュール」は、W3C の CSS Working Group による「CSS Namespaces Module (W3C Recommendation 29 September 2011)」の日本語訳です。日本語訳は参考情報であり、公式な文書ではありません。また、翻訳に誤りがある可能性にも注意してください。
原文の最新版 は、この日本語訳が参照した版から更新された可能性があります。他の仕様の訳については Web 標準仕様 日本語訳一覧 をご覧ください。
規範的な仕様への修正がはいった可能性もあるため、errata もあわせてご覧ください。
この文書の翻訳については 翻訳データベース をご覧ください。訳注:この文書は日本語訳です。
Copyright © 2011 W3C® (MIT, ERCIM, Keio), All Rights Reserved. W3C liability, trademark and document use rules apply.
この CSS 名前空間モジュールは、CSS で名前空間を使用するための構文を定義します。具体的には、規定名前空間の宣言と、接頭辞つきの名前空間を宣言する @namespace
規則を定義します。また、他の仕様が名前空間修飾名の接頭辞を利用するための構文も定義しています。
この章は、この文書の公開時におけるステータスについて説明しています。このため、他の仕様がこの文書を上書きしている可能性があります。W3C による他の出版物およびこの技術レポートの最新版は W3C 技術レポートインデックス (http://www.w3.org/TR/) で探すことができます。
この文書は CSS ワーキンググループ によって 勧告案 (Proposed Recommendation) 作成されたものです。
W3C 勧告は広く検証され、実装可能と判断された成熟した文書のことです。W3C はこの仕様の実装を奨励しています。仕様に関するコメントは、公開メーリングリスト www-style@w3.org (アーカイブ) に送ってください。(議論への参加の前に、手順 をお読みください)。E メールを送るときには、件名に “css3-namespace” という文字を含めてください。たとえば、“[css3-namespace] …コメントの要約…” というスタイルが適当です。
この文書は W3C Member, ソフトウェア開発者、そしてその他の W3C グループや関係者によって評価が行われ、Director によって W3C 勧告と承認されたものです。この文書は安定しており、参考資料として、または他の文書からの引用に利用されるでしょう。仕様の勧告において W3C の果たす役割とは、仕様に注目させ、その普及を促すことです。これにより、Web の機能と相互運用性の向上が期待できます。
この文書は 5 February 2004 W3C Patent Policy の下で活動するグループにより作成されました。W3C は 特許情報の開示に関する公開リスト を関連する団体と共に、その成果物とあわせて管理しています。リストには情報開示に関する説明もありますので、ご参照ください。特許について十分に知識のある人物が、当該仕様に関し Essential Claim(s) が認められると判断した場合は、W3C 特許方針の第 6 章 に従い情報を開示する必要があります。
CSS 名前空間モジュールの テストスイート が、勧告候補期間中に作成されています。また、実装レポートもあります。
この文書は勧告案と比べて、表面的な編集や参考文献の更新を除き、同じものです。
このセクションは非規範的です。
この CSS 名前空間モジュールは、CSS で名前空間を使用するための構文を定義します。具体的には、規定名前空間の宣言と、接頭辞つきの名前空間を宣言する @namespace
規則を定義します。また、結びつけた接頭辞を用い、名前空間修飾名を表現するための構文も定義します。しかしこの仕様では、このような名前が妥当であるかないか、また名前の持つ意味については定義しません。これらは内容に依存するため、ホスト言語で定義されるものだからです。たとえばセレクタ ([SELECT]) は、CSS 名前空間モジュールで定義される構文を参照しています。
このモジュールをサポートしない CSS クライアントは、それが CSS の前方互換パース処理規則 に適合している場合、すべての @namespace
規則と、名前空間修飾名を利用したスタイル規則を無視します。CSS にて接頭辞を区切る構文は、CSS クライアントが間違うことなくスタイル規則を無視できるよう、細心の注意を払ったうえで選ばれています。
文書や実装は、CSS 名前空間ただひとつに適合することはできません。しかし、この仕様を規範的に参照する他のホスト言語や、CSS を実装した場合、CSS 名前空間に適合したと言及することができます。
CSS 名前空間への適合性は、二つのクラスに分けられます。
適合性要件は説明的な条件と、RFC 2119 の用語の組み合わせにより表現されます。この文書の規範的な文脈で使われるキーワード "MUST"、"MUST NOT"、"REQUIRED"、"SHALL"、"SHALL NOT"、"SHOULD"、"SHOULD NOT"、"RECOMMENDED"、"MAY"、"OPTIONAL" は RFC 2119 で示されるとおりに解釈されます。しかしながら、仕様書の可読性を確保するため、これらのキーワードをすべて大文字で記述することはありません。また、この仕様中で非規範的、例、注釈と記述されていない文はすべて規範的なものとなります。[RFC2119]
訳註:キーワードが含まれている文章は「~する必要があります (MUST)。」など、文末にキーワードを補い表しています。
仕様中の例は、"for example" と書かれた文であるか、または規範的な文から分かれたうえで class="example"
がつき表されています。
これは、例文の参考例です。
訳註:本文中の "for example" はすべて「たとえば」と訳しています。
参考情報である注釈は、"Note" という文字から始まり、また規範的な文から分かれたうえで class="note"
がつき表されています。
Note: これは参考情報です。
訳註:"Note" はすべて "Note:" と表記しています。
この仕様書で定義される以外の用語について、CSS 名前空間は Namespaces in XML 1.0 [REC-XML-NAMES] で定義された用語を使用しています。しかし、この仕様書で定義された構文は XML の要素や属性名のみを表すものではなく、ホスト言語で定義された他の名前空間を表すことがあります (MAY)。
CSS 名前空間において、空文字列からなる名前空間名は、null 名前空間または名前空間が存在しないと解釈されます。
@namespace
規則@ 規則 である @namespace
は接頭辞を宣言し、与えられた名前空間名 (文字列) と関連付けるものです。この名前空間接頭辞は、この文書で定義される CSS 修飾名 などの名前空間修飾名にて利用することができます。
@namespace "http://www.w3.org/1999/xhtml"; @namespace svg "http://www.w3.org/2000/svg";
一つ目の規則は、http://www.w3.org/1999/xhtml
を規定の名前空間として宣言しています。名前空間が明示されていないものは、この規定名前空間に属するものとして処理されます。
二つ目の規則は、名前空間接頭辞 svg
を宣言し、それを名前空間 http://www.w3.org/2000/svg
と結びつけています。svg
という接頭辞が使われているものは、対応する名前空間に属するものとして処理されます。
CSS 名前空間や、参照する Namespaces in XML 1.0 において、接頭辞は構文構造のひとつでしかありません。ローカル名と名前空間名の組み合わせから成る、展開名 (expanded name) が重要なのです。このため、CSS スタイルシートで使用される接頭辞と、また名前空間が規定であるかないかは、適用対象の文書が定義する、名前空間接頭辞や規定の名前空間と対応しているわけではありません。
次のような XML 文書を考えてみます。
<qml:elem xmlns:qml="http://example.com/q-markup"></qml:elem>
この文書に次のような @namespace
宣言を持つ、CSS ファイルを結びつけます。
@namespace Q "http://example.com/q-markup"; @namespace lq "http://example.com/q-markup";
このとき、CSS ファイル内のセレクタ Q|elem
と lq|elem
はどちらも <qml:elem>
要素にマッチします (セレクタ qml|elem
は不正なものとなります)。
@namespace
規則の構文は次のようになります。記法は CSS 2.1 の文法 (付属書) [CSS21] を使用しています。
namespace : NAMESPACE_SYM S* [namespace_prefix S*]? [STRING|URI] S* ';' S* ; namespace_prefix : IDENT ;
また、次のトークンが加わります。
@{N}{A}{M}{E}{S}{P}{A}{C}{E} {return NAMESPACE_SYM;}
すべての @namespace
規則は、すべての @charset と @import 規則、そして無視されていない他の @ 規則とスタイルシート中のルールセットに従う必要があります (MUST)。CSS 構文で説明すると、stylesheet
文法にある [ import [S|CDO|CDC]* ]*
の直後に [ namespace [S|CDO|CDC]* ]*
を加えることを意味します。
綴りの間違いや非整形式など、構文的に不正な @namespace
規則は 無視 されなければなりません (MUST)。不正な @namespace
規則を含む CSS スタイルシート は、非妥当 (invalid) なものとなります。
URI
構文からパース処理された URI 文字列は、リテラル文字列 (literal string) として扱われる必要があります (MUST)。これは STRING
構文と同様に処理し、URI 固有の正規化処理は行わないという意味です。
名前空間の接頭辞は、@namespace
規則が記述されたスタイルシートでのみ宣言されます。つまり、@namespace
規則のあるスタイルシートがインポートしたスタイルシート、@namespace
規則付きのスタイルシートをインポートしたスタイルシート、またはおなじ文書に適用される他のスタイルシートにおいて、接頭辞は宣言されていないことになります。
名前空間接頭辞 (namespace prefix) が宣言されたとき、それは宣言された名前空間と、名前空間修飾名が属する名前空間を表します。名前空間接頭辞は CSS カウンタ名 と同じように、大文字小文字を区別します (case-sensitive)。
名前空間宣言において名前空間接頭辞が省略された場合、その名前空間は規定の名前空間として宣言されたことになります。規定の名前空間 (default namespace) は、接頭辞を持たない名前に対して適用されることがあります (MAY)。名前空間接頭辞を使用するモジュールは、規定の名前空間が適用される内容について定義する必要があります (MUST)。たとえば、[XML-NAMES] によると、セレクタ [SELECT] は、規定の名前空間は型セレクタ (type selectors) に適用されますが、属性セレクタには適用されません。規定の名前空間には、初期値が存在しないからです。非修飾名を規定の名前空間に適用させるようなモジュールは、規定の名前空間が定義されていない場合、そのような非修飾名がどう解釈されるかを定義する必要があります (MUST)。
Note: 型セレクタと一緒に規定の名前空間を利用するとき、UA が規定の名前空間をサポートしているかいないかが、セレクタの解釈に影響を及ぼします。
同じ名前空間接頭辞や、規定の名前空間が複数回宣言された場合は、最後の宣言を用いるものとします (SHALL)。名前空間接頭辞の宣言や規定の名前空間を一回以上宣言するのは不適合です。
CSS 修飾名 (CSS qualified name) は、明示的に名前空間に配置された (結びつけられた) 名前を指します。修飾名を CSS 構文において構成する場合、宣言された名前空間接頭辞は、要素や属性名などの前に "vertical bar" (|
、U+007C) で区切り記述します。宣言された名前空間を表す接頭辞は、ローカル名の名前空間を表すことになります。どの名前空間にも属さないものについては、修飾名の接頭辞を省略することができます (MAY)。つまり、展開名における名前空間名には何の値も入らないことになります。ホスト言語が定義する内容によっては、名前空間を問わずどの名前も対象となるよう、接頭辞のワイルドカードとしてアスタリスク (*
、U+002A) を使用することができます (MAY)。名前空間に属していないものも対象となります。
次の名前空間を宣言します。
@namespace toto "http://toto.example.org"; @namespace "http://example.com/foo";
このとき、規定の名前空間が適用される内容において、各修飾名は次のように解釈されます。
toto|A
http://toto.example.org
に属する A
を表します。
|B
B
を表します。
*|C
C
を表します。名前空間に属さないものも含みます。
D
http://example.com/foo
に属する D
を表します。
ローカル名の前にある CSS 修飾名の構文は、次のようになります。この構文定義では、ワイルドカード接頭辞を許可するもの (wqname
) と、許可しないもの (qname
) どちらも定義されています。なお、構文はCSS 2.1 の文法 (付属書) [CSS21] を利用しています。これによって、トークンの間には空白ではなく、コメントが暗黙的に許可されていることに注意してください。
qname_prefix : [namespace_prefix]? '|' ; wqname_prefix : namespace_prefix? '|' | '*' '|' ;
CSS 修飾名はたとえば、セレクタやプロパティの値など、他のモジュールで定義される部分に用いることができます。それらのモジュールは、適切に宣言されていない名前空間接頭辞をどのように処理するかを定義する必要があります (MUST)。このような処理において、宣言されていない名前空間接頭辞は、パースエラーとみなすべきです (SHOULD)。エラーにより、セレクタや宣言などは非妥当なものと解釈され、CSS においては 無視 されることになります。
この草案は Chris Lilley と Peter Linss による初期の CSS namespace support と、Håkon Lie と Bert Bos による (未公開の) CSS and XML という初期草案、そして Bert Bos と Steven Pemberton による XML Namespaces and CSS からかなりのものを取り入れています。現在、そして前の CSS ワーキンググループメンバーの多くが、この文書に貢献しています。また、www-style@w3.org での議論や、他の場所での議論もこの仕様に貢献しています。また特に、L. David Baron、Karl Dubost、Ian Hickson、Bjöern Höhrmann、Lachlan Hunt と、彼らの寄せたコメントに感謝しています。