2014-10-11 3 views
0

그래서 간단한 쿼리를 수행합니다. 내가 원하는 모든 uri/property/특정 dbpedia uri의 개체, 예 : http://dbpedia.org/resource/Roger_Federer. 문제는 결과 집합에서 볼 수 있듯이 단지 속성 만 반환한다는 것입니다.Sparql 쿼리가 uri/object를 반환하지 않습니다.

등급 :

public class SemanticCrawlerImpl implements SemanticCrawler { 
    public void search(Model graph, String resourceURI) { 
     graph.read(resourceURI); 

     // Create a new query 
     String queryString = 
      "SELECT ?url ?property ?object" + 
      "WHERE {" + 
      "  <"+resourceURI+"> ?property ?object ." + 
      "}"; 

     Query query = QueryFactory.create(queryString); 

     System.out.println("----------------------"); 

     System.out.println("Query Result Sheet"); 

     System.out.println("----------------------"); 

     // Execute the query and obtain results 
     QueryExecution qe = QueryExecutionFactory.create(query, graph); 
     com.hp.hpl.jena.query.ResultSet results = qe.execSelect(); 

     // Output query results  
     ResultSetFormatter.out(System.out, results, query); 

     qe.close(); 
    } 
} 

결과 집합

| url | property             | objectWHERE | 
================================================================================= 
|  | <http://dbpedia.org/property/medaltemplatesTitle>   |    | 
|  | <http://dbpedia.org/ontology/thumbnail>     |    | 
|  | <http://www.w3.org/2002/07/owl#sameAs>     |    | 
|  | <http://www.w3.org/2002/07/owl#sameAs>     |    | 
|  | <http://www.w3.org/2002/07/owl#sameAs>     |    | 
|  | <http://www.w3.org/2002/07/owl#sameAs>     |    | 
|  | <http://dbpedia.org/property/name>      |    | 
|  | <http://dbpedia.org/property/daviscupresult>    |    | 
|  | <http://www.w3.org/1999/02/22-rdf-syntax-ns#type>   |    | 
|  | <http://www.w3.org/1999/02/22-rdf-syntax-ns#type>   |    | 
|  | <http://dbpedia.org/property/hopmancupresult>    |    | 
|  | <http://dbpedia.org/ontology/wikiPageExternalLink>  |    | 
|  | <http://purl.org/dc/terms/subject>      |    | 
|  | <http://www.w3.org/2002/07/owl#sameAs>     |    | 
|  | <http://www.w3.org/1999/02/22-rdf-syntax-ns#type>   |    | 
|  | <http://purl.org/dc/terms/subject>      |    | 
|  | <http://www.w3.org/2002/07/owl#sameAs>     |    | 
|  | <http://www.w3.org/1999/02/22-rdf-syntax-ns#type>   |    | 
|  | <http://dbpedia.org/ontology/height>      |    | 
|  | <http://purl.org/dc/terms/subject>      |    | 
|  | <http://www.w3.org/2002/07/owl#sameAs>     |    | 
|  | <http://dbpedia.org/ontology/birthYear>     |    | 
+0

문자열 연결 '? object "+"WHERE'는'select? objectWHERE'를 주며'? objectWHERE' 변수를 사용하지 않습니다. 질의의'where'는 선택 사항입니다 (즉,'? a? b {...}'라고 쓰면 문제를 피할 수 있습니다.)하지만 어쨌든 질의 문자열에 줄 바꾸기를 사용해야합니다. 행 번호에 대한 더 나은 구문 오류 메시지 또한'< "+ resourceURI +">와 같은 문자열 연결은 오류가 발생하기 쉽기 때문에 ParameterizedSparqlString을 대신 사용해야합니다 .. –

답변

2

쿼리, 누락 된 공간에 오타가 있습니다. 출력은 "objectWHERE"가 아니라 "object"여야합니다. 또한 url 변수는 쿼리에서 사용하지 않으므로 필요하지 않습니다. 코드에서이 조각을 교체하고 작동합니다 : 당신이 먼저 로컬 리소스를 읽고 다음 로컬 그래프에 대한 SPARQL 쿼리를 실행하는 이유 또한

// Create a new query 
     String queryString = 
      "SELECT ?property ?object " + 
      "WHERE {" + 
      "  <"+resourceURI+"> ?property ?object ." + 
      "}"; 

     Query query = QueryFactory.create(queryString); 

을, 나는하지 않습니다. dbpedia 엔드 포인트에 대해 직접적으로 작업하지 않는 이유는 무엇입니까? 다음과 같음 :

String resourceURI = "http://dbpedia.org/resource/Roger_Federer"; 
String queryString = 
      "SELECT ?property ?object " + 
      "WHERE {" + 
      "  <"+resourceURI+"> ?property ?object ." + 
      "}"; 
Query query = QueryFactory.create(queryString); 
//System.out.println(queryIn); 
QueryExecution qe = QueryExecutionFactory.sparqlService("http://dbpedia.org/sparql", query); 
ResultSet results = qe.execSelect(); 
ResultSetFormatter.out(System.out, results, query); 
qe.close(); 

더 깨끗하다고 ​​생각합니다.

+0

Awesome! 그러면 주어진 결과 집합에 대해 다시 쿼리 할 수 ​​있습니까? 같은 : 올빼미 : sameAs 올빼미 :.. sameAs

+0

당신이 결과 집합에 변수를 쿼리하려면 '동안 (results.hasNext()) { QuerySolution는 QS의 = R과 같은 뭔가를해야 .next(); 리소스 변수 = qs.getResource ("? object"); } –

+0

당신이 당신의 코멘트에서 언급 한 것과 같은 질의를하고 싶다면, sparql 질의를'select? sameAs where where {{ owl : sameAs? sameAs.} UNION {? sameAs owl : sameAs }}'(귀하의 질문을 정확하게 이해 한 경우) –