rdf - 如何使用 SPARQL 查询从 owl 检索个体?

标签 rdf sparql jena

我可以使用以下查询从我的本体中检索个体:

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/

相关文章:

heap-memory - 使用 Jena/ARQ 在 sparql 查询到 D2R 之间等待 - 堆空间

java - 将 RDF-triple 添加到 owl 本体中 (OWL API 4.3.0)

rdf - RDF 中的空白节点

python - 如何在 Python 中使用 OAuth 对 Wikimedia Commons 查询服务进行身份验证?

lucene - Jena Text 查询性能在处理大型数据集时会急剧下降

java - 多个用户访问 RDF 文件进行读写

java - 将 OpenIE 三元组转换为 N-三元组 (NT)

c# - 如何使用 sparql 使用 dotNetRDF 库从我自己的 rdf 文件中查询?

SPARQL 查找孙子的数量

Maven:强制 Jersey 使用特定的 Artifact 版本