Fuseki Document の日本語訳（仮）


[Apache Jena](http://jena.apache.org/index.html) の [Fuseki](http://jena.apache.org/documentation/serving_data/index.html) について、関係する業務のマニュアルを作る上で部分的に日本語に訳していたので全体を読める形にしてみました。
トンチンカンな訳をしている部分もあるかと思いますので、[オリジナル](http://jena.apache.org/documentation/serving_data/index.html)とあわせて読むことをおすすめします。

#Fuseki：RDFデータをHTTPを介してサービスします

FusekiはSPARQLサーバです。HTTPを介したSPARQLプロトコルを使って、RESTスタイルのSPARQL HTTP Update、SPARQL Query、およびSPARQL Updateを提供します。

関連するSPARQL仕様:

- [SPARQL 1.1 Query](http://www.w3.org/TR/sparql11-query/)
- [SPARQL 1.1 Update](http://www.w3.org/TR/sparql11-update/)
- [SPARQL 1.1 Protocol](http://www.w3.org/TR/sparql11-protocol/)
- [SPARQL 1.1 Graph Store HTTP Protocol](http://www.w3.org/TR/sparql11-http-rdf-update/)

これらは、SPARQLワーキンググループによって策定作業が進められています。基本デザインは策定済みですが、詳細は変更されることがあります。Fusekiは仕様原案をトラッキングします。

次の項目についても参照してください：

- [SPARQL Over HTTP](http://jena.apache.org/documentation/serving_data/soh.html) – 任意のSPARQL 1.1システムで動作するコマンドラインツール

##コンテンツ

- ダウンロード
- 入門
- セキュリティ
- ロギング
- サーバーURIスキーム
- FusekiServerの実行
- Fusekiの設定ファイル
- SPARQL Over HTTP
- Javaから利用
- 開発システム

##Fusekiのダウンロード

リリースの詳細については[ダウンロードページ](http://jena.apache.org/download/index.cgi)を参照してください 。

ビルドのスナップショットは、Apache Maven もしくは[ここからダウンロード](https://repository.apache.org/content/repositories/snapshots/org/apache/jena/jena-fuseki/)することができます。

バージョンのディレクトリを選択し、fuseki-*VER*.zipファイルを探してください。スナップショットの場合、*VER*は、タイムスタンプとMavenで生成されたインクリメント番号が含まれます。

###Fusekiのダウンロードファイル

|ファイル名|説明|
|:--|:--|
|fuseki-*VER*.distribution.zip|全てのものが含まれます|
|fuseki-*VER*-server.jar|実行可​​能なFusekiサーバ（jarファイル）|
|fuseki-*VER*-SOH.zip|[SOH(SPARQL Over HTTP）](http://jena.apache.org/documentation/serving_data/soh.html)スクリプト|

##Fuseki入門

このセクションでは、サーバーのインストールと、初期設定と実行のための簡単なガイドを提供します。ここで、ダウンロードしたファイルに含まれる[SOH（SPARQL over HTTP）](http://jena.apache.org/documentation/serving_data/soh.html)スクリプトを利用します。

1. ダウンロード（サーバーとSOHスクリプトが含まれます）
2. 解凍する
3. （リナックスの場合）chmod +x fuseki-server s-*
4. サーバーを実行する
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データをロードします。

```bash
s-put http://localhost:3030/ds/data default books.ttl
```

ロードしたデータを読み出します。

```bash
s-get http://localhost:3030/ds/data default
```

…/queryエンドポイントに対するSPARQLクエリー。

```bash
s-query --service http://localhost:3030/ds/query 'select * {?s ?p ?o}'
```

…/updateエンドポイントに対するsparqlクエリー（デフォルトグラフのデータをクリアします）。

```bash
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](http://logging.apache.org/log4j/) を使います。2つのロギングチャネルがあります。

1. 一般的なサーバメッセージ：org.apache.jena.fuseki.Server
2. 全ての要求のメッセージのためのチャネル：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 スクリプトにて実行することができます。一般的な形式:

```bash
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を起動


```bash
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](http://jena.apache.org/documentation/serving_data/soh.html) スクリプトは命名とプロトコルの詳細を世話します。例えば、data.rdfファイルを読み込む場合：

```bash
s-put http://localhost:3030/ds/data default data.rdf
```

##FusekiサーバーとTDB

Fusekiには組み込みバージョンのTDBが含まれます。--desc引数を付けてサーバを実行してください。


```bash
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" ;
     .
```

書式：

```bash
fuseki-server --loc=DB /ds
```

DB の場所のアセンブラの省略形です。

デフォルトとして作成される全てのグラフのトリプルの作成には名前なしのグラフを使ってください：

```
<#dataset> rdf:type      tdb:DatasetTDB ;
     tdb:location "DB" ;
     tdb:unionDefaultGraph true ;
    .
```

##FusekiServerおよび一般的なデータセットの記述

Fusekiサーバは、様々なモデル・データセットタイプを構築するために、[アセンブラ記述(assembler description)](http://jena.apache.org/documentation/assembler/)を与えることができます。

```bash
fuseki-server --desc assembler.ttl /ds
```

モデルのアセンブラの設定の詳細は、[アセンブラ記述(assembler description)](http://jena.apache.org/documentation/assembler/)と [assembler howto](http://jena.apache.org/documentation/assembler/assembler-howto.html) で与えられます。

一般的なデータセットの記述：

```
# 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](http://jena.apache.org/documentation/inference/)  で成ります。

##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）](http://jena.apache.org/documentation/assembler/index.html)にて記述されています。アセンブラは、オブジェクトの多くの種類を記述する拡張可能な方法を提供します。いくつかのアセンブラの拡張機能を設定します（ここでは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](http://jena.apache.org/documentation/serving_data/soh.html) を参照してください。

###例


```bash
# 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 を参照してください。