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'。
这个技巧适用于相对较短的路径。
假设我想查询 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'。
这个技巧适用于相对较短的路径。