公開後に報告されたエラーや課題については、正誤表をご確認ください。 また、翻訳もご覧ください。
Copyright © 2014 W3C® (MIT, ERCIM, Keio, Beihang), All Rights Reserved. W3C liability, trademark and document use rules apply.
このCSS名前空間モジュールは、CSSで名前空間を使用するための構文を定義します。デフォルトの名前空間を宣言し、名前空間を接頭辞にバインドするための @namespace 規則を定義し、また他の仕様が名前空間付き名前でこれらの接頭辞を使用するために採用できる構文も定義します。 CSS は、構造化文書(HTMLやXMLなど)のレンダリングをスクリーン、印刷、音声などで記述するための言語です。
このセクションは、この文書が公開された時点のステータスについて説明します。他の文書がこの文書に取って代わる場合があります。現在のW3C出版物とこの技術報告の最新版は W3C技術報告書インデックス http://www.w3.org/TR/ で確認できます。
この文書は CSSワーキンググループ によって 勧告 として作成されました。
この文書は、W3Cメンバー、ソフトウェア開発者、他のW3Cグループや関係者によってレビューされ、ディレクターによりW3C勧告として承認されています。これは安定した文書であり、参考資料として使用したり、他の文書から引用したりすることができます。W3Cの役割は、勧告に注目を集め、その広範な展開を促進することです。これによりWebの機能性と相互運用性が向上します。
W3Cは、誰もがこの仕様を実装することを奨励します。コメントは、(アーカイブ) 公開メーリングリスト www-style@w3.org(投稿方法参照)に送信できます。メール送信時は、件名に「css-namespaces-3」を含めてください。例:「[css-namespaces-3] …コメントの概要…」
この文書は 2004年2月5日 W3C特許ポリシーに基づいて活動するグループによって作成されました。W3Cは、グループの成果物に関連してなされた特許開示の公開リストを管理しています。そのページには特許開示の手順も記載されています。
前回のバージョンからの変更詳細については、変更点 セクションを参照してください。
このセクションは非規範的です。
このCSS名前空間モジュールは、CSSにおける名前空間の使用構文を定義します。 デフォルトの名前空間を宣言し、名前空間を名前空間接頭辞にバインドするための@namespace規則を定義します。 また、その接頭辞を使って名前空間付き名前を表現する構文も定義しています。 これらの名前がどこで有効か、何を意味するかは本仕様では定義せず、 文脈によって異なり、Selectors([SELECT])など、 CSS Namespacesモジュールで定義された構文を参照するホスト言語によって定義されます。
CSS NamespacesモジュールをサポートしないCSSクライアントは (CSSの前方互換パース規則に正しく準拠していれば) @namespace規則や名前空間付き名前を利用するスタイル規則をすべて無視します。 CSSにおける名前空間接頭辞の区切り構文は、これらのCSSクライアントがスタイル規則を無視し、 誤って一致しないように意図的に設計されています。
文書や実装はCSS Namespaces単独には適合できませんが、 CSSまたはこの仕様を規範的に参照する他のホスト言語を実装する際に、 本仕様の適合要件を満たす場合、CSS Namespacesへの適合を主張できます。
CSS Namespacesへの適合は2つのクラスに定義されています:
適合要件は、記述的な主張とRFC 2119の用語の組み合わせで表現されます。規範的部分で使われるキーワード "MUST"、"MUST NOT"、"REQUIRED"、"SHALL"、"SHALL NOT"、"SHOULD"、"SHOULD NOT"、"RECOMMENDED"、"MAY"、"OPTIONAL" はRFC 2119に記載された通りに解釈されます。 ただし、可読性のため本仕様ではこれらの語は全て大文字では記載されていません。本仕様書の本文は、明示的に非規範的と記載された部分、例、注釈を除きすべて規範的です。[RFC2119]
この仕様書の例は「例えば」という語で導入されるか、class="example"
で規範文と区別されます。例:
これは情報提供的な例です。
情報提供的な注記は "Note" で始まり、class="note"
で規範文と区別されます。例:
Note: これは情報提供的な注記です。
この仕様で導入された用語に加え、 CSS NamespacesはNamespaces in XML 1.0で定義された用語も使用します。[XML-NAMES] ただし、ここで定義された構文はXML要素や属性名の表現に限定されず、 ホスト言語で定義される他の種類の名前空間も表現できます。
CSS Namespacesでは、空文字列からなる名前空間名は ヌル名前空間、つまり名前空間がないことを表します。
@namespace empty ""; @namespace "";
型セレクター
elem
、
|elem
、
empty|elem
は同じ意味になります。
@namespace at-ruleは名前空間接頭辞を宣言し、それを指定した名前空間名(文字列)と関連付けます。 この名前空間接頭辞は、下記で定義するCSS修飾名など名前空間付き名前で使用できます。
@namespace "http://www.w3.org/1999/xhtml"; @namespace svg "http://www.w3.org/2000/svg";
最初の規則はデフォルト名前空間
http://www.w3.org/1999/xhtml
を、明示的な名前空間を持たない名前に適用することを宣言します。
二番目の規則は名前空間接頭辞svg
を宣言し、
svg
名前空間接頭辞を使う箇所でhttp://www.w3.org/2000/svg
名前空間を適用します。
CSS Namespacesでは、Namespaces in XML 1.0と同様に、 接頭辞は単なる構文上の要素です。 重要なのは展開名 (ローカル名と名前空間名の組)です。 したがって、CSSスタイルシートで使われる接頭辞やデフォルトかどうかは、 マークアップで使われる名前空間接頭辞やそのデフォルトとは独立しています。
<qml:elem xmlns:qml="http://example.com/q-markup"></qml:elem>
そしてCSSファイルの先頭に次の@namespace宣言がある場合:
@namespace Q "http://example.com/q-markup"; @namespace lq "http://example.com/q-markup";
このCSSファイル内のセレクターQ|elemとlq|elemは、どちらも要素<qml:elem>
に一致します。
(セレクターqml|elemは無効です。 CSS NamespacesはCSSで宣言された接頭辞のみ認識し、文書言語で宣言された接頭辞は認識しません。)
@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規則の後、
他の無視されないat-ruleやスタイル規則の前に記述しなければなりません。
CSS構文では、[ import [S|CDO|CDC]* ]*
の直後に[ namespace [S|CDO|CDC]* ]*
をstylesheet
文法に追加します。
構文的に無効な@namespace規則(不正や誤配置)は、 無視されなければなりません。 不正な@namespace規則を含むCSS スタイルシートは 有効なスタイルシートではありません。
URI
構文からパースされたURI文字列はリテラル文字列として扱われます。
STRING
構文同様、URI固有の正規化は行われません。
空文字列や不正なURIを表す文字列を含むすべての文字列は、 @namespace宣言における有効な名前空間名です。
名前空間接頭辞は、その@namespace規則が記述されたスタイルシート内だけで宣言されます。他のスタイルシート、インポート元/先のスタイルシート、同じ文書に適用される他のスタイルシートでは宣言されません。
名前空間接頭辞は、一度宣言されると、その宣言された名前空間を表し、名前空間付き名前の名前空間を示すために使えます。 名前空間接頭辞はCSSカウンター名と同様、大小文字を区別します。
名前空間宣言で接頭辞を省略した場合、 その宣言された名前空間はデフォルト名前空間となります。 デフォルト名前空間は、明示的な名前空間接頭辞のない名前に適用される場合があります。 名前空間接頭辞を利用するモジュールは、どの文脈でデフォルト名前空間が適用されるか定義しなければなりません。 例えば、[XML-NAMES]に従い、 Selectors([SELECT])では デフォルト名前空間は型セレクターに適用されますが、属性セレクターには適用されません。 デフォルト名前空間に既定値はありません。 デフォルト名前空間に非修飾名を割り当てるモジュールは、 デフォルト名前空間が宣言されていない場合にそれらの非修飾名がどう解釈されるか定義しなければなりません。
Note: 型セレクターとデフォルト名前空間を併用すると、 デフォルト名前空間に対応するUAと対応しないUAでセレクターの解釈が異なる場合があります。
名前空間接頭辞やデフォルト名前空間が複数回宣言された場合、 最後の宣言のみが使用されます。 名前空間接頭辞やデフォルト名前空間を複数回宣言することは非適合です。
CSS修飾名は、明示的に(関連付けて)名前空間内に位置づけられる名前です。
CSS構文で修飾名を作るには、
宣言された名前空間接頭辞をローカル名(要素名や属性名など)の前に付け、
「縦棒」(|
, U+007C)で区切ります。
宣言された名前空間接頭辞は、そのローカル名の名前空間を示します。
修飾名の接頭辞を省略することで、名前が名前空間を持たないこと(展開名の名前空間部分が値を持たないこと)を示します。
文脈によっては(ホスト言語で定義)、
ワイルドカード接頭辞(アスタリスク*
, U+002A)を使い、
任意の名前空間(名前空間なしも含む)で名前を示すことができます。
@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? | '*' ] '|' ; qname : qname_prefix? ident ; wqname : wqname_prefix? ident ; wqwname : wqname_prefix? [ ident | '*' ] ;
CSS修飾名は、他のモジュールで記述されるように、 セレクターやプロパティ値などで使用できます。 これらのモジュールは、適切に宣言されていない名前空間接頭辞の扱いを定義しなければなりません。 その扱いは、宣言されていない名前空間接頭辞をパースエラーとして扱い、 そのセレクターや宣言(等)を無効とし、CSSでは無視するべきです。
2011年9月29日勧告以降の変更点:
このドラフトは、Chris LilleyとPeter LinssによるCSS名前空間サポートの初期ドラフト、 Håkon LieとBert BosによるCSSとXMLの初期(未公開)ドラフト、 Bert BosとSteven PembertonによるXML NamespacesとCSSに大きく依拠しています。 CSSワーキンググループの多くの現・元メンバーがこの文書に貢献しています。 www-style@w3.orgや他の場での議論も本仕様に多くのアイデアをもたらしました。 特にL. David Baron、Karl Dubost、Ian Hickson、Björn Höhrmann、Lachlan Huntのコメントに感謝します。
定義されているプロパティはありません。