チュートリアル

具体的な例を使って、D'ownLOD の使い方を説明していきます。 例として、指定したプロ野球チームの選手の一覧を表示するLODアプリケーションを順を追って作成していきます。 基本的な流れは、次の通りです。

  1. サインイン
  2. プロジェクト定義
    1. 一般定義
    2. データ定義
    3. ビュー定義
    4. マッピング定義
    5. URL 別名定義
  3. ダウンロード

まずは D'ownLODサインインしてください。

アカウントが無ければ、サインアップから作成するか、guest ユーザでサインインすることもできます。

サインインするとプロジェクトの一覧が表示されます。 プロジェクトとは、アプリケーションの定義を記述するためのもので、 一つのプロジェクトで一つのアプリケーションが作成できます。

プロジェクトを追加するには、以下の選択肢があります。

  • をクリックして空のプロジェクトを新規作成する
  • プルダウンから選択して、サンプルを追加する。

ここでは、 を押して、空のプロジェクトを新規作成しましょう。

定義内容

追加された行のプロジェクト名称をクリックして、baseballlodと入力し、 baseballlod を選択して を押してください。

定義内容

プロジェクトを選択して を押すと、 以下のような「プロジェクト定義編集」画面に移ります。

一般定義

データ定義

ビュー定義

マッピング定義

URL 別名定義

ダウンロード

プロジェクト定義のメニューになっており、順に定義していくことで、結果的にアプリケーションが構築されます。

一般定義は、プロジェクト全体に関する一般的な定義を行います。 現在は、HTML の head タグに記述する内容のみ定義できます。

head タグは、デフォルトで以下のようなJsViewsの動作に必要なソースコードが表示されます。

定義内容
<head> </head>

D'ownLOD アプリでは、 HTML、CSS および JavaScript フレームワークである Bootstrap と JSON テンプレートエンジンである JsViewsおよび、 それらが依存する JavaScript ライブラリ jQuery をデフォルトで使用する設定になっております。 もちろん、これらの行を削除することで使用しないことも可能です。

アプリケーションが使用するデータを定義します。データ定義では SPARQL 定義と SQL 定義があります。

  • SPARQL 定義では、外部エンドポイントから LOD を取得するための SPARQL クエリを定義します。
  • SQL 定義では、SPARQL で取得した LOD を蓄積しているローカルデータベースに対して、データの絞り込みや加工を行うための SQL を定義します。

SPARQL 定義では、外部の SPARQL エンドポイントから LOD を取得するための SPARQL クエリを定義します。

まず SPARQL 定義を新規作成します。 を押してください。 リストに1行追加されたらSPARQL名称をexamplebaseballsparql1と入力してください。 作成した SPARQL 定義にチェックを入れ、 ボタンを押して 「SPARQL定義編集」画面へと移ります。

定義内容

この画面では、実際に SPARQL クエリを定義します。

特徴としては、任意の SPARQL エンドポイントを対象にできることと、 SPARQL プレースホルダを定義できる点があります。 プレースホルダの仕組は、プリペアド・ステートメントのように、置換したい場所にプレースホルダを定義しておくことで、動的に文字列を置換できます。 プレースホルダに置換する文字列は、HTTP の GET パラメタで渡されますので、URLを変更することで、動的なSPARQLを生成させることができます。 注意点としては、単に文字列置換しているだけですので、SPARQLインジェクションを防ぐことが目的ではありません。

さて、次のように値を入力してください。 SPARQL プレースホルダは個数を入力して、 を押下すると、 プレースホルダのラベルを入力するフォームが生成されます。

定義内容
SPARQLプレースホルダ
SPARQL

上の例では、SPARQLプレースホルダとしてteamを一つ定義し、それを SPARQL クエリ内で利用していることがわかります。

プレースホルダの記述方法は、次にように、「SPARQL名称」と「SPARQLプレースホルダ名」を.(ドット)で連結した文字列を、3つの#(シャープ)で囲ってください。

###<SPARQL名称>.<SPARQLプレースホルダ名>###

この例では、例えば読売ジャイアンツという文字列が GET パラメタで渡されると、 ###examplebaseballsparql1.team###読売ジャイアンツに置換された SPARQL クエリが発行され、結果的にジャイアンツの選手一覧のデータを取得できます。

SQL 定義では、SPARQL で取得した LOD を保存しているローカルデータベースに対して、データの絞り込みや加工を行うための SQL クエリを定義します。

SQL定義を新規作成します。 を押してください。 リストに1行追加されたらSQL名称をexamplebaseballsql1と入力してください。 作成した SQL 定義にチェックを入れ、 ボタンを押して 「SQL定義編集」画面へと移ります。

定義内容

この画面では、実際に SQL クエリを定義します。

