2014-01-09 1 views
1

Java Sesame 및 SPARQL을 처음 사용했습니다. 참깨 저장소에 진술을 추가했으며 이제는 진술을 검색하고 단순히 인쇄하려고합니다. 검색된 문을 인쇄하려면 쿼리를 구문 분석해야한다는 것을 알고 있어야합니다. 내가 지금까지 도달 보여줍니다 아래의 코드 :쿼리를 실행 한 후 SPARQL에서 검색된 명령문을 인쇄하는 방법

StatementPattern 
Var (name=name) 
Var (name=-const-1, value=http://example.org/is, anonymous) 
Var (name=object) 

출력에 따르면, 그것은 나에게 주체와 객체가 표시되지 않습니다 : 여기에

String queryString = "SELECT ?subject ?object WHERE { ?subject <http://example.org/is> ?object . } LIMIT 1"; 
... 
SPARQLParser parser = new SPARQLParser(); 
ParsedQuery query = parser.parseQuery(queryString, null); 

StatementPatternCollector collector = new StatementPatternCollector(); 
query.getTupleExpr().visit(collector); 

List<StatementPattern> patterns = collector.getStatementPatterns(); 
// To print the first statement only for example. 
System.out.println(patterns.get(0)); 

이 출력됩니다. 내 질문은 : 어떻게 위와 같이 쿼리 결과를 인쇄 할 수 있습니다. 이 코드는 나중에 문을 인쇄하기위한 쿼리를 구문 분석하는 올바른 방법입니다. 귀하의 도움은 대단히 감사하겠습니다.

+0

쿼리의 결과는 일련의 명령문이 아니라 변수 바인딩의 집합이며, 각각은'? subject' 및'? object' 변수에 대한 바인딩을 제공 할 수 있습니다. –

+0

이 경우 결과를 인쇄 할 가능성이 있습니까? – user2864315

답변

2

에 의해 쿼리 결과를 얻습니다.이 쿼리는 구문 분석이 아니라입니다. 귀하의 코드는 쿼리의 대수 모델을 검사하고 그 대수에서 패턴을 검색합니다. 이 접근 방식은 쿼리 결과를 제공하지 않습니다. 참깨에서 쿼리를 평가

이보다 훨씬 간단하다 : 여호수아가 지적

// open a connection to the Sesame repository containing your statements 
RepositoryConnection conn = repository.getConnection(); 
try { 
    // create a prepared query object from your query string 
    TupleQuery query = conn.prepareTupleQuery(QueryLanguage.SPARQL, queryString); 

    // evaluate the query on the repository 
    TupleQueryResult result = query.evaluate(); 

    // iterate over the results and do something with each result 
    while (result.hasNext()) { 
      BindingSet s = result.next(); 
      Value subject = s.getValue("subject"); 
      Value object = s.getValue("object"); 

      System.out.println("value of ?subject: " + subject); 
      System.out.println("value of ?object: " + object); 
    } 
} finally { 
     conn.close(); 
} 

으로, 쿼리에 변수 바인딩을 검색하지 RDF 문 (당신의 SELECT 절에 언급 된 변수). 물론 Java에서 이러한 변수 바인딩을 사용하여 RDF 문을 다시 작성할 수는 있지만 주제와 객체가 아니라 전체 문을 실제로 사용하려는 경우 SELECT 쿼리 대신 SPARQL CONSTRUCT 쿼리를 사용하는 것이 더 쉽습니다.

다양한 종류의 쿼리를 평가하고 참깨에서 결과를 처리하는 방법에 대한 자세한 내용은 Sesame user documentation (특히 섹션 6.5) 및 API Javadoc을 참조하십시오.

+0

도움 주셔서 대단히 감사합니다. 이것이 제가 원했던 것입니다. 저는 성명서 자체를 찾아서 인쇄하기를 원했습니다. – user2864315