RDFを手軽に操作できるライブラリRedlandの基本的な使い方(Ruby版)

たまには世間様に還元できる記事を、ということで当方が頻繁に利用しているライブラリRedlandのお話。

作成
2010-12-29
更新
2010-12-29
執筆
任那伽耶
分類
,

はじめに

RDFという仕組みは実に素晴らしく、個人的にはデータ表現形式としては最高だと思っています。とはいえ使いやすくなければ意味がないのもまた事実。当方はRedlandという素敵なライブラリがあるので、これを使っています。(Redlandはいろいろな言語で実装されていますが、当方はRubyistなのでruby版を使います。)

しかし色々ググッてみても案外これに触れた日本語記事が見当たらないっぽいので、一念発起して簡単にまとめてみることにします。

読み込みとRDFの取得

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収集などにも使えます。(当サイトも基本これで作ってる。) ぜひご活用をば。

その他、関連するコンテンツは以下のとおり。

前の記事
目次
任那伽耶の徒然日記 in 2010年

当ページにリンクを貼ったりブックマークする時は以下のURIにすると便利です。

パーマリンク
http://www1.kcn.ne.jp/~solomon/kaja/diary/2010/1229181439

Copyright(c) 2010 Wandaring Visionary some rights reserved. See detail.