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

标签 sparql rdf semantic-web

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

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

最佳答案

一些端点直接支持这个

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

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

引用资料和例子

有关如何使用此模式的更多示例,请查看:
  • Is it possible to get the position of an element in an RDF Collection in SPARQL?
  • Calculate length of path between nodes?
  • 关于sparql - SPARQL 1.1 中任意属性路径的边界,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/37489420/

    相关文章:

    sparql - 如何按限定符显示或过滤?

    日常应用程序中的 RDF、Triples 和语义网

    rdf - 文字是 RDF 资源吗?

    java - 当我使用 Model 作为返回类型启动 "@Web method"时出错

    sparql - 获取拥有不止一种官方语言的国家列表

    包含 Wikidata 上的子查询的 SPARQL 查询给出了意外结果

    .net - 下载和设置 dbpedia 转储

    encoding - Redland RDF 中 URI 的字符串表示形式的字符编码是什么?

    algorithm - 命名实体识别的排名算法有哪些,哪个最好?

    java - 如何在 java 中读取 .owl 文件并显示其内容?