SPARQL 1.1中任意属性路径的边界

时间:2016-05-27 17:40:01

标签: sparql rdf semantic-web

是否可以限制属性路径的长度?例如,获取长度介于(m,n)之间的所有三元组或所有不在此范围之间的三元组?例如,如何使用以下查询完成此操作?

select ?x ?y
where {?x p* ?y}

1 个答案:

答案 0 :(得分:4)

某些端点直接支持

某些SPARQL引擎支持使用类似正则表达式的语法直接执行此操作的方法。例如,

?s :p{n,m} ?o

将是长度在n和m之间的路径。该语法在SPARQL 1.1 Property Paths: W3C Working Draft 26 January 2010中描述。还支持精确长度,最小长度和最大长度。更糟糕的是,该语法没有进入最终的SPARQL 1.1标准。一些SPARQL端点仍然会接受它,所以值得尝试。

一般解决方法

但有一个解决方法。我们的想法是将候选路径分成两部分。通过检查可以分成两部分的方式,您可以找到路径的长度。也就是说,你做这样的事情,例如,找到?和?p,它们通过长度为10的路径连接起来:

select ?s ?o {
  ?s :p* ?mid .
  ?mid :p* ?o .
}
group by ?s ?o
having (count(?mid) = 10)

如果使用此方法,请务必检查实际计数。根据您想要计算长度的方式,很容易得到一个(或两个)错误。有几个选项(是否计算属性或节点,是否计算端点等),因此需要进行一些实验。

参考文献和实例

有关如何使用此模式的更多示例,请查看: