PC上でSPARQLを利用する

Linked Dataの学び方には種々のやり方があると思われますが、小規模なデータを自分で作り、Linked Dataとして実装し、SPARQLを使って各種の検索を試して見るのが、近道ではないかと思います。そこでこの記事では、そのための準備として、SPARQLエンドポイント作成ツールであるFusekiをWindows PC上で動かす方法をご紹介します。

Fusekiは「Fusekiを使ったSPARQL Endpoint構築方法」でご紹介しているサーバ向けの本格的なツールですが、Windows上で(そして多分Macintoshでも)簡単に動かすことができます。SPARQLの入門書として定評があるB. DuCharme氏のLearning SPARQLでも学習用ツールとして大きく取り上げられているものですので、入門用として適切なものではないかと思われます。

Fusekiサーバのインストールと起動

ダウンロード

Fusekiのダウンロードサイト(http://www.apache.org/dist/jena/binaries/)から最新の配布版をダウンロードします。2014年6月時点では1.0.2が最新版で、jena-fuseki-1.0.2-distribution.zip というものをダウンロードすることができました。

この圧縮ファイルを解凍し、中にあるフォルダ(jena-fuseki-1.0.2)をハードディスク上の適当な位置に置きます。デスクトップでも構いません。フォルダ名をfusekiに改名します。なお、この改名はこの記事での説明を簡単にするためだけのものです。元のフォルダ名のままでも構いません。

起動用バッチファイルの修正

fusekiフォルダを開くと、中にfuseki-server.batというバッチファイルがあります。これがfusekiの起動用バッチファイルですが、必要な情報をコマンドオプションとして外部から与える形になっており、初心者には使いにくいです。そこでエディタ(あるいはメモ帳)を使って、以下のようなバッチファイル(my-fuseki-server.bat)をfusekiフォルダの中に作成します。

java -Xmx1200M -jar fuseki-server.jar --update --mem /ds
pause

簡単に説明しておきましょう。「java -Xmx1200M -jar fuseki-server.jar」は、fuseki-server.jar(FusekiのJavaプログラム)を最大ヒープサイズ(メモリ使用量)1200Mバイトで起動するという指示です。その後はfuseki-serverに渡すパラメータで、- -updateはデータの追加/更新を認める、- -memはデータの格納領域としてメモリを使用する、/dsはデータセットの名前をdsにするという指定になっています。2行目のpauseは、fuseki-server終了時にコマンドプロンプト画面が閉じないようにするためのものです。これを追加することで、何かエラーがあったときに、エラーメッセージを画面上で確認することができます。

Fusekiサーバの起動

上で作成したmy-fuseki-server.batファイルのアイコンをダブルクリックします。以下のように表示されれば成功です。

図1 Fusekiサーバの起動画面

Fusekiが提供するサービスを利用するためには、このコマンドプロンプト画面はこのままにしておく必要があります。邪魔でしたら最小化しておいてください。

よくあるトラブルとその対処

(1)「’java’ は、内部コマンドまたは外部コマンド、操作可能なプログラムまたはバッチ ファイルとして認識されていません。」と表示される

Fusekiを動かすためには、Javaのランタイムがインストールされている必要があります。Javaのダウンロードページ(https://java.com/ja/download/)からダウンロードして、インストールして下さい。

(2)「Error occurred during initialization of VM. Could not reserve enough space for object heap」と表示される

Fusekiは起動時に多くのメモリを必要とします。このエラーはメモリ不足のときに表示されます。PCを再起動し、何もアプリケーションが立ち上がっていない状態で、my-fuseki-server.batをダブルクリックしてみて下さい。3GB程度のメモリを搭載していれば、問題なく立ち上がると思います。Fusekiは一度立ち上がれば、よほど巨大なデータを使わない限り、それほどメモリを必要としません。立ち上げ後であれば他のアプリケーションと併用してもほとんど問題ありません。

Fusekiを利用する

FusekiはSPARQLエンドポイントのサービスを提供するアプリケーションです。そのサービスはブラウザを使って利用します。Fusekiサーバが立ち上がっている状態で、ブラウザを立ち上げ、アドレス欄に以下を入力します。

http://localhost:3030

ここでlocalhostは今使用しているPCを意味するアドレスです。3030はFusekiが使用しているポート番号です。このアドレスにアクセスすると、以下のFusekiページが表示されます。

図2 Fusekiページ

注意: ブラウザとしてIEを使うと一部の機能が動作しません。FireFox, Google Chrome, Safari では正常に動くことを確認しています。なお、これはIE側の問題ではなく、Fusekiの画面のHTMLで “XHTML 1.0 Strict” と宣言しておきながら、一部の<meta>タグで最後が “/>” でなく、“>” になっているためです。

このページはFusekiが提供するサービスや関連するドキュメントへのリンクページになっています。SPARQLエンドポイントとしての基本機能の利用には、はじめの「Control Panel」をクリックします。以下のコントロールパネルが表示されます。

図3 Fusekiコントロールパネル

このコントロールパネルでは使用するデータセットを選択します。今の場合、セレクトボックスに「/ds」と表示されています。これはFusekiサーバの起動コマンドで指定したデータセットです。今の実装ではこれしか選択肢はありませんので、この状態で「Select」ボタンを押します。以下のFusekiクエリページが表示されます。

図4 Fusekiクエリページ

このクエリページから、以下の3種のサービスを利用することができます。

  1. SPARQL Query: SELECT文、ASK文、CONSTRUCT文、DESCRIBE文を使った検索
  2. SPARQL Update: INSERT文、DELETE文を使ったデータの挿入/削除
  3. File upload: ファイルからデータをアップロード

データを準備する

それでは早速FusekiにLinked Dataを読み込ませる準備をしましょう。「Linked Dataとは」の記事に書きました学生データをふくらませて、以下のRDFデータのファイル(RDF/Turtle形式)を作成します。

1
2
3
4
5
6
7
8
9
10
11
12
@prefix ex: <http://example.org/sample#> .
@prefix dbpr: <http://dbpedia.org/resource/> .
 
ex:A0001 a ex:学生 ;
   ex:氏名 "東京 太郎" ;
   ex:出身地 dbpr:Tokyo .
ex:A0002 a ex:学生 ;
   ex:氏名 "川越 花子" ;
   ex:出身地 dbpr:Saitama_Prefecture .
ex:A0003 a ex:学生 ;
   ex:氏名 "八王子 次郎" ;
   ex:出身地 dbpr:Tokyo .

リスト1 学生データ(student1.ttl)

RDFデータの作成はメモ帳でも構いません。サクラエディタやTeraPadなどのプログラムエディタをお使いの人はそれでも良いです。なお、dotNetRDF tools というオープンソースのツールにはrdfEditorというRDFデータに特化した優れたエディタが同梱されています。これを使うときれいに色分けしてくれ、構文チェックもしてくれますのでお勧めします。

RDFファイル作成時の注意点

リスト1のように日本語を含むRDF文のときは、文字コードを「UTF-8」にする必要があります。rdfEditorは自動的にUTF-8で保存してくれますが、メモ帳や和製エディタでは、デフォルトでは「SJIS」になってしまうものが多いですので注意してください。

データを読み込ませる

ブラウザ上のFusekiクエリページに戻り、File uploadのところの「参照…」ボタンを押します。ファイルダイアログが表示されますので、上で作成したデータファイル(student1.ttl)を指定します。

図5 データファイルのアップロード

次いで、「Upload」ボタンを押します。以下のように表示されれば成功です。

図6 アップロード成功

入力されたデータを確認する

データが正しく入力されたかどうか確認してみましょう。再び、Control Panel→SelectボタンでFuseki Queryページに戻ります。SPARQL Query欄に以下のように入力します。

SELECT * WHERE { ?s ?p ?o . }

これは、「任意の主語(?s), 述語(?p), 目的語(?o)をもつトリプルを見つけて表示せよ」という指示です。このクエリで入力されているすべてのデータが表示されます。検索指示に際しては、下図のように「Output: XML」、「style: xml-to-html」を選んでください。

図7 SPARQL Query

「Get Results」ボタンを押すと、以下のように検索結果が表示されます。SPARQLでは、特に指定しない限り、表示順は保証されません。順序が重要なときは、ORDER BY 句を使って順序を指定します。

図8 全件検索結果

条件検索を行う

次に東京都出身の学生を検索してみましょう。「Linked Dataとは」の記事に書かれた以下のクエリを同様にして発行してみます。

1
2
3
4
5
6
PREFIX ex: <http://example.org/sample#>
SELECT ?student ?name WHERE {
   ?student a ex:学生 ;
      ex:氏名 ?name ;
      ex:出身地 <http://dbpedia.org/resource/Tokyo> .
}

リスト2 条件付検索の例

この検索を実行すると以下の検索結果が得られます。

図9 条件検索結果

入力データをすべて消す

FusekiのFile uploadは、既に登録されているデータの上書きになります。このため、変更する前のデータが残ってしまうことがあります。もう一度はじめからやり直したいときは、SPARQL Update欄に以下のDELETE文を入力し、「Perform update」ボタンを押します。

DELETE WHERE { ?s ?p ?o . }

Fusekiサーバの終了

Fusekiサーバには終了コマンドは存在しないようです。図1のコマンドプロンプト画面を閉じれば(「閉じる」ボタンを押せば)終了します。

 

About 佐藤 英人

東京国際大学名誉教授。 若い頃、経済企画庁(現内閣府、経済産業省)の統計課、国民所得部で統計の実務を経験。 その後、大学で統計データベース、知識ベース、オブジェクト指向等の研究・教育に従事。 著書:統計データベースの設計と開発 - データモデルと知識ベースの応用(オーム社)、オブジェクト指向が分かる本(オーム社)など。

コメントを残す

Name and email are required. Your email address will not be published.

キャプチャ * Time limit is exhausted. Please reload CAPTCHA.