7.4 SEM_MATCHおよびRDF Graph Support for Apache Jena問合せの比較
Oracle Databaseに格納されているRDFデータを問い合せる方法は2つあります。SEM_MATCHベースのSQL文とsupport for Apache Jenaを介したSPARQL問合せです。
それぞれの方法での問合せは、表面的には類似していますが、動作には重要な違いがあります。アプリケーションの動作を一貫性のあるものにするには、SEM_MATCH問合せとSPARQL問合せの違いを理解し、その問合せ結果を処理する際に注意が必要です。
2つの方法を次の簡単な例で示します。
問合せ1 (SEM_MATCHベース)
select s, p, o from table(sem_match('{?s ?p ?o}', sem_models('Test_Model'), ....))
問合せ2 (support for Apache Jenaを介したSPARQL問合せ)
select ?s ?p ?o where {?s ?p ?o}
これらの2つの問合せは、同じ種類の機能を実行しますが、いくつか重要な違いがあります。問合せ1 (SEM_MATCHベース)は次のようになります。
-
Test_Model
からすべてのトリプルを読み取ります。 -
URI、bNode、プレーン・リテラルおよび型付きリテラルを区別せず、長いリテラルを処理しません。
-
特定の文字(
'\n'
など)はエスケープ解除しません。
問合せ2 (support for Apache Jenaを介して実行されるSPARQL問合せ)もTest_Model
からすべてのトリプルを読み取ります(同じ基礎となるTest_Model
を参照しているModelOracleSem
に対してコールを実行したと想定します)。ただし、問合せ2は次のようになります。
-
(SEM_MATCH表関数による、
s
、p
およびo
列のみではなく)追加の列を読み取り、URI、bNodes、プレーン・リテラル、型付きリテラルおよび長いリテラルを区別します。これによって、Jena Nodeオブジェクトを適切に作成できるようになります。 -
Oracle Databaseに格納される際にエスケープされる文字をエスケープ解除します。
2つの方法でのもう1つの違いは、空白ノード処理です。
-
SEM_MATCHベースの問合せにおいて、空白ノードは常に定数とみなされます。
-
SPARQL問合せにおいて、
<
と>
で囲まれていない 空白ノードは、問合せがSupport for Apache Jenaを介して実行されるときに変数とみなされます。これは、SPARQL標準セマンティクと一致します。ただし、<と>
で囲まれた
空白ノードは、問合せが実行されるときに定数とみなされ、空白ノード・ラベルには、基礎となるデータのモデル化で必要とされる適切な接頭辞が、support for Apache Jenaによって追加されます。
support for Apache Jena APIを使用して作成されるRDFグラフの名前の最大長は、22文字です。