この記事はダウンロードor自分で構築したRDFをデータベースに追加・公開してSPARQL検索を使いたい人向けの記事です。
RDF4Jとは
RDF4JとはJavaからRDFの操作が可能なフレームワークです。2016年5月18日にOpenRDF Sesameが終了しRDF4Jとして生まれ変わりました。RDF4Jは新たにEclipseプロジェクトとなっています。
細かいことはまだ調査できていませんが今までSesameでできていたことはRDF4Jでできそうです。
Sesameの記事は消えてしまったようですが、アーカイブの方はSourceForgeで生きています。
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のインストール方法はこちらを参考にしていただければと思います。
インストール
まずダウンロードページから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とほぼ変わりませんね。
新しくリポジトリを作成します。
左サイドバーのRepoositoriesからNew repositoryを選択します。
Typeで保存するリポジトリのタイプを選択できます。ここではIn Memory Storeを選択します。メモリ上に保存するため高速ですが、サーバが落ちるとデータも消えてしまいます。永続的に保存したい場合はJava Native Storeなどを選択してください。
IDでリポジトリの一意なIDを決めます。
Titleでリポジトリのタイトルを決めます。
ここでは放置自転車LODのデータを追加してみます。
無事リポジトリが作成されました。
右上のRipositoryが放置自転車LOD(ipblod)となっているので、現在放置自転車LODのリポジトリが選択されている状態です。このままRDFデータの追加に移ります。
RDFデータの追加
左サイドメニューのModifyからAddを選択します。
次にRDF Data Fileをから追加したいRDFデータを選択します。
Base URIが勝手に決まってしまうので、任意のBase URIに変更します。
Data formatを追加するRDFデータに合わせて変更します。
最後にUploadします。
アップロードが成功すると次のような画面になります。RDFの記述が間違っているとここではじかれます。
複数のRDFデータを追加することでマージできます。放置自転車情報と気象情報をマージしました。
SPARQL
Query Repository
左サイドメニューのQueryからSPARQLクエリを実行できます。
シンタックスハイライトしてくれます。
実行結果の画面で結果をCSV,JSON,XMLなど様々な形式でダウンロードすることができます。
※残念ながら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要素内に以下を追記します。
<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要素内に以下を追記します。
<role rolename="rdf4j-user"/>
<user username="ユーザ名" password="パスワード" roles="rdf4j-user"/>
Tomcatを再起動します。
これでRDF4J Workbenchアクセス時にユーザ名とパスワードを求めるようになります。今回は簡易的にユーザ名とパスワードをファイルに記述してDIGEST認証を使いましたが、必要に応じてDBに格納するなどしてください。
参考:Installing RDF4J Server and RDF4J Workbench
参考:How to set up a password for openrdf workbench?