两个节点之间的 SPARQL 路径
SPARQL Path between two nodes
给定一张图:
@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
由于某种原因,属性 路径未按预期进行评估。我尝试了更简单的查询:
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 邮件列表上询问,然后在 post 上询问答案。
更新:
问题在于对象本身接地时的否定 - 由于反向运算符 ^
,这里就是这种情况。根据@AndyS 的评论,此错误将在 Apache Jena 3.3.0 中修复。参见 JENA-1317
给定一张图:
@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
由于某种原因,属性 路径未按预期进行评估。我尝试了更简单的查询:
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 邮件列表上询问,然后在 post 上询问答案。
更新:
问题在于对象本身接地时的否定 - 由于反向运算符 ^
,这里就是这种情况。根据@AndyS 的评论,此错误将在 Apache Jena 3.3.0 中修复。参见 JENA-1317