ちょっとしたメモ

Fabl補足:RDFでプログラムを表現する

昨日はFablを「Javascript風RDF処理言語」という形で紹介したけれど、これは見方が一面的なので少々補足。Fablはそのコード自身がRDFのリソースとして表現される処理系で、操作対象とプログラムが同一レベルという点ではLispに近い(Javascript風構文は、これを扱いやすくするためのsyntactic sugarで、内部的にはRDFに変換される)。これによって、アクティブなコンテンツを直接RDFに組み込んだり、従来の言語をAPI経由で用いるよりRDFの処理がシンプルになる、ということだ。

Fablではデータ型をRDF/OWLのクラスとして扱い、プロパティを(RDF/OWLと同様)クラスとは独立して定義する。したがって、RDFスキーマやオントロジーによる定義があれば、そのままFablのプログラムでデータ型利用できるし、クラスとプロパティの組み合わせの自由度は高い。たとえば、FOAFの定義を参照し、そこに新たに定義するプロパティex:performsを組み合わせてみよう:

install(namespace("foaf"));
install(namespace("ex"));
allocate("ex:performs",Property);
var me = new(foaf:Person);
me.ex:performs = "Contrabass";

スキーマやオントロジーのrange, Restrictionなどを型チェックに利用することもできる。このJavascript風構文自体が内部的にはRDFに変換されるわけだが、その辺りの詳細は、Fablの設計者Chris Goad博士の論文 Describing Computation within RDF を参照。

論文では、Fablを利用したアクティブなRDFコンテンツの例として、RDFmapperなどのインタラクティブ地図が挙げられている。確かに、Tokyo LandscapeのデータをBlogmapperで表示する方法を調べている時に、Fablに関する記述を目にしたことがあった。Fablを使うといろんな工夫ができそうな感じだ。面白い。

関連メモ:
genre: rdf, geo. at