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

戻る_