SPARQL 查询未产生预期结果

2024-01-11

我使用此 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)
  • 第 3 行将结果限制为 Q6256 的实例,即国家/地区。
  • 第 4 行(当前已注释掉)将结果限制为 Q46 大陆(欧洲)上的项目。
  • 第 5 行(当前已注释掉)将结果限制为属于欧洲的项目,或者属于欧洲的某物的一部分,等等。
  • 第 6 行是一个 OR 子句,组合了第 4 行和第 5 行。

我正在运行查询,其中第 4-6 行之一处于活动状态,另外两行被注释掉。

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

  • 奥地利是 Q6256 的一个实例。
  • 奥地利的大陆(P30)是欧洲。
  • 奥地利是中欧 (Q27509) 的一部分,中欧是欧洲的一部分。

我究竟做错了什么?

这是相关查询 https://query.wikidata.org/#SELECT%20%3Fitem%20%24itemLabel%0A%20%20%20%20WHERE%20%7B%0A%20%20%20%20%20%20%20%20%3Fitem%20wdt%3AP31%20wd%3AQ6256.%0A%20%20%20%20%20%20%20%20%3Fitem%20wdt%3AP30%7Cwdt%3AP361%2A%20wd%3AQ46.%0A%20%20%20%20%20%20%20%20%23%3Fitem%20wdt%3AP30%20wd%3AQ46%0A%20%20%20%20%20%20%20%20%23%3Fitem%20wdt%3AP361%2A%20wd%3AQ46.%0A%20%20%20%20%20%20%20%20SERVICE%20wikibase%3Alabel%20%7B%20bd%3AserviceParam%20wikibase%3Alanguage%20%22en%22.%20%7D%0A%20%20%20%20%7D%0A%20%20%20%20ORDER%20BY%20ASC%28%24itemLabel%29%0A.


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

为了解决这个问题,我们可以查询作为国家或其子类实例的项目:

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

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

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

SPARQL 查询未产生预期结果 的相关文章

随机推荐