このチュートリアルでは、Oracle Database 11gのOracle Spatialオプションのセマンティック・データ管理機能を使用して、NCI(National Cancer Institute)のセマンティック・ネットワーク・オントロジーにデータを格納し、問合せをおこなう方法について説明します。
約1時間
このチュートリアルでは、以下のトピックについて説明します。
| 概要 | |
| シナリオ | |
| 前提条件 | |
| RDFデータを保持するためのインフラストラクチャとモデルの作成 | |
| PATIENTS_DATA(患者データ)表のロード | |
| セマンティック索引の構築 | |
| まとめ |
このアイコンの上にカーソルを置くと、このチュートリアルのすべてのスクリーンショットがロードされて、表示されます。 (警告: すべてのスクリーンショットが同時にロードされるため、ご使用のインターネット接続によってはレスポンス・タイムが遅くなる場合があります。)
注: 各手順に関連したスクリーンショットのみをロードして表示する場合は、それぞれの手順にあるアイコンの上にカーソルを置いてください。 スクリーンショットをクリックすると、非表示になります。
Oracle Database 11gのOracle Spatialオプションを使用したセマンティック・データ管理の概要
Oracle Database 11g Enterprise EditionのオプションであるOracle Spatial 11gは、ほかの商業製品やオープン・ソースのトリプル・ストアにはない高度なセマンティック・データ管理機能を備えています。 このオプションは、Oracle Database 11gのRDF/RDFS/OWLの各標準に対するネイティブ・サポートを提供します。 これにより、アプリケーション開発者は、RDFおよびOWLベースのアプリケーションに対してオープンでスケーラブル、かつセキュアで統合された効率のいいプラットフォームのメリットを得ることができます。
Oracle Spatial 11gオプションを使用すると、以下が可能になります。
| RDF/OWLデータおよびオントロジーへのデータの格納、ロード、DMLアクセス | ||
| OWLセマンティック、RDFSセマンティック、およびユーザー定義ルールを使用した推定 | ||
| SPARQLに似たグラフ・パターンを使用した、RDF/OWLデータおよびオントロジーに対するSQL問合せ | ||
| エンタープライズ(リレーショナル)データに対するオントロジーを利用した問合せ | ||
このチュートリアルは、ユーザーがRDFおよびOWLに関連する主要な概念(主語トリプル、述語トリプル、目的語トリプル、URI、空白ノード、プレーン・リテラルと型付きリテラル、オントロジーなど)に精通していることを前提としています。 このデモでは、これらの概念の詳細については説明しません。代わりに、Oracle Databaseにデモを設定し、オントロジーの使用を開始する方法について重点的に説明します。 データベースには、セマンティック・データ、オントロジー(RDF/OWLモデル)、および従来のリレーショナル・データが含まれています。 セマンティック・データをロードするには、バルク・ロードを使用するのがもっとも効率的な方法です。トランザクションのINSERT文を使用して増分データをロードすることもできます。 このデモではバルク・ロードを実行します。
NCIセマンティック・ネットワークの概要
この例では、NCI Center for Bioinformatics、NCI Office of Communications、 National Cancer Institute、National Institutes of Health(米国メリーランド州Bethesda、MD 20892)の共同プロジェクトであるEVS(Enterprise Vocabulary System)が作成したNCI Thesaurusを使用します。
NCI ThesaurusのOWLバージョンはEVSで作成しています。これは、米国メリーランド州メリーランド大学カレッジパーク校でおこなわれた、Maryland Information and Network Dynamics Lab, Semantic Web Agents Project(Mindswap)というJim HendlerとJen Golbeckの共同プロジェクトです。
オントロジーURI: http://www.mindswap.org/2003/nciOncology.owl
バージョン: 03.09d
デフォルトの名前空間: http://www.mindswap.org/2003/nciOncology.owl#
名前空間の接頭辞:
最初の17レベルのクラスは次のとおりです。
次の3つの表をもつnciuserと呼ばれるスキーマ・ユーザーを作成します。
データは、nciと呼ばれるセマンティック・モデルにロードされます。 このモデルがデータを表nci_rdf_dataにロードします。 次に、PATIENTS_DATA表にランダムなデータを移入して、患者情報をシミュレートし、セマンティック演算子を使用してモデルとPATIENTS_DATA(患者データ)表に問合せをおこないます。
このチュートリアルを始める前に次のことを確認してください。
| 1. |
Oracle Database 11gがインストールされていること。 Oracle Examples Media 11gをインストールしてあること。 |
| 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. |
ユーザー・アカウント、mdsysのロックが解除されていること。 sysユーザーとしてログインし、次の文を実行してmdsysのロックを解除します。 alter user mdsys identified by mdsys account unlock; |
前提条件として、セマンティック・ネットワークのサポートを格納する表領域であるrdf_tablespaceを、事前に作成および設定しておく必要があります。 以下の手順で、さらに2つの表領域を作成します。 rdf_users表領域はユーザー・オブジェクトを格納(nciuserスキーマのデフォルトの表領域)し、rdf_tempは、nciuserスキーマ(nciuserの一時表領域)で実行される操作で使用されます。 このトピックでは、nciuserとモデルも作成します。
|
1. |
SQL*Plusを起動します。 Enter usernameプロンプトで、次のように入力して、特権ユーザーとしてログインします。 sys/oracle as sysdba
|
|
2. |
次のコマンドを実行して、rdf_users表領域を作成します。 datafileパスの<user_name>および<SID>は、自分のORACLE_HOMEの該当するフォルダ名で置き換えてください。 create tablespace rdf_users
|
| 3. |
次のコマンドを実行して、rdf_temp表領域を作成します。 datafileパスの<user_name>および<SID>は、自分のORACLE_HOMEの該当するフォルダ名で置き換えてください。 create temporary tablespace rdf_temp
|
| 4. |
nciuserを作成し、SQL*Plusプロンプトで次のコマンドを入力して、ユーザーに必要な権限を付与します。 create user nciuser identified by nciuser grant create session, resource to nciuser;
|
| 5. |
nciuser/nciuser(ユーザー名/パスワード)で接続します。 表nci_rdf_dataを作成します。これは、NCIというモデルのトリプルのコードを格納するモデル表です。SQL*Plusプロンプトで次のコマンドを入力します。 connect nciuser/nciuser; create table nci_rdf_data (id number, triple sdo_rdf_triple_s); execute sem_apis.create_sem_model('nci', 'nci_rdf_data', 'triple');
|
このトピックでは、SQL*Loaderユーティリティを使用して、ステージング表stableをロードします。
| 1. |
まだ、nciuserとして接続しているという前提で、ステージング表stableを作成します。 表を作成するには、以下のコマンドを入力します。 create table stable (
RDF$STC_sub varchar2(4000) not null,
RDF$STC_pred varchar2(4000) not null,
RDF$STC_obj varchar2(4000) not null,
RDF$STC_sub_ext varchar2(64),
RDF$STC_pred_ext varchar2(64),
RDF$STC_obj_ext varchar2(64),
RDF$STC_canon_ext varchar2(64)
);
|
| 2. |
nci_rdf_data表にmdsysへのINSERT権限を付与します。 また、stable表にmdsysスキーマに対するSELECT権限とUPDATE権限を付与します。 grant insert on nci_rdf_data to mdsys;
grant SELECT, UPDATE(RDF$STC_sub_ext,RDF$STC_pred_ext,RDF$STC_obj_ext,RDF$STC_canon_ext)
on stable to MDSYS;
|
| 3. |
コマンド・ウィンドウを開きます。 SQL*Loaderを使用して、nci_z.ntファイルをステージング表stableにロードします。 注:nci_z.zipをダウンロードして解凍し、nci_z.ntを準備してから、sqlldrコマンドを実行してください(nci_z.ntファイルのサイズは約80MBです)。 このチュートリアルでは、ここでnci_z.zipファイルを検索します。 注:nci_z.ntファイルを含んでいるフォルダに変更します。 ORACLE_HOMEを適切なパスに設定します。
この操作には少し時間がかかります。 次のメッセージが表示されるまで待ちます。 Load completed - logical record count 464841.
|
| 4. |
ステージング表のデータをモデルにロードします。 bulk_load_from_staging_tableプロシージャの構文は次のとおりです。 exec sem_apis.bulk_load_from_staging_table('<model_name>',
'<owner of the staging table>',
'<staging table name>');
Run the following:
exec sem_apis.bulk_load_from_staging_table('nci','nciuser','stable');
|
| 5. |
次の文を実行して、ルール索引を作成します。 execute sem_apis.create_entailment('nci_idx',sem_models('nci'), sem_rulebases('owlprime'),0, null);
|
| 1. |
build_patientsプロシージャを作成するスクリプトを実行する前に、mdsysとして接続して、serveroutputをonに設定します。 connect mdsys/mdsys set serveroutput on
|
| 2. |
build_patients.sqlスクリプトを実行します。 ここにあるbuild_patients.zipファイルからbuild_patients.sqlスクリプトを抽出します。 このスクリプトによって、プロシージャbuild_patientsが作成されます。 このスクリプトを実行するには、スクリプトをローカル・マシンに保存して、SQLプロンプトで次のように入力して実行します。 @c:\<path where you saved the script>\build_patients.sql; <path where you saved the script>は、build_patients.sqlファイルを保存したフォルダのパスで置き換えます。 |
| 3. |
プロシージャのコンパイル・エラーが発生した場合は、show errorsと入力してエラーを確認します。 エラーがない場合は、build_patientsプロシージャにパブリックに対する実行権限を付与します。 次の文を実行します。 grant execute on build_patients to public; |
| 4. |
nciuserとして接続し、build_patientsプロシージャを実行します。 次の文を実行します。 connect nciuser/nciuser; exec mdsys.build_patients(100000, 1, 'patients_data');
|
| 5. |
データがpatients_data表にロードされたことを確認します。 次の問合せを実行します。 select count(*) from patients_data; |
| 1. |
まだnciuserとして接続しているという前提で、patients_data表に索引nciIndexを作成します。 次の文を実行します。 create index nciIndex on patients_data(diagnosis)
indextype is mdsys.sem_indextype parameters ('ONTOLOGY_MODEL(NCI), RULEBASE(owlprime)');
|
| 2. |
表の統計情報を収集します。 次の文を実行します。 execute dbms_stats.gather_index_stats('nciuser','nciIndex');
|
| 1. |
nciuser/nciuser(ユーザー名/パスワード)で接続します。 次の問合せは、SEM_MATCH関数を使用して、タイプがClassの全'Subject'を表示します。 結果には、オントロジー内のすべてのClassが含まれます。 select s
from table(sem_match ('(?s <http://www.w3.org/1999/02/22-rdf-syntax-ns#type>
<http://www.w3.org/2002/07/owl#Class>)',
sem_models('nci'),
null,
null,
null));
Note: The screenshot shows only the partial output.
|
| 2. |
次の問合せは、'Subject'がFinger_Fractureであるトリプルを返します。 変数'p'および'o'は、それぞれ'any predicate'と'any object'を意味しています。 select p, o |
| 3. |
次の問合せは、sem_match関数を使用して、'subClassOf' Finger_Fractureであるすべての'Object'を抽出し、'owlprime'ルールベースでの推定の使用を追加します。 select o
|
| 4. |
次の問合せは、SEM_DISTANCE演算子とSEM_RELATED演算子を使用して、リレーショナル表(PATIENTS_DATA)をNCIモデルに関連づけます。 また、変数'diagnosis'を使用して、PATIENTS_DATA表のDIAGNOSIS列を表し、'subClassOf' Upper_Extremity_Fractureの診断を要求します。 select diagnosis, SEM_DISTANCE(123) 注: PATIENTS_DATA表はランダムなデータで作成しているので、結果は異なる場合があります。 |
| 5. | 前述のSELECT文では、PATIENTS_DATA表の条件を満たすすべての診断が返ります。これは、すべての患者のリストが必要な場合には役立ちますが、'subClassOf' Upper_Extremity_Fractureである異なる診断を知りたいだけの場合は、次の問合せのように明確な操作を追加できます。
select distinct diagnosis, SEM_DISTANCE(123) |
| 6. | 次の問合せは、診断がsubClassOf Connective_Tissue_Disorderである患者を表示します。
select distinct diagnosis, SEM_DISTANCE(123) |
このチュートリアルは、NCIモデルおよびオントロジーの概要を説明しました。
このレッスンで学習した内容は次のとおりです。
| RDFデータを保持するためのインフラストラクチャとモデルの作成 | ||
| モデルおよびPATIENTS_DATA(患者データ)表へのRDFデータのロード | ||
| セマンティック索引の作成 | ||
| 情報を抽出するためのモデルおよびPATIENTS_DATA(患者データ)表への問合せ | ||