Sparql 在Wikidata中按类型筛选

Sparql 在Wikidata中按类型筛选,sparql,wikidata,Sparql,Wikidata,此SPARQL请求查找Wikidata中名为“柏林”的所有城市: 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

此SPARQL请求查找Wikidata中名为“柏林”的所有城市:

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(德国首都和城邦)下的请求也返回了许多其他称为柏林的东西,因此我想筛选城市(然后在未来阶段,我将按人口排序这些城市,但这超出了本问题的范围):


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

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

如果您尝试另一种查询方式

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
连接

如果查看,可以看到关于“的实例”的信息,但该属性应该是
https://www.wikidata.org/wiki/Property:P31
。它们都没有链接到
wd:Q515
,我想知道你是从哪里得到这个想法的

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

?s rdf:type/rdfs:subassof*SUPER\u CLASS.


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

如果您检查类型wd:Q64是

SELECT DISTINCT   ?type  ?typeLabel WHERE {
wd:Q64 (a | wdt:P31) ?type.
SERVICE wikibase:label { bd:serviceParam wikibase:language "en". }
}
ORDER BY ?item
它们都不是城市(wd:Q515)或它的一个子类。 看起来像是数据问题。也许你应该联系Wikidata

这是一个维基数据错误

根据维基数据公司的说法,这是维基数据中的一个bug,是由某人的“首选等级”实验引起的

讨论


这个错误刚刚被修复。

@谁给了我否决票:我对否决票很满意,但如果我能知道否决的原因,这会对我有很大帮助,这样我就可以扩展我的知识并改进未来的答案。我不是否决票的人。注:柏林是大城市的一个例子,它本身就是城市的一个子类。谢谢你的提示。与传统的RDF/RDF(如
RDF:type
RDFS:subassof
)相比,我还需要了解更多关于Wikidata中使用的不同实体的信息。柏林是大城市的一个例子,而大城市本身就是城市的一个子类。所以我不认为有任何数据问题。你在哪里看到的?运行上面的查询,我只得到两个结果,它们都不是大城市。(wd:Q1549591)。同时在另一个城市(如波士顿)运行您的原始查询,我会得到预期结果。我们中的一个人遗漏了一些明显的东西。可能是我。在搜索“大城市”,然后注意Ok的“子类”,很好,它现在可以工作了。作为一个注释,您正在查询city的直接子类。如果您使用SPARQL 1.1属性路径,您可以涵盖实体不属于city的直接子类的情况。@AKSW:的确,从现在起,我也将使用此语法递归获取所有子类:干杯!
SELECT DISTINCT   ?type  ?typeLabel WHERE {
wd:Q64 (a | wdt:P31) ?type.
SERVICE wikibase:label { bd:serviceParam wikibase:language "en". }
}
ORDER BY ?item