[1] 処理系の都合で CSS が RDF として扱えたらなあと思うことがあります。
GSS なんて近いんですが、完全写像じゃありませんから、 CSS そのものを扱うのには不都合です。 欲しいのは完全にあたらしくて綺麗なスタイル言語じゃなくて、 とりあえず手元の CSS を処理するための方法だってことです。
[2] ってことでちょっと考えてみます。
In CSS:
ns|element1 > ns|element2 { display : block; font-family : "font 1", "font 2", serif; color : red; background-color : #2351A4; border : thin dotted rgb (12, 53, 53); }
In RDF/N3:
[a css-selector:element; xmlnames:name ns:element2; css-selector:child-of [a css-selector:element; css:name ns:element1; ] ] css:display css:block; css:font-family [a css:font; css-font:name "font 1"], [a css:font; css-font:name "font 2"], css-font:serif; css:color [a css:color; css-color:name "red"]; css:background-color [a css:color; css-color:hex "2351A4"]; css:border [a css:border; css-border:width css:thin; css-border:style css:dotted; css-border:color [a css:color; css-color:red "12"; css-color:green "53"; css-color:blue "53"; . ];
とか。特に選択子辺りは手書きは無理かもだけど、 そもそも処理用だしいいかなって感じ。
[3] 属性・特性には名前空間:名前
という資源名を与えます。
例えば、 font-size
属性の資源名は
名前空間:font-size
になります。
これが述語になります。 RDF 的には特性なので、小文字のままにします。
[4] 値は目的語とします。 具体的表現は属性・特性の種類により異なりますが、 基本的には表記ではなく資源にします。 資源の型 (class) は可能なら適当な代表属性名の先頭を大文字にしたものとします。
例えば、色を表す class は、
名前空間:Color
とします。
[5] 見出し語は表記ではなく資源にします。 名前空間は一応属性名とは別にしますが、 種類別に分けるのがいいか全部同じ空間でいいか (例えば <color>/red と <font-family>/serif を同じ名前空間にするのかどうか) は検討の余地があります。
表記にしないのは、表す対象が見出し語の文字列ではなく何らかの概念 (red なら「赤」という色) であるからにして、 見出し語はそのラベルに過ぎないからです。
参考 : 見出し語の RDF/N3 定義の例 (CSS の記述の変換結果例じゃないよん):
css-kwd:red
a css:Color;
css:rgb-red "255";
css:rgb-green "0";
css:rgb-blue "0";
.
css-kwd:serif
a css:Font;
## あるシステムでの束縛の例
css:font-name "Times New Roman";
.
css-kwd:pointer
a css:Cursor;
something:same-as <file://path/to/pointer.cur>;
.
css-kwd:bolder
a css:Weight;
## 定義しようがないかも
.
css-kwd:inherit
a css:Property;
something:css-level something:css2;
.
## font-size: 12em; css:font-size [ a css:Length; css-unit:em "12"; ]; ## border-width: 0; css:border-width css-kwd:zero; と css:border-width [ a css:Length; css-unit:_ "0"; ]; とどっちがいいか。 ## font-weight: 700; css:font-weight [ a css:Weight; css-unit:_ "700"; ];
## background-image: url(path/to/image); css:background-image <path/to/image>;
## content: "ABC"; css:content "ABC"; ## content: "Something" url(path/to/resource); css:content [ a rdf:Seq; rdf:_1 "Something"; rdf:_2 <path/to/resource>; ];
## quotes: "{" "}"; css:quotes [ a rdf:Seq; rdf:_1 "{"; rdf:_2 "}"; ]; ## margin: 1px 2px; css:margin [ a css:Margin; css:top [a css:Length; css-unit:px "1"]; css:bottom [a css:Length; css-unit:px "1"]; css:right [a css:Length; css-unit:px "2"]; css:left [a css:Length; css-unit:px "2"]; ## cf. css:Margin rdf:isSubClassOf css:Rule ## border: thin dashed blue; css:border [ a css:Border; css-bdr:width css-kwd:thin; css-bdr:style css-kwd:dashed; css-bdr:color css-kwd:blue; ]; ## border-left: 1cm solid #c0c0c0; css-bdr:left [ a css:Border; css-bdr:width [a css:Length; css-unit:cm "1"]; css-bdr:style css-kwd:solid; css-bdr:color [a css:Color; css:hex "C0C0C0"]; ]; ## border-color: rgb ( 1, 2, 3); css-bdr:color [ a css:Color; css-rgb:red "1"; css-rgb:blue "2"; css-rgb:green "3"; ]; # cf. @prefix css-bdr <css:border->. @prefix css-rgb <css:rgb->.