【问题标题】:Filter by type in Wikidata在维基数据中按类型过滤
【发布时间】:2018-04-23 03:18:27
【问题描述】:

此 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". }
}

问题:它returns zero result

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

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

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

【问题讨论】:

    标签: sparql wikidata


    【解决方案1】:

    这是一个 Wikidata 错误。

    根据维基数据的Jura1,这是维基数据中的一个错误,由某人的“优先排名”实验引起。

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

    刚刚修复了这个bug。

    【讨论】:

    • 好的,现在可以使用了。就像评论一样,您在查询中要求 city 的直接子类。如果您使用 SPARQL 1.1 属性路径,则可以涵盖实体不属于 city 的直接子类的情况。
    • @AKSW:确实,从现在开始我也将使用这种语法递归地获取所有子类:opendata.stackexchange.com/a/9743/754 Cheers!
    【解决方案2】:

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

    如果您尝试替代查询

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

    如果你看一下entity of the capital and city state Berlin,你可以看到有关于“instance of”的信息,但是这个属性应该是https://www.wikidata.org/wiki/Property:P31。而且他们都没有链接到wd:Q515,我想知道你是从哪里得到这个想法的。

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

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

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

    【讨论】:

    • @whoever 给了我反对票:我对反对票很满意,但如果我能知道原因,这将对我有很大帮助,这样我就可以扩展我的知识并改进未来的答案。
    • 我不是投反对票的人。注意:柏林是大城市的一个实例,它本身就是城市的一个子类。
    • 感谢您的提示。与良好的旧 RDF/RDFS(如 rdf:typerdfs:subClassOf)相比,我仍然需要了解更多关于 Wikidata 中使用的不同实体的信息。
    【解决方案3】:

    如果你检查类型 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) 或其子类。 看起来是数据问题。也许你应该联系维基数据。

    【讨论】:

    • 柏林是大城市的一个实例,它本身就是城市的一个子类。所以我认为没有任何数据问题。
    • 你在哪里看到这个?
    • 运行上面的查询我只得到 2 个结果,它们都不是大城市。 (wd:Q1549591)。还使用另一个城市运行您的原始查询,例如波士顿 我得到了预期的结果。我们中的一个人缺少一些明显的东西。可能是我。
    • wikidata.org/wiki/Q64 搜索“大城市”,然后注意wikidata.org/wiki/Q1549591 的“子类”
    猜你喜欢
    • 2017-08-06
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2021-12-17
    • 1970-01-01
    • 2021-11-15
    • 1970-01-01
    • 2020-09-11
    相关资源
    最近更新 更多