0

Jena(2.6.4) と ARQ(2.8.8) を使用していますが、トリプル ストアからデータを削除できません。SPARQL リクエスト:

  DELETE {?doc ?p ?o} 
  WHERE {  ?doc ?p ?o; 
        <http://example#fullName> <file:/c:/1.txt> }

このリクエストは Sesame Workbench で正常に機能します。

しかし、DB2 v.10 RDF トリプル ストアを使用して Java から発行しようとすると、何も起こりません。

       Dataset ds = RdfStoreFactory.connectDataset(store, conn);
       GraphStore graphStore = GraphStoreFactory.create(ds) ;
       UpdateAction.parseExecute(deleteDocumentString, graphStore);

私が見つけた唯一の方法 - 文字列を比較する:

       {?doc base:fullName ?fname. FILTER(str(?fname) = "file:/c:/1.txt")
4

2 に答える 2

2

<file:/c:/1.txt>は適切な URI ではありません (適切に絶対的ではありませんが、 file: URL はあまり明確に定義されていません)。

file: URls の正式な定義には、次のものが必要file://host/pathです。hostfile:///

SPARQL パーサーはそれを次のように変換します。

これをテストできます

arq.qparse --file QueryInFile.rq

データの読み込みは同じ手順を実行していないようです。Jena RIOT parse をコマンド ラインから実行すると、次のような警告が表示されます。

WARN  [line: 1, col: 46] Bad IRI: <file:/c:/1.txt> Code: 57/REQUIRED_COMPONENT_MISSING in AUTHORITY: A component that is required by the scheme is missing.

データを修正するのが最善です。

于 2012-07-31T17:00:07.230 に答える
1

どのようなエラーが発生するかはわかりませんが、非常に古いバージョンの Jena と ARQ を使用していることを考えると、問題は単に SPARQL 更新要求をサポートしていないことだと思います。Jenaの新しいバージョンにアップグレードすることをお勧めします(またはSesameに固執してください:))

更新データに問題があるように見えます。更新操作と使用するクエリの両方で、値を URI として処理しようとしますfullName(次のように山かっこで囲んで URI 構文を使用するためです。

 <file:/c:/1.txt>

ただし、明らかにその値はデータ内の URI として存在しません (実行する SELECT クエリはそれを返さず、使用する DELETE 操作は何も削除しないため)。文字列ベースのチェックを行うバージョンは機能するためデータの値は URI ではなくリテラルであると思われます。

以下はうまくいくかもしれません:

DELETE {?doc ?p ?o} 
WHERE {  ?doc ?p ?o; 
              <http://example#fullName> "file:/c:/1.txt" . 
}

上記は、リテラル値が言語タグのない型指定されていないリテラルである場合にのみ機能します。それ以外の場合は、(string-value で FILTER 条件を使用して) 自分で見つけた代替手段が、これを処理する優れた方法です。もちろん、これらの値をリテラルではなく URI にしたい場合は、実際のデータを変更してください。

于 2012-07-26T20:44:35.240 に答える