この文書は、W3C 標準情報 (TR) の覚書 (NOTE)、"SAC: Simple API for CSS" (2000 年 7 月 28 日付) <http://www.w3.org/TR/2000/NOTE-SAC-20000728>ToyFish.Net が独自に翻訳したものです。この仕様書の正式なものは W3C のサイトにある英語版であり、その著作権は W3C が保有しています。また、翻訳に誤りがある可能性に留意してください。

誤訳・誤植を発見された方は ToyFish.Net までお知らせください。

翻訳の最終更新日: 2000 年 8 月 6 日


W3C

SAC: Simple API for CSS

W3C 覚書 (NOTE)、2000 年 7 月 28 日

この版:
http://www.w3.org/TR/2000/NOTE-SAC-20000728
最新版:
http://www.w3.org/TR/SAC
執筆者:
Bert Bos、W3C
Philippe Le Hégaret、W3C

概要

この覚書 (NOTE) では、W3C における、CSS パーサのための共通 API を開発する プロジェクトについて説明します。サンプルのソースコードがすでに ダウンロードできるようになっています ([SAC])。このソフトウェアはオープンソース (OpenSource) です。

この文書の位置付け

この文書は、W3C が議論のためのみに公開する 覚書 (NOTE) です。 W3C によるこの覚書 (NOTE) の公開は、W3C や W3C チーム、あるいは W3C 会員による 支持を示すものではありません。この文書は、 CSS パーザのための汎用 API の提案を収録しています。

我々はコメントに応じてこの覚書 (NOTE) を改訂し、反響が十分にあれば SAC に費やす資源を増やす予定です。

この文書についてのコメントを募ります。公開メーリングリスト www-style@w3.org までお送りください。 アーカイブは http://lists.w3.org/Archives/Public/www-style/ に あります。

この文書は W3C スタイルアクティビティ (W3C Style Activity) の 一環として作成されました。

W3C が現在公開している勧告その他の技術文書の一覧は、 http://www.w3.org/TR にあります。

目次


1. プロジェクトの目標

このプロジェクトの目標は、W3C 技術の普及を促進することです。

XML 書式のうまくいった点のひとつは、XML パーザ間で相互運用可能であるということです。 この相互運用性は、Simple API for XML ([SAX]) によって 実現されてきました。SAC は CSS に対してこれと同じ役割を果たします。

CSS 仕様 ([CSS1][CSS2]) では、 CSS のすべてのバージョンに共通の、前方互換な文法を導入しています。 今後のすべてのバージョンの CSS は、書式の制限を加えることはあっても、 この中核となる書式に従うはずです。

Simple API for CSS (SAC) は、イベントベースの CSS パージングのための標準 API を 提案するものです。SAC は、CSS1、CSS2 および将来のバージョンの CSS をサポートするように 設計されています。

2. SAC の概要

SAC のモデルは、次のような点で Simple API for XML ([SAX])) のモデルに 従っています。

  1. パーザインタフェース: すべてのパーザが実装する関数のセット。 アプリケーションプログラムから呼び出すことができます。これを使うと、 アプリケーションが CSS スタイルシートや、CSS 規則、CSS 選択子などをパーズすることが 可能になります。
  2. DocumentHandler インタフェース: アプリケーションプログラムが実装し、 パーザがイベントを報告するために呼び出す、コールバック関数群のプロトタイプ。 これを使うと、アプリケーションプログラムがイベント (startDocument、 @media 規則の開始、CSS 選択子の開始など) を待ち受けることが 可能になります
  3. CSS 選択子に関する API: 選択子を完全に記述したオブジェクトの型定義のセット。
  4. CSS 語彙単位に関する API: プロパティ値を構成するトークンについての 型定義のセット。

現在の SAC 案 ([SAC]) は、Java ([Java]) と C で入手できます。CSS2 サポートを含んだ Java での実装は「フルート (flute)」と呼ばれており、これも同じアドレスから 入手可能です。

この覚書 (NOTE) では、SAC の簡単な概略を述べるに留めますので、 詳しくは上記 SAC 案のオンラインドキュメンテーションを参照してください。

3. SAC と CSS オブジェクトモデル

DOM レベル 2 仕様では、CSS のオブジェクトモデル ([CSSOM]) を導入しています。

SAC は次のように CSS オブジェクトモデルを補完します。

  1. SAC を使って CSS オブジェクトモデルを構築することができます。
  2. SAC は、CSS オブジェクトモデルとは違った、CSS エンジンの内部表現へのアクセスを 提供する CSS 書式への API を提供します。("matrix(0 0 1 1)" や "attr('value') + 3cm" といった) CSS の新しい値はすべて、オブジェクトモデルの拡張が必要ですが、SAC の拡張は不要です。
  3. SAC は CSS の文字列ベースのモデルを提供しません。

4. Parser インタフェース

