2012-03-14 50 views
2

私は特定のIDを持つrdfデータを削除するために、javaでsparqlクエリを書いています。私は試しています削除するsparqlクエリ

Delete ?ID ?name Where { 
    ?ID rdf:type ex:example ex:name ?name 
    FILTER(?ID ="something") 
} 

しかし、何もしません。私の間違いは何ですか?

答えて

4

そのクエリはおそらく失敗している、ある仕事かもしれない近いSPARQLクエリ...

DELETE WHERE { 
    ?id rdf:type ex:example; 
     ex:name ?name . 
    FILTER(?id = <http://foo.com/some/example/uri>) 
} 

それが主題として、すべての被験者虹彩あるRDFに位置しているので、?idはストリングにすることはできませんVAR、リテラルではありません。

サンプルデータを投稿すると、より効果的に役立つかもしれません。

+0

は私が6行目で 『』「『削除』 DELETE」が発生しましたエラーが発生しますので、問題はSPARQLのアップデートであることを考えると、列1 は1を期待していました "接頭辞" ... "" "" ... "を選択..." "と尋ねる" ... 私は削除を実行するために何かできるかどうか知っていますか?クエリ? – user1259487

+0

どのトリプルストアをお使いですか? –

+0

エラーメッセージは、SPARQLクエリとSPARQL更新の違いに関連しています。それらはJenaの異なるクラスを使用して表現されています(これはあなたが使用していると思います)、通常は異なるエンドポイントURLとして公開されます。これらは設計上互換性がないため、エラーです。 –

0

RDF表現は、(サブ)グラフを削除することによってのみ削除を実行できることを意味します。 SELECTクエリのフィールドに相当する部分を削除しようとすると、エラーが発生します。さらに、SPARQL 1.1 Update specificationに示すように、DELETEクエリには複数の形式があります。問題のクエリのもう1つの問題は、WHERE句を使用して削除されるトリプルを定義するときのショートカットであるが、フィルタがショートカットを壊してしまうことです。フルDELETE構文を使用すると、うまく動作するはずです:

PREFIX ex: <http://example.org#> 
DELETE { 
    ?id a ex:Example ; 
     ex:name ?name .} 
WHERE { 
    ?id rdf:type ex:Example ; 
    ex:name ?name . 
    FILTER(str(?id) != "") 
}