2013-05-16 2 views
0

Sparql-Query를 작성하여 강의와 관련된 모든 메시지를 가져 오려고합니다. 나는 전체 '시맨틱 웹'이야기에서 새로운 편이다. 사용법 네임 스페이스가 완전히 틀린 경우 인내심을 가져라.Sparql Select Query는 Sesame-Workbench에서 작동하지만 Java에서는 작동하지 않습니다.

내가 실행하려고 쿼리는 다음과 같습니다

1337-7331는 ID입니다
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. 
} 

.

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 
... 
} 

위 쿼리는 자바 디버거에서 복사되었습니다. Query(Execution)을 준비 할 때 뭔가를 놓쳤으며, Sesame-Workbench가 누락 된 것들을 완성합니까?

도움을 받으려면 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; 
    } 
관련 문제