如何用SPARQL从Wikidata获取企业的可读行业与国家名称?
修改SPARQL查询以显示行业、国家的可读名称
原查询返回的行业(?industry)和国家(?country)字段是Wikidata的实体链接(如wd:Q30),需要通过获取实体的英文标签来显示可读名称,同时补充推特用户名的获取逻辑,以下是修改后的查询:
SELECT ?item ?name ?twSn ?twId ?industryLabel ?countryLabel WHERE { ?item wdt:P31 wd:Q4830453. OPTIONAL { ?item rdfs:label ?name FILTER (lang(?name) = "en") . } # 获取推特用户名(ps:P2002)和用户ID(pq:P6552) OPTIONAL { ?item p:P2002 ?twitterStmt . ?twitterStmt ps:P2002 ?twSn . ?twitterStmt pq:P6552 ?twId . } OPTIONAL { ?item wdt:P452 ?industry . } OPTIONAL { ?item wdt:P17 ?country . } # 自动为实体生成英文标签 SERVICE wikibase:label { bd:serviceParam wikibase:language "en". } } LIMIT 100
关键修改说明:
- 明确返回字段:将
SELECT *改为指定字段列表,确保结果列完全匹配需求格式。 - 补全推特数据:添加
?twitterStmt ps:P2002 ?twSn,从推特声明中提取实际用户名(原查询仅获取了用户ID)。 - 自动获取标签:使用
wikibase:label服务,自动为行业、国家实体生成对应英文标签(字段名后缀Label),无需手动编写标签过滤逻辑,简化查询。
手动获取标签的替代方案(不使用服务):
若偏好手动控制标签获取逻辑,可替换为以下写法:
SELECT ?item ?name ?twSn ?twId ?industryLabel ?countryLabel WHERE { ?item wdt:P31 wd:Q4830453. OPTIONAL { ?item rdfs:label ?name FILTER (lang(?name) = "en") . } OPTIONAL { ?item p:P2002 ?twitterStmt . ?twitterStmt ps:P2002 ?twSn . ?twitterStmt pq:P6552 ?twId . } OPTIONAL { ?item wdt:P452 ?industry . ?industry rdfs:label ?industryLabel FILTER (lang(?industryLabel) = "en") . } OPTIONAL { ?item wdt:P17 ?country . ?country rdfs:label ?countryLabel FILTER (lang(?countryLabel) = "en") . } } LIMIT 100
内容的提问来源于stack exchange,提问作者Carbo
相关产品推荐
相关产品推荐

