Blogmapperで知られるMap Bureauから、RDFをJavascript風の構文で処理できる言語Fablのバージョン2が公開された。コマンドラインとしてもCGIとしても利用できる。少し試してみたところ、なかなか面白そうな感じだ。
Fablは、RDFのプロパティをちょうどDOMのツリーのように「.」で連結して扱い、ほぼJavascriptと同等の構文で処理できる。簡単な例を見てみよう。
install(namespace("dc"));
var x = new(Resource), y = new(Resource);
x.dc:title = "My memo";
x.dc:source = y;
y.dc:title="Fabl Expression Evaluator";
writeln("The source of " + x.dc:title + " is: " + x.dc:source.dc:title);
これをFablに処理させると、次のような結果が得られる。
The source of My memo is: Fabl Expression Evaluator
Fablは外部ファイルやウェブ上のリソースをロードすることができるので、これを使うと面白い処理が可能になる。例えば、FOAFファイルから知人をリストアップするならこんな感じだ。
namespaceDefinedBy("foaf", "http://xmlns.com/foaf/0.1/index.rdf");
install(namespace("foaf"));
var s = new(SeqOf(Resource)), f = new(SeqOf(Resource)), int i,j;
load(s,"http://...(foaf uri)");
for (i = 0; i < length(s); i++)
if (!nul(s[i].foaf:knows)) {
f = mget(s[i], foaf:knows);
for (j = 0; j < length(f); j++)
if (!nul(f[j].foaf:name)) writeln("friend:" + f[j].foaf:name~string);
}
オンライン版のFabl Expression Evaluatorが用意されているので、簡単なものなら、Fabl自身をインストールしなくても手軽に試してみることができる。説明文書が少なくて分かりにくかったり、一部のRDFデータはロードしても思うように処理されない(Unicodeの正規化の関係?ベータテスト中でバグだったらしい。報告したら、早速修正された)など、少々取っつきにくいところもあるが、かなり使えそうなシステムだと思う。
関連メモ:
- Fabl補足:RDFでプログラムを表現する (2004-04-01)


