sparql - 过滤英文标签后返回不同结果的 Wikidata SPARQL 查询
问题描述
我对 Wikidata SPARQL 查询的理解是,您可以通过两种方式过滤英文标签的结果。
- 添加
SERVICE wikibase:label { bd:serviceParam wikibase:language "en" }
调用标签服务;或者 - 为每个输出标签添加
?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
为什么第二个查询返回的行数更少?谢谢你的帮助。
解决方案
我认为原因是wikibase:label
服务返回任何值的标签结果?statement_property_obj
,即使该值没有实际rdfs:label
定义(它似乎只是返回?statement_property_obj
自身的实际值)。
例如,查看查询 1 中的第一个结果,其中?statement_property_objLabel
绑定到topic/Jack_Bauer
。这不是rdfs:label
数据中实际属性的值,只是标签服务提供的“后备”值。因此,显式查询rdfs:label
属性的查询 2 不会返回此(和类似的)结果。
推荐阅读
- python-3.x - 不同子组的熊猫中位数
- ios - 如何在 Swift 包中为 UIViewRepresentable 编写测试
- python - MongoDB - 在单个查询中提取和更新
- r - 从指数中的个股回测 R 中的动量策略
- python - Python模块导入问题:不同位置的导入语句
- iis - 访问域时的 URL 重定向
- java - 未加载 Spring Junit 配置类
- azure-functions - 尝试在 Azure 函数中使用 MicrosoftTeams PowerShell
- python - 无法对与给定条件匹配的列中的值求和
- scala - 参数类型的隐式 ParameterBinderFactory[org.joda.time.LocalDateTime]