このインタフェースはパーザ自体を表します。すべての SAC パーザは この基本インタフェースを実装しなければなりません。これにより、アプリケーションが、 様々な種類のイベントをイベントハンドラに登録したり、CSS 選択子に関するファクトリ (factories) を 設定したり、CSS 文書やその一部分のパーズを開始したりすることができます。 オブジェクト指向設計においてオブジェクトのインスタンスを生成する際の 慣習的な解決策は、ファクトリメソッドを定義することです。 何らかのインタフェース "X" を実装するオブジェクトは、"createX()" で生成されます。

getParserVersion
下層のパーザがどの CSS 言語をサポートしているのかを示す絶対 URI を返します。 現在では次の 2 つの URI が既知です。
parseStyleSheet
CSS 文書をパーズします。
parseSelectors
コンマで区切られた選択子のリストをパーズします。パーザは comment および startSelector イベント のみを生成します。

完全な説明については、SAC の公開ページ ([SAC]) にある ドキュメンテーションをご覧ください。

5. DocumentHandler インタフェース

SAC の中心となるイベント処理インタフェースです。アプリケーションは そのそれぞれにコールバック関数を実装します。実装した関数は 対応するイベントが発生したときにパーザによって呼び出されます。 このインタフェースでのイベントの順序は重要で、文書自体での情報の順序を 反映したものになります。例えば、@font-face 規則のすべての内容 (プロパティ) は、 startFontFace イベントから endFontFace イベントまで 順に発生します。

主な関数の一覧を示します。

comment(String text)
コメントの通知を受け取ります。これは CSS パーザがサポートしなくても かまいません。
startDocument(InputSource source)
CSS 文書開始の通知を受け取ります。
endDocument(InputSource source)
CSS 文書終了の通知を受け取ります。
startSelector(SelectorList selectors)
スタイル宣言開始の通知を受け取ります。スタイル宣言は、 選択子のリストとプロパティのリストで構成されます。
endSelector(SelectorList selectors)
スタイル宣言終了の通知を受け取ります。パーザはプロパティのリストの後で スタイル宣言終了を通知します。
property(String name, LexicalUnit value, boolean important)
プロパティ宣言の通知を受け取ります。
startFontFace()
フォントフェース文開始の通知を受け取ります。
endFontFace()
フォントフェース文終了の通知を受け取ります。

6. 選択子 API

CSS オブジェクトモデル ([CSSOM]) と違って、 SAC では CSS 選択子をオブジェクトとして表します。SAC の選択子は、任意の型のプライマリノードを 選択したり、それらのノードに条件を適用したりすることができます。 選択子同士や条件同士を結びつけることもできます。SAC では現在 CSS1 と CSS2 で表現できる以外の 選択子も表現できます。

6.1. Selector

プライマリノードは次のいずれかです。

選択子同士の結びつきは次のいずれかです。

CSS1 や CSS2 には要素や疑似要素以外のノードを示す選択子を表現するための 書式がない点と、ネガティブ選択子と間接的な隣接選択子も CSS1 あるいは 2 に いまのところ存在しない点に注意してください。

6.2. Condition

条件は ConditionalSelector インタフェースで 選択子に付加することができます。

条件は次のいずれかです。

条件同士の結び付けは論理演算 (SAC_AND_CONDITIONSAC_OR_CONDITION) のみです。

7. LexicalUnit インタフェース

このインタフェースは CSS 値の語彙単位を表します。すべての語彙単位 (コンマや数値、文字列、ピクセル単位などを含む) や、 それを越える表現 (例えば "12pt/14pt" は "12pt"、"/"、"14pt" の 3 つの部分で表現される) が 表されます。

8.

SAC の小規模な例が Java で利用できます。

9. 参照文献

CSS1
Bert Bos; Hakon Wium Lie (編著)。Cascading Style Sheets, Level 1 (カスケーディングスタイルシート、レベル 1)。 1999 年 1 月。W3C 勧告。http://www.w3.org/TR/REC-CSS1 にあります。
CSS2
Bert Bos; Hakon Wium Lie; Chris Lilley; Ian Jacobs (編著)。Cascading Style Sheets, Level 2 (カスケーディングスタイルシート、レベル 2)。 1998 年 3 月。W3C 勧告。http://www.w3.org/TR/REC-CSS2 にあります。
CSSOM
Vidur Apparao; Philippe Le Hégaret; Chris Wilson (編著)。Document Object Model CSS (CSS 文書オブジェクトモデル)。 2000 年 3 月。W3C 勧告候補。http://www.w3.org/TR/2000/CR-DOM-Level-2-20000510/css.html にあります。
Java
Gosling, James; Joy, Bill; Steele, Guy。The Java language specification (Java 言語仕様)。 Addison-Wesley。1998 年。http://java.sun.com/docs/books/jls/index.html にあります。
SAC
Philippe Le Hegaret。Simple API for CSS。 2000 年 3 月。http://www.w3.org/Style/CSS/SAC/ にあります。
SAX
David Megginson。Simple API for XML。 2000 年 3 月。http://www.megginson.com/SAX/ にあります。

翻訳: ToyFish.Net <sardine@toyfish.net>