2012-12-04 34 views
1

我想用SPARQL更新本地rdf文件使用jena arq更新查詢。以下是密碼SPARQL通過本地文件更新查詢

GraphStore graphstore = GraphStoreFactory.create(); 
UpdateRequest req = UpdateFactory.create(); 
req.add(" PREFIX : myprefixuri INSERT DATA { GRAPH file:///path-to-file/file.n3 { :person :name 'xyz'. } } "); 
UpdateAction.execute(req, graphstore); 

執行完代碼後,表明查詢已成功執行,但本地文件未更新。

回答

2

您已經創建了商店並上傳了您的文件,然後在您的商店中執行了更新。因此,您的商店已成功更新,但您尚未將商店內容導出回檔案。

+0

感謝您的答覆,但你可以請指導我,或到執行SPARQL更新查詢的完整代碼的指針,也寫回文件? – user1876683

+1

我不是耶拿專家,但我認爲可以在耶拿文獻中找到答案。請參閱http://jena.apache.org/documentation。 –

3

我覺得你的困惑源於使用文件名作爲圖形名稱:

INSERT DATA { GRAPH file:///path-to-file/file.n3 

這並不將數據插入文件命名爲file.n3,其將其插入到一個名爲file:///path-to-file/file.n3。該圖將在圖形存儲庫創建的任何位置創建,它將按照您設置的內存對象進行創建。爲了讓您的更新持續存在,您需要使用管理持久性圖形的圖形庫(例如使用TDB),或者需要在更新後將圖形寫入磁盤。我猜你想要後者。

寫出RDF目前使用上的Model,這是一個潛在的耶拿Graph對象但具有額外的便利功能,包括I/O門面API方法。因此,您需要從圖形存儲庫中獲取對圖形的引用,將其作爲模型包裝,然後將其寫出。警告 - 未經測試的代碼:

Node graphName = Node.createURI("file:///path-to-file/file.n3"); 
Graph g = graphstore.getGraph(graphName); 
Model m = ModelFactory.createModelForGraph(g); 
g.write(new FileWriter("/path-to-file/file.n3"), "Turtle"); 
+0

非常感謝。你是對的,我錯過了將更新圖形寫回文件的部分。 – user1876683

+0

@ user1876683如果這解決了您的問題,請不要忘記接受答案(點擊投票計數下的勾號) – RobV