言語ゲーム

とあるエンジニアが嘘ばかり書く日記

Twitter: @propella

RDF と xul

まだ全然理解出来てないが、RDF というのが相当面白い事が分かった。今まで XML なんてのはハッカーが触れる事では無いと聞いていたので遠慮していたのだが、色んな世界が広がっているなあ。RDF というのはその中でも野心的な試み。XML のツリー形式や、SQL みたいな表形式やそういうのひっくるめて統一的に表現するもので、某氏の好きな prolog のような論理型の言語とある。「順序」や「選択」を表す方法が最初から用意されているあたりが美しくないなあと言う気もするが、実用的なデザインなのだろう。RDF では全ての要素を URI であらわすので、結果 URI を繋いだ蜘蛛の糸みたいな構造をテキストで表現した物だといえる。

Mozilla では、ブックマークや履歴などの内部情報を RDF としてアクセス出来る。xulplanet.com にアクセスできなくてまだ詳しくみれて無いが、データソースを扱う素敵な仕組みを知りたかったので参考になる。例えばブックマークの一段目だけ表示する xul ファイルは以下のようになる。

<?xml version="1.0"?>
<?xml-stylesheet href="chrome://global/skin/" type="text/css"?>
<window id="rdftest"
        xmlns="http://www.mozilla.org/keymaster/gatekeeper/there.is.only.xul">
<label value="ブックマークを表示するテスト"/>
<vbox datasources="rdf:bookmarks" ref="NC:BookmarksRoot" flex="1">
<!-- datasources はデータの場所を表す ref は about 属性(rdf 内の位置)の値 -->
  <template>
    <label uri="rdf:*" value="rdf:http://home.netscape.com/NC-rdf#Name"/>
  </template>
</vbox>
</window>

うう、面倒くさい。さて、RDFxul template を etoys で実現するとしてどういう利点があるかと言うと、内部情報を統一的に扱えるという事がある。例えばビューワのタイルや、オブジェクトカタログ、フラップの中身なんかを etoys のレベルでメタに扱えるようになる。ここで大事なのが、列、ツリー、ネットワークの順で扱いが難しくなるのだが、これをラップする仕組みとして xul template が参考になる事。

例えば上の例では、ブックマークは本来ツリーの形をしているが、列としてしか扱っていない。列の範囲なら etoys で言うところの入れ物として扱えるので簡単だ。つまり、簡単な事は簡単なままに、難しい事は可能にという事をする為に、内部的に RDFxul template を参考に出来ないかと考えている。