我要进行以下查询:选择所有三元组(s,p,o)
,如果存在一条路径,该路径的长度从s
到o
至少有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> ...
能否请您告诉我如何正确进行查询?
答案 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所评论。