Sparql Select Query适用于Sesame-Workbench但不适用于Java

我正在尝试创建一个Sparql-Query来获取与讲座相关的所有消息。 我是整个“语义网”故事的新手,所以如果使用命名空间完全错误,请耐心等待。

我尝试执行的查询是:

PREFIX siocNS:  PREFIX rdfPred:  PREFIX purlPred:  PREFIX purlPredLecture: <http://purl.org//lecture/> select ?post ?title ?content ?time ?creator where { ?post rdfPred:type siocNS:Post. ?post purlPred:title ?title. ?post purlPred:content ?content. ?post purlPred:created ?time. ?post purlPred:creator ?creator. ?post purlPred:context purlPredLecture:1337-7331. } 

其中1337-7331是一个ID。

在Sesame-Workbench上,查询似乎工作正常(因为我得到了我预期的2行)。 在Java上,使用Jena,似乎我的QueryExecuion不正确。

这是我的代码:

 String prefix = "PREFIX siocNS: \n" + "PREFIX rdfPred: \n" + "PREFIX purlPred: \n" + "PREFIX purlPredLecture: <http://purl.org//lecture/>\n"; String queryString = "select ?post ?title ?content ?time ?creator where\n" + "{\n" + "?post rdfPred:type siocNS:Post.\n" + "?post purlPred:title ?title. \n" + "?post purlPred:content ?content. \n" + "?post purlPred:created ?time. \n" + "?post purlPred:creator ?creator.\n" + "?post purlPred:context purlPredLecture:" + lectureID + ".\n" + "}"; logger.info("Created Query:" + prefix + queryString); Query query = QueryFactory.create(prefix + queryString, Syntax.syntaxSPARQL); query.addResultVar("?post"); query.addResultVar("?title"); query.addResultVar("?content"); query.addResultVar("?time"); query.addResultVar("?creator"); Model model = ModelFactory.createDefaultModel(); QueryExecution execution = QueryExecutionFactory .create(query, model); ResultSet execSelect = execution.execSelect(); while (execSelect.hasNext()) { ... DO SOME STUFF ... } 

上面显示的查询是从java-debugger复制的。 我是否遗漏了有关准备Query(Execution)事情,并且Sesame-Workbench是否完成了缺失的事情?

谢谢你的帮助!

DPA

所以我的解决方案是我自己的问题;)

 String prefix = "PREFIX siocNS: \n" + "PREFIX rdfPred: \n" + "PREFIX purlPred: \n" + "PREFIX purlPredLecture: /lecture/>\n"; String queryString = "select ?post ?title ?content ?time ?creator where\n" + "{\n" + "?post rdfPred:type siocNS:Post.\n" + "?post purlPred:title ?title. \n" + "?post purlPred:content ?content. \n" + "?post purlPred:created ?time. \n" + "?post purlPred:creator ?creator.\n" + "?post purlPred:context purlPredLecture:" + lectureID + ".\n" + "}"; logger.info("Created Query:" + prefix + queryString); String completeQuery = prefix + queryString; logger.info("Created Query:\n" + completeQuery); RepositoryConnection con = createRepositoryConnection(); if (con == null) { logger.warn("Error creating repository connection. Returning epty list"); return new ArrayList(); } ArrayList messages = new ArrayList(); try { try { TupleQuery prepareTupleQuery = con .prepareTupleQuery( QueryLanguage.SPARQL, completeQuery); TupleQueryResult result = prepareTupleQuery .evaluate(); while (result.hasNext()) { ... } for (UserMessage message : messages) { collectReplysOfMessage(lectureID, message.getId()); } } catch (MalformedQueryException e) { logger.error("Malformed Exception caught", e); } catch (QueryEvaluationException e) { logger.error( "Error on evaluating the query", e); } finally { con.close(); } } catch (RepositoryException e) { logger.error( "Error on creationg repository connection", e); } 

‘createRepositoryConnection()’的样子

 private static RepositoryConnection createRepositoryConnection() { if (repoistory == null) { prepareRepository(); } RepositoryConnection con = null; try { con = repoistory.getConnection(); } catch (RepositoryException e) { logger.error( "Error on creating repository connection", e); } return con; }