【问题标题】:Wikidata SPARQL queries returning different results after filtering for English labels过滤英文标签后返回不同结果的 Wikidata SPARQL 查询
【发布时间】:2020-05-11 03:15:22
【问题描述】:

我对 Wikidata SPARQL 查询的理解是,您可以在two ways 中过滤英文标签的结果。

  1. 添加SERVICE wikibase:label { bd:serviceParam wikibase:language "en" }调用标签服务;或
  2. 为每个输出标签添加?thing rdfs:label ?thingLabel FILTER (lang(?thingLabel) = "en")

我正在运行一个查询,试图以英语获取实体的所有属性。我关注了Stackoverflow post 并提出了两个问题。

查询 1:Running this query 返回 47 个结果。

SELECT ?itemLabel ?propLabel ?statement_property_objLabel
WHERE {

    VALUES (?item) {(wd:Q24)}

    ?item ?property [?statement_property ?statement_property_obj] .
    ?prop wikibase:claim ?property.
    ?prop wikibase:statementProperty ?statement_property.

    # Call label service.
    SERVICE wikibase:label { bd:serviceParam wikibase:language "en" }

} ORDER BY ?propLabel

查询 2:Running this query 返回 35 个结果。

SELECT ?itemLabel ?propLabel ?statement_property_objLabel
WHERE {

    VALUES (?item) {(wd:Q24)}

    ?item ?property [?statement_property ?statement_property_obj] .
    ?prop wikibase:claim ?property.
    ?prop wikibase:statementProperty ?statement_property.

    # Call label service for each label.
    ?item rdfs:label ?itemLabel FILTER (lang(?itemLabel) = "en") .
    ?statement_property_obj rdfs:label ?statement_property_objLabel FILTER (lang(?statement_property_objLabel) = "en") .
    ?prop rdfs:label ?propLabel FILTER (lang(?propLabel) = "en") .

} ORDER BY ?propLabel

为什么第二个查询返回的行数更少?感谢您的帮助。

【问题讨论】:

    标签: sparql wikidata


    【解决方案1】:

    我认为原因是wikibase:label 服务返回了?statement_property_obj任何 值的标签结果,即使该值没有定义实际的rdfs:label(它似乎只是返回?statement_property_obj 本身的实际值)。

    例如,查看查询 1 中的第一个结果,其中 ?statement_property_objLabel 绑定到 topic/Jack_Bauer。这不是数据中实际 rdfs:label 属性的值,只是标签服务提供的“后备”值。所以查询 2,显式 查询rdfs:label 属性,不会返回这个(和类似的)结果。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2021-09-04
      • 1970-01-01
      • 2012-01-08
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多