おすすめコンテンツ
このチュートリアルでは、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(患者データ)表への問合せ | |