维基数据 SPARQL:有子 classes 但也有 return 父 class

Wikidata SPARQL : get subclasses but also return parent class

我在维基数据实体上编写 SPARQL 查询,我想获取所有匹配“是实体 Q3 或其子类之一”的实体。

我知道如何仅通过以下查询获取子类:

SELECT DISTINCT ?item
WHERE {
{ ?item wdt:P279 wd:Q3 . }
SERVICE wikibase:label { bd:serviceParam wikibase:language "en". }
}

但我还想在响应中包含原始父实体(此处 Q3)。我应该如何修改我的查询以便 Q3 也返回?

为了获得匹配某物的实体,您将需要使用 wdt:P31,即“实例”。 wdt:P279 是“

的子类

根据你的查询,我会使用这样的东西:

SELECT DISTINCT ?itemLabel ?superClassLabel
WHERE {
 ?item wdt:P31/wdt:P279* ?superClass 
    VALUES ?superClass {wd:Q3}

SERVICE wikibase:label { bd:serviceParam wikibase:language "en". }
}

我最终自己找到了解决方案: 我需要在查询中的 属性 之后添加一个 ?(意思是“0 或 1”)。

所以它变成了:

SELECT DISTINCT ?item
WHERE {
{ ?item wdt:P279? wd:Q3 . } # here is the extra "?" after "wdt:P279"
SERVICE wikibase:label { bd:serviceParam wikibase:language "en". }
}

现在这个 returns Q3 及其所有子类。