はじめに
前回の記事 では Apache Jena Fuseki 1 を使った SPARQL Endpoint の立ち上げ手順を解説しました。このポストでは最新版の Apache Jena Fuseki 2.3.0 を使った方法を解説します。
Fuseki 1 は Servlet Container である Jetty に組み込まれているのですが、Fuseki 2 では Jetty 組み込み版と WAR 版が提供されるようになりました。クラウド環境ですでに Tomcat などの Servlet Container が用意されている場合には WAR 版は便利かもしれません。このポストでは Jetty 組み込み版について解説します。
1.準備
- Java 7 以上をインストールしておきます
- Fuseki にロードする RDF を用意しておきます
ここでは https://raw.githubusercontent.com/apache/jena/master/jena-fuseki1/Data/books.ttl を例として説明しますが、 file: スキームの URL や設定ファイルからの相対パスなんかでも問題ありません。
2. Apache Jena Fuseki 2 をインストール
- Apache Jena のダウンロードページ に行きます
- Apache Jena Fuseki apache-jena-fuseki-2.3.0.zip をダウンロードします
- 適当なフォルダに展開します
- apache-jena-fuseki-2.3.0 フォルダができるはずです
3. Apache Jena Fuseki 2 の試運転
まずは一度起動してみましょう。この手順によって、作業フォルダや設定ファイルの雛形ができあがります。
$ cd apache-jena-fuseki-2.3.0
$ fuseki-server
[18:56:19] Server INFO Fuseki 2.3.0 2015-07-25T17:11:28+0000
[18:56:19] Config INFO FUSEKI_HOME=C:\apache-jena-fuseki-2.3.0\.
[18:56:19] Config INFO FUSEKI_BASE=C:\apache-jena-fuseki-2.3.0\run
[18:56:19] Servlet INFO Initializing Shiro environment
[18:56:19] Config INFO Shiro file: file://C:\apache-jena-fuseki-2.3.0\run\shiro.ini
[18:56:20] Server INFO Started 2015/09/14 18:56:20 JST on port 3030
この状態で http://localhost:3030/ にアクセスすると、Fuseki 2 のトップ画面を見ることができます。
起動ログ中の FUSEKI_BASE というのが、この fuseki サーバの使用するフォルダになります。環境変数 FUSEKI_BASE が指定されている場合には、そのフォルダの配下に各種ファイルが作成されます。FUSEKI_BASE を指定しなかった場合には、カレントディレクトリの直下に run フォルダが作成されます。
フォルダの生成が確認できたら Ctrl-C などで停止してください。
4. Apache Jena Fuseki 2 の設定
Fuseki 2 の設定方法は こちら です。 Fuseki 1 ではすべての設定を config.ttl に集約して記述していたのですが、 Fuseki 2 ではサーバ設定/セキュリティ設定/エンドポイント設定など、それぞれ別の設定ファイルに記述するように変更されました。 Fuseki 1 のスタイルでも記述は可能とのことですが、移行が推奨されています。ここでは Fuseki 2 の作法に従います。
4.1 サーバ設定の確認
FUSEKI_BASE/config.ttl が生成されているはずです。クエリータイムアウトを設定したり、カスタムクラスをロードする場合にはこの設定を変更する必要がありますが、通常は編集の必要はありません。
4.2 セキュリティ設定の確認
FUSEKI_BASE/shiro.ini が生成されているはずです。 Apache Shiro によるセキュリティがサポートされているので、外向けに運用する場合には適切に設定しましょう。 このポストの利用方法であれば、デフォルトのままで支障はありません。
4.3 エンドポイントの設定
FUSEKI_BASE/configuration フォルダが生成されているはずです。このフォルダの配下にひとつまたは複数の設定ファイルを置くことで、ひとつまたは複数のエンドポイントを設定することができます。設定ファイルは Turtle で記述します。
最小限の設定は以下のとおりです。
- FUSEKI_BASE/configuration/sample.ttl ファイルを作成
- 以下の内容で保存
@prefix fuseki: <http://jena.apache.org/fuseki#> .
@prefix ja: <http://jena.hpl.hp.com/2005/11/Assembler#> .
[
a fuseki:Service ;
fuseki:name "/sample" ;
fuseki:serviceQuery "query" ;
fuseki:dataset [
a ja:RDFDataset ;
ja:defaultGraph [
a ja:MemoryModel ;
ja:content [ja:externalContent <https://raw.githubusercontent.com/apache/jena/master/jena-fuseki1/Data/books.ttl>]
]
]
] .
ここでは https://raw.githubusercontent.com/apache/jena/master/jena-fuseki1/Data/books.ttl をメモリーベースのトリプルストアにロードして、http://localhost:3030/sample/query という URL に SPARQL Endpoint を立ち上げる、という設定が記述されています。
なお sample.ttl というファイル名は拡張子が ttl でありさえすればなんでもかまいませんが、ここでは fuseki:name の値と対応付けています。複数の設定ファイルをおいて複数のエンドポイントを運用する場合には、URL のバッティングに注意しましょう。
4. Apache Jena Fuseki 2 の起動
- 以下のコマンドで起動します (試運転の起動コマンドと一緒)
- Load configuration PATH_TO_YOUR_CONFIG / Register: NAME_OF_YOUR_SERVICE といったメッセージが追加されていることを確認しましょう
- RDF に問題がある場合にはエラーメッセージなどが表示されます
- 大きな RDF を指定した場合には起動に時間がかかります
$ cd apache-jena-fuseki-2.3.0
$ fuseki-server
[19:33:29] Server INFO Fuseki 2.3.0 2015-07-25T17:11:28+0000
[19:33:29] Config INFO FUSEKI_HOME=C:\\apache-jena-fuseki-2.3.0\.
[19:33:29] Config INFO FUSEKI_BASE=C:\\apache-jena-fuseki-2.3.0\run
[19:33:29] Servlet INFO Initializing Shiro environment
[19:33:29] Config INFO Shiro file: file://C:\\apache-jena-fuseki-2.3.0\run\shiro.ini
[19:33:29] Config INFO Load configuration: file:///C:/apache-jena-fuseki-2.3.0/run/configuration/sample.ttl
[19:33:31] Config INFO Register: /sample
[19:33:31] Server INFO Started 2015/09/14 19:33:31 JST on port 3030
- Ctrl-C などで停止してください
5. Apache Jena Fuseki 2 の起動確認
- http://localhost:3030/ はトップページになっています
- 起動中のエンドポイントを確認したり、SPARQL 実行のコンソールが提供されています
- Fuseki 1 のコンソールよりは使いやすくなっているので、使うのもいいかもしれません
上記の設定で構築された SPARQL Endpoint の URL は http://localhost:3030/sample/query になります。このような SPARQL の実行例は:
select * where { ?s ?p ?o. }
このような URL から得ることができます
http://localhost:3030/sample/query?query=select+*+where+%7B%3Fs+%3Fp+%3Fo.%7D&output=json