2016-07-10 1 views
0

DBPedia에서 Jupiter와 관련된 모든 리소스/객체 쌍을 가져오고 Apache Jena를 사용하여 Java에서 RDF 형식으로 결과를 출력하는 쿼리를 작성하고 싶습니다. 내 구조 쿼리는 다음과 같습니다 http://dbpedia.org/sparql 서비스에서 작동 :SPARQL 자바에서 구문이 작동하지 않는다

PREFIX rdf: <http://www.w3.org/1999/02/22-rdf-syntax-ns#> 
PREFIX rdfs: <http://www.w3.org/2000/01/rdf-schema#> 
PREFIX owl: <http://www.w3.org/2002/07/owl#> 


construct {<http://dbpedia.org/resource/Jupiter> ?o ?r. } 
{{ <http://dbpedia.org/resource/Jupiter> ?o ?r } 
    UNION 
{?o ?r <http://dbpedia.org/resource/Jupiter>}} 

내가 RDF 형식으로 Jupiter.rdf 파일 구조물 쿼리 결과를 작성하는 자바 프로그램을 작성하지만, 예외를 보여 주었다.

import java.io.BufferedWriter; 
import java.io.FileWriter; 
import java.io.IOException; 
import org.apache.jena.query.ParameterizedSparqlString; 
import org.apache.jena.query.QueryExecution; 
import org.apache.jena.query.QueryExecutionFactory; 
import org.apache.jena.query.QuerySolution; 
import org.apache.jena.query.ResultSetFactory; 
import org.apache.jena.query.ResultSetRewindable; 

public class Jupiter { 

    public static void main(String[] args) throws IOException { 

     ParameterizedSparqlString querystring = new ParameterizedSparqlString("" 
       + "construct {<http://dbpedia.org/resource/Jupiter> ?o ?r } where {{ <http://dbpedia.org/resource/Jupiter> ?o ?r } UNION" 
       + " {?r ?o <http://dbpedia.org/resource/Jupiter>}}"); 

     QueryExecution exec = QueryExecutionFactory.sparqlService("http://dbpedia.org/sparql", querystring.asQuery()); 

     ResultSetRewindable result = ResultSetFactory.makeRewindable(exec.execSelect()); 

     try (BufferedWriter bw = new BufferedWriter(new FileWriter("Jupiter.rdf"))) 

     { 

      while (result.hasNext()) { 

       QuerySolution querysolution = result.next(); 
       bw.write(querysolution.get("o").toString()); 
       bw.write(querysolution.get("r").toString()); 

      } 
      bw.flush(); 
      bw.close(); 

     } catch (Exception e) { 
      e.printStackTrace(); 
     } 

    } 
} 

을 그리고 예외가 이렇게이다 : 이런 일이 발생하는 이유

Exception in thread "main" org.apache.jena.sparql.resultset.ResultSetException: Not a string: key: value 
    at org.apache.jena.sparql.resultset.JSONInput.stringOrNull(JSONInput.java:230) 
    at org.apache.jena.sparql.resultset.JSONInput.parseOneTerm(JSONInput.java:201) 
    at org.apache.jena.sparql.resultset.JSONInput.parse(JSONInput.java:172) 
    at org.apache.jena.sparql.resultset.JSONInput.process(JSONInput.java:100) 
    at org.apache.jena.sparql.resultset.JSONInput.fromJSON(JSONInput.java:63) 
    at org.apache.jena.query.ResultSetFactory.fromJSON(ResultSetFactory.java:331) 
    at org.apache.jena.sparql.engine.http.QueryEngineHTTP.execResultSetInner(QueryEngineHTTP.java:385) 
    at org.apache.jena.sparql.engine.http.QueryEngineHTTP.execSelect(QueryEngineHTTP.java:351) 

당신은, 제발 말할 수는 다음과 같이 내 자바 코드는? 귀하의 도움을 크게 평가합니다

+4

SELECT 쿼리가 아닌 SPARQL CONSTRUCT 쿼리가 있습니다. 따라서,'exec.execConstruct()'를 호출하면 결과 집합 대신에 트리플을 포함하는'Model' 객체가 생성됩니다. – AKSW

+2

@AKSW 답변으로 게시해야한다고 생각합니다. – svick

답변

1

SELECT 쿼리가 아닌 SPARQL CONSTRUCT 쿼리가 있습니다. 따라서 에 전화하면 대신에 트리플이 포함 된 Model 개체가 반환됩니다.

관련 문제