C SQL DeveloperでのRDFのサポート

Oracle SQL Developerを使用して、Oracle Spatial and GraphのRDFナレッジ・グラフ機能に関連する操作を実行できます。

C.1 SQL DeveloperでのRDFのサポートについて

SQL DeveloperでのRDFのサポートは、「接続」ナビゲータから使用できます。

SQL Developerを使用して、Oracle Database内のRDF関連オブジェクトを作成および管理できます。セマンティク・テクノロジに対するOracle Spatial and Graphのサポートは、主にResource Description Framework (RDF)およびWeb Ontology Language (OWL)のサブセットで構成されています。これらの機能は、Oracle Spatial and GraphのRDFナレッジ・グラフ機能と呼ばれます。

SQL Developerのサポートは、次の条件が満たされた場合にRDFに組み込まれます。
  • 接続先のデータベースがOracle Databaseリリース12.1以降である。
  • データベースでRDFセマンティク・グラフのサポートが有効になっている。このサポートを有効にした後、SDO_RDF_TRIPLE_S型が使用可能になる。

これらの条件を満たすOracle Database接続を展開すると、接続の子ノードの下部に「RDFセマンティック・グラフ」が表示されます。

「RDFセマンティック・グラフ」ノードが使用可能でない場合、RDFメタデータを操作するためには次のリリース固有の条件が適用されます。

  • Oracle Database 18c以前の場合は、MDSYSスキーマにセマンティク・ネットワークが存在する必要があります。これを作成するには、SQL DeveloperでDBA接続を使用し、(A)「RDFセマンティック・グラフ」ノードを右クリックしてRDFセマンティク・ネットワークの設定を選択するか、(B) SEM_APIS.CREATE_SEM_NETWORKプロシージャを使用してMDSYSスキーマにセマンティク・ネットワークを作成します。
  • Oracle Database 19c以降の場合は、MDSYSスキーマに一連の型と関数をインストールします。DBA接続を使用し、(A)「RDFセマンティック・グラフ」ノードを右クリックしてRDFセマンティク・ネットワークの設定を選択するか、(B) rdf_sqldeveloper_19c_dba_create.sqlスクリプトを実行します。

「RDFセマンティック・グラフ」ノードを展開して1つ以上のセマンティク・ネットワークを作成した場合、その子ノードは次のとおりです。

  • ネットワーク
    • <network-name1> (最初のネットワークの名前)
      • REGULAR_MODELS

      • VIRTUAL_MODELS

      • RDF_VIEWS

      • RULEBASES

      • ENTAILMENTS

      • NETWORK_INDEXES (RDF_LINK$)

      • DATATYPE_INDEXES (RDF_VALUE$)

      • BULK_LOAD_TRACES

    • <network-name2> ...

C.2 SQL Developerを使用したRDFセマンティク・ネットワーク・サポートの設定

個々のRDFセマンティク・ネットワークを作成してRDFデータを操作する前に、1回かぎりの「設定」操作を実行する必要があります。

この操作により、ナレッジ・ベースのフレームワーク全体が確立され、データベース内の個々のセマンティク・ネットワークに対するサポートが提供されます。

この設定の実行手順

  1. SQL Developerを開きます。

  2. 「接続」ナビゲータで、DBA権限を持つユーザーの接続を展開します。(この目的のために別個の新しいデータベースDBAユーザーを作成する場合は、そのようなユーザーを作成し、そのユーザーへの接続を作成します。)

  3. 接続の「RDFセマンティック・グラフ」ノードを右クリックし、セマンティク・ネットワークの設定を選択します。

    • 接続先がOracle Databaseリリース18c以前の場合は、次の手順を実行します。
      1. 「表領域」で、セマンティク・ネットワークに関連付ける表領域を選択します。

      2. 必要に応じて、「SQL」タブをクリックして実行される文を確認します。

      3. 「適用」をクリックして、MDSYSによって所有されるセマンティク・ネットワークを作成します。

    • 接続先がOracle Databaseリリース19c以降の場合は、次の手順を実行します。
      1. 必要に応じて、「SQL」タブをクリックして実行される文を確認します。

      2. 「適用」をクリックして、MDSYSスキーマに必要な型と関数をインストールします。

C.3 SQL Developerを使用したRDFセマンティク・ネットワークの操作

展開された「ネットワーク」ノードには、接続に関連付けられたデータベース・スキーマ内の使用可能なネットワークの情報が含まれています。

