Ruby で Notation3 パーサな ruby-n3 を作りました
Notation3 こと n3 の Ruby で書かれたパーサ ruby-n3 を作りました。strscan と racc でみやびに実装しました。
http://github.com/keita/ruby-n3/tree/master(野心をいだいたので改名しました)
n3 は、RDF とかで知識書き下したいなぁー、でも XML なんかで優雅に書いてられるかよ!という短気な人のための記法です。多分 n3 のことを知らない人の方が多いと思うので是非一度以下の文書を読んでみて下さい。
実装はまだ不完全(!,^,@lang,^^など)ですが、地味に直す予定ではありますので、気付いた点があればご指摘下さい。あと ruby-n3 はあくまで統語木を作るだけなので、意味的な側面には一切触れません。意味の方はまた別物として作りたいと思います。
使い方は以下のようになります(今はこんなだけど、いずれちゃんとします!)。
% ruby -I lib lib/n3.rb examples/formulae.n3
formulae.n3 の内容は次のようになっています。
@prefix math: <http://www.w3.org/1998/Math/MathML> . { :Temperature math:gt 42 . } => { :Controler :stop :Bolier . } .
解析結果は次のようになります。
[#<N3::Prefix math: => http://www.w3.org/1998/Math/MathML>, #<N3::SimpleStatement SUBJ:#<N3::Formulae S:[#<N3::SimpleStatement SUBJ::Temperature PROP:[#<N3::Property PRED:math:gt OBJ:[42]>]>]> PROP:[#<N3::Property PRED:=> OBJ:[#<N3::Formulae S:[#<N3::SimpleStatement SUBJ::Controler PROP:[#<N3::Property PRED::stop OBJ:[":Bolier"]>]>]>]>]>]
というわけで、いかがなものでしょうか。今後は n3-rdf を RDF/XML に変換する機能をいずれ実装することを予定しています。
ところで semanticweb って結局のところ F-Logic の子どもみたいなものという理解でいいのでしょうか。でも RDF って二項関係しか定めてないみたいだし、振舞いというかメソッドの方はどこにあるのか分かりません。なんか色々分からないので楽しそうです。分からないことは楽しい!
追記
改名しました。SemanticWeb全般を扱うフレームワークを作る野心を抱いて Manabi という名前にします。
http://github.com/keita/manabi/tree/master
実用性は考えずに RDF を勉強するためにあらかた実装していきます。まずは N3, Turtle, N-Triples, SPARQL のパーサを作ることから始めます。でもゆっくりやっていくので長い目で見守って下さい。よろしくお願いします。