Wikidata SPARQL查询在过滤英文标签后返回不同的结果。

问题描述 投票:1回答:1

我对Wikidata的SPARQL查询的理解是,你可以过滤英文标签的结果,在 两种方式.

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

我正在运行一个查询,试图用英文获取一个实体的所有属性。我遵循了一个 Stackoverflow帖子 并提出了两个疑问。

查询1。运行这个查询 取回 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。运行这个查询 返回 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个回答
1
投票

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

举个例子,请看查询1中的第一个结果,其中的是 ?statement_property_objLabel 必然是 topic/Jack_Bauer. 这不是一个实际的 rdfs:label 属性,只是标签服务提供的一个 "后备 "值。所以查询2,它 明确 查询 rdfs:label 属性,不会返回这个(和类似)结果。

© www.soinside.com 2019 - 2024. All rights reserved.