19cデータベースの場合は、スキーマプライベート・ネットワークとMDSYSネットワーク(19cスキーマで作成された場合)がネットワーク・リストに表示されます。19cデータベース以降では、スキーマプライベート・ネットワークを使用することをお薦めします。18c以前の接続では、すべてのRDFメタデータがMDSYSネットワークに属します。各ネットワーク・ノードを展開すると、RDFメタデータ(モデル、ルールベース、伴意、ネットワーク索引、データ型索引)にアクセスできます。

  • Oracle Database 18c以前への接続では、MDSYSスキーマによって所有される単一の無名ネットワークを使用し、すべてのRDFメタデータはそのスキーマに属します。
  • Oracle Database 19c以降の接続では、1つ以上のスキーマプライベート・ネットワークまたはMDSYSによって所有されるネットワーク(あるいはその両方)を使用できます。ただし、1つ以上のスキーマプライベート・ネットワークを使用することをお薦めします。

各ネットワーク・ノードを展開すると、RDFメタデータ(モデル、ルールベース、伴意、ネットワーク索引、データ型索引)にアクセスできます。

C.3.1 SQL Developerを使用したRDFセマンティク・ネットワークの作成

「ネットワーク」ノードで、1つ以上のRDFセマンティク・ネットワークを作成できます。

新しいセマンティク・ネットワークを作成するには、「ネットワーク」を右クリックして「セマンティック・ネットワークの作成」を選択します。

  • Oracle Database 19.3より前のリリースでは、この操作は接続がDBAロールを持つユーザーに属する場合にのみ使用可能です。
  • Oracle Databaseリリース19.3以降では、すべてのデータベース・ユーザーがスキーマプライベート・ネットワークを直接作成できます。

ダイアログ・ボックスで次のパラメータを定義できます。

ネットワーク所有者: ネットワークの所有者になるデータベース・スキーマ。
  • リリース18c以前の場合、所有者は常にMDSYSです。
  • 19.3より前のリリース19cの場合は、ネットワーク所有者を選択します。
  • リリース19.3以降の場合、ネットワーク所有者は常に接続ユーザー・スキーマです。

ネットワーク名: ネットワークの名前。(リリース18c以前の場合、このフィールドは空白であり、編集できません。)

表領域: ネットワークに関連付ける表領域。(セマンティク・ネットワークに必要な表領域がまだ存在しない場合は、「SQL Developerを使用したセマンティク・ネットワーク用の表領域の作成」を参照してください。)

ネットワークの作成を完了するには、「適用」をクリックします。

作成した各ネットワークのネットワーク名を右クリックして、関連する様々な操作(統計の収集、ネットワーク索引のリフレッシュ、未使用値のパージ、ネットワークの削除など)を指定できます。

C.3.1.1 SQL Developerを使用したセマンティク・ネットワーク用の表領域の作成

セマンティク・ネットワークに必要な表領域がまだ存在しない場合は、作成できます。

セマンティク・ネットワークの設定操作の一部として自動的に作成された表領域を調整できます。

「RDFセマンティック・グラフ」には次の3つの表領域を使用することをお薦めします。

  • RDF記憶域の表領域(RDFTBSという名前の新しい表領域を作成)

  • 一時データの表領域(TEMPTBSという名前の新しい表領域を作成)

  • 他のユーザー・データの表領域(USERSという名前の既存の表領域を使用)

DBAナビゲータ(「接続」ナビゲータではない)で、システム接続について「記憶域」「表領域」の順にクリックします。新しい表領域の場合(右クリックして「新規作成」を選択)、目的の名前を選択します(ここにリストされているものは単なる例です)。デフォルト値を受け入れるか、目的のオプションを指定します。

  1. RDFデータの格納用にRDFTBSを作成します。

    名前(表領域名): RDFTBS

    表領域タイプ: 永続

    「ファイル仕様」では、名前: 'RDFTBS.DBF'

    ディレクトリ: 目的のファイル・システム・ディレクトリ。例: /u01/app/oracle/oradata/orcl12c/orcl

    ファイル・サイズ: 目的の初期ファイル・サイズ。例: 1 G

    「再使用」および「自動拡張オン」を選択します。

    次のサイズ: 拡張の各増分に必要なサイズ。例: 512 M

    最大サイズ: 目的の最大ファイル・サイズ。例: 10 G

    「OK」をクリックします。

  2. 一時作業領域用にTEMPTBSを作成します。

    右クリックして、「新規作成」を選択します。

    名前(表領域名): TEMPTBS

    表領域タイプ: 一時

    「ファイル仕様」では、名前: 'TEMPTBS.DBF'

    ディレクトリ: 目的のファイル・システム・ディレクトリ。例: /u01/app/oracle/oradata/orcl12c/orcl

    ファイル・サイズ: 目的の初期ファイル・サイズ。例: 1 G

    「再使用」および「自動拡張オン」を選択します。

    次のサイズ: 拡張の各増分に必要なサイズ。例: 256 M

    最大サイズ: 目的の最大ファイル・サイズ。例: 8 G

  3. システム接続のSQLワークシートを使用して次の文を実行することで、TEMPTBSをデータベースのデフォルト一時表領域にします。

    SQL> alter database default temporary tablespace TEMPTBS;

