如何在Wikidata查询服务中批量查询Freebase ID对应的标签?
批量查询Freebase ID对应Wikidata标签的SPARQL修改方案
要实现批量查询,核心是用SPARQL的VALUES子句批量传入所有Freebase ID,替换原查询中单个匹配的语句。以下是两种修改后的版本:
版本1:保留原查询字段(含实体、标签及关联属性)
SELECT ?s ?sLabel ?p ?o ?oLabel WHERE { # 批量指定需要查询的Freebase ID VALUES ?freebaseId { "/m/0gqpg" "/m/0h0vk" "/m/0h3vhfb" "/m/0h4xw_" "/m/0h52w" "/m/0hfp" "/m/0hhbr" } ?s wdt:P646 ?freebaseId. # 如需获取实体的所有关联属性和值则保留此行;仅需标签可删除 ?s ?p ?o. SERVICE wikibase:label { bd:serviceParam wikibase:language "en". } }
版本2:简化查询(仅返回Freebase ID、Wikidata实体及对应标签)
如果只需要获取Freebase ID对应的实体标签,可简化查询减少冗余结果:
SELECT ?freebaseId ?s ?sLabel WHERE { VALUES ?freebaseId { "/m/0gqpg" "/m/0h0vk" "/m/0h3vhfb" "/m/0h4xw_" "/m/0h52w" "/m/0hfp" "/m/0hhbr" } ?s wdt:P646 ?freebaseId. SERVICE wikibase:label { bd:serviceParam wikibase:language "en". } }
关键修改说明
VALUES ?freebaseId { ... }:将所有待查询的Freebase ID以字符串形式传入,多个值用空格分隔,也可分行排列提升可读性?s wdt:P646 ?freebaseId:建立Wikidata实体(?s)与Freebase ID(?freebaseId)的关联,替换原查询中单个ID的匹配语句- 标签服务部分保持不变,用于自动获取实体的英文标签;若需要多语言标签,可修改
wikibase:language参数,比如"en,zh"
内容的提问来源于stack exchange,提问作者黄言之
相关产品推荐
相关产品推荐

