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