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

时间:2019-04-22 12:31:37

标签: sparql jena propertypath

我要进行以下查询:选择所有三元组(s,p,o),如果存在一条路径,该路径的长度从so至少有2个边,且该属性具有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 
}

我使用Jena 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> ...

能否请您告诉我如何正确进行查询?

1 个答案:

答案 0 :(得分:1)

此外,正如@AKSW指出的那样,{2,}语法from the SPARQL 1.1 Working Draft并未纳入the final SPARQL 1.1 spec中,因此您不能依靠每个SPARQL处理器都支持它。 / p>

可以 use the {2,} syntax with Virtuoso,它是the public DBpedia endpoint的引擎动力,但是要通过耶拿实现,您必须使用“扩展语法”({{1} })或bypass the ARQ parser

您的直接问题似乎归结于耶拿(Jena)的一个错误,其中ParameterizedSparqlString.asQuery() does not currently support "extended syntax" (Syntax.syntaxARQ) queries; {@ {1}}就足够了,如@AndyS所评论。