Blogmapperで知られるMap Bureauから、RDFをJavascript風の構文で処理できる言語Fablのバージョン2が公開された。コマンドラインとしてもCGIとしても利用できる。少し試してみたところ、なかなか面白そうな感じだ。
Fablは、RDFのプロパティをちょうどDOMのツリーのように「.」で連結して扱い、ほぼJavascriptと同等の構文で処理できる。簡単な例を見てみよう。
install(namespace("dc")); varx
= 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)