4

这个 SPARQL 请求在 Wikidata 中查找所有名为“Berlin”的城市:

SELECT DISTINCT ?item ?itemLabel ?itemDescription WHERE {

  ?type (a | wdt:P279) wd:Q515. # Sub-type of city
  ?item wdt:P31 ?type.

  ?item rdfs:label "Berlin"@en.
  SERVICE wikibase:label { bd:serviceParam wikibase:language "en". }
}

问题:它返回零结果

同时,下面的请求正确地找到了Q64(德国的首都和城邦),但它也返回了很多其他称为柏林的东西,所以我想过滤城市(然后在未来阶段,我将按人口对这些城市进行排序,但这超出了这个问题的范围)

SELECT DISTINCT ?item ?itemLabel ?itemDescription WHERE {
  ?item rdfs:label "Berlin"@en.
  SERVICE wikibase:label { bd:serviceParam wikibase:language "en". }
}

注意:我的获取 city 子类实例的代码(柏林是一个大城市,它是 city 的子类似乎可以正常工作,如该查询的结果所示。

4

3 回答 3

4

这是一个维基数据错误。

根据 Wikidata 的Jura1,这是 Wikidata 中的一个错误,由某人的“首选等级”实验引起。

讨论https://www.wikidata.org/wiki/Wikidata:Project_chat/Archive/2016/09#P31_inconsistency

刚刚修复了这个bug。

于 2016-09-28T07:01:51.633 回答
1

如果您检查类型 wd:Q64 是

SELECT DISTINCT   ?type  ?typeLabel WHERE {
wd:Q64 (a | wdt:P31) ?type.
SERVICE wikibase:label { bd:serviceParam wikibase:language "en". }
}
ORDER BY ?item

它们都不是 City (wd:Q515) 或其子类。看起来是数据问题。也许你应该联系维基数据。

于 2016-09-27T11:17:22.047 回答
1

您只能查询数据集中包含的数据。

如果您尝试替代查询

SELECT DISTINCT ?item ?itemLabel ?itemDescription ?type1 ?type2 WHERE {
  ?item rdfs:label "Berlin"@en.
  optional{?item rdf:type ?type1 }
  optional{?item wdt:P279 ?type2 }
  SERVICE wikibase:label { bd:serviceParam wikibase:language "en". }
}

它不返回任何类型,既不通过rdf:type也不连接wdt:P279

如果您查看首都和城市国家 Berlin 的实体,您可以看到有关于“instance of”的信息,但该属性应该是https://www.wikidata.org/wiki/Property:P31. 而且他们都没有链接到wd:Q515,我想知道你从哪里得到这个想法。

但老实说,我对 Wikidata 了解不多,对我来说,不清楚为什么rdf:type使用 no,但 RDF 数据集的常见模式是使用

?s rdf:type/rdfs:subClassOf* SUPER_CLASS .

如果我们假设有rdf:type可用的信息。

于 2016-09-27T11:05:14.887 回答