rdf-virtuosoを用いてRubyプログラムからVirtuosoにアクセスする
はじめに_
RubyおよびVirtuosoはすでにインストール済みとする。
また、以下の内容は以下の環境で動作確認をした。
% ruby -v ruby 2.4.2p198 (2017-09-14 revision 59899) [x86_64-linux] % gem list | grep rdf-virtuoso rdf-virtuoso (0.1.6) % /usr/local/virtuoso-opensource/bin/virtuoso-t -h Virtuoso Open Source Edition (Column Store) (multi threaded) Version 7.2.4.2.3217-pthreads as of Dec 8 2016 Compiled for Linux (x86_64-pc-linux-gnu) Copyright (C) 1998-2016 OpenLink Software 〜以下略〜
リンク_
rdf-virtuosoのインストール_
% gem install rdf-virtuoso
rdf-virtuosoの操作方法_
GitHub:digibib/rdf-virtuosoによると ./spec/repository_spec.rb と ./spec/query_spec.rb を読めと書いてあるので必要に応じて適宜読む。
デモ_
デモ用データのインポート_
Programming with LOD(PDF)の47ページ目のスライドに従い、DBpediaの韓国デジョンのRDFデータをVirtuosoにインポートする。
インポートが成功しているかどうかを確かめるために試しにSPARQLエンドポイントで検索してみる。 http://localhost:8890/sparql にアクセスする。
次にGraphIRIとして「http://dbpedia.org」を入力し、SPQRQL文として以下を入力し、実行する。
SELECT * FROM <http://dbpedia.org>
WHERE { ?s <http://www.w3.org/1999/02/22-rdf-syntax-ns#type> ?o . }
LIMIT 100
rdf-virtuosoのデモプログラムの実行_
作業ディレクトリをVirtuosoが動作しているマシン上に用意する。
% mkdir -p Sandbox/rdf-virtuoso % cd Sandbox/rdf-virtuoso % touch demo.rb
demo.rbの中見を以下のようにする。
require "rdf"
require "rdf/virtuoso"
# アクセス先の設定
uri = "http://localhost:8890/sparql"
update_uri = "http://localhost:8890/sparql-auth"
# Virtuosoの初期設定では http://localhost:8890/sparql に
# 誰でもアクセスできる様子。このため、以下のリポジトリへの
# アクセスの設定ではログインIDとパスワードが不要
repo = RDF::Virtuoso::Repository.new(uri
# uri,
# :update_uri => @update_uri,
# :username => 'dba',
# :password => 'secret',
# :auth_method => 'digest'
)
# 検索対象のGrpah IRIを指定する。これがないとリポジトリ全体から
# 検索してしまう
graphIRI = RDF::URI.new("http://dbpedia.org")
# すでに定義済みの述語などを使う場合につかう。
# 以下の例の場合 http://www.w3.org/1999/02/22-rdf-syntax-ns#author
# という述語を記述する rdf.author と記載する
rdf = RDF::Vocabulary.new("http://www.w3.org/1999/02/22-rdf-syntax-ns#")
# SPARQL文の生成。
# https://github.com/digibib/rdf-virtuoso/blob/master/spec/query_spec.rb に
# たくさんのSPARQL文の作成例がある。
query = RDF::Virtuoso::Query.select.where([:s, rdf.type, :o]).from(graphIRI)
# 上記で作成したSPARQL文を標準出力に出力している
puts query
# リポジトリ(Virtuoso)にてSPARQL文を実行。出力結果はresultに配列形式で
# 格納される
result = repo.select(query)
# 検索結果が空の場合の処理
if result.empty?
puts "result is empty"
end
# 検索結果を表示している
result.each do | solution |
puts solution.inspect
end
以下のコマンドで実行する。
% ruby ./demo.rb