我可以使用以下查询从我的本体中检索个体:
SELECT ?indiv WHERE { ?indiv rdf:type:Fruit }
我得到了 Apple、Orange 等结果,但是当我用 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){
}
最佳答案
这是非法的 SPARQL 语法。你想要这样的东西:
PREFIX ....
SELECT ?indiv WHERE { ?indiv rdf:type ont:Fruit }
RDF 是三元组;感兴趣的三元组模式是谓词为 rdf:type 的地方。需要用空格来分隔图案的 3 个部分。
关于rdf - 如何使用 SPARQL 查询从 owl 检索个体?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/12995110/