この文書「CSS 名前空間モジュール」は、W3C の CSS ワーキンググループ による「CSS Namespaces Module (W3C Candidate Recommendation 23 May 2008)」の日本語訳です。
規範的な文書は原文のみとなっています。この日本語訳は参考情報であり、正式な文書ではないことにご注意ください。また、翻訳において生じた誤りが含まれる可能性があります。
原文が勧告 (Recommendation) ではなく、勧告候補 (Candidate Recommendation) であることにご注意ください。
原文の最新版 は、この日本語訳が参照した版から更新されている可能性があります。また、この日本語訳自身も更新されている可能性があります。日本語訳の最新版は、W3C 仕様書 日本語訳一覧 から参照することができます。
Copyright © 2008 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 ワーキンググループ によって作成された 勧告候補 (Candidate Recommendation) です。
勧告候補とは、広くレビューがなされ実装段階に入った文書のことです。W3C はこの仕様を実装する方に対し、そのコメントを公開メーリングリスト www-style@w3.org (アーカイブ) で行われています (議論への参加の前に、手順 をお読みください)。E メールを送るときには、件名に “css3-namespace” という文字を含めてください。たとえば、“[css3-namespace] …summary of comment…” というスタイルが適当です。
勧告候補としての仕様書公開は、W3C メンバーによる支持を意味するものではありません。この文書は更新されたり他の文書と置き換えられたり、また破棄される可能性もある草稿段階の仕様書です。策定中ということを明記せずに、この文書を引用することは適当でありません。
この文書は 5 February 2004 W3C Patent Policy の下で活動するグループにより作成されました。W3C は 特許情報の開示に関する公開リスト を関連する団体と共に、その成果物とあわせて管理しています。リストには情報開示に関する説明もありますので、ご参照ください。特許について十分に知識のある人物が、当該仕様に関し Essential Claim(s) が認められると判断した場合は、W3C 特許方針の第 6 章 に従い情報を開示する必要があります。
この仕様が CR ステージを通過した時点で、次のような条件がそろっているものとします。
少なくとも二つの、相互運用可能な実装が存在しています。これを評価基準とするため、ここでは次の用語を定義します。
CSS テストスイートの各テストケースをパスします。もし実装が Web ブラウザでなければ、そのテストスイートと同等なテストをパスします。そのようなユーザーエージェント (UA) が相互運用性を主張するために利用される場合、テストスイート内の該当するテストには、それぞれ代替となるテストが用意されるべきです。また、そのような UA が相互運用性を主張するために利用される場合、同じように相互運用性を主張する別の UA が一つ以上存在し、また関連するテストを通る必要があります。このとき、関連するテストは査読を行いやすいよう、パブリックな場所で公開される必要があります。
次のようなユーザーエージェントが、実装と呼ばれることになります。
CR 期間 (CR Period) は、最低三ヶ月以上設ける必要があります。これは、この仕様が 2008 年 8 月 23 日の前には CR を通過しないことを意味します。この仕様が CR を追加したとき、実装レポートが公開されます。現段階では、そのようなレポートは存在しません。
仕様に記された技術は、アクセシビリティに害を与えるものであってはなりません。
CSS 名前空間の テストスイート は、勧告候補の期間中に作成されます。
前回の最終草案に寄せられたコメントや、それ以降の変更については Disposition of Comments という別の文書にまとめられています。
このセクションは非規範的です。
この 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 が規定の名前空間をサポートしているかいないかが、セレクタの解釈に影響を及ぼします。詳しくはセレクタモジュールの Namespaces and down-level clients を参照してください [SELECT]。
同じ名前空間接頭辞や、規定の名前空間が複数回宣言された場合は、最後の宣言を用いるものとします (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 Lins による初期の 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 と、彼らの寄せたコメントに感謝しています。