Wikidata SPARQL 查询在过滤英文标签后返回不同的结果
Wikidata SPARQL queries returning different results after filtering for English labels
我对维基数据 SPARQL 查询的理解是,您可以在 two ways.
中过滤英文标签的结果
- 添加
SERVICE wikibase:label { bd:serviceParam wikibase:language "en" }
调用标签服务;或者
- 为每个输出标签添加
?thing rdfs:label ?thingLabel FILTER (lang(?thingLabel) = "en")
。
我是 运行 一个查询,我试图用英语获取一个实体的所有属性。我跟着 提出了两个问题。
查询 1:Running this query 需要 returns 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 queryreturns35 个结果。
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
为什么第二个查询返回的行数较少?感谢您的帮助。
我认为原因是 wikibase:label
服务 returns 标签结果为 ?statement_property_obj
的 any 值,即使该值没有实际的 rdfs:label
定义(它似乎只是 return ?statement_property_obj
本身的实际值)。
例如,查看查询 1 中的第一个结果,其中 ?statement_property_objLabel
绑定到 topic/Jack_Bauer
。这不是数据中实际 rdfs:label
属性 的值,只是标签服务提供的 'fallback' 值。因此,明确 查询 rdfs:label
属性的查询 2 不会 return 此(和类似)结果。
我对维基数据 SPARQL 查询的理解是,您可以在 two ways.
中过滤英文标签的结果- 添加
SERVICE wikibase:label { bd:serviceParam wikibase:language "en" }
调用标签服务;或者 - 为每个输出标签添加
?thing rdfs:label ?thingLabel FILTER (lang(?thingLabel) = "en")
。
我是 运行 一个查询,我试图用英语获取一个实体的所有属性。我跟着
查询 1:Running this query 需要 returns 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 queryreturns35 个结果。
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
为什么第二个查询返回的行数较少?感谢您的帮助。
我认为原因是 wikibase:label
服务 returns 标签结果为 ?statement_property_obj
的 any 值,即使该值没有实际的 rdfs:label
定义(它似乎只是 return ?statement_property_obj
本身的实际值)。
例如,查看查询 1 中的第一个结果,其中 ?statement_property_objLabel
绑定到 topic/Jack_Bauer
。这不是数据中实际 rdfs:label
属性 的值,只是标签服务提供的 'fallback' 值。因此,明确 查询 rdfs:label
属性的查询 2 不会 return 此(和类似)结果。