属性 路径的 SPARQL 查询不起作用

SPARQL Query with property path not working

我想进行如下查询:Select 所有三元组 (s,p,o) 如果存在从 s 到 [= 的长度至少为 2 条边的路径16=] 与 属性 p。所以路径的所有边缘都必须用 p 标记。 我尝试了以下方法:

select  ?s <http://dbpedia.org/ontology/isPartOf> ?o
WHERE { 
?s <http://dbpedia.org/ontology/isPartOf>{2,} ?o.
?s <http://dbpedia.org/ontology/isPartOf> ?o 
}

我用耶拿 API:

ParameterizedSparqlString parameterizedSparql = new ParameterizedSparqlString(model);
parameterizedSparql.setCommandText(sparql);
Query query = QueryFactory.create(parameterizedSparql.asQuery().toString(), Syntax.syntaxARQ);
QueryExecutionFactory.create(query, model).execSelect();

我使用了 Syntax.syntaxARQ,因此它应该理解 属性 路径。

它给我以下错误:

Exception in thread "main" org.apache.jena.query.QueryParseException: Encountered " "{" "{ "" at line 3, column 42.
Was expecting one of:
<IRIref> ...
<PNAME_NS> ...
<PNAME_LN> ...
<BLANK_NODE_LABEL> ...
<VAR1> ...
<VAR2> ...

你能告诉我如何正确地进行查询吗?

此外,正如@AKSW 指出的那样,{2,} 语法 from the SPARQL 1.1 Working Draft didn't make it into the final SPARQL 1.1 spec,因此您不能依赖每个 SPARQL 处理器都支持它。

可以use the {2,} syntax with Virtuoso, which is the engine powering the public DBpedia endpoint, but to do so through Jena, you have to either use "extended syntax" (Syntax.syntaxARQ) or bypass the ARQ parser.

您的直接问题似乎归结为耶拿中的错误,其中 ParameterizedSparqlString.asQuery() does not currently support "extended syntax" (Syntax.syntaxARQ) queriesparameterizedSparql.toString() 应该足够了,正如@AndyS 所评论的那样。