リレーショナル・データからRDF形式への変換

目的

このチュートリアルでは、リレーショナル・データをRDFグラフ・データ形式に変換(マテリアライズ)する2つの方法について説明します。

所要時間

約1時間

トピック

このチュートリアルでは、以下のトピックについて説明します。

 概要
 前提条件
 D2RQベースの方法

SQLベースの方法

 まとめ
 関連情報

スクリーンショットの表示

 このアイコンの上にカーソルを置くと、 このチュートリアルのすべてのスクリーンショットがロードされて、表示されます。 (警告:すべてのスクリーンショットが同時にロードされるため、ご使用のインターネット接続によってはレスポンス・タイムが遅くなる場合があります。)

注:各手順に関連したスクリーンショットのみを表示する場合は、それぞれの手順にあるアイコンの上にカーソルを置いてください。 スクリーンショットをクリックすると、非表示になります。

概要

このチュートリアルでは、リレーショナル・データを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ベースの方法

このトピックでは、簡単な例を挙げてD2RQの使用方法を説明します。

このトピックでは、以下の手順を実行します。

 ユーザーと表を設定する
 N3形式のマッピング・ファイルを生成する
 マッピング・ファイルを使用してN-Tripleデータ・ファイルを生成する
 N3ファイルをユーザーの要件に合わせて変更する

 

ユーザーと表を設定する

以下のSQL文は、従業員階層をモデル化する単純な従業員表を作成する文です。 この表にはいくつかのサンプル行を挿入します。 以下のトピックで、D2RQ v0.5.1を使用してN3 [4]形式のマッピング・ファイルを生成する手順を説明します。

1.

新規ユーザー testを作成します。 そのユーザーに connect、 resource権限を付与します。

sysユーザーとしてログインしてから、次のSQL文を実行します。

                                   
create user test identified by test
                                    
default tablespace users
temporary tablespace temp;
                                   
grant connect, resource to test;
                                

 

2.

testユーザーとして接続します。 従業員階層をモデル化する単純な表 empを作成します。

emp表を作成するには、次の文を実行します。

                                   
conn test/test
create table emp (ID integer primary key,
                                    
name varchar2(30),
sex varchar2(1),
birth_year int,
report_to integer
);

 

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;

 

 

トピックに戻る

N3形式のマッピング・ファイルを生成する

以下の手順に従い、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
                                    
-u <username>
-p <password>
-d oracle.jdbc.driver.OracleDriver
jdbc:oracle:thin:@HOSTNAME:PORT:SID > output_file.n3


gen_map.batファイルの以下のコンポーネントを確認します。

 %ORACLE_HOME%\jdk\bin\java これはJava実行可能ファイルへのパスです。 この項目を修正する必要はほとんどありません。 ORACLE_HOMEが設定されていることを確認します。
 <ORACLE_HOME>\jdbc\lib\ojdbc5.jar これはOracle JDBCのjarファイルです。 <ORACLE_HOME>をユーザーのORACLE_HOME文字列値に置き換えます。
 <PATH_TO_D2RQ>\d2rq-0.5.1 これはD2RQがインストールされたディレクトリです。 D2RQを解凍したディレクトリに置き換えます。 ファイル内の同じ記述はすべて同様に置き換えます。
 d2rq.generate_mapping これは使用中のD2RQメイン・クラスです。 変更しないでください。
 -u test -p test ユーザー名とパスワードが testであれば、変更しないでください。
 -d oracle.jdbc.driver.OracleDriver これはデータベースへのJDBC接続に使用されるクラスです。 変更しないでください。
 jdbc:oracle:thin:@hostname:port:SID > employee.n3

これはJDBCデータベース接続です。

hostnameをユーザーのマシン名に変更します。 portをユーザーのリスナー・ポートに変更します。 SIDをユーザーのインスタンスのSIDに変更します。

employee.n3は出力ファイル名です。そのままにしておきます。

注:赤枠のプレースホルダは、ユーザーのシステム構成に応じて変更する必要があります。 このファイルには複数の <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ファイルが生成されます。

 

トピックに戻る

マッピング・ファイルを使用してN-Tripleデータ・ファイルを生成する

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
-u <username>
-p <password>
-d oracle.jdbc.driver.OracleDriver
-j jdbc:oracle:thin:@HOSTNAME:PORT:SID
-m employee.n3
-f N-TRIPLE
-b http://test.com/
> emp_table.ntriple

1つ前のトピックの手順1に記載されているコンポーネントのほかに、以下の追加コンポーネントがあります。

 d2rq.dump_rdf これは変換に使用されるメインJavaクラスです。
 -f N-TRIPLE これは出力形式です。 変更しないでください。
 -b http://test.com/ これはベースURIです。 このチュートリアルでは、このベースURIを変更しないでください。

この場合、 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 ファイルをメモ帳で開きます。 スクリーンショットは出力を表しています。

 

 

トピックに戻る

N3ファイルをユーザーの要件に合わせて変更する

生成されたこれらのトリプルがアプリケーションの要件を常に満たしているとは限りません。 たとえば、最初のトリプルは明らかに改善できます。 最初のトリプルでは、リレーショナル表のオリジナル"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;
                                    
d2rq:belongsToClassMap map:TEST_EMP;
d2rq:property vocab:EMP_REPORT_TO;
d2rq:column "TEST.EMP.REPORT_TO";
d2rq:datatype xsd:decimal;
.


置換後:

                                   
map:EMP_REPORT_TO a d2rq:PropertyBridge;
                                    
d2rq:belongsToClassMap map:TEST_EMP;
d2rq:property vocab:report_to;
d2rq:uriPattern "TEST.EMP/@@TEST.EMP.REPORT_TO@@";
.

スクリーンショットのハイライトされたテキストによって、オブジェクト値が型付きリテラルからURIに変わります。

ファイルを保存します。

 

2.

dump_rdf.batバッチ・ファイルを再実行して、次のスニペットを含む新しいN-Tripleファイルを生成します。

トリプルは、デフォルトのマッピング・ファイルを使用した場合より的確に元のリレーショナル・データをモデル化しています。

スクリーンショットを確認してください。

URIにスキーマ名(上記のスニペットでは"TEST")が含まれていることに不満である場合、マッピング・ファイルを変更してスキーマ名をスキップできます。 詳細については、http://www4.wiwiss.fu-berlin.de/bizer/d2rq/spec/のD2RQドキュメントを参照してください。

 

トピックに戻る

トピック・リストに戻る

SQLベースの方法

SQL文を使用して、リレーショナル表からRDFデータを直接生成できます。 "report_to"リレーションシップを取得するトリプルを生成するための単純な問合せを書くことができます。

このトピックでは、以下の手順を実行します。

 SELECT文を使用する
 SELECT文でUNPIVOTを使用する

SELECT文を使用する

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 || '> '
                                
|| '<http://test.com/vocab/report_to> '
|| '<http://test.com/TEST.EMP/' || REPORT_TO || '> '
|| ' .'
from emp;

 

 

 

トピックに戻る

SELECT文でUNPIVOTを使用する

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

トピック・リストに戻る

 このアイコンの上にカーソルを置くと、すべてのスクリーンショットが非表示になります。