C.3.2 SQL Developerを使用したセマンティク・ネットワーク索引のリフレッシュ

RDFで使用されるセマンティク・ネットワーク索引(一部は自動的に作成される)をリフレッシュできます。

必要に応じて追加のセマンティク索引を作成したり、自動的に作成された索引を調整したりできます。

次の列に、複数列のBツリー・セマンティク索引を示します。

  • S - 主語

  • P - 述語

  • C - 正規オブジェクト

  • G - グラフ

  • M - モデル

デフォルトでは、PCSGMおよびPSCGMという2つの索引が作成されます。ただし、S、PおよびCの組合せをよりカバーするために、3索引設定(PSCGM、SPCGMおよびCSPGM)を使用できます。

「接続」ナビゲータ(DBAナビゲータではない)で、システム接続を展開し、「RDFセマンティック・グラフ」を展開してから、「ネットワーク索引(RDF_LINK$)」をクリックします。

  1. SPCGM索引を追加します。

    右クリックして、「セマンティック索引の作成」を選択します。推奨される索引コード: SPCGM

    「OK」をクリックします。

  2. CSPGM索引を追加します。

    右クリックして、「セマンティック索引の作成」を選択します。推奨される索引コード: CSPGM

    「OK」をクリックします。

  3. PSCGM索引を削除します。

    「RDF_LINK_PSCGM_IDX」を右クリックして、「セマンティック索引の削除」を選択します。

結果は、次の3つの索引になります。

  • RDF_LINK_PSCGM_IDX

  • RDF_LINK_SPCGM_IDX

  • RDF_LINK_CSPGM_IDX

C.3.3 SQL Developerを使用したRDF統計の収集

RDFおよびOWL表とその索引に関する統計を収集できます。

セマンティク・ネットワークに関する統計を収集するには、ネットワーク名を右クリックして「統計の収集」を選択します。

ダイアログ・ボックスで次のパラメータを定義できます。

ネットワーク所有者: 接続ユーザー(編集不可)。

ネットワーク名: ネットワークの名前(編集不可)。

値についてのみ: 有効化(選択)すると、トリプルの字句の値を含む表のみに関する統計を収集します。無効化(選択解除)すると、RDFおよびOWLデータの記憶域に関連したすべての主要な表に関する統計を収集します。

並列度: 操作に関連付けられるパラレル実行サーバーの数。

ネットワークの作成を完了するには、「適用」をクリックします。

C.3.4 SQL Developerを使用したネットワークからの未使用値のパージ

未使用の(無効な)ジオメトリ・リテラル値をセマンティク・ネットワークからパージできます。

時間の経過に伴うトリプルの削除によって、RDF_VALUE$表の値のサブセットは、現在セマンティク・ネットワークに含まれるどのRDFトリプルまたはルールでも使用されなくなる可能性があります。このような未使用値をRDF_VALUE$表から削除するには、ネットワーク名を右クリックして未使用値のパージを選択します。

ダイアログ・ボックスで次のパラメータを定義できます。

ネットワーク所有者: 接続ユーザー(編集不可)。

ネットワーク名: ネットワークの名前(編集不可)。

MBV_METHOD=SHADOW: 有効化(選択)すると、大量の値をパージする必要がある場合に、処理がより高速になる可能性があります。

並列度: 操作に関連付けられるパラレル実行サーバーの数。

PUV_COMPUTE_VIDS_USED: 有効化(選択)すると、ほとんどの値がパージされると予測される場合に、処理がより高速になる可能性があります。

追加フラグ: 実行されるSEM_APIS.PURGE_UNUSED_VALUESプロシージャのflagsパラメータに追加するキーワードと値を指定します(完全なSQL文を表示するには、「SQL」タブをクリックします)。

操作を実行するには、「適用」をクリックします。

C.3.5 SQL Developerを使用したセマンティク・ネットワークの削除

セマンティク・ネットワークを削除すると、セマンティク・データの永続的な記憶域に使用した構造が削除されます。

セマンティク・ネットワークを削除するには、ネットワーク名を右クリックしてセマンティック・ネットワークの削除を選択します。

ダイアログ・ボックスで次のパラメータを定義できます。

ネットワーク所有者: 接続ユーザー(編集不可)。

ネットワーク名: ネットワークの名前(編集不可)。

カスケード: 有効化(選択)すると、ネットワークの既存のセマンティク・テクノロジ・モデルとルールベースも削除して、ネットワークのセマンティク・データの永続的な記憶域に使用される構造を削除します。無効化(選択解除)すると、ネットワークにセマンティク・テクノロジ・モデルまたはルールベースが存在する場合に、操作が失敗します。

操作を実行するには、「適用」をクリックします。

C.4 SQL Developerを使用したRDFデータのバルク・ロード

RDFのバルク・ロードの操作は、SQL Developerから開始できます。

最初の準備の後で必要になる主なステップは次の2つです: (1)ファイル・システムからステージング表にデータをロードし、(2)ステージング表からセマンティク・モデルにデータをロードします。

実際のバルク・ロードを準備するには、次の手順を実行します。

  1. 1つまたは複数のRDFデータセットを準備します。

    • データは、クライアント・システム上ではなく、データベース・サーバーのファイル・システム上に存在する必要があります。

    • データは、N-triple形式またはN-quad形式である必要があります。(たとえば、Apache Jenaを使用して、他の形式をN-tripleまたはN-quadに変換できます)

    • UNIX名前付きパイプを使用すると、圧縮したファイルをいつでも解凍できます。

    たとえば、LinkedGeoDataからRDFデータセットをダウンロードできます。概要は、http://linkedgeodata.org/Datasetsおよびhttp://linkedgeodata.org/RDFMappingを参照してください。

    LinkedGeoDataからダウンロードするには、https://hobbitdata.informatik.uni-leipzig.de/LinkedGeoData/downloads.linkedgeodata.org/releases/に移動し、リストされたディレクトリを参照します。小規模なデータセットの場合は、https://hobbitdata.informatik.uni-leipzig.de/LinkedGeoData/downloads.linkedgeodata.org/releases/2014-09-09/2014-09-09-ontology.sorted.nt.bz2をダウンロードできます。

    各.bz2ファイルは、同じ名前の.ntファイルを含む圧縮アーカイブです。データ・ソースとして.ntファイルを指定するには、圧縮されていないデータを格納する必要がないようにUnix名前付きパイプを作成する場合を除き、対応する.bz2ファイルを抽出(解凍)する必要があります。

  2. ロードを実行する通常の非DBAユーザーを作成します。

    たとえば、DBAナビゲータ(「接続」ナビゲータではない)を使用して、システム接続を展開し、「セキュリティ」を展開して、「ユーザー」を右クリックし、「新規作成」を選択します。

    CONNECT、RESOURCEおよびUNLIMITED TABLESPACE権限があるユーザー(RDFUSERなど)を作成します。

  3. この通常の非DBAユーザー用の接続を追加します(RDFUSERという接続など)。

    デフォルト表領域: USERS

    一時表領域: TEMPTBS

  4. システム・ユーザーとして、自分のRDFデータ・ディレクトリを指す、データベース内のディレクトリを作成します。

    「接続」ナビゲータ(DBAナビゲータではない)を使用して、システム接続を展開し、「ディレクトリ」を右クリックして、「ディレクトリの作成」を選択します。

    ディレクトリ名: 目的のディレクトリ名。例: RDFDIR

    データベース・サーバー・ディレクトリ: そのディレクトリ用の目的の場所。例: /home/oracle/RDF/MyData

    「適用」をクリックします。

  5. そのディレクトリに対する権限を通常の非DBAユーザー(RDFUSERなど)に付与します。たとえば、次のようにシステム接続のSQLワークシートを使用します。

    SQL> grant read, write on directory RDFDIR to RDFUSER;

    ヒント: 圧縮されていないデータを格納する必要がないように、名前付きパイプを使用できます。たとえば、次のようにします。

    $ mkfifo named_pipe.nt
    $ bzcat myRdfFile.nt.bz2 > named_pipe.nt
  6. 通常の非DBAユーザー(RDFUSERなど)の接続を展開し、「RDFセマンティック・グラフ」をクリックします。

  7. RDFデータを保持するモデルを作成します。

    「モデル」「新規モデル」の順にクリックします。

    モデル名: モデル名を入力します(MY_ONTOLOGYなど)

    アプリケーション表: * Create new <Model_Name>_TPL table * (つまり、TRIPLEという名前のトリプル列があるアプリケーション表が自動的に作成されます)。

    モデル表領域: RDFデータを保持する表領域(RDFTBSなど)

    「適用」をクリックします。

    モデルを表示するには、オブジェクト階層で「モデル」を展開し、モデル名をクリックしてそのモデルのSPARQLエディタを起動します。

    問合せを実行して、モデルが空であることを確認できます。

「モデル」メニューを使用して、「モデル」メニューからバルク・ロードを実行します。バルク・ロードには次の2つのフェーズがあります。

  • ファイル・システムからデータベース内の単純なステージング表にデータをロードします。この際には、外部表を使用してファイル・システムから読み取ります。

  • ステージング表からセマンティク・ネットワークにデータをロードします。ステージング表からモデルにロードします(MY_ONTOLOGYなど)。

これら2つのフェーズを実行する手順は、次のとおりです。

  1. ステージング表にデータをロードします。

    モデル名(「通常モデル」の下)を右クリックし、「外部表からステージング表へのRDFデータのロード」を選択します。

    「ソース外部表」の場合、ソース表: 目的の表名(MY_ONTOLOGY_EXTなど)。

    ログ・ファイル: 目的のファイル名(my_ontology.logなど)

    不良ファイル: 目的のファイル名(my_ontology.badなど)

    ソース表の所有者: RDFデータを含む表のスキーマ(RDFUSERなど)

    「入力ファイル」の場合、入力ファイル: 入力ファイル(named_pipe.ntなど)。

    「ステージング表」の場合、ステージング表: ステージング表の名前(MY_ONTOLOGY_STAGEなど)。

    表が存在しない場合は、「ステージング表の作成」を選択します。

    入力形式: 目的の形式(N-QUADなど)

    ステージング表の所有者: ステージング表のスキーマ(RDFUSERなど)

  2. ステージング表からモデルにロードします。

    注意:

    ステージング表内のUnicodeデータは、WC3N-Triple形式で指定されているように(http://www.w3.org/TR/rdf-testcases/#ntriples)エスケープする必要があります。SEM_APIS.ESCAPE_RDF_TERM関数を使用すると、ステージング表内のUnicode値をエスケープできます。たとえば、次のようにします。

    create table esc_stage_tab(rdf$stc_sub, rdf$stc_pred, rdf$stc_obj);
    
    insert /*+ append nologging parallel */ into esc_stage_tab (rdf$stc_sub, rdf$stc_pred, rdf$stc_obj)
    select sem_apis.escape_rdf_term(rdf$stc_sub, options=>’ UNI_ONLY=T '), sem_apis.escape_rdf_term(rdf$stc_pred, options=>’ UNI_ONLY=T '), sem_apis.escape_rdf_term(rdf$stc_obj, options=>’ UNI_ONLY=T ')
    from stage_tab; 
    

    モデル名(「通常モデル」の下)を右クリックし、「ステージング表からモデルへのバルク・ロード」を選択します。

    モデル: モデルの名前(MY_ONTOLOGYなど)。

    (モデルが存在しない場合は、「モデルの作成」を選択します。ただし、この例では、モデルはすでに存在します)。

    ステージング表の所有者: ステージング表のスキーマ(RDFUSERなど)

    ステージング表名: ステージング表の名前(MY_ONTOLOGY_STAGEなど)

    並列: 並列度(2など)

    提案: 次のオプションを選択します: 「MBV_METHOD=SHADOW」アプリケーション表索引の再構築「イベント・トレース表の作成」

    「適用」をクリックします。

バルク・ロード操作の後に次の操作を実行します。

  1. セマンティク・ネットワーク全体の統計を収集します。

    DBAユーザーの「接続」ナビゲータで、接続の「RDFセマンティック・グラフ」ノードを展開し、「統計の収集... (DBA)」を選択します。

  2. モデルのSPARQL問合せをいくつか実行します。

    「接続」ナビゲータで、接続の「RDFセマンティック・グラフ」ノードを展開し、モデルを選択します。

    SPARQL問合せエディタを使用して、目的のSPARQL問合せを入力して実行します。

  3. オプションで、「一括ロード・トレース」を選択して各ステップに関する情報を取得します。

    「RDFセマンティック・グラフ」を展開してから、「一括ロード・トレース」を展開して一括ロード・トレースのリストを表示します。いずれかをクリックすると、ロードの実行時間、個別値とトリプルの数、重複トリプルの数、およびその他の詳細に関する有用な情報が表示されます。