2014-05-16 8 views
0

거북이 파일이로드 된 열린 RDF 저장소를 쿼리하려고합니다. 모든 쿼리를 선택할 때 - "SELECT? WHERE {? s? p? o}"; 모든 것이 잘 작동하지만 약간의 복잡한 쿼리를 사용할 때 작동하지 않습니다. 쿼리 부분의 코드를 첨부하려고합니다. -열린 RDF 저장소 쿼리하기

private static void queryingRDF(Repository repo) { 
    try{ 
     RepositoryConnection con = repo.getConnection(); 
     try{ 
      String queryString = "SELECT ?s WHERE { ?s uml:lineOfBusiness cp:lobEQUITIES .}" ; 
       TupleQuery tupleQuery = con.prepareTupleQuery(QueryLanguage.SPARQL, queryString); 

       TupleQueryResult result = tupleQuery.evaluate(); 
       try { 
        while(result.hasNext()){ 
         BindingSet bindingSet = result.next(); 
         Value valueOfX = bindingSet.getValue("s"); 
         //Value valueOfY = bindingSet.getValue("p"); 
         //Value valueOfZ = bindingSet.getValue("o"); 
         //System.out.println(valueOfX + " " + valueOfY + " " + valueOfZ); 
         System.out.println(valueOfX) ; 
        } 

       } 

       finally { 
        result.close(); 
       } 
     } 
     finally{ 
      con.close(); 
     } 
    } 
    catch(OpenRDFException e){ 
     System.out.println("Query error"); 
    } 

} 

이것은 예외 섹션에 계속 들어가서 "쿼리 오류"라는 오류가 발생했습니다. 뭐가 잘못 됐나요?

+0

그냥 팁 : 이런 종류의 문제를 디버깅, 돈 ' 실제 예외는 무시한다. 대신, 예를 들어'e.printStackTrace();'를 출력하거나 예외 메시지 인'System.out.println (e.getMessage());'를보고 스택 추적을 검사하십시오. 정확한 메시지와 스택 추적에는 종종 정확히 무엇이 잘못되었는지에 대한 유용한 정보가 포함되어 있습니다. –

답변

2

uml 또는 cp 접두어를 정의하지 않은 것 같습니다. 나는 당신의 쿼리 문자열이 같은 성명을 찾고 있어요 :

PREFIX uml: <http://example.com/uml> 

또는 RepositoryConnection를 호출 :: setNamespace을 다음과 같이 :

con.setNamespace("uml", "http://example.com/uml"); 
+1

'setNamespace'를 호출해도 문제가 해결되지 않습니다. SPARQL 쿼리는 문법적으로 완료되어야합니다. 즉 접두사 선언을 쿼리에 추가해야합니다. –

+0

감사합니다. @JeenBroekstra. 이전에이 Java 라이브러리를 사용하지 않았으며, 이것이 실제 쿼리 외부의 네임 스페이스를 설정하는 방법이라고 가정했습니다. –