10.2 RDFビューのAPIサポート

SEM_APISパッケージには、RDFビューの作成、削除およびエクスポート(つまりRDFビューの実体化)を行うサブプログラムが含まれています。

RDFビュー・グラフはRDFグラフとして作成されますが、RDFグラフにはマッピング・メタデータのみが物理的に含まれます。実際のデータは、RDFビュー・グラフの作成対象のリレーショナル表に残ります。(SEM_APISサブプログラムの詳細は、「SEM_APISパッケージ・サブプログラム」を参照してください。)

RDFビュー・グラフが作成されると、SEM_APIS.EXPORT_RDFVIEW_GRAPHサブプログラムを使用して、RDFトリプルをステージング表に実体化することもできます。

この章の例では、リレーショナル表EMPおよびDEPTTESTUSERスキーマに存在するとします(これら2つの表の定義については、10.3項を参照)。また、RDFUSERスキーマが所有するNET1という名前のスキーマプライベート・ネットワークがすでに存在し、RDFUSERがこの2つの表に対するREAD権限を持っているとします。

RDFトリプル・エクスポートの使用を示す例では、マテリアライズドRDFトリプルが格納されるステージング表がTESTUSERによって所有され、ネットワーク所有者がその表に対するINSERT権限を持っているとします。

10.2.1 直接マッピングを使用したRDFビュー・グラフの作成

例10-1では、EMPとDEPTの2つの表(これら2つの表の定義については第10.3項を参照)の直接マッピングに、スキーマプライベート・ネットワークでベース接頭辞http://empdb/を使用してRDFビュー・グラフを作成しています。(仮想)RDF語句は、A Direct Mapping of Relational Data to RDF、W3C勧告に従って作成されます。

例10-1 スキーマプライベート・ネットワークでの直接マッピングによるRDFビュー・グラフの作成

BEGIN
  sem_apis.create_rdfview_graph(
    rdf_graph_name => 'empdb_model',
    tables => SYS.ODCIVarchar2List('"TESTUSER"."EMP"', '"TESTUSER"."DEPT"'),
    prefix => 'http://empdb/',
    options => 'KEY_BASED_REF_PROPERTY=T',
    network_owner=>'RDFUSER',
    network_name=>'NET1'
  );
END;
/

生成されたプロパティを表示するには、次の問合せを入力します。

SELECT p
  FROM TABLE(SEM_MATCH(
    'SELECT DISTINCT ?p {?s ?p ?o} ORDER BY ?p',
    SEM_Models('empdb_model'),
    NULL, NULL, NULL, NULL,
    NULL, NULL, NULL,
   'RDFUSER', 'NET1'));
P
--------------------------------------------------------------------------------
http://empdb/TESTUSER.EMP#EMPNO
http://empdb/TESTUSER.EMP#JOB
http://empdb/TESTUSER.EMP#ENAME
http://empdb/TESTUSER.EMP#DEPTNO
http://www.w3.org/1999/02/22-rdf-syntax-ns#type
http://empdb/TESTUSER.EMP#ref-DEPTNO
http://empdb/TESTUSER.DEPT#DEPTNO
http://empdb/TESTUSER.DEPT#DNAME
http://empdb/TESTUSER.DEPT#LOC

9 rows selected.

10.2.2 R2RMLマッピングによるRDFビュー・グラフの作成

2つの表EMPとDEPTを使用してRDFビュー・グラフを独自のカスタマイズで作成するには、Turtleを使用して指定したR2RMLマッピング・ドキュメントを作成します。次に例を示します。

@prefix rr: <http://www.w3.org/ns/r2rml#>.
@prefix xsd: <http://www.w3.org/2001/XMLSchema#>.
@prefix ex: <http://example.com/ns#>.
 
ex:TriplesMap_Dept
    rr:logicalTable [ rr:tableName "TESTUSER.DEPT" ];
    rr:subjectMap [
        rr:template "http://data.example.com/department/{DEPTNO}";
        rr:class ex:Department;
    ];
    rr:predicateObjectMap [
        rr:predicate ex:deptNum;
        rr:objectMap [ rr:column "DEPTNO" ; rr:datatype xsd:integer ];
    ];
    rr:predicateObjectMap [
        rr:predicate ex:deptName;
        rr:objectMap [ rr:column "DNAME" ];
    ];
    rr:predicateObjectMap [
        rr:predicate ex:deptLocation;
        rr:objectMap [ rr:column "LOC" ];
    ].
 
