RDF4J ServerをインストールしてRDFデータベースとして使用する

この記事はダウンロードor自分で構築したRDFをデータベースに追加・公開してSPARQL検索を使いたい人向けの記事です。
# RDF4Jとは
[RDF4J](rdf4j.org)とはJavaからRDFの操作が可能なフレームワークです。2016年5月18日にOpenRDF Sesameが終了しRDF4Jとして生まれ変わりました。RDF4Jは新たにEclipseプロジェクトとなっています。
細かいことはまだ調査できていませんが今までSesameでできていたことはRDF4Jでできそうです。
Sesameの記事は消えてしまったようですが、アーカイブの方は[SourceForge](https://sourceforge.net/projects/sesame/)で生きています。

#RDFデータベースとして使用する
RDF4JをRDFデータベースとして使用するためにはRDF4J ServerとRDF4J Workbenchをインストールします。
RDF4J Serverは事実上のRDFデータベースで、SPARQLエンドポイントとしても機能させることができます。
RDF4J Workbenchはブラウザでデータベースを管理できるインターフェースです。RDFの追加や削除などの管理はこのWorkbenchを使って行います。

##動作条件
RDF4J ServerとRDF4J WorkbenchはTomcat上で動作するため、以下のインストールが済んでいることが条件です。

- Java 8
- Apache Tomcat

私の環境はCentOS 6, Java 1.8.0_51, Tomcat 7.0.63でした。
Tomcatのインストール方法は[こちら](http://qiita.com/search?utf8=%E2%9C%93&sort=&q=tomcat+%E3%82%A4%E3%83%B3%E3%82%B9%E3%83%88%E3%83%BC%E3%83%AB)を参考にしていただければと思います。

##インストール
まず[ダウンロードページ](http://rdf4j.org/download/)からRDF4J-2.0M2 SDK (zip)をダウンロードします。
ダウンロードしたzipファイルを解凍して出てくるwarフォルダ以下の

- rdf4j-server.war
- rdf4j-workbench.war

を(Tomcatインストール先ディレクトリ)/webapps/
にコピペします。
これでインストールは完了です。Tomcatが入っている環境であれば恐ろしく簡単です。

##リポジトリの作成
ブラウザでRDF4J Workbench画面にアクセスします。
URL: http://localhost:8080/rdf4j-workbench
こんな感じの管理画面が表示されると思います。Sesameとほぼ変わりませんね。
![rdf4j_0.PNG](https://qiita-image-store.s3.amazonaws.com/0/23675/21cacd89-bfdd-962f-35cc-3382e3dbeee7.png)

新しくリポジトリを作成します。
左サイドバーのRepoositoriesからNew repositoryを選択します。
Typeで保存するリポジトリのタイプを選択できます。ここではIn Memory Storeを選択します。メモリ上に保存するため高速ですが、サーバが落ちるとデータも消えてしまいます。永続的に保存したい場合はJava Native Storeなどを選択してください。
IDでリポジトリの一意なIDを決めます。
Titleでリポジトリのタイトルを決めます。
ここでは[放置自転車LOD](http://www.ohsuga.is.uec.ac.jp/bicycle/dataset.html)のデータを追加してみます。
![rdf4j_1.PNG](https://qiita-image-store.s3.amazonaws.com/0/23675/6452d5e0-d6b3-5762-3e04-ac1e50c6e3c1.png)

Nextボタン→Createでリポジトリが作成されます。![rdf4j_2.PNG](https://qiita-image-store.s3.amazonaws.com/0/23675/264dbcee-08cf-95b8-6155-125e6fe36afb.png)

無事リポジトリが作成されました。
右上のRipositoryが放置自転車LOD（ipblod）となっているので、現在放置自転車LODのリポジトリが選択されている状態です。このままRDFデータの追加に移ります。

##RDFデータの追加
左サイドメニューのModifyからAddを選択します。
次にRDF Data Fileをから追加したいRDFデータを選択します。
Base URIが勝手に決まってしまうので、任意のBase URIに変更します。
Data formatを追加するRDFデータに合わせて変更します。
最後にUploadします。
![rdf4j_4.PNG](https://qiita-image-store.s3.amazonaws.com/0/23675/53c93799-b00c-5bbc-5d21-9449e41e36bc.png)

アップロードが成功すると次のような画面になります。RDFの記述が間違っているとここではじかれます。
複数のRDFデータを追加することでマージできます。放置自転車情報と気象情報をマージしました。
![rdf4j_5.PNG](https://qiita-image-store.s3.amazonaws.com/0/23675/3476dfe6-cc2b-7dc3-b5b9-a1c576f2b282.png)

##SPARQL
###Query Repository
左サイドメニューのQueryからSPARQLクエリを実行できます。
シンタックスハイライトしてくれます。
実行結果の画面で結果をCSV,JSON,XMLなど様々な形式でダウンロードすることができます。
![rdf4j_6.PNG](https://qiita-image-store.s3.amazonaws.com/0/23675/22a843f9-b97e-9e65-5434-92e69de6278c.png)

**※残念ながらSesameの時と同様に日本語を直接使用できないみたいです・・・unicodeエンコードする必要があります。**(ビル→\u30d3\u30eb)



###SPARQLエンドポイント
外部プログラムからSPARQLによる問い合わせを行うには、以下のURLにパラメータとしてSPARQL文を付与してアクセスします。
http://localhost:8080/rdf4j-server/repositories/(リポジトリのID)?query=(SPARQL文)
メディアタイプを指定して結果を取得することもできます。結果をJSONで取得する場合は次のようになります。
http://localhost:8080/rdf4j-server/repositories/(リポジトリのID)?query=(SPARQL文)&Accept=application/sparql-result%2Bjson

#認証機能を付ける
上記まででRDF4J ServerとRDF WorkbenchのインストールからRDFデータの追加までは完了なのですが、Workbenchが誰でも見れる状態になっているため不安です。
そこで、workbenchにアクセスする時にユーザ名とパスワードを求める設定にします。

(Tomcatのインストールディレクトリ)/webapps/openrdf-workbench/WEB-INF/web.xml
の中のweb-app要素内に以下を追記します。

```xml
<security-constraint>
  <web-resource-collection>
    <web-resource-name>RDF4J Workbench</web-resource-name>
    <url-pattern>/*</url-pattern>
  </web-resource-collection>
  <auth-constraint>
    <role-name>rdf4j-user</role-name>
  </auth-constraint>
</security-constraint>
 
<login-config>
  <auth-method>DIGEST</auth-method>
  <realm-name>RDF4J Workbench</realm-name>
</login-config>
 
<security-role>
  <description>The role required for Sesame workbench</description>
  <role-name>rdf4j-user</role-name>
</security-role>
```

次に
(Tomcatのインストールディレクトリ)/conf/tomcat-users.xml
の中のtomcat-users要素内に以下を追記します。

```xml
<role rolename="rdf4j-user"/>
<user username="ユーザ名" password="パスワード" roles="rdf4j-user"/>
```

Tomcatを再起動します。
これでRDF4J Workbenchアクセス時にユーザ名とパスワードを求めるようになります。今回は簡易的にユーザ名とパスワードをファイルに記述してDIGEST認証を使いましたが、必要に応じてDBに格納するなどしてください。

![rdf4j_7.PNG](https://qiita-image-store.s3.amazonaws.com/0/23675/d69ba96f-c52b-b588-4491-a6e4abd77178.png)


[参考:Installing RDF4J Server and RDF4J Workbench](http://rdf4j.org/doc/rdf4j-server-workbench-and-console/installing-rdf4j-server-and-rdf4j-workbench/)
[参考:How to set up a password for openrdf workbench?](http://stackoverflow.com/questions/3671444/how-to-set-up-a-password-for-openrdf-workbench)

<!--
```py
import gc
```

```xml
```

asaafhoasioh`hoge`sofaish

*a*

**aa**

引用開始
>んーーーッけい

| Left align | Right align | Center align |
|:-----------|------------:|:------------:|
| This       |        This |     This     |
| column     |      column |    column    |
| will       |        will |     will     |
| be         |          be |      be      |
| left       |       right |    center    |
| aligned    |     aligned |   aligned    |

$a = 2^2$

```bash
sudo apt-get install
a
```

```math
a = 1

```



- a
- g
- a

[hoge](http://www.google.co.jp)
![aaa](https://qiita-image-store.s3.amazonaws.com/0/62575/4fcb7594-9910-40c4-0ec0-fe23cc855b7e.png)
<img src="https://qiita-image-store.s3.amazonaws.com/0/62575/4fcb7594-9910-40c4-0ec0-fe23cc855b7e.png" width=320>
<a href="hoge.jp">aaaa</a>]
-->