2014-09-02 2 views
1

Я новичок в Jena и SPAQL, пытаясь запустить jena в eclipse с помощью кода ниже, получая Query Parse Exception. Этот запрос выполняется штраф на http://dbpedia.org/sparqlJena queryParseException

Что я хочу Место рождения

Исключение

com.hp.hpl.jena.query.QueryParseException: Строка 1, столбец 84: Нерешенные приставкой имя: DBpedia филин: Birthplace

Запрос

PREFIX res: <http://dbpedia.org/resource/> 
SELECT DISTINCT ?string 
WHERE { 
    res:David_Cameron dbpedia-owl:birthPlace ?string . 
} 

Java Code

import org.apache.jena.atlas.logging.Log; 

import com.hp.hpl.jena.query.QueryExecution; 
import com.hp.hpl.jena.query.QueryExecutionFactory; 
import com.hp.hpl.jena.query.QuerySolution; 
import com.hp.hpl.jena.query.ResultSet; 
import com.hp.hpl.jena.sparql.engine.http.QueryExceptionHTTP; 

public class GetDateOfBirth { 
    private String service = null; 

    public GetDateOfBirth(String service) 
    { 
     this.service = service;  
    } 

    public void TestConnection(){ 
     QueryExecution qe = QueryExecutionFactory.sparqlService(service, "ASK {}"); 
     try{ 
      if(qe.execAsk()) 
      { 
       System.out.println(service + " is UP"); 
      } 
     }catch(QueryExceptionHTTP e){ 
      e.printStackTrace(); 
      System.out.println(service + "is Down"); 
     } 
     finally { 
      qe.close(); 
     } 
    } 
    public ResultSet executeQuery(String queryString) throws Exception { 
     QueryExecution qe = QueryExecutionFactory.sparqlService(service, queryString); 
     return qe.execSelect();   
    } 

    public static void main(String[] args) { 
     Log.setCmdLogging() ; 
     String sparqlService = "http://dbpedia.org/sparql"; 

     /* 
     * More query examples here: 
     * http://sparql.bioontology.org/examples 
     */ 
     String query = "PREFIX res: <http://dbpedia.org/resource/>" + 
         " SELECT ?dob WHERE { res:David_Cameron dbpedia-owl:birthPlace ?string .}"; 


     try { 
      GetDateOfBirth con= new GetDateOfBirth(sparqlService); 
      ResultSet results = con.executeQuery(query); 
      for (; results.hasNext() ;) { 
       QuerySolution soln = results.nextSolution() ; 
       System.out.println(soln.getResource("?dob").toString()); 
      } 
     } catch (Exception e) { 
        e.printStackTrace(); 
     } 


    } 

} 

ответ

4

Так же, как вы определяете префикс PREFIX res: <http://dbpedia.org/resource/>, необходимо указать префикс для dbpedia-owl. Используя DBPedia's Predefined Namespace Prefixes, я предполагаю, что обновленный запрос будет выглядеть следующим образом:

PREFIX res: <http://dbpedia.org/resource/> 
PREFIX dbpedia-owl: <http://dbpedia.org/ontology/> 
SELECT DISTINCT ?string 
WHERE { 
    res:David_Cameron dbpedia-owl:birthPlace ?string . 
} 
+1

@ineffablep Причины, по которой запрос работал на конечной точке DBpedia является то, что для удобства, веб-сайт конечных точек предопределена куча пространств имен, так что вы не необходимо ввести их. Вы можете увидеть их с конечной точки, следуя ссылке [Namespace Prefixes] (http://dbpedia.org/sparql?nsdecl). –