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
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" } } ] } }
ではでは,レッツ エンジョイ スパークルライフ!!しゅわしゅわっ。