【问题标题】:SPARQL Path between two nodes两个节点之间的 SPARQL 路径
【发布时间】:2017-04-10 07:55:52
【问题描述】:

给定一个图表:

@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

【问题讨论】:

  • 使用哪个 API/triple store?
  • 附带说明,您应该“修复”daon 的前缀声明,即附加 /#
  • @AKSW,对于分隔符,谢谢,对于 API,它是 Jena

标签: sparql apache-jena propertypath


【解决方案1】:

由于某种原因,未按预期评估属性路径。我尝试了更简单的查询:

  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>))

看起来像一个错误,但我可能确实错了。我会在 Jena 邮件列表上询问,稍后在此处发布答案。

更新:

问题在于对象本身接地时的否定 - 由于反向​​运算符^,这里就是这种情况。根据@AndyS 的评论,这个错误将在 Apache Jena 3.3.0 中修复。见JENA-1317

【讨论】:

猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2021-12-18
  • 2016-03-04
  • 2012-05-21
  • 2010-10-17
  • 1970-01-01
  • 2023-01-15
相关资源
最近更新 更多