maoring blog

このブログはセマンティックウェブ関連の技術的なあれこれを綴ったブログです。

ARQをMacにインストールして,さくっとSPARQLでRDFを検索しよう。

はじめに

ARQは,Jena(Apacheのプロジェクト)でサポートされているパッケージの1つです。 ARQを使うことで,コマンドプロンプトでSPARQLを実行し,簡易的にRDFを検索することが出来ます。今回はARQをMacにインストールする方法と簡単な使い方をご紹介します。

⚠バージョンによって,インストール方法が変わる恐れがあります。ネット上の情報も古い場合があるので,その場合には,解凍したフォルダのREADMEをご覧ください。Windowsの場合の方法もREADMEに載っています(動作は未確認)。

インストール

最新版のapache-jenaを任意の場所にインストールします。

$ wget http://www.apache.org/dist/jena/binaries/apache-jena-2.12.0.tar.gz
$ tar -xzvf apache-jena-2.12.0.tar.gz

(参照:Macでwgetコマンドを使えるようにするの書

PATHを通す

.bash_profileにPATHを設定し,有効化します。

$ vim ~/.bash_profile

#色々な記述があったり無かったり
 export JENA_HOME=インストールした場所/apache-jena-2.10.1
#色々な記述があったり無かったり

$ source ~/.bash_profile

レッツ実行

$ arq --version
Jena:       VERSION: 2.10.1
Jena:       BUILD_DATE: 2013-05-11T22:05:51+0100
ARQ:        VERSION: 2.10.1
ARQ:        BUILD_DATE: 2013-05-11T22:05:51+0100
RIOT:       VERSION: 2.10.1
RIOT:       BUILD_DATE: 2013-05-11T22:05:51+0100

上記のようにバージョンが表示されればOKです。

 Exception in thread "main" java.lang.NoClassDefFoundError:

のようなエラーが出た場合には,PATHの指定が間違っているのでご注意ください。

サンプルクエリ

ちなみに実行形式や実行結果は以下のとおりです。

$ arq --data ex002.ttl --query ex003.rq 
--------------------------------
| craigEmail                   |
================================
| "c.ellis@usairwaysgroup.com" |
| "craigellis@yahoo.com"       |
--------------------------------

ちなみに中身は,Learning SPARQLのサンプルデータです。ここからダウンロード出来ます。 ex002.ttlはTurtle形式のRDF,ex003.rqにSPARQLのクエリが書かれています。

$ cat ex002.ttl 
# filename: ex002.ttl

@prefix ab: <http://learningsparql.com/ns/addressbook#> .

ab:richard ab:homeTel "(229) 276-5135" . 
ab:richard ab:email   "richard49@hotmail.com" . 

ab:cindy ab:homeTel "(245) 646-5488" . 
ab:cindy ab:email   "cindym@gmail.com" . 

ab:craig ab:homeTel "(194) 966-1505" . 
ab:craig ab:email   "craigellis@yahoo.com" . 
ab:craig ab:email   "c.ellis@usairwaysgroup.com" . 

$ cat ex003.rq 
# filename: ex003.rq

PREFIX ab: <http://learningsparql.com/ns/addressbook#> 

SELECT ?craigEmail
WHERE
{ ab:craig ab:email ?craigEmail . }

間違いの検出にも

ARQの便利なところは,RDFの間違いについても検出してくれるところです(超重要)。例えば,以下のように,ab:craigとするべきところを,a:craigとしてしまうと,

$ cat ex002.ttl 
# filename: ex002.ttl

@prefix ab: <http://learningsparql.com/ns/addressbook#> .

ab:richard ab:homeTel "(229) 276-5135" . 
ab:richard ab:email   "richard49@hotmail.com" . 

ab:cindy ab:homeTel "(245) 646-5488" . 
ab:cindy ab:email   "cindym@gmail.com" . 

ab:craig ab:homeTel "(194) 966-1505" . 
a:craig ab:email   "craigellis@yahoo.com" . 
a:craig ab:email   "c.ellis@usairwaysgroup.com" . 
$ arq --data ex002.ttl --query ex003.rq 
11:54:56 ERROR riot                 :: [line: 12, col: 1 ] Undefined prefix: a
org.apache.jena.riot.RiotException: [line: 12, col: 1 ] Undefined prefix: a
    at org.apache.jena.riot.system.ErrorHandlerFactory$ErrorHandlerStd.fatal(ErrorHandlerFactory.java:132)
    at 
…以下略

上記のようにどこが間違っているのか教えてくれます。

Resultsオプション

地味に便利なresultsオプションを使うと,異なるフォーマットでの出力も可能です。下記の例では,実行結果をJSONで出力させています。他にも,text, XML, CSV, TSV 形式での出力が可能です。

$ arq --data ex002.ttl --query ex003.rq --results json
{
  "head": {
    "vars": [ "craigEmail" ]
  } ,
  "results": {
    "bindings": [
      {
        "craigEmail": { "type": "literal" , "value": "c.ellis@usairwaysgroup.com" }
      } ,
      {
        "craigEmail": { "type": "literal" , "value": "craigellis@yahoo.com" }
      }
    ]
  }
}

ではでは,レッツ エンジョイ スパークルライフ!!しゅわしゅわっ。