给出一个图表:
@prefix da: <http://example.com/data/> .
@prefix on: <http://example.com/on/> .
da:Shenaz on:husband da:Javed .
da:Rita on:friend da:Noor ;
on:sister da:Tom .
da:Noor on:sister da:Shenaz .
da:Javed on:child da:Jaabir .
da:Tom on:sister da:James .
da:Jaabir on:grandFather da:Rafick .
da:Noor
和da:James
之间的路径为da:Noor ^on:friend/on:sister/on:sister da:James .
,但以下查询返回false
PREFIX da: <http://example.com/data/>
PREFIX on: <http://example.com/on/>
ASK {
da:Noor ((<>|!<>)|^(<>|!<>))* da:James .
}
这是Jena中可能存在的错误,在Python中使用RDFLib,返回True
答案 0 :(得分:3)
由于某种原因,未按预期评估属性路径。我用更简单的查询尝试了它:
PREFIX : <http://ex.org/>
PREFIX da: <http://example.com/data/>
SELECT ?u
WHERE
{ da:Noor ^(:p1|!:p1) ?u }
代数看起来没问题,即路径反转:
(project (?u)
(path ?u (alt <http://ex.org/p1> (notoneof <http://ex.org/p1>)) <http://example.com/data/Noor>))
看起来像一个错误,但我可能确实是错的。我会在耶拿邮件列表上询问,然后在这里发布答案。
当对象本身接地时,问题是否定 - 由于反向运算符^
,这就是这种情况。按照@ AndyS&#39;评论,这个bug将在Apache Jena 3.3.0中修复。见JENA-1317