たまには世間様に還元できる記事を、ということで当方が頻繁に利用しているライブラリRedlandのお話。
RDFという仕組みは実に素晴らしく、個人的にはデータ表現形式としては最高だと思っています。とはいえ使いやすくなければ意味がないのもまた事実。当方はRedlandという素敵なライブラリがあるので、これを使っています。(Redlandはいろいろな言語で実装されていますが、当方はRubyistなのでruby版を使います。)
しかし色々ググッてみても案外これに触れた日本語記事が見当たらないっぽいので、一念発起して簡単にまとめてみることにします。
UbuntuだとRedlandのRuby版はlibrdf-rubyというパッケージになってて一発インストール可能。あとは普通にrequire
して、
require 'rdf/redland'
model = Redland::Model.new
とすることで新しいモデルが作成できます。モデルにはRDFステートメントが格納されます。(RedlandではRDFステートメントの集合を「モデル」として管理します。ステートメントの検索や追加などはこのモデルのメソッドとして実装されています。)
モデルを作成した段階ではまだRDFステートメントは一つも格納されていないので、どこからか読み込んでくるか、スクリプト的に追加する必要があります。おおむねRDFの利用方法としてはどこかからデータを取得してくるのが一般的でしょうから、
parser = Redland::Parser.new
parser.parse_into_model(model, "http://www1.kcn.ne.jp/~solomon/index.rdf")
というかんじで、パーサを作成して読み込ませるのが一般的でしょうか。
なお、基本的に何も指定しなければモデルは一過性のもので、特に保存などはされません。実行終了直前にmodel.save(filename)
とするのも手ですが、ストア(RDFグラフを保存する場所と保存形式)をあらかじめ指定しておくと、モデルに対しておこなった変更も自動的に保存されます。(逆にいうと、保存されてしまいたくないときはストアを指定しない、またはストアの形式をmemoryとしておくのが得策。)
なお、ストアにはMySQLやSQLiteなどを使うことができます。("librdf-storage-sqlite"なり、"librdf-storage-mysql"なりのインストールが必要。)
#Sqliteのストアにする。
store = Redland::TripleStore.new("sqlite", "test_store.sqlite")
model2 = Redland::Model.new(store)
ちなみに単純にロードする速度で見ると、SQLiteは相当早いです。RDF/XMLをパースしたりストアに使うのとは体感速度が倍くらい違います。
さて、準備ができたところで実際の操作。
uri1 = Redland::Uri.new("http://www1.kcn.ne.jp/~solomon/")
#findメソッドは引数にあてはまるステートメントごとにブロックを実行。
#引数にnilを与えた場合は何でも良いの意味。
model.find(uri1, nil, nil) do |s, v, o|
#s,v,oはそれぞれRedland::Resource。
#それぞれのリソースがどういうものかは、判別メソッドを使うと分かる。
if o.literal? then
p "literal: #{o.value}"
elsif o.resource? then
p "resource: #{o.uri.to_s}"
elsif o.blank? then
p "blank: #{o.blank_identifier}"
end
end
あとSPARQLも使えたりします。(当方は諸々の事情から上記のfindメソッドを使うほうが多いのですが。)
#書き出すと長くなるので省略していますが、hogeにSPARQLクエリのテキストが入ってると思ってください。
query = Redland::Query.new(hoge)
result = model.query_execute(query)
以上が基本的な使い方になります。
うまくすればサイト構築などにも使えますし、RDF収集などにも使えます。(当サイトも基本これで作ってる。) ぜひご活用をば。
その他、関連するコンテンツは以下のとおり。
当ページにリンクを貼ったりブックマークする時は以下のURIにすると便利です。
Copyright(c) 2010 Wandaring Visionary some rights reserved. See detail.