我对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
属性,只是标签服务提供的一个 "后备 "值。所以查询2,它 明确 查询 rdfs:label
属性,不会返回这个(和类似)结果。