##はじめに
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.1.tar.gz
$ tar -xzvf apache-jena-2.12.1.tar.gz
##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" }
}
]
}
}
ではでは,レッツ エンジョイ スパークルライフ!!しゅわしゅわっ。