2013-03-07 3 views
1

나는 다음과 SPARQL 쿼리가 : 성공적으로 반환 OpenRDF 워크 벤치 2.6.5에서 올바른 결과를 반환자바 아파치 예나 SPARQL 쿼리는 쿼리가 유효 할 때 어휘 오류를 반환

SELECT ?b ?c WHERE { 
ont:http\:\/\/test.com\/test\#com.test.test.test.2.3.4 ?b ?c} 

합니다. 나는 다음과 같은 코드

private static ResultSet getQueryResults(String stringQuery, String service) { 
    Query query = QueryFactory.create(stringQuery); 
    QueryExecution qexec = QueryExecutionFactory.sparqlService(
      service, query); 
    ResultSet results = qexec.execSelect(); 
    //ResultSetFormatter.out(System.out, results, query); 
    return results; 
} 

public static ResultSet getDetails(String ID) { 
    //we define our sparql query 
    String sanatizedID = "ont:" + sanitizeString(ID); 
    String stringQuery = " SELECT ?b ?c WHERE" + 
      " { " + sanatizedID + 
      //"{?a"+ 
      " ?b" + 
      " ?c}"; 
    System.out.println(stringQuery); 
    //we define our service 
    String service = "http://test.test.com:8181/test-sesame/repositories/test"; 

    //We write the results of our query into a results set 
    ResultSet results = getQueryResults(stringQuery, service); 
    return results; 
} 

private static String sanitizeString(String s) { 
    s = s.replace("/", "\\/"); 
    s = s.replace("#", "\\#"); 
    s = s.replace(":", "\\:"); 
    s = s.replace("\"", "\\\""); 

    return s; 
} 

을 I 라인 쿼리 쿼리에 다음과 같은 오류

Exception in thread "main" com.hp.hpl.jena.query.QueryParseException: Lexical error at line 1, column 871. Encountered: ":" (58), after : "\\" 

을 얻을 = QueryFactory.create (사용하여 쿼리를 실행할 때 내 자바 예나 2.6.4를 사용하는 stringQuery);/

: 쿼리 내 자바 쿼리에 OpenRDF 워크 벤치 2.6.5 및 유효하지 왜 나는 예나 버전과 행운을 변경하려고했습니다

는, (나는 그것이 자신의 sanatization을 할 수 있습니다 생각) 이해할 수없는

도움말 정말 감사하겠습니다!

+0

이것은 < > 표지판을 사용하여 수행 할 수 있습니다. 쿼리는 다음과 같이 읽어야합니다. SELECT? b? c WHERE { ? b? c} – user1829257

답변

0

"ont:" + sanitizeString(ID);

당신은 쿼리에 ont:의 접두사 선언이 필요하거나 전체 형태와 <...>를 사용합니다. 당신은 SPARQL 1.1 사양의 약간 이전 버전을 지원 참깨의 버전을 사용하는

0

, 당신의 접두사 이름이 실제로 유효하지 않습니다 지금에 허용되는 SPARQL 사양의 최신 버전으로

ont:http\:\/\/test.com\/test\#com.test.test.test.2.3.4 

접두사가 붙은 이름에 직접 : 문자를 직접 사용하십시오. 따라서 이것을 \으로 이스케이프 할 필요가 없습니다. 따라서이 쿼리를 Jena와 함께 사용하려면 을 제거하기 만하면됩니다. :

세서미가 최신 SPARQL 1.1 사양과 일치하는지 잘 모르겠지만 더 최근 버전에서이 쿼리를 시도하면 참깨 버전을 사용하면 Jena와 일치하는 동작이 나타날 수 있습니다.