【问题标题】:boundary for arbitrary property path in SPARQL 1.1SPARQL 1.1 中任意属性路径的边界
【发布时间】:2016-05-27 17:40:01
【问题描述】:

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

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

【问题讨论】:

    标签: sparql rdf semantic-web


    【解决方案1】:

    一些端点直接支持这个

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

    ?s :p{n,m} ?o
    

    将是一条长度在 n 和 m 之间的路径。 SPARQL 1.1 Property Paths: W3C Working Draft 26 January 2010 中描述了该语法。还支持精确长度、最小长度和最大长度。无论好坏,该语法都没有成为最终的 SPARQL 1.1 标准。一些 SPARQL 端点仍然会接受它,所以值得一试。

    一般解决方法

    但是有一个解决方法。这个想法是将候选路径分成两部分。通过检查可以将其分成两部分的多少种方式,您可以找到路径的长度。也就是说,您可以执行以下操作,例如,找到 ?s 和 ?p ,它们由长度为 10 的路径连接:

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

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

    参考和示例

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

    【讨论】:

    • 谢谢。 Jena 似乎支持您的查询。它也非常昂贵。为什么不使用 + 而不是 * ?
    • @JavaDeveloper 如果您愿意,可以使用 +,但如果您正在寻找长度为 1 的路径,请确保您没有完成 ?s :p+ ?mid . ?mid :p+ ?o,因为这将需要路径长度至少为 2。我认为 Jena 可能也支持 {n,m} 表示法,但您可能必须将其置于“启用扩展”模式。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2021-04-06
    • 2017-05-29
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2021-02-18
    相关资源
    最近更新 更多