SPARQL新手求助:如何查询Bob Dylan/Elvis Presley的专辑及对应艺人
解决SPARQL查询专辑与对应艺人的问题
你的查询只返回专辑是因为子查询里没有保留艺人的关联变量,导致主查询无法获取艺人信息。修改后的查询会同时抓取专辑和对应的艺人,并返回两者的标签:
SELECT DISTINCT ?item ?itemLabel ?artist ?artistLabel WHERE { SERVICE wikibase:label { bd:serviceParam wikibase:language "[AUTO_LANGUAGE]". ?item rdfs:label ?itemLabel. ?artist rdfs:label ?artistLabel. } ?item p:P31 ?statement0. ?statement0 (ps:P31/(wdt:P279*)) wd:Q482994. # Q482994是专辑的Wikidata ID ?item p:P175 ?artistStatement. ?artistStatement ps:P175 ?artist. FILTER (?artist IN (wd:Q392, wd:Q303)) # 直接过滤目标艺人,替代原UNION写法更简洁 }
修改说明:
- 新增
?artist和?artistLabel变量,存储艺人实体及名称 - 用
FILTER (?artist IN (wd:Q392, wd:Q303))替代原UNION结构,逻辑更清晰 - 在
wikibase:label服务中明确指定获取专辑和艺人的标签,避免匹配异常 - 去掉嵌套子查询,简化结构同时保留专辑类型、艺人关联的筛选逻辑
调整后查询结果会同时显示专辑名称和对应的艺人名字。
内容的提问来源于stack exchange,提问作者dublo
相关产品推荐
相关产品推荐

