【发布时间】:2020-10-01 00:13:12
【问题描述】:
我需要一个返回特定 Wikidata ID 或 ID 列表的 SPARQL 查询。在现实生活中这样的查询是无用的,但我需要它来进行测试。
我能想到的最简单的变体是:
SELECT DISTINCT ?s
WHERE
{
?s ?p ?o
FILTER (?s = wd:Q151345).
}
我必须使用DISTINCT,因为?s ?p ?o 匹配Q151345 中的每个三元组,如果我省略它,它输出的项目是它所拥有的属性值对的数倍。
有没有更简单的方法?
【问题讨论】:
-
为什么不附加
LIMIT 1?不确定查询的目的是什么?只是为了检查是否有任何三重奏?什么是“更容易”?在什么方面?如果您只想检查是否有三元组,您还可以使用ASK {wd:Q151345 ?p ?o}返回一个布尔值。 -
就像我说的目的是测试,我需要在特定结果集而不是真实结果集上测试一些软件。但是treat更像是一个理论问题(因为我自己的解决方案实际上达到了我的目标)。更简单 == 更短,我一直在寻找像
{wd:Q151345 ?p ?o}这样的表单,但我不知道如何将第一个元素作为变量绑定到输出。 -
我的意思是,自 SPARQL 1.1 以来内联数据的最佳实践将通过
VALUES子句:select distinct ?s where {values ?s {wd:Q151345} ?s ?p ?o}- 但如果这对您来说“更容易”,我不确定。这只是当今常见的方式。 -
@StanislavKralin 我不知道我可以省略谓词和宾语。我删除了过滤器,这个表格似乎是最短的!
select ?s {values ?s {wd:Q1 wd:Q2}}.