SPARQL 查询未产生预期结果

SPARQL query does not yield expected results

我正在使用此 SPARQL 查询来获取欧洲国家列表:

SELECT ?item $itemLabel
    WHERE {
        ?item wdt:P31 wd:Q6256.
        #?item wdt:P30 wd:Q46
        #?item wdt:P361* wd:Q46.
        ?item wdt:P30|wdt:P361* wd:Q46.
        SERVICE wikibase:label { bd:serviceParam wikibase:language "en". }
    }
    ORDER BY ASC($itemLabel)

我是 运行 查询,第 4-6 行之一处于活动状态,其他两行已注释掉。

无论哪个谓词处于活动状态,奥地利都不是结果的一部分(也缺少其他国家/地区)。但是,查看 https://www.wikidata.org/wiki/Q40,我们可以看到

我做错了什么?

这是relevant query

奥地利实际上并未声明为国家 (Q6256) 的实例。它被声明为主权国家(Q3624078)的一个实例,它是国家的一个子类(P279)。可以在奥地利页面上看到的与国家的实例关系是推断的,并且在查询时不可用。

要解决此问题,我们可以查询属于国家或其子类实例的项目:

?item wdt:P31/wdt:P279* wd:Q6256.

不幸的是,这也会拉入历史国家,因此查询将需要一些额外的工作来过滤掉那些国家(例如,使用 FILTER NOT EXISTS { ... })。它还需要 SELECT DISTINCT.