Entry

CSS パーサの利用例とか妄想とか

2009年01月19日

以前書いた「qune: C/C++ ベースの CSS パーサを探しているんだけれども見つからない」は,あまりいろいろ考えないで書いたエントリなんですけど,なんだか謎空気を振りまいているみたいなので,どんなこと考えている(どんなものが欲しい)のか,もうちょっと考えてみました。

ここら辺の話。

個人的に CSS は,ウェブ関連技術の中でも,かなり遅れてる方面だと思っていたりします。ブラウザ間で挙動が統一されていないとかいったホゲホゲも,もちろんあるんですけれど,それ以前に管理・編集する手段が超人力で……。

qune: C/C++ ベースの CSS パーサを探しているんだけれども見つからない

で,vantguarde さんからいただいた感想。

vantguarde CSS 「管理・編集する手段が超人力で」どういうことだろう。HTMLとかのタグ打ちみたく自動化できる部分って、CSSにはすごく少ない気がする。 2009/01/19

はてなブックマーク - qune: C/C++ ベースの CSS パーサを探しているんだけれども見つからない

たしかに上のエントリだけからじゃ,何がしたいのかよく分かりませんね。もちっと説明をつけておきます。

CSS パーサが欲しい直接的な動機は,CSS,というかデジタルデータ一般のスタイルに対する「メタフォーマット」が欲しいってなことだったりします。メタフォーマットというのは,多分ここで作った言葉で(他に何か定義があるかもしれない),「フォーマット定義を抽象化したフォーマット定義」という意味です。

世の中には,HTML だけでなく,PDF やら Postscript やら,TIFF やらといった,たくさんのフォーマットがあります(Adobe モノばっか挙げてしまっているが)。また,アプリケーションのレイアウトに関するフォーマットも含めれば,WPF とか Java Swing/JSF といったもんも考えられる。こういったもんを一括して,ひとつのフォーマットで管理できれば,ひとつのレイアウトだけを管理すればいいことになります。アプリケーション用のフォーマットで考えると,例えば,ローカルアプリと SaaS 的なウェブアプリのレイアウト情報をシームレスに共有することができそうです。

ま,アプリケーションも含めると,守備範囲が広くなっちゃいますね。けど,PDF と HTML のフォーマットを束ねるメタフォーマットとかっつのは,十分に現実的なんだと思ったりします。

あたしゃ5年くらい前,こういう役割は,今後 XSLT + XSL-FO が担うのだとばかり思っていました。現実,Apache FOP は,その実装のひとつだったりした。しかし,現実はどうだったかというと,XSL-FO なんて知っている人なんてほとんどいないし,知ってるからといってえばれるものでもないものになってしまいました。

XSL-FO は XML ですから,RDF/Dublin Core のような(コンピュータが理解できる)メタデータを埋め込むことができるし,アプリケーションから動的にスタイルを生成/取得することもできます。また,XML のような木構造だったら,枝の消長で差分管理する,なんてアイデアも考えられる。さらには,上のエントリでも書いたように,XML-DB で管理して,クエリの形でスタイルを管理することもできそうです。ともかくも,結局こゆのって,スタイルそのものが「コンピュータに理解できる構造を持っている」からこそできることなんですよね。

で,CSS にもどる。

CSS が上のようなメタフォーマットとしての地位を得られるかというと,あたしゃ非常に怪しいと思っています。というのも,もともとの設計思想がそういうことになっているし,フォーマットも特殊だから。

現に,一般的なウェブアプリやブログシステムの場合,コンピュータにとって CSS は「ただの文字列」以上の意味を持っていません。CSS が構造をもったデータとして解釈される瞬間っつのは,ブラウザが CSS を読み込んだその時しかない。つまり,CSS を CSS としてちゃんと理解できるのは,それを手作業でシコシコ作った人間と,そのデータを受け取るブラウザくらいしかないというわけです。「管理・編集する手段が超人力で」というのはそういうこと。もちろん,ウェブアプリのフレームワークなんかでは,出力される HTML タグの種類を縛ることで,ある程度スタイルにプログラム的な意味を持たせることができます(Struts の Tile とか),しかし,それにも限界があると思うんですね。

つまり,CSS はネットの HTML を表示するフォーマット以上の地位は得られないと思うわけです。CSS は HTML の出力フォーマット専用。

一方,メタスタイルを仮に作るとした場合(XSLT + XSL-FO に乗っかるのも手だが),まずその前段階として,今ある各種スタイルフォーマットをコンピュータに理解させる必要があります。この点,PDF や TIFF のパーサは既にあちこちにある。けど,CSS パーサはどういうわけだかあまりないんですね。つことで,「CSS パーサ」なわけです。やっとつながった。

とまあそんな具合で,5年前の目論見を外された怨念のような,深(そうで浅)い理由があったというわけです。

CSS のパーサを考える場合,とりあえず考えることとして,API の仕様とデータの持ち方(データ構造)をどうするのかっつのが問題になるんだと思います。この点,CSS の場合,amachang さんの言う通り,「セレクタのマッチングと詳細度の計算」あたりがネックなるはず。API の設計そのものともリンクしそうだし,どうすんだろ,これ。

amachang http://trac.webkit.org/browser/trunk/WebCore/css/CSSGrammar.y ←これはどうでしょう。ただ、文法解析よりセレクタのマッチングと詳細度の計算がめんどくさそう。 2009/01/19

はてなブックマーク - qune: C/C++ ベースの CSS パーサを探しているんだけれども見つからない

とりあえず,amachang さんに紹介してもらった yacc ソースでもってゴニョゴニョやってみることにします。ありがとうございます。つか,いま yacc の処理系が手元にない(FreeBSD BOX の HDD が死亡して Windows ノート使ってる)ので,環境から作ることになりそう。yacc/bison って,Cygwin にあったっけ。つか,あたしが作ることになったのか?

Trackback
Trackback URL:
Ads
About
Search This Site
Ads
Categories
Recent Entries
Log Archive
Syndicate This Site
Info.
クリエイティブ・コモンズ・ライセンス
Movable Type 3.36
Valid XHTML 1.1!
Valid CSS!
ブログタイムズ

© 2003-2012 AIAN