我正在使用此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。
答案 0 :(得分:2)
实际上未将奥地利声明为国家/地区的实例(Q6256)。它被声明为主权国家(Q3624078)的实例,主权国家是国家的子类(P279)。可以推断出在奥地利页面上可以看到的与国家的实例关系,查询时不可用。
要解决此问题,我们可以查询属于国家或其子类实例的项目:
?item wdt:P31/wdt:P279* wd:Q6256.
不幸的是,这也会拉入历史国家,因此查询将需要一些额外的工作来将其过滤掉(例如,使用FILTER NOT EXISTS { ... }
)。它还需要SELECT DISTINCT
。