MacでStardogを試してみる


# Stardogとは
Complexible社によるJavaで書かれたRDFストアです。他との違いとして、全文検索やユーザーごとの権限設定、推論などの独自機能があります。無料プランでは、2500万トリプルまで使えます。

## 導入

### 1.まずはJava8をインストール
http://www.oracle.com/technetwork/java/javase/downloads/jdk8-downloads-2133151.html
このページから``jdk-8u73-macosx-x64.dmg``をダウンロードし、実行。

```
$ java -version
java version "1.8.0_73"
Java(TM) SE Runtime Environment (build 1.8.0_73-b02)
Java HotSpot(TM) 64-Bit Server VM (build 25.73-b02, mixed mode)
```


### 2.Stardogをダウンロード
http://stardog.com/
今回は無料のCommunity版を選択し、メールに記載されているStardog本体とライセンスキーをダウンロード。
``stardog-license-key.bin``を``/stardog``に移動させる。

### 3.パスを通す
環境変数``STARDOG_HOME``にルートパスを指定する。

```
$ export STARDOG_HOME=/~~~/stardog
$ echo $STARDOG_HOME
/~~~/stardog
```

### 4.起動する
``/stardog/bin``に移動したのち、サーバーを起動させる。

```
$ ./stardog-admin server start
Initializing Stardog

************************************************************
This copy of Stardog is licensed to *** (***), ***
This is a Community license
This license does not expire.
************************************************************

                                                             :;
                                      ;;                   `;`:
  `'+',    ::                        `++                    `;:`
 +###++,  ,#+                        `++                    .
 ##+.,',  '#+                         ++                     +
,##      ####++  ####+:   ##,++` .###+++   .####+    ####++++#
`##+     ####+'  ##+#++   ###++``###'+++  `###'+++  ###`,++,:
 ####+    ##+        ++.  ##:   ###  `++  ###  `++` ##`  ++:
  ###++,  ##+        ++,  ##`   ##;  `++  ##:   ++; ##,  ++:
    ;+++  ##+    ####++,  ##`   ##:  `++  ##:   ++' ;##'#++
     ;++  ##+   ###  ++,  ##`   ##'  `++  ##;   ++:  ####+
,.   +++  ##+   ##:  ++,  ##`   ###  `++  ###  .++  '#;
,####++'  +##++ ###+#+++` ##`   :####+++  `####++'  ;####++`
`####+;    ##++  ###+,++` ##`    ;###:++   `###+;   `###++++
                                                    ##   `++
                                                   .##   ;++
                                                    #####++`
                                                     `;;;.

************************************************************

Stardog server 4.0.3 started on Sun Feb 07 02:59:08 JST 2016.

Stardog server is listening on all network interfaces.
SNARL server available at snarl://localhost:5820.
HTTP server available at http://localhost:5820.

STARDOG_HOME=/~~~/stardog
```
これが出れば成功。

サーバーの停止は以下のコマンド。

```
$ ./stardog-admin server stop
```

## 触ってみる
http://linkdata.org/work/rdf1s258i/nagoya_sightseeing.html?key=#work_information
今回はサンプルとして、名古屋の観光施設情報のオープンデータを初期データとして使ってみます。

### 1.データベースを作成
```
$ ./stardog-admin db create -n NagoyaSightseeing
Successfully created database 'NagoyaSightseeing'.
```

### 2.RDFファイルをロード
http://linkdata.org/work/rdf1s258i/nagoya_sightseeing_api.html
このページから``RDF (Turtle)``をダウンロードし、``nagoya_sightseeing_ttl.txt``を``nagoya_sightseeing_.ttl``にリネームする。
この.ttlファイルを``/stardog/bin``に移動し、ロードを実行。

```
$ ./stardog data add NagoyaSightseeing nagoya_sightseeing_youtube.ttl
Adding data from file: nagoya_sightseeing_youtube.ttl
An error occurred adding RDF to the index: /Users/yasu/Develop/stardog/bin/nagoya_sightseeing_youtube.ttl
```
今回エラーが出てしまったので、諦めてWeb管理画面からアップロードすることにします。

### 3.Web管理画面にアクセス
http://localhost:5820/NagoyaSightseeing

|ユーザー名|admin|
|---|---|
|パスワード|admin|
アクセスしたら、ヘッダーメニューの``Data > Add``で先ほどの.ttlファイルを選択しアップロード。

## SPARQLクエリを叩いてみる
ヘッダーメニューの``Query``からコンソールに入力する。

### 全トリプルを表示
```sparql
select *
where { 
  ?s ?p ?o . 
}
LIMIT 100
```

### 全てのラベルを表示
```sparql
select ?o
where { 
  ?s rdfs:label ?o . 
}
LIMIT 100
```

### 名古屋城に関する情報を表示
```sparql
select *
where { 
  <http://linkdata.org/resource/rdf1s258i#%E5%90%8D%E5%8F%A4%E5%B1%8B%E5%9F%8E> ?p ?o . 
}
LIMIT 100
```

## (番外編) Node.jsから操作する
https://github.com/complexible/stardog.js
Complexible社から公式にJS向けのフレームワークが提供されているので、Node.jsから使ってみます。

### 1.npmでインストール
```
$ npm install stardog
```

### 2.名古屋城に関する情報を表示するスクリプトを書く
```node:stardog.js
const STARDOG = require("stardog");

var conn = new STARDOG.Connection();

conn.setEndpoint("http://localhost:5820");
conn.setCredentials("admin", "admin");

conn.query({
	database: "NagoyaSightseeing",
    query: "select distinct ?o where { <http://linkdata.org/resource/rdf1s258i#%E5%90%8D%E5%8F%A4%E5%B1%8B%E5%9F%8E> ?p ?o }",
    limit: 100,
    offset: 0
},
function (data) {
	data.results.bindings.forEach(function(triple) {
		console.log(triple.o.value)
	})
});
```

### 3.実行する
```
$ node stardog
愛知県名古屋市中区本丸1-1
名古屋城
Nagoya Castle
35.184483
136.89766
http://www.nagoyajo.city.nagoya.jp/
```