2012-10-21 38 views
2

我可以檢索使用下面的查詢從我個人的本體:如何使用SPARQL查詢從貓頭鷹中檢索個人?

SELECT ?indiv WHERE { ?indiv rdf:type:Fruit } 

我得到的結果,如蘋果,橘子等,但是當我用Java寫了這個查詢,我得到以下異常:

Exception in thread "main" com.hp.hpl.jena.query.QueryParseException: Encountered " "}" "} "" at line 4, column 41. 
Was expecting one of: 
    <IRIref> ... 
    <PNAME_NS> ... 
    <PNAME_LN> ... 
    <BLANK_NODE_LABEL> ... 
    <VAR1> ... 
    <VAR2> ... 
    "true" ... 
    "false" ... 
    <INTEGER> ... 
    <DECIMAL> ... 
    <DOUBLE> ... 
    <INTEGER_POSITIVE> ... 
    <DECIMAL_POSITIVE> ... 
    <DOUBLE_POSITIVE> ... 
    <INTEGER_NEGATIVE> ... 
    <DECIMAL_NEGATIVE> ... 
    <DOUBLE_NEGATIVE> ... 
    <STRING_LITERAL1> ... 
    <STRING_LITERAL2> ... 
    <STRING_LITERAL_LONG1> ... 
    <STRING_LITERAL_LONG2> ... 
    "(" ... 
    <NIL> ... 
    "{" ... 
    "[" ... 
    <ANON> ... 
    "+" ... 
    "*" ... 
    "/" ... 
    "|" ... 
    "?" ... 

at com.hp.hpl.jena.sparql.lang.ParserSPARQL11.perform(ParserSPARQL11.java:87) 
at com.hp.hpl.jena.sparql.lang.ParserSPARQL11.parse(ParserSPARQL11.java:40) 
at com.hp.hpl.jena.query.QueryFactory.parse(QueryFactory.java:132) 
at com.hp.hpl.jena.query.QueryFactory.create(QueryFactory.java:69) 
at com.hp.hpl.jena.query.QueryFactory.create(QueryFactory.java:40) 
at com.hp.hpl.jena.query.QueryFactory.create(QueryFactory.java:28) 

我的代碼是:

String queryString = " PREFIX ont: <http://www.owl-ontologies.com/fruitOntology.owl#> 
PREFIX rdf: <http://www.w3.org/1999/02/22-rdf-syntax-ns#> 
PREFIX rdfs: <http://www.w3.org/2000/01/rdf-schema#> 
SELECT ?indiv WHERE { ?indiv ont:Fruit } "; 

Query query = QueryFactory.create(queryString) ; 
QueryExecution qexec = QueryExecutionFactory.create(query, m) ; 
try { 
    ResultSet results = qexec.execSelect() ; 
    for (; results.hasNext() ;) 
    { 
    QuerySolution soln = results.nextSolution() ; 
    Resource y = soln.getResource("y") ; 
    Resource x = soln.getLiteral("x") ; 
    System.out.println(y.getLocalName()+" = "+x.getString()) ; 
    } 
} 
catch(Exception e){ 
} 

回答

2

這是非法的SPARQL語法。你想要的東西是:

PREFIX .... 
SELECT ?indiv WHERE { ?indiv rdf:type ont:Fruit } 

RDF是三元組;感興趣的三重模式是predciate是rdf:type。需要分離圖案的3個部分的空間。

+0

現在我沒有得到任何例外。但是我沒有得到任何結果......你對這是爲什麼嗎? – Rosh

+2

可能因爲要麼沒有人直接聲稱是類型:水果。此外,如果你說過A,B和C是蘋果,而所有蘋果都是水果,那麼你需要確保你使用某種推理器來取回A,B和C都是水果的事實憑藉他們是蘋果的事實。 – Michael