SPARQL 两个节点之间的路径

标签 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:Jame​​s之间有一条路径,即da:Noor ^on:friend/on:sister/on:sister da :Jame​​s . 但以下查询返回 false

PREFIX da:    <http://example.com/data/> 
PREFIX on:    <http://example.com/on/> 
ASK {
  da:Noor ((<>|!<>)|^(<>|!<>))* da:James .
}

Jena 可能存在 bug,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>))

看起来像一个错误,但我可能确实错了。我将在耶拿邮件列表上询问,然后将答案发布在这里。

更新:

问题在于当对象本身接地时的否定 - 这是由于反向运算符 ^ 造成的情况。根据 @AndyS 的评论,此错误将在 Apache Jena 3.3.0 中修复。请参阅JENA-1317

关于SPARQL 两个节点之间的路径,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/43317635/

相关文章:

group-by - Sparql:如何对多列进行分组

owl - 在 OWL 本体中使用自定义规则进行分类

SPARQL 属性路径

sparql - SPARQL 1.1 中的属性路径过滤器

sparql - 本体 : Inferred superclass of individual

SPARQL "ASK"查询以检查两个类之间是否存在对象属性(不是黑白个体)

rdf - 尝试理解 Jena 类层次结构

java - 针对 Jena 数据集默认图的 SPARQL 查询

sparql - 来自 dbpedia 的简单 sparql 查询