属性路径不工作的SPARQL查询

属性路径不工作的SPARQL查询,sparql,jena,propertypath,Sparql,Jena,Propertypath,我想进行以下查询:如果存在一条路径,该路径的长度至少为2条边,从s到o,并且属性为p,则选择所有三元组(s,p,o)。因此,路径的所有边都必须标记为p。 我尝试了以下方法: select ?s <http://dbpedia.org/ontology/isPartOf> ?o WHERE { ?s <http://dbpedia.org/ontology/isPartOf>{2,} ?o. ?s <http://dbpedia.org/ontology/isPa

我想进行以下查询:如果存在一条路径,该路径的长度至少为2条边,从
s
o
,并且属性为
p
,则选择所有三元组
(s,p,o)
。因此,路径的所有边都必须标记为
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 
}
我使用了
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> ...
线程“main”org.apache.jena.query.QueryParseException中的异常:在第3行第42列遇到“{”{”。 我期待的是: ... ... ... ... ... ...
您能告诉我如何正确地进行查询吗?

此外,正如@AKSW所指出的,
{2,}
语法没有将其纳入,因此您不能依赖每个SPARQL处理器都支持它

可以,这是引擎的动力,但要通过Jena实现,必须使用“扩展语法”(
syntax.syntaxARQ
)或


似乎您的直接问题归结为Jena中的一个bug,正如@AndyS所评论的那样,
参数化sparql.toString()
应该足够了。

您不能使用
{2,}
-此功能从未出现在中,只是在中进行了讨论。除此之外的任何功能都是特定于实现的,因此,取决于三重存储。显而易见的解决方法是使用与“2或更多”建议相同的序列
/+//code>:打印并检查
parameterizedSparql.asQuery().toString()的语法<代码> >选择> s?o < /代码>不做你可能认为它做的事。相反,尝试<代码> >选择(s)(as p)o o/c>……并考虑一个单行图模式,而不是代码> { 1,} /代码>,而不是上面的两行模式。<代码>参数化SPARQLSTROR.ASQUILY()/代码>不需要。只使用<代码>参数化SPARQL。toSTRIN()
参数化SPARQLSTRING.asQuery
不适用于扩展语法查询。
{2,}
在ApacheJena中解析为
syntax.syntaxARQ
时确实有效。您可以在上尝试。上面的代码不是直接调用DBPedia,而是本地查询执行。@AndyS-我猜“SPARQL扩展语法”的意思是“解析为
Syntax.syntaxARQ
”?我想知道Jena的一些旧版本是否会传递OP报告的错误,即使使用
Syntax.syntaxARQ
活动,正如所报告的一样?
{2,}
已经存在了很长一段时间。
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> ...