在维基数据中按类型过滤

时间:2016-09-27 09:41:03

标签: sparql wikidata

此SPARQL请求会查找所有名为" Berlin"在维基数据中:

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

问题:tagged as wontfix

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

{{1}}

注意:我的获取城市子类实例的代码(柏林是correctly findsbig city的子类)似乎工作正常,如city的结果所示。

3 个答案:

答案 0 :(得分:4)

这是一个维基数据错误。

根据维基达的Jura1,这是维基百科中的一个错误,是由于某人使用"首选等级"进行的实验。

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

的讨论

这个bug现在已经修复了。

答案 1 :(得分: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:typewdt:P279连接。

如果您查看entity of the capital and city state Berlin,可以看到有关“实例”的信息,但此属性应为https://www.wikidata.org/wiki/Property:P31。并且没有一个链接到wd:Q515,我想知道你从哪里得到这个想法。

但说实话,我不太了解维基数据和我,不清楚为什么没有使用rdf:type,但RDF数据集的常用模式是使用

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

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

答案 2 :(得分: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)或它的子类。 看起来像数据问题。也许你应该联系维基数据。