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表関数による、spおよび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文字です。