SPARQL两个节点之间的路径

时间:2017-04-10 07:55:52

标签: sparql apache-jena propertypath

给出一个图表:

@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:Noorda: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

1 个答案:

答案 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