10.2 RDFビューのAPIサポート
SEM_APISパッケージには、RDFビューの作成、削除およびエクスポート(つまりRDFビューの実体化)を行うサブプログラムが含まれています。
RDFビュー・グラフはRDFグラフとして作成されますが、RDFグラフにはマッピング・メタデータのみが物理的に含まれます。実際のデータは、RDFビュー・グラフの作成対象のリレーショナル表に残ります。(SEM_APISサブプログラムの詳細は、「SEM_APISパッケージ・サブプログラム」を参照してください。)
RDFビュー・グラフが作成されると、SEM_APIS.EXPORT_RDFVIEW_GRAPHサブプログラムを使用して、RDFトリプルをステージング表に実体化することもできます。
この章の例では、リレーショナル表EMP
およびDEPT
がTESTUSER
スキーマに存在するとします(これら2つの表の定義については、10.3項を参照)。また、RDFUSERスキーマが所有するNET1という名前のスキーマプライベート・ネットワークがすでに存在し、RDFUSERがこの2つの表に対するREAD権限を持っているとします。
RDFトリプル・エクスポートの使用を示す例では、マテリアライズドRDFトリプルが格納されるステージング表がTESTUSER
によって所有され、ネットワーク所有者がその表に対するINSERT
権限を持っているとします。
親トピック: RDFビュー: RDFとしてのリレーショナル・データ
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.
親トピック: RDFビューのAPIサポート
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;
/
親トピック: RDFビューのAPIサポート
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;
/
親トピック: RDFビューのAPIサポート
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.
親トピック: RDFビューのAPIサポート