SQL定義でも、SPARQL 定義と同様に SQL プレースホルダを使用できます。 プレースホルダの仕組は、SPARQL定義と同じで、プリペアド・ステートメントのように、置換したい場所にプレースホルダを定義しておくことで、動的に文字列を置換できます。 プレースホルダに置換する文字列は、HTTP の GET パラメタで渡されますので、URLを変更することで、動的なSQLを生成させることができます。 注意点としては、単に文字列置換しているだけですので、SQLインジェクションを防ぐことが目的ではありません。

さて、次のように値を入力してください。 SQL プレースホルダは個数を入力して、 を押下すると、 プレースホルダのラベルを入力するフォームが生成されます。

最初に、登録したSPARQLデータにチェックを入れて ボタンを押します。編集中のSQLと選択したSPARQLが関連付けられ、SQLクエリが補足されます。

定義内容
SQL プレースホルダ

上の例では、SQLプレースホルダは何も定義していません。 しかし、SQLは SPARQL の結果に対して実行するため、SPARQL にプレースホルダが定義されていれば、SQLでそのブレースホルダを使うことができます。 また、SPARQL の結果を保存するテーブルは、SPARQLは実行された後に作成され、結果が保存されるため、テーブル名は SPARQL プレースホルダを含みます。

SPARQL プレースホルダを含むテーブル名は、以下のように記述します。

<SPARQL名称>(###<SPARQL名称>.<SPARQLプレースホルダ名>###)

なお、SQLプレースホルダの記述方法は、SPARQLの場合と同様に、「SQL名称」と「SQLプレースホルダ名」を.(ドット)で連結した文字列を、3つの#(シャープ)で囲ってください。

###<SQL名称>.<SQLプレースホルダ名>###

アプリケーションが使用するビューを定義します。ビュー定義ではパーツ定義とページ定義があります。

  • パーツ定義:アプリケーションで使用するパーツを定義します。パーツとは、ページを構成する要素で、HTML の div タグに挿入される、部分 HTML のことです。
  • ページ定義:アプリケーションの表示の基本単位となるページを作成します。ページは複数のパーツから構成され、ページ定義ではページで使用するパーツとその順序を定義します。

パーツ定義では、アプリケーションで使用するパーツとして、ページを構成する要素である、HTML の div タグに挿入される、部分 HTML を定義します。

まずパーツ定義を新規作成します。 を押してください。 リストに1行追加されたらパーツ名称をexamplebaseballparts1と入力してください。 作成したパーツ定義にチェックを入れ、 ボタンを押して 「パーツ定義編集」画面へと移ります。

定義内容

この画面では、実際にパーツを定義します。

注意点としては、SQLの結果がJSON形式で渡されることを前提に、そのJSONを表示するHTMLを記述します。 通常のHTMLでは静的なページしか出力できませんので、JsViews を用いて HTML テンプレートを記述します。 そのテンプレートにJSONが流し込まれると、HTMLが生成されることになります。

もちろん、JsViewsはあくまで選択肢の一つですので、他の方法を使ってHTMLを記述しても問題ありません。

さて、次のように値を入力してください。

定義内容
<div> </div>

上の例では、JsViews を用いて JSON データを table 形式で表示しています。 JSON データは results 内の rows にバインドされています。 rows の最初の要素の時は、thead を使ってテーブルタイトルを出力させ、 tbody 内で rows を JsViews の for 文でループさせ、 さらに、JsViews の props 文で、各行のカラムをループさせています。

ページは複数のパーツから構成され、アプリケーションの表示の基本単位となります。 ページ定義では、一つのページ内で表示するパーツとその順序を定義します。

ページ定義を新規作成します。 を押してください。 リストに1行追加されたらページ名称をexamplebaseballpage1と入力してください。 作成したページ定義にチェックを入れ、 ボタンを押して 「ページ定義編集」画面へと移ります。

定義内容

この画面では、実際にページを定義します。

ページ定義では、一つのページを定義します。 あるページ内に表示するパーツを選択し、その表示順序を決定します。

さて、次のように値を入力してください。

ここには、このプロジェクトで定義済みのパーツとそのコメントが一覧表示されています。 これらから、このページで使うパーツを表示順に選択します。

定義内容

上の例では、一つしかパーツがありませんので、その一つのパーツexamplebaseballparts1を選択します。

もし、複数のパーツが有る場合は、複数表示されています。 一つのページ内で複数パーツを表示する場合は、複数のパーツを選択できます。 その際、選択した順にパーツが上から表示されます。

マッピング定義 では、データとビューの関連付けを定義します。 つまり、どのデータをどのビューで表示するかを定義します。

実際には、SQLとパーツの関連付けを行いますので、どのSQLの結果をどのパーツで表示するかを定義します。

まずマッピング定義を新規作成します。 を押してください。 リストに1行追加されたらマッピング名称をbaseballDataPartsMapping1と入力してください。

マッピングは編集ページはありません。このページ上で定義します。

データとビューのセルを選択するとドロップダウンが表示されますので、関連付けるデータ(SQL)とビュー(パーツ)を選択してください。

SQLとパーツが関連付けられると、SQLの結果(JSON形式)をパーツから参照できるようになります。

さて、次のように値を入力してください。

定義内容

上の例では、データ(SQL)にexamplebaseballsql1を、 ビュー(パーツ)にexamplebaseballparts1を選択しています。

この例では、SQLもパーツも一つずつしか定義してありませんので、1つずつしか選択肢がありませんが、 複数定義してある場合は、選択肢が複数表示されますので、それらから1つ選択してください。

URL 別名定義では、アプリケーションで使用する URL を定義できます。 URL の別名を定義することで、短い URL やトップページを定義することができます。

を押して、URL 別名定義を新規作成します。 リストに1行追加されたらエイリアスplayerlistと入力してください。 作成したURL 別名定義にチェックを入れ、 ボタンを押して 「URL 別名定義編集」画面へと移ります。

定義内容

この画面では、実際にURLを定義します。

定義できる別名 URL は次の構成になっており、

http://<ドメイン>:<ポート>/<プロジェクト名称>/<エイリアス>

この URL の<エイリアス>の部分を定義することで、 短かいURLやトップページを定義することができます。

さて、次のように値を入力してください。

定義内容
http://<ホスト名>:8080/baseballlod/
http://<ホスト名>:8080/baseballlod/ / ? examplebaseballsparql1.team =

上の例では、playerlistエイリアスとして定義しており、 フォワード先として以下のURLを指定しています。

http://<ホスト名>:8080/baseballlod/page/examplebaseballpage1?examplebaseballsparql1.team=読売ジャイアンツ

この定義によって、上の長いURLが下の短いURLとして利用することができるようになります。

http://<ホスト名>:8080/baseballlod/playerlist

また、エイリアスを空にすることで、以下のようなトップページを定義することもできます。

http://<ホスト名>:8080/baseballlod/

フォワード先URL は次の構成になっています。 SQL と SPARQL は結果をJSON形式で返しますので、Web API として利用できます。

http://<ホスト名>:<ポート>/<プロジェクト名称>/page/<ページ名称>?[<プレースホルダ名>=<バインド値>]*
http://<ホスト名>:<ポート>/<プロジェクト名称>/sql/<SQL名称>?[<プレースホルダ名>=<バインド値>]*
http://<ホスト名>:<ポート>/<プロジェクト名称>/sparql/<SPARQL名称>?[<SPARQLプレースホルダ名>=<バインド値>]*

ダウンロードでは、このプロジェクトで定義・作成したアプリケーションをダウンロードできます。 ダウンロードしたアプリケーションは、どこでも実行することができます。

ダウンロード」ページにアクセスすると、プロジェクトの定義に従ってアプリケーションが自動作成され、その後自動でビルドが実行されます。 ビルドが完了すると、 のボタンがクリック可能になります。

をクリックすると、jar形式のアプリケーションのダウンロードが始まります。 また、をクリックすると、jar形式のソースコードがダウンロードできます。

実行方法について説明します。 ダウンロードしたアプリケーションは、Java さえインストールしてある環境であれば、即座に実行できます。 以下のコマンドを実行してください。

java -jar <アプリケーションファイル名>

あるいは、jar ファイルがJavaに関連付けられた環境では、ダブルクリックでも実行できます。 実行に必要と思われる、ブラウザやデータベース、必要ライブラリはすべてjar ファイル内に入れてありますので、 ダウンロードしたファイルをそのまま実行するだけで動作可能です。

次に、動作確認方法について説明します。 実行させたアプリケーションは、デフォルトでは 8080 ポートで動作しています。 そのため、以下のURLにブラウザからアクセスしてみてください。読売ジャイアンツの選手一覧が表示されます。

http://localhost:8080/baseballlod/playerlist

あるいは、以下は「広島東洋カープ」の選手一覧を表示します。

http://localhost:8080/baseballlod/page/examplebaseballpage1?examplebaseballsparql1.team=広島東洋カープ

このアプリケーションでは、外部のSPARQLエンドポイントに SPARQL を発行するため、最初のアクセスは時間がかかりますが、 2度目以降は、ローカルのデータベースに保存されていますので、早い動作が可能です。

最後に、Web APIについて説明します。 D'ownLOD で作成したWebアプリケーションはデフォルトでWeb APIを提供します。 提供する API は、SPARQL と SQL の結果を JSON 形式で返します。

例えば、以下のURLにアクセスすると、定義した SPARQL クエリで問合せした結果を JSON 形式で取得することができます。

http://localhost:8080/baseballlod/sparql/examplebaseballsparql1?examplebaseballsparql1.team=広島東洋カープ

また、以下のURLでは、SQL に問合せした結果をJSON形式で取得することができます。

http://localhost:8080/baseballlod/sql/examplebaseballsparql1?examplebaseballsparql1.team=広島東洋カープ