2012-11-17 7 views
-2

Jena를 사용하여 삭제 쿼리를 실행하려고하는데 실행 중에 오류가 발생합니다. 두 가지 방법을 시도했지만 두 경우 모두 동일한 오류가 발생합니다. 저는 jena 2.7.3과 데이터베이스 거장 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

코멘트 참조는 Virtuoso가 아닌 OWLIM입니다. 원인은 동일합니다 - 버전이 잘못되었습니다. 당신은 데이터베이스 거장 6.01.3과 사용할 Jena의 버전을 알아야합니다.

다른 대안은 Virtuoso 데이터베이스를 서버로 실행하고 SPARQL 프로토콜을 통해 서버에 연결하는 것입니다. 그런 다음 Jena 버전 (SPARQL 프로토콜 클라이언트)은 Virtuoso와 동기화 된 버전에 연결되지 않습니다.

+0

두 번째 제안의 단점은 Virtuoso가 아직 SPARQL 1.1 Update를 모두 제대로 지원하지 않는다는 것인데, 어떤 명령어를 보낼 지에 따라 Virtuoso 측에서 실패 할 수도 있습니다 – RobV

0

다음 코드를 사용하여 Jena SPARQL 파서/실행자를 사용하지 않고도 Virtuoso 서버에 직접 쿼리를 보낼 수 있습니다.

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