このチュートリアルでは、リレーショナル・データをRDFグラフ・データ形式に変換(マテリアライズ)する2つの方法について説明します。
約1時間
このチュートリアルでは、以下のトピックについて説明します。
| 概要 | |
| 前提条件 | |
| D2RQベースの方法 | |
| まとめ | |
| 関連情報 |
このアイコンの上にカーソルを置くと、このチュートリアルのすべてのスクリーンショットがロードされて、表示されます。 (警告:すべてのスクリーンショットが同時にロードされるため、ご使用のインターネット接続によってはレスポンス・タイムが遅くなる場合があります。)
注:各手順に関連したスクリーンショットのみを表示する場合は、それぞれの手順にあるアイコンの上にカーソルを置いてください。 スクリーンショットをクリックすると、非表示になります。
このチュートリアルでは、リレーショナル・データをRDFグラフ・データ形式に変換(マテリアライズ)する2つの方法について説明します。 生成されたRDFデータは、W3C標準に準拠しています。 このRDFデータは、Oracle Database 11gなど、W3C対応ツールやRDFデータ・ストアで処理できます。
| D2RQ [1, 2]ベースの方法 | ||
| SQLベースの方法 | ||
推奨するのはD2RQベースの方法です。D2RQベースではカスタマイズ可能なマッピング・ファイルが提供されるので、ユーザーはURIの生成を指定でき、さまざまな列、表、スキーマ、あるいはデータベースでもURIを再利用できます。
ここでのURIの再利用とは、同じURIで同じリソースを示すことを意味します。 このチュートリアルで説明するSQLベースの方法では、エスケープ、文字エンコーディング、新規行、タブ、そのほかの特殊文字は処理できません。
このチュートリアルを始める前に次のことを確認してください。
| 1. |
Oracle Database 11g Enterprise Editionがインストールされていること。 Oracle Spatial 11g Option、Oracle Partitioning Option、Oracle Advanced Compression Optionがインストールされていること。
|
| 2. |
11gでセマンティック・テクノロジー・サポートに必要なプロシージャを実行していること。 https://metalink.oracle.com にある次のノートに記載されている手順に従ってください。 Note 452989.1:11gのセマンティック・テクノロジー・サポートに必要なプロシージャ
|
| 3. | 11.1.0.6.0のセマンティック・テクノロジー・パッチをインストールしてあること。
注:Oracle Database 11.1.0.7.0パッチ・セット以降がインストールされている場合は、このパッチをインストールする必要はありません。 Metalink(https://metalink.oracle.com/)にログインして、「Patches & Updates」タブをクリックします。 「Simple Search」を選択してから、Search byドロップダウン・リストで「Patch Number(s)」を選択します。 パッチ番号、7032734を入力します。 使用しているプラットフォームまたは言語を選択します。 「Go」をクリックします。 パッチをインストールするには、jenadrv_patch_ig.txtファイルの説明を参照してください。
|
| 4. | セマンティック・ネットワークをサポートするデータベースを設定してあること。 まだ設定していない場合は、https://metalink.oracle.comにある次のノートの手順に従ってください。
Note 454371.1: セマンティック・ネットワークをサポートするデータベースの設定方法
|
| 5. | D2RQをインストールしてあること。 D2RQは http://www4.wiwiss.fu-berlin.de/bizer/d2rq/からダウンロードできます。
ホームページの左側にある「Download」リンクをクリックします。 「D2RQ and D2R Server」をクリックしてから、「D2RQ API for Jena and Sesame」(バージョンv0.5.1)をクリックします。 .gzまたは.zip形式のどちらかをダウンロードします(どちらの形式もプラットフォームには依存しません)。 ダウンロード後には、マシンのディレクトリに解凍します。 D2RQとD2Rサーバーの詳細については、http://www4.wiwiss.fu-berlin.de/bizer/d2rq/spec/を参照してください。 注:このチュートリアルでは、D2RQサイトのドキュメントを参照する必要はありません。 |
このトピックでは、簡単な例を挙げてD2RQの使用方法を説明します。
このトピックでは、以下の手順を実行します。
| ユーザーと表を設定する | ||
| N3形式のマッピング・ファイルを生成する | ||
| マッピング・ファイルを使用してN-Tripleデータ・ファイルを生成する | ||
| N3ファイルをユーザーの要件に合わせて変更する | ||
以下のSQL文は、従業員階層をモデル化する単純な従業員表を作成する文です。 この表にはいくつかのサンプル行を挿入します。 以下のトピックで、D2RQ v0.5.1を使用してN3 [4]形式のマッピング・ファイルを生成する手順を説明します。
|
1. |
新規ユーザーtestを作成します。 そのユーザーにconnect、resource権限を付与します。 sysユーザーとしてログインしてから、次のSQL文を実行します。 create user test identified by test grant connect, resource to test;
|
|
2. |
testユーザーとして接続します。 従業員階層をモデル化する単純な表empを作成します。 emp表を作成するには、次の文を実行します。 conn test/test create table emp (ID integer primary key,
|
| 3. |
emp表にいくつかのサンプル行を挿入します。 次のINSERT文を実行します。 insert into emp values(1, 'John', 'M', 1980, 2); insert into emp values(2, 'Mary', 'F', 1981, 3); insert into emp values(3, 'Jack', 'M', 1982, 3);
挿入した行を次のコマンドでコミットします。 commit;
|
以下の手順に従い、D2RQ v0.5.1を使用してN3形式のマッピング・ファイルを生成します。
|
1. |
batch_files.zipをここからダウンロードします。 2つのバッチ・ファイル(gen_map.bat、dump_rdf.bat)をローカル・マシンのフォルダに展開します。 gen_map.batファイルを開き、ユーザーのシステム構成に応じて編集します。 一般的な構文(d2rq.generate_mapping class): <jdk_path>\bin\java classpath <classpath> d2rq.generate_mapping
注:赤枠のプレースホルダは、ユーザーのシステム構成に応じて変更する必要があります。 このファイルには複数の<PATH_TO_D2RQ>があります。 すべての<PATH_TO_D2RQ>を正しく置き換えてください。
|
||||||||||||||||||||||||||||
| 2. |
コマンド・ウィンドウを開きます。 gen_map.batファイルを保存したフォルダに移動します。 バッチ・ファイルを実行してください。 N3構文でエンコードされたファイルfile employee.n3にマッピングが出力されます。 注:バッチ・ファイルを実行する前にORACLE_HOMEが設定されていることを確認してください。
注:Windows環境でこのバッチ・ファイルを実行すると、>employee.n3の前に"1"がデフォルトで追加されます。 gen_map.batファイルの編集中には、>employee.n3の前に"1"を追加しないでください。 これで、バッチ・ファイルを実行したフォルダにemployee.n3ファイルが生成されます。 |
||||||||||||||||||||||||||||
N3形式のファイルを変更することはできますが、このチュートリアルでは以下の手順でRDFファイル(N-Triple形式)を生成するために、N3形式のファイルをそのまま使用します。 N-TRIPLEは出力形式として指定されることに注意してください。 相対URIパターンを解決するために、ベースURIも提供されています。
|
1. |
dump_rdf.batを開きます。 ユーザーのシステム構成に応じてファイルを編集します。 一般的な構文(d2rq.dump_rdf class): <jdk_path>\bin\java ?classpath <classpath> d2rq.dump_rdf 1つ前のトピックの手順1に記載されているコンポーネントのほかに、以下の追加コンポーネントがあります。
この場合、jdbc:oracle:thin:@hostname:port:SID行の前には、以前のJavaコマンドでは必要とされなかった-jパラメータが必要であることに注意してください。 注:赤枠のプレースホルダは、ユーザーのシステム構成に応じて変更する必要があります。 このファイルには複数の<PATH_TO_D2RQ>があります。 すべての<PATH_TO_D2RQ>を正しく置き換えます。
|
||||||||||||
|
2. |
コマンド・ウィンドウで、dump_rdf.batファイルを保存したフォルダに移動します。 バッチ・ファイルを実行してください。 注:バッチ・ファイルを実行する前に、ORACLE_HOMEが適切なパスに設定されているようにします。
注:Windows環境でこのバッチ・ファイルを実行すると、>emp_table.ntripleの前に"1"がデフォルトで追加されます。 dump_rdf.batファイルの編集中には、>emp_table.ntripleの前に"1"を追加しないでください。
|
||||||||||||
| 3. |
生成されたemp_table.ntripleファイルをメモ帳で開きます。 スクリーンショットは出力を表しています。
|
||||||||||||
生成されたこれらのトリプルがアプリケーションの要件を常に満たしているとは限りません。 たとえば、最初のトリプルは明らかに改善できます。 最初のトリプルでは、リレーショナル表のオリジナル"report_to"列に対応する"report_to"プロパティ(リレーションシップ)のオブジェクト値として、型付きリテラルが使用されています。 生成したトリプル・セットでより効率的にリンクされたグラフを構成するには、"report_to"プロパティのオブジェクト値として(上記のスクリーンショットでは、赤枠でハイライトされている個所)、一般的な10進値よりもURIを使用する方が妥当です。
|
1. |
employee.n3ファイルをメモ帳で開きます。 マッピング・ファイルemployee.n3で次の記述を探します。 map:EMP_REPORT_TO a d2rq:PropertyBridge; 記述全体を以下のとおり置き換えます。 置換前: map:EMP_REPORT_TO a d2rq:PropertyBridge;
map:EMP_REPORT_TO a d2rq:PropertyBridge;
スクリーンショットのハイライトされたテキストによって、オブジェクト値が型付きリテラルからURIに変わります。 ファイルを保存します。
|
|
2. |
dump_rdf.batバッチ・ファイルを再実行して、次のスニペットを含む新しいN-Tripleファイルを生成します。 トリプルは、デフォルトのマッピング・ファイルを使用した場合より的確に元のリレーショナル・データをモデル化しています。 スクリーンショットを確認してください。
URIにスキーマ名(上記のスニペットでは"TEST")が含まれていることに不満である場合、マッピング・ファイルを変更してスキーマ名をスキップできます。 詳細については、http://www4.wiwiss.fu-berlin.de/bizer/d2rq/spec/のD2RQドキュメントを参照してください。 |
SQL文を使用して、リレーショナル表からRDFデータを直接生成できます。 "report_to"リレーションシップを取得するトリプルを生成するための単純な問合せを書くことができます。
このトピックでは、以下の手順を実行します。
| SELECT文を使用する | ||
| SELECT文でUNPIVOTを使用する | ||
| 1. |
test/test(ユーザー名/パスワード)で接続します。 次の単純な問合せを実行して、"report_to"リレーションシップを取得するトリプルを生成します。 注:次のSQLは単純ですが、確実にN-Triple構文に合ったデータを生成する必要があるため重要です。 文法の詳細については、http://www.w3.org/TR/2004/REC-rdf-testcases-20040210/にあるRDFテスト・ケース・ドキュメントのセクション3を参照してください。 select '<http://test.com/TEST.EMP/' || ID || '> '
|
| 1. |
同様の方法で、該当する各列のトリプルを生成するSELECT文を個別に書くことができます。 しかし、リレーショナル表に多くの列が存在する場合には、手間がかかるかもしれません。 UNPIVOTを使用して、複数の列から複数の出力行へ値を移動するほうが簡単です。 たとえば、次のSQLは、トリプルを表す4つの行に4つの列(ID、REPORT_TO、BIRTH_YEAR、NAME)をアンピボットします。 次の文を実行します。 col subject format a33
col object format a33
select * from (
select '<http://test.com/TEST.EMP/' || id || '>' as subject,
to_char(id) as id,
to_char(report_to) as report_to,
to_char(birth_year) as birth_year,
name as name
from emp
)
UNPIVOT (object for predicate
in (id as 'ID',
report_to as 'REPORT_TO',
birth_year as 'BIRTH_YEAR',
name as 'NAME'
));
上記のスクリーンショットの各行によって、3つの列の各値の単一トリプルがマッピングされます。 適切なURI/リテラル生成、実際の文字エスケープ、N-Triple形式の適合など、データの追加処理が必要な場合があります。
|
このレッスンで学習した内容は、以下のとおりです。
| D2RQベースの方法で、リレーショナル・データをRDFグラフ・データ形式に変換(マテリアライズ)する | ||
| SQLベースの方法で、リレーショナル・データをRDFグラフ・データ形式に変換(マテリアライズ)する | ||
|
D2RQに関する一般的な情報:http://www4.wiwiss.fu-berlin.de/bizer/d2rq/ |
|
|
D2RQのユーザー・マニュアルと言語仕様については、http://www4.wiwiss.fu-berlin.de/bizer/d2rq/spec/を参照してください。 |
|
|
RDFテストケース:http://www.w3.org/TR/2004/REC-rdf-testcases-20040210/ |
|
| Notation3(N3):http://www.w3.org/DesignIssues/Notation3.html |