ex:TriplesMap_Emp
    rr:logicalTable [ rr:tableName "TESTUSER.EMP" ];
    rr:subjectMap [
        rr:template "http://data.example.com/employee/{EMPNO}";
        rr:class ex:Employee;
    ];
    rr:predicateObjectMap [
        rr:predicate ex:empNum;
        rr:objectMap [ rr:column "EMPNO" ; rr:datatype xsd:integer ];
    ];
    rr:predicateObjectMap [
        rr:predicate ex:empName;
        rr:objectMap [ rr:column "ENAME" ];
    ];
    rr:predicateObjectMap [
        rr:predicate ex:jobType;
        rr:objectMap [ rr:column "JOB" ];
    ];
    rr:predicateObjectMap [
        rr:predicate ex:worksForDeptNum;
        rr:objectMap [ rr:column "DEPTNO" ; rr:dataType xsd:integer ];
    ];
    rr:predicateObjectMap [
        rr:predicate ex:worksForDept;
        rr:objectMap [ 
          rr:parentTriplesMap ex:TriplesMap_Dept ; 
          rr:joinCondition [ rr:child "DEPTNO"; rr:parent "DEPTNO" ]]].

例10-2 R2RMLマッピング文字列によるRDFビュー・グラフの作成

次の例では、前述のR2RMLマッピングを使用して、R2RML文字列から直接RDFビュー・グラフを作成します。

DECLARE
  r2rmlStr CLOB;

BEGIN

  r2rmlStr := 
   '@prefix rr: <http://www.w3.org/ns/r2rml#>. '||
   '@prefix xsd: <http://www.w3.org/2001/XMLSchema#>. '||
   '@prefix ex: <http://example.com/ns#>. '||'

    ex:TriplesMap_Dept
        rr:logicalTable [ rr:tableName "TESTUSER.DEPT" ];
        rr:subjectMap [
            rr:template "http://data.example.com/department/{DEPTNO}";
            rr:class ex:Department;
        ];
        rr:predicateObjectMap [
            rr:predicate ex:deptNum;
            rr:objectMap [ rr:column "DEPTNO" ; rr:datatype xsd:integer ];
        ];
        rr:predicateObjectMap [
            rr:predicate ex:deptName;
            rr:objectMap [ rr:column "DNAME" ];
        ];
        rr:predicateObjectMap [
            rr:predicate ex:deptLocation;
            rr:objectMap [ rr:column "LOC" ];
        ].'||'

    ex:TriplesMap_Emp
        rr:logicalTable [ rr:tableName "TESTUSER.EMP" ];
        rr:subjectMap [
            rr:template "http://data.example.com/employee/{EMPNO}";
            rr:class ex:Employee;
        ];
        rr:predicateObjectMap [
            rr:predicate ex:empNum;
            rr:objectMap [ rr:column "EMPNO" ; rr:datatype xsd:integer ];
        ];
        rr:predicateObjectMap [
            rr:predicate ex:empName;
            rr:objectMap [ rr:column "ENAME" ];
        ];
        rr:predicateObjectMap [
            rr:predicate ex:jobType;
            rr:objectMap [ rr:column "JOB" ];
        ];
        rr:predicateObjectMap [
            rr:predicate ex:worksForDeptNum;
            rr:objectMap [ rr:column "DEPTNO" ; rr:dataType xsd:integer ];
        ];
        rr:predicateObjectMap [
            rr:predicate ex:worksForDept;
            rr:objectMap [ 
              rr:parentTriplesMap ex:TriplesMap_Dept ; 
              rr:joinCondition [ rr:child "DEPTNO"; rr:parent "DEPTNO" ]]].';

  sem_apis.create_rdfview_graph(
    rdf_graph_name => 'empdb_model',
    tables => NULL,
    r2rml_string => r2rmlStr,
    r2rml_string_fmt => 'TURTLE',
    network_owner=>'RDFUSER',   
    network_name=>'NET1'
  );

END;
/

10.2.3 RDFビュー・グラフの削除

例10-3に示すように、RDFビュー・グラフは、SEM_APIS.DROP_RDFVIEW_GRAPHプロシージャを使用して削除できます。

例10-3 RDFビュー・グラフの削除

BEGIN
  sem_apis.drop_rdfview_model(
    rdf_graph_name => 'empdb_model',
    network_owner =>'RDFUSER',   
    network_name =>'NET1'
  );
END;
/

10.2.4 RDFビュー・グラフの仮想コンテンツのステージング表へのエクスポート

RDFビュー・グラフのコンテンツは仮想、つまり直接マッピングまたはR2RMLマッピングによってマップされ、基礎となるリレーショナル・データに対応するRDFトリプルであり、実体はなく、どこにも格納されていません。SEM_APIS.EXPORT_RDFVIEW_GRAPHサブプログラムは、RDFビュー・グラフの仮想RDFトリプルをステージング表に実体化します。その後、ステージング表をRDFグラフへのロードに使用できます。

例10-4 スキーマプライベート・ネットワークでのRDFビュー・グラフのエクスポート

例10-4では、RDFビューempdb_modelの内容をステージング表TESTUSER.R2RTABに実体化(N-Triples形式)します。

BEGIN
  sem_apis.export_rdfview_graph(
    rdf_graph_name => 'empdb_model',
    rdf_table_owner => 'TESTUSER',
    rdf_table_name => 'R2RTAB',
    network_owner => 'RDFUSER',
    network_name => 'NET1'
  );
END;
PL/SQL procedure successfully completed.