Apache Jena の Fuseki について、関係する業務のマニュアルを作る上で部分的に日本語に訳していたので全体を読める形にしてみました。
トンチンカンな訳をしている部分もあるかと思いますので、オリジナルとあわせて読むことをおすすめします。
#Fuseki:RDFデータをHTTPを介してサービスします
FusekiはSPARQLサーバです。HTTPを介したSPARQLプロトコルを使って、RESTスタイルのSPARQL HTTP Update、SPARQL Query、およびSPARQL Updateを提供します。
関連するSPARQL仕様:
これらは、SPARQLワーキンググループによって策定作業が進められています。基本デザインは策定済みですが、詳細は変更されることがあります。Fusekiは仕様原案をトラッキングします。
次の項目についても参照してください:
- SPARQL Over HTTP – 任意のSPARQL 1.1システムで動作するコマンドラインツール
##コンテンツ
- ダウンロード
- 入門
- セキュリティ
- ロギング
- サーバーURIスキーム
- FusekiServerの実行
- Fusekiの設定ファイル
- SPARQL Over HTTP
- Javaから利用
- 開発システム
##Fusekiのダウンロード
リリースの詳細についてはダウンロードページを参照してください 。
ビルドのスナップショットは、Apache Maven もしくはここからダウンロードすることができます。
バージョンのディレクトリを選択し、fuseki-VER.zipファイルを探してください。スナップショットの場合、VERは、タイムスタンプとMavenで生成されたインクリメント番号が含まれます。
###Fusekiのダウンロードファイル
ファイル名 | 説明 |
---|---|
fuseki-VER.distribution.zip | 全てのものが含まれます |
fuseki-VER-server.jar | 実行可能なFusekiサーバ(jarファイル) |
fuseki-VER-SOH.zip | SOH(SPARQL Over HTTP)スクリプト |
##Fuseki入門
このセクションでは、サーバーのインストールと、初期設定と実行のための簡単なガイドを提供します。ここで、ダウンロードしたファイルに含まれるSOH(SPARQL over HTTP)スクリプトを利用します。
- ダウンロード(サーバーとSOHスクリプトが含まれます)
- 解凍する
- (リナックスの場合)chmod +x fuseki-server s-*
- サーバーを実行する
fuseki-server --update --mem /ds
コンソールのサーバログ出力:
09:25:41 INFO Fuseki :: Dataset: in-memory
09:25:41 INFO Fuseki :: Update enabled
09:25:41 INFO Fuseki :: Fuseki development
09:25:41 INFO Fuseki :: Jetty 7.2.1.v20101111
09:25:41 INFO Fuseki :: Dataset = /ds
09:25:41 INFO Fuseki :: Started 2011/01/06 09:25:41 GMT on port 3030
##ユーザーインターフェース
Fusekiのダウンロードは数々のサービスを含みます:
- SPARQL Query、SPARQL Updateと、選択したデータセットへのファイルアップロード。
- ドキュメントへのリンク(このドキュメント)。
- SPARQL Query/Update、非RDF/XMLフォーマットのバリデーター。
コントロールパネルの場合:
- ブラウザで http://localhost:3030/ にアクセス
- 「Control Panel」をクリック
- データセットを選択(上記のように設定した場合、選択肢は一つだけです)。
このページでは、SPARQLオペレーションと、選択したデータセットに対するファイルのアップロード操作を提供します。
##スクリプトコントロール
新しいウィンドウにて:
サーバーのデフォルトのグラフに、いくつかのRDFデータをロードします。
s-put http://localhost:3030/ds/data default books.ttl
ロードしたデータを読み出します。
s-get http://localhost:3030/ds/data default
…/queryエンドポイントに対するSPARQLクエリー。
s-query --service http://localhost:3030/ds/query 'select * {?s ?p ?o}'
…/updateエンドポイントに対するsparqlクエリー(デフォルトグラフのデータをクリアします)。
s-update --service http://localhost:3030/ds/update 'clear default'
##セキュリティとアクセス制御
現在Fusekiは、自身でセキュリティとアクセスコントロールを提供しません。
認証と同時リクエスト数の制御は、Apacheサーバと、外部トラフィック(例えばAmazonのEC2上)に対するFusekiポートのブロックもしくは、ローカルホストのネットワークインタフェースのみリッスンすることで追加することができます。
これは、エンドポイントの更新のために特に重要です(SPARQL Update、PUT/POST/DELETEが有効なSPARQL Graph Store protocol )。
--update引数を付けてサーバを起動した場合、データは、アクセス制御無しに更新することができます。その引数無しで起動した場合、データは読み取り専用です。
##ロギング
Fusekiはロギングのために Log4J を使います。2つのロギングチャネルがあります。
- 一般的なサーバメッセージ:org.apache.jena.fuseki.Server
- 全ての要求のメッセージのためのチャネル:org.apache.jena.fuseki.Fuseki
デフォルトの設定(log4jのプロパティファイルの一部です)
# Fuseki
# Server log.
log4j.logger.org.apache.jena.fuseki.Server=INFO
# Request log.
log4j.logger.org.apache.jena.fuseki.Fuseki=INFO
# Internal logs
log4j.logger.org.apache.jena.fuseki=INFO
##サーバーURIスキーム
FusekiのためのサービスURIの詳細:
- http://host/dataset/query -- SPARQL query エンドポイント
- http://host/dataset/update -- SPARQL Update language エンドポイント
- http://host/dataset/data -- SPARQL Graph Store Protocol エンドポイント
- http://host/dataset/upload -- file upload エンドポイント
datasetの場所はURIのパスです。Fusekiはデフォルトで localhost:3030 のように3030番ポートを使用することに注意してください。
重要 - データセット名に「dataset」というテキストを設定できますが、コントロールパネルとウェブページの機能を妨げることがあるので避けるべきです。
URI http://host/dataset/sparql は、現在 /query にマッピングされていますが、汎用のSPARQL query エンドポイントに変更される可能性があります。
##FusekiServerの実行
サーバは、fuseki-server スクリプトにて実行することができます。一般的な形式:
fuseki-server --mem /DatasetPathName
fuseki-server --file=FILE /DatasetPathName
fuseki-server --loc=DB /DatasetPathName
fuseki-server --config=ConfigFile
ポート番号の設定は--port=PORTオプションです。デフォルトは3030番です。
/DatasetPathName は、HTTP経由でアクセス可能なデータセットの名前です。利用可能なURIと、この名前の選択ついてのサーバーURIスキームは、上記のセクションを参照してください。
--update 引数が使われない限り、サーバーは読み取りリクエストのみをサービスします。
データセットの全選択肢の書式:
###Fusekiデータセット記述
-
--mem
空のインメモリ(非永続)データセットを作成します。 -
--file=FILE
空のインメモリ(非永続)データセットを作成し、FILE を読み込みます。 -
--loc=DIR
既存のTDBデータベースを使います。存在しない場合は空のものを作成します。 -
--desc=assemblerFile
一般的なアセンブラ記述(general assembler description)に基づいてデータセットを構築します。 -
--config=ConfigFile
1つ以上のサービスのエンドポイントを、構成記述(configuration description)をベースとして構築します。
TDBのコピーはスタンドアロンサーバーに含まれています。TDBのアセンブラファイルの例は tdb.ttl です。
###Fusekiサーバの引数
-
--help
ヘルプメッセージを表示します。 -
--port=番号
ポート番号(デフォルトは3030)。 -
--localhost
localhostネットワークインターフェイスのみリッスンします。 -
--update
更新を許可します。それ以外の場合は、読み取り要求のみを受け付けます(設定ファイルが指定された場合は無視されます。)。
##空のデータセットでFusekiServerを起動
fuseki-server --update --mem /ds
サーバーはインメモリデータセットを使用して3030番ポートで実行されます。次のURLで適切なプロトコルを介してアクセスすることができます:
- SPARQL query: http://localhost:3030/ds/query
- SPARQL update: http://localhost:3030/ds/update
- SPARQL HTTP update: http://localhost:3030/ds/data
SPARQL Over HTTP スクリプトは命名とプロトコルの詳細を世話します。例えば、data.rdfファイルを読み込む場合:
s-put http://localhost:3030/ds/data default data.rdf
##FusekiサーバーとTDB
Fusekiには組み込みバージョンのTDBが含まれます。--desc引数を付けてサーバを実行してください。
fuseki-server --desc tdb.ttl /ds
そして、DBディレクトリ内のデータベース、アセンブラ記述(assembler description):
@prefix rdf: <http://www.w3.org/1999/02/22-rdf-syntax-ns#> .
@prefix rdfs: <http://www.w3.org/2000/01/rdf-schema#> .
@prefix ja: <http://jena.hpl.hp.com/2005/11/Assembler#> .
@prefix tdb: <http://jena.hpl.hp.com/2008/tdb#> .
[] ja:loadClass "com.hp.hpl.jena.tdb.TDB" .
tdb:DatasetTDB rdfs:subClassOf ja:RDFDataset .
tdb:GraphTDB rdfs:subClassOf ja:Model .
<#dataset> rdf:type tdb:DatasetTDB ;
tdb:location "DB" ;
.
書式:
fuseki-server --loc=DB /ds
DB の場所のアセンブラの省略形です。
デフォルトとして作成される全てのグラフのトリプルの作成には名前なしのグラフを使ってください:
<#dataset> rdf:type tdb:DatasetTDB ;
tdb:location "DB" ;
tdb:unionDefaultGraph true ;
.
##FusekiServerおよび一般的なデータセットの記述
Fusekiサーバは、様々なモデル・データセットタイプを構築するために、アセンブラ記述(assembler description)を与えることができます。
fuseki-server --desc assembler.ttl /ds
モデルのアセンブラの設定の詳細は、アセンブラ記述(assembler description)と assembler howto で与えられます。
一般的なデータセットの記述:
# Dataset of default graph and one named graph.
<#dataset> rdf:type ja:RDFDataset ;
ja:defaultGraph <#modelDft> ;
ja:namedGraph
[ ja:graphName <http://example.org/name1> ;
ja:graph <#model1> ] ;
.
<#modelDft> a ja:MemoryModel ;
ja:content [ ja:externalContent <file:Data.ttl> .
<#model1> rdf:type ja:MemoryModel ;
ja:content [ ja:externalContent <file:FILE-1.ttl> ] ;
ja:content [ ja:externalContent <file:FILE-2.ttl> ] ;
.
モデルは Jena inference models で成ります。
##Fusekiの設定ファイル
Fusekiサーバは、設定ファイルを使って設定することができます。シングルデータセットを公開するためのコマンドライン引数は、内部的に、与えられたデータセット名に基づくデフォルト設定で構築するのが近道です。
設定はRDFグラフです。一つのグラフは、1サーバーの設定(サービス数分)で構成されます。各サービスは、データセット上のエンドポイント数分を提供します。
次の例では、解説のために分割されていますが、すべては本来一つのファイルです(Turtle構文のRDFグラフ)。
###プレフィックス宣言
いくつかの有用な接頭辞の宣言:
@prefix fuseki: <http://jena.apache.org/fuseki#> .
@prefix rdf: <http://www.w3.org/1999/02/22-rdf-syntax-ns#> .
@prefix rdfs: <http://www.w3.org/2000/01/rdf-schema#> .
@prefix tdb: <http://jena.hpl.hp.com/2008/tdb#> .
@prefix ja: <http://jena.hpl.hp.com/2005/11/Assembler#> .
@prefix : <#> .
###サーバセクション
マシンにとってファイルの順序は重要ではありませんが、いくつかのサービスを持つデータセットをサーバ記述(server description)でスタートするのに便利です。
[] rdf:type fuseki:Server ;
# Server-wide context parameters can be given here.
# For example, to set query timeouts: on a server-wide basis:
# Format 1: "1000" -- 1 second timeout
# Format 2: "10000,60000" -- 10s timeout to first result, then 60s timeout to for rest of query.
# See java doc for ARQ.queryTimeout
# ja:context [ ja:cxtName "arq:queryTimeout" ; ja:cxtValue "10000" ] ;
# Load custom code (rarely needed)
# ja:loadClass "your.code.Class" ;
# Services available. Only explicitly listed services are configured.
# If there is a service description not linked from this list, it is ignored.
fuseki:services (
<#service1>
<#service2>
) .
###アセンブラの初期化
すべてのデータセットは、アセンブラ記述(assembler descriptions)にて記述されています。アセンブラは、オブジェクトの多くの種類を記述する拡張可能な方法を提供します。いくつかのアセンブラの拡張機能を設定します(ここではTDBアセンブラのサポート)。
# Declaration additional assembler items.
[] ja:loadClass "com.hp.hpl.jena.tdb.TDB" .
# TDB
tdb:DatasetTDB rdfs:subClassOf ja:RDFDataset .
tdb:GraphTDB rdfs:subClassOf ja:Model .
###Service1
このサービスは、メモリ内のデータセットに対して、SPARQL Query, SPARQL Update and SPARQL Graph Store protocolおよび、ファイルアップロードを提供します。初めは、データセットは空です。
##---------------------------------------------------------------
## Updatable in-memory dataset.
<#service1> rdf:type fuseki:Service ;
fuseki:name "ds" ; # http://host:port/ds
fuseki:serviceQuery "query" ; # SPARQL query service
fuseki:serviceQuery "sparql" ; # SPARQL query service
fuseki:serviceUpdate "update" ; # SPARQL query service
fuseki:serviceUpload "upload" ; # Non-SPARQL upload service
fuseki:serviceReadWriteGraphStore "data" ; # SPARQL Graph store protocol (read and write)
# A separate ead-only graph store endpoint:
fuseki:serviceReadGraphStore "get" ; # SPARQL Graph store protocol (read only)
fuseki:dataset <#dataset-mem> ;
.
<#dataset-mem> rdf:type ja:RDFDataset .
###Service2
このサービスは、いくつかのエンドポイントを提供します。読み取りのみのが可能なエンドポイント(SPARQL Query and HTTP GET SPARQl Graph Store protocol)が定義されているので、読み取り専用です。データセットは、単一のメモリ内グラフです。
このサービスは、単一データグラフのデータセットに対して、読み取り専用アクセスを提供します。
<#service2> rdf:type fuseki:Service ;
fuseki:name "books" ; # http://host:port/books
fuseki:serviceQuery "query" ; # SPARQL query service
fuseki:serviceReadGraphStore "data" ; # SPARQL Graph store protocol (read only)
fuseki:dataset <#books> ;
.
<#books> rdf:type ja:RDFDataset ;
rdfs:label "Books" ;
ja:defaultGraph
[ rdfs:label "books.ttl" ;
a ja:MemoryModel ;
ja:content [ja:externalContent <file:Data/books.ttl> ] ;
] ;
.
###Service3
このサービスは、TDBデータベースに対して、SPARQL Queryアクセスのみを提供します。TDBデータベースは、Query Timeoutか、すべての名前付きグラフの集合のデフォルトグラフの作成のような、特徴集合の定義(specific features set)を持つことができます。
<#service3> rdf:type fuseki:Service ;
fuseki:name "tdb" ; # http://host:port/tdb
fuseki:serviceQuery "sparql" ; # SPARQL query service
fuseki:dataset <#dataset> ;
.
<#dataset> rdf:type tdb:DatasetTDB ;
tdb:location "DB" ;
# Query timeout on this dataset (1s, 1000 milliseconds)
ja:context [ ja:cxtName "arq:queryTimeout" ; ja:cxtValue "1000" ] ;
# Make the default graph be the union of all named graphs.
## tdb:unionDefaultGraph true ;
.
##SPARQL Over HTTP
SOH(SPARQL Over HTTP)はSPARQL 1.1で作業するためのコマンドラインスクリプトのセットです。SOHは、サーバから独立しており、SPARQL 1.1システムに準拠したHTTPアクセスに備えて動作します。
SPARQL Over HTTP を参照してください。
###例
# PUT a file
s-put http://localhost:3030/ds/data default D.nt
# GET a file
s-get http://localhost:3030/ds/data default
# PUT a file to a named graph
s-put http://localhost:3030/ds/data http://example/graph D.nt
# Query
s-query --service http://localhost:3030/ds/query 'SELECT * {?s ?p ?o}'
# Update
s-update --service http://localhost:3030/ds/update --file=update.ru
##Javaからの利用
###SPARQL Query
ARQの QueryExecutionFactory.sparqlService を使用することができます。
###SPARQL Update
UpdateExecutionFactory.createRemote を参照してください。
###SPARQL HTTP
DatasetAccessor を参照してください。