2013-05-16 72 views
0

我试图创建一个Sparql-Query来获取与演讲相关的所有消息。我是整个'语义网络'故事的新手,所以如果用法名称空间完全错误,请耐心等待。Sparql Select Query适用于Sesame-Workbench,但不适用于Java

我试图执行的查询是:

PREFIX siocNS: <http://rdfs.org/sioc/ns#> 
PREFIX rdfPred: <http://www.w3.org/1999/02/22-rdf-syntax-ns#> 
PREFIX purlPred: <http://purl.org/dc/terms/> 
PREFIX purlPredLecture: <http://purl.org/<CENSORED>/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: <http://rdfs.org/sioc/ns#>\n" 
      + "PREFIX rdfPred: <http://www.w3.org/1999/02/22-rdf-syntax-ns#>\n" 
      + "PREFIX purlPred: <http://purl.org/dc/terms/>\n" 
      + "PREFIX purlPredLecture: <http://purl.org/<CENSORED>/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调试器复制。我在准备Query(Execution)时错过了什么,芝麻工作台完成了什么?

Thx为您的帮助!

DPA

+0

什么是你所得到的例外呢? lectureID的价值是什么? –

+0

我没有得到任何异常。在执行'execution.execSelect();' ResultSet是空的。 lectureID的值是1337-7113(与查询中相同) – dpa

+0

OMG现在我看到了什么是缺少......错过了设置服务器(包括ReposiotryID)。但没有看到任何设置这些信息的可能性。任何帮助? – dpa

回答

1

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

String prefix = "PREFIX siocNS: <http://rdfs.org/sioc/ns#>\n" 
      + "PREFIX rdfPred: <http://www.w3.org/1999/02/22-rdf-syntax-ns#>\n" 
      + "PREFIX purlPred: <http://purl.org/dc/terms/>\n" 
      + "PREFIX purlPredLecture: <http://purl.org/<CENSORED>/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<UserMessage>(); 
     } 
     ArrayList<UserMessage> messages = new ArrayList<UserMessage>(); 
    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; 
    } 
相关问题