8.7 SPARQL更新の実行モデル
この項では、Oracle RDF Graph Adapter for Eclipse RDF4JのSPARQL更新の実行モデルについて説明します。
oracle.rdf4j.adapter.sparqlInClient
を値F
に設定した場合は、かわりにデータベース・サーバーでSEM_APIS.UPDATE_RDF_GRAPH
ストアド・プロシージャが1回呼び出されてSPARQL更新操作が実行されます。SEM_APIS.UPDATE_RDF_GRAPH
を使用すると、データベースのラウンドトリップが減少し、クライアントとデータベース・サーバーの間の待機時間が長い場合はパフォーマンスが向上する可能性があります。SPARQL更新操作を実行するには、OracleSailRepositoryConnection
のインスタンスのprepareUpdate
関数からUpdate
オブジェクトを取得します。
ノート:
OracleSailRepositoryConnection
インスタンスが必要です。OracleSailStore
から作成されたプレーンなSailRepository
インスタンスでは、更新が正しく実行されません。
次の例は、RDF4J APIを使用してOracle RDFグラフを更新する方法を示します。
String updString = "PREFIX people: <http://www.example.org/people/>\n"+ "PREFIX ont: <http://www.example.org/ontology/>\n"+ "INSERT DATA { GRAPH <urn:g1> { \n"+ " people:Sue a ont:Person; \n"+ " ont:name \"Sue\" . } }"; Update upd = conn.prepareUpdate(QueryLanguage.SPARQL, updString); upd.execute();
8.7.1 SPARQL更新のトランザクション管理
RDF4J APIを介して実行されるSPARQL更新操作は、標準のRDF4Jトランザクション管理規則に従います。SPARQL更新は、デフォルトで自動的にコミットされます。ただし、明示的なトランザクションがbegin
を使用してSailRepositoryConnection
で開始された場合、アクティブなトランザクションがcommit
を使用して明示的にコミットされるまで、後続のSPARQL更新操作はコミットされません。未コミット状態の更新操作は、rollback
を使用してロールバックできます。
親トピック: SPARQL更新の実行モデル
8.7.2 他の機能をサポートするためのSPARQL構文への追加
SPARQL問合せの場合と同様に、Oracle RDF Graph Adapter for Eclipse RDF4JではSPARQL更新を実行するためのオプションを渡すことができます。SEM_APIS.UPDATE_RDF_GRAPH
_オプションを含むOracle固有の名前空間を使用してSPARQL名前空間接頭辞の構文をオーバーロードすることで、これらの機能を実装できます。これらのオプションは、クライアントベースのSPARQL更新実行とSEM_APIS.UPDATE_RDF_GRAPH
ベースの実行の両方に適用されます。
8.7.2.1 UPDATE_RDF_GRAPHオプション
PREFIX
宣言を含めます:PREFIX ORACLE_SEM_UM_NS: <http://oracle.com/semtech#option>前述の
PREFIX
のoption
は、更新の実行時に使用されるUPDATE_RDF_GRAPH
オプション(またはカンマで区切られた複数のオプション)を反映します。
使用可能なオプションの詳細は、SEM_APIS.UPDATE_RDF_GRAPHを参照してください。このPREFIX
では、UPDATE_RDF_GRAPH
のオプション引数に有効としてリストされている任意の有効なキーワードまたはキーワード値ペアを使用できます。
次の問合せ例では、ORACLE_SEM_UM_NS
接頭辞を使用して、更新の並列度2を指定します。
PREFIX ORACLE_SEM_UM_NS: <http://oracle.com/semtech#parallel(2)> PREFIX ex: <http://www.example.org/> INSERT {GRAPH ex:g1 {ex:a ex:reachable ?y}} WHERE {ex:a ex:p1* ?y}
親トピック: 他の機能をサポートするためのSPARQL構文への追加
8.7.2.2 UPDATE_RDF_GRAPH照合オプション
SPARQL更新実行に照合オプションを渡すには、次の形式でPREFIX
宣言を含めます:
PREFIX ORACLE_SEM_SM_NS: <http://oracle.com/semtech#option>
option
は、SPARQL更新の実行中に使用されるUPDATE_RDF_GRAPH
照合オプション(またはカンマで区切られた複数の照合オプション)を反映します。
使用可能なオプションの詳細は、SEM_APIS.UPDATE_RDF_GRAPHを参照してください。このPREFIX
では、UPDATE_RDF_GRAPH
の match_options
引数に有効としてリストされている任意の有効なキーワードまたはキーワード値ペアを使用できます。
次の例では、ORACLE_SEM_SM_NS
接頭辞を使用して、最大の無制限のプロパティ・パス深度5を指定します。
PREFIX ORACLE_SEM_SM_NS: <http://oracle.com/semtech#all_max_pp_depth(5)> PREFIX ex: <http://www.example.org/> INSERT {GRAPH ex:g1 {ex:a ex:reachable ?y}} WHERE {ex:a ex:p1* ?y}
親トピック: 他の機能をサポートするためのSPARQL構文への追加
8.7.3 SPARQL更新のサポートで特に留意する点
更新操作での無制限のプロパティ・パス
前の項で説明したように、Oracle RDF Graph Adapter for Eclipse RDF4Jは、無制限のSPARQLプロパティ・パス演算子+
および*
の評価を最大10回の繰返しに制限します。このデフォルト設定は、WHERE
句でプロパティ・パスを使用するSPARQL更新操作に影響します。最大反復回数の設定は、all_max_pp_depth(n)
オプションを使用して制御できます。n
は、+
または*
と一致する場合に許可される最大反復回数です。値をゼロに指定すると、最大反復回数は無制限になります。
次の例では、SPARQL更新実行の間に、完全に無制限の検索のための照合オプションとしてall_max_pp_depth(0)
を使用します。
PREFIX ORACLE_SEM_SM_NS: <http://oracle.com/semtech#all_max_pp_depth(0)> PREFIX ex: <http://www.example.org/> INSERT { GRAPH ex:g1 { ex:a ex:reachable ?y}} WHERE { ex:a ex:p1* ?y}
SPARQLデータセットの指定
Oracle RDF Graph Adapter for Eclipse RDF4Jでは、SPARQL更新文字列の外部でデータセットを指定できません。Operation
およびそのサブインタフェースでのsetDataset
メソッドによるデータセット指定はサポートされていません。かわりに、WITH
、USING
およびUSING NAMED SPARQL
句を使用して、SPARQL更新文字列自体でデータセットを指定します。
バインド値
SPARQL更新操作では、バインド値はサポートされていません。
ロングRDFリテラル
前の項で説明したように、長さが4000バイトを超えるラージRDFリテラル値は、一部のSPARQL問合せ関数ではサポートされていません。この制限は、ロング・リテラル・データに対してこれらの関数のいずれかを使用するSPARQL更新操作に影響します。詳細は、SEM_MATCH使用時の特別な考慮事項を参照してください。
更新タイムアウト
Operation
およびそのサブインタフェースでのsetMaxExecutionTime
メソッドによる更新タイムアウトはサポートされていません。
親トピック: SPARQL更新の実行モデル