ちょっとしたメモ

Fabl: Javascript風RDF処理言語

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の正規化の関係?ベータテスト中でバグだったらしい。報告したら、早速修正された)など、少々取っつきにくいところもあるが、かなり使えそうなシステムだと思う。

関連メモ:
map - genre: rdf. at