2012-11-17 38 views
-2

我正在嘗試使用Jena執行刪除查詢,但我在執行時遇到錯誤。我嘗試了兩種方法,但在兩種情況下,我都遇到了同樣的錯誤。我使用的是jena 2.7.3和數據庫virtuoso 6.01.3。如何使用jena執行Sparql刪除查詢?

代碼1:

String queryString; // deleteQuery. 
Model m = VirtModel.openDatabaseModel(file, connectionURL, username, password); 
UpdateAction.parseExecute(queryString, m); 

代碼2:

String queryString; // deleteQuery 
Model m = VirtModel.openDatabaseModel(file, connectionURL, username, password); 
GraphStore gs = GraphStoreFactory.create(); 
gs.setDefaultGraph(m.getGraph());    
UpdateRequest ur = UpdateFactory.create(queryString);    
UpdateAction.execute(ur.getOperations().get(0),gs); 

錯誤:

java.lang.InstantiationError: com.hp.hpl.jena.sparql.engine.binding.BindingMap at virtuoso.jena.driver.VirtuosoQueryEngine$VQueryIterator.extractRow(Unknown Source) at virtuoso.jena.driver.VirtuosoQueryEngine$VQueryIterator.moveForward(Unknown Source) at virtuoso.jena.driver.VirtuosoQueryEngine$VQueryIterator.hasNextBinding(Unknown Source) at com.hp.hpl.jena.sparql.engine.iterator.QueryIteratorBase.hasNext(QueryIteratorBase.java:108) at com.hp.hpl.jena.sparql.engine.iterator.QueryIteratorWrapper.hasNextBinding(QueryIteratorWrapper.java:40) at com.hp.hpl.jena.sparql.engine.iterator.QueryIteratorBase.hasNext(QueryIteratorBase.java:108) at org.openjena.atlas.data.AbstractDataBag.addAll(AbstractDataBag.java:74) at com.hp.hpl.jena.sparql.modify.UpdateEngineWorker.visit(UpdateEngineWorker.java:348) at com.hp.hpl.jena.sparql.modify.request.UpdateModify.visit(UpdateModify.java:97) at com.hp.hpl.jena.sparql.modify.UpdateEngineMain.execute(UpdateEngineMain.java:40) at com.hp.hpl.jena.sparql.modify.UpdateProcessorBase.execute(UpdateProcessorBase.java:56) at com.hp.hpl.jena.update.UpdateAction.execute$(UpdateAction.java:330) at com.hp.hpl.jena.update.UpdateAction.execute(UpdateAction.java:323) at com.hp.hpl.jena.update.UpdateAction.execute(UpdateAction.java:283) at com.hp.hpl.jena.update.UpdateAction.execute(UpdateAction.java:237) at com.tcs.ignite.plc.DAOs.ConceptDAO.deleteConceptByURI(ConceptDAO.java:75) at com.tcs.ignite.plc.utilities.ContextListener.contextInitialized(ContextListener.java:35) at org.apache.catalina.core.StandardContext.listenerStart(StandardContext.java:4723) at org.apache.catalina.core.StandardContext$1.call(StandardContext.java:5226) at org.apache.catalina.core.StandardContext$1.call(StandardContext.java:5221) at java.util.concurrent.FutureTask$Sync.innerRun(FutureTask.java:303) at java.util.concurrent.FutureTask.run(FutureTask.java:138) at java.util.concurrent.ThreadPoolExecutor$Worker.runTask(ThreadPoolExecutor.java:886) at java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:908) at java.lang.Thread.run(Thread.java:662)

有誰知道爲什麼我得到這個錯誤?

+0

[見本](http://www.mail-archive.com/[email protected]/msg01415.html) – Shubhajit

+0

註釋參考是OWLIM,不炫技。 – AndyS

回答

3

評論的參考是OWLIM,而不是Virtuoso。原因是相同的 - 版本混合不佳。您需要找出哪個版本的Jena與數據庫虛擬機6.01.3一起使用。

另一種方法是將Virtuoso數據庫作爲服務器運行並通過SPARQL協議連接到該服務器。然後,Jena(SPARQL協議客戶端)的版本與同步到Virtuoso的版本無關。

+0

第二個建議的缺點是Virtuoso尚未正確支持所有SPARQL 1.1更新,因此根據您發送的命令,它們可能會在Virtuoso方面失敗 – RobV

0

使用下一個代碼將您的查詢直接發送到Virtuoso服務器,而無需使用任何Jena SPARQL解析器/執行程序。

String queryString; // deleteQuery 
Model m = VirtModel.openDatabaseModel(file, connectionURL, username, password); 
VirtuosoUpdateRequest vur = VirtuosoUpdateFactory.create(str, m); 
vur.exec();