2013-05-16 70 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; 
    } 
相關問題