2013-07-18 17 views
1

我的問題基本上是如何使用由Tinkerpop創建的SailGraph正確執行SPARQL更新。如何通過Tinkerpop執行SailGraph中的SPARQL更新

DELETE { ?i_id_iri rdfs:label "BII-I-1" } 
INSERT { ?i_id_iri rdfs:label "BII-I-4" } 
WHERE 
    { 
    ?investigation rdf:type obi:0000011. 
    ?i_id_iri rdf:type iao:0000577. 
    ?i_id_iri iao:0000219 ?investigation. 
    } 

我有這個查詢到目前爲止與從另一個文件頂部添加的前綴,但它不起作用。 我運行代碼如下

query = parser.parseUpdate(queryString, baseURI); 
UpdateExpr expr = query.getUpdateExprs().get(0); 
Dataset dataset = query.getDatasetMapping().get(expr); 
GraphDatabase.getSailConnection().executeUpdate(expr, dataset, new EmptyBindingSet(), false); 
+0

從什麼意義上說它不起作用?錯誤,數據未按預期修改,還有其他內容? – RobV

+0

查詢成功執行,但是當我嘗試使用應該被替換的舊ID進行檢索時,它仍然存在 –

+0

底層數據庫是Neo4J並且風帆圖從該初始化 –

回答

0

我不是特別熟悉的TinkerPop有關GraphSail,但正確的假設它實現了芝麻SAIL API,執行SPARQL查詢是容易得多,如果你只是把它包在一個SailRepository,像這樣:

TinkerGraph graph = new TinkerGraph(); 
Sail sail = new GraphSail(graph);  

Repository rep = new SailRepository(sail); 
rep.initialize(); 

然後,您可以用芝麻的Repository API,這是更爲人性化不是試圖直接做在帆(這是不是爲此目的設計的)操作。

打開連接和執行SPARQL更新,例如,你做:

RepositoryConnection conn = rep.getConnection(); 
try { 
     String sparql = "INSERT {?s a <foo:example> . } WHERE {?s ?p ?o } "; 

     Update update = conn.prepareUpdate(QueryLanguage.SPARQL, sparql); 
     update.execute(); 
} 
finally { 
    conn.close(); 
} 

參見上述鏈接查看更多細節芝麻的庫API,或檢查出Javadoc