Apache Jena FusekiにデータをロードしてSPARQLを試す

RDFデータを格納し、SPARQLで検索できるRDFストアとして[Apache Jena Fuseki](https://jena.apache.org/documentation/fuseki2/index.html)（以下、Fuseki）があります。本稿ではFusekiにRDFデータをロードしてSPARQL検索を試す方法を記述します。Fusekiのインストールおよび立ち上げについては、[こちら（Mac OS X）](http://qiita.com/yayamamo/items/b03f35ebbb0667779c85)あるいは[こちら（Windows）](http://qiita.com/yayamamo/items/6a10651e88c5d65506a0)を参考にしてください。なお、Fusekiのバージョンは2.6.0および3.8.0で動作確認しています。また、JavaについてはOracleおよびOpenJDKでの動作確認をしています。
<b>注意事項</b>
3.4.0ではSPARQL更新系クエリ（LOAD）を用いたDBpedia Japaneseのデータロードが失敗するので、下記の例を適切に実行できません。

# データのロード
1. Fusekiを立ち上げ、[http://localhost:3030/](http://localhost:3030/)にアクセスします。
![スクリーンショット 2016-07-01 14.31.51.png](https://qiita-image-store.s3.amazonaws.com/0/119205/863626e2-eea3-de31-1544-6e54712e25ad.png)

2. 「manage datasets」をクリックし、続いて「add new dataset」タブをクリックします。
![FusekiManageDatasets.png](https://qiita-image-store.s3.amazonaws.com/0/119205/0876387e-b294-be61-263c-66a0484197bf.png)

3. 「Dataset name」に適当な名前を記入し、「create dataset」をクリックします。ここでは「MyData」としています。なお、初期設定ではロードされる全てのデータはメモリ内にのみ格納されるので、立ち上げたFusekiを終了すると消えてしまいます。永続性を持たせるには「Dataset type」を「In-memory」から「Persistent」に変更します。
![FusekiDatasets.png](https://qiita-image-store.s3.amazonaws.com/0/119205/febf6777-a32a-2445-8401-1f4532f9e518.png)

4. 以上でRDFデータを格納するデータベースが構築できたので、続いてそこにデータをロードします。ページ上部のバーにある「dataset」をクリックし、続いて、「info」タブをクリックします。
なお、Fusekiにデータをロードするには大きく分けて2通りあり、一つは手元にあるRDFファイルをアップロードするもので、もう一方はネット上にあるデータを直接ロードするものです。ここでは後者を紹介します。というのは、手元にすでにRDFデータがある読者は少ないと想定していることと、SPARQLの仕様がバージョン1.0から1.1に更新された際に追加された、データを更新するためのクエリを試すことができるからです。
「info」タブをクリックすることで表示される「Available services」の中に、「SPARQL Update」として[http://localhost:3030/MyData/update](http://localhost:3030/MyData/update)が書かれています。このエンドポイントURIに対して更新用のクエリを発行できます。
![FusekiInfo1.png](https://qiita-image-store.s3.amazonaws.com/0/119205/8fda9f8b-d5be-baa2-2bb7-0e433d81741b.png)

5. 「query」タブをクリックし、「SPARQL ENDPOINT」に上記の更新用エンドポイントのURIを記入します。続いて、その下の欄に、`LOAD <http://ja.dbpedia.org/resource/ディープラーニング>`と記入します。その後、右側の矢印アイコンをクリックし、クエリをエンドポイントに向けて発行します。
![FusekiQuery2.png](https://qiita-image-store.s3.amazonaws.com/0/119205/2f824e09-f748-9bac-8e87-17c2e3b45e54.png)

6. ページ下部にある「QUERY RESULTS」に「Update succeeded」の表示があるのを確認します。これで手元のFusekiにRDFデータがロードされました。
![FusekiUpdate1.png](https://qiita-image-store.s3.amazonaws.com/0/119205/874dbeda-0a02-b95d-ba47-e8550905a8b4.png)

# SPARQLでデータを検索
1. 「SPARQL ENDPOINT」に参照用クエリ発行用エンドポイント[http://localhost:3030/MyData/query](http://localhost:3030/MyData/query)を記入します。続いて、「EXAMPLE QUERIES」の「Selection of triples」をクリックします。すると、実際のSPARQLクエリが自動的に書き込まれるので、それを確認してから、更新時と同様に矢印アイコンをクリックします。
![FusekiQuery4.png](https://qiita-image-store.s3.amazonaws.com/0/119205/110605b3-acc6-8c46-a46b-de910cc5ca0a.png)

2. 「QUERY RESULTS」に結果が表示されます。結果は、下矢印アイコンをクリックすることでCSV形式のファイルとして取得できます。
![FusekiQueryResult2.png](https://qiita-image-store.s3.amazonaws.com/0/119205/9f685810-686c-f540-46ed-a2b6c9800251.png)

3. 今実行したクエリを再現できるように、パーマリンクを取得したり、ターミナルを開いてcurlコマンドにより同じ結果を取得したりすることが簡単にできるようになっています。クエリを記述する欄の右上にある<の形をしたアイコンをクリックします。最初に表示されるのはブラウザに直接コピペできるようなURIで、さらに右側の「CURL」ボタンをクリックすることで、CURLコマンド用の記述に書き換えられます。
![FusekiGetLink2.png](https://qiita-image-store.s3.amazonaws.com/0/119205/55712559-dc6b-f28d-461f-66ea46236b4a.png)
![FusekiGetCurl1.png](https://qiita-image-store.s3.amazonaws.com/0/119205/73a39dce-d3c9-f8e8-6181-b5ec91deb92b.png)

以上でFuseki上でのSPARQLクエリによるRDFデータの検索を確認できたと思います。SPARQLを用いることで様々な条件でRDFデータを検索できます。より詳細は筆者を含む有志が執筆した[書籍](http://sparqlbook.jp/)を参考するなどしてください。