Sparql - 如何使用正则表达式指定 属性 路径

Sparql - How to specifiy Property paths with regex

假设我想查询 Otto Bismarck 的所有后代,直到第 3 代。 我如何用正则表达式编写 sparql 代码?在这个 tutorial 中说我们可以使用正则表达式,但我不知道如何使用。

我尝试使用“{3}”:

SELECT ?descendant ?descendantLabel
WHERE
{
  wd:Q8442 wdt:P40{3} ?descendant.
  SERVICE wikibase:label { bd:serviceParam wikibase:language "en". }
} 

但是,这不起作用。输出应该是这样的: try here

无法使用 REGEX 编写查询,但 REGEX 语法看起来类似于 属性 路径,因此您可能会感到困惑。

至于长度最多为 3 的路径,您使用的语法实际上并没有出现在标准中,尽管它确实出现在一些文档中。

我会使用类似的东西:

SELECT DISTINCT ?descendant ?descendantLabel
WHERE
{
  wd:Q8442 wdt:P40/wdt:P40?/wdt:P40? ?descendant.
  SERVICE wikibase:label { bd:serviceParam wikibase:language "en". }
} 

这将为我们提供长度为 1、2 和 3 的路径。? 表示 属性 的 'zero or one instances'。 这个技巧适用于相对较短的路径。