基于DBpedia扩展SPARQL查询,筛选指定城市出生的艺术家及信息
扩展后的SPARQL查询实现指定需求
Got it!我基于你提供的基础查询,调整并添加了必要的逻辑,现在可以轻松完成按指定城市筛选艺术家,同时返回你要的所有可选字段。
核心功能拆解
- 按指定城市筛选:通过
dbo:birthPlace关联艺术家的出生地,配合FILTER精准匹配目标城市(支持多语言标签,示例用英文) - 可选字段兼容:用
OPTIONAL包裹非必填字段,确保哪怕某些艺术家缺失出生日期或细分子类数据,查询依然能正常返回结果,缺失字段会显示为null
完整SPARQL代码
prefix dbo: <http://dbpedia.org/ontology/> prefix rdfs: <http://www.w3.org/2000/01/rdf-schema#> select distinct (str(?name_) as ?name) (str(?cityName_) as ?cityName) (str(?birthDate_) as ?birthDate) (str(?subClassLabel_) as ?subClass) { ?artist a dbo:Artist ; rdfs:label ?name_ ; dbo:birthPlace ?city . # 替换这里的城市名称和语言标签,比如改成"London"@en或"北京"@zh ?city rdfs:label ?cityName_ . FILTER(?cityName_ = "Paris"@en) # 可选字段:出生日期(没有数据的艺术家会返回null) OPTIONAL { ?artist dbo:birthDate ?birthDate_ } # 可选字段:艺术家细分子类(如Actor、MusicalArtist) OPTIONAL { ?artist a ?subClass . ?subClass rdfs:label ?subClassLabel_ . # 过滤掉顶层的Artist类,只返回更具体的子类 FILTER(?subClass != dbo:Artist && lang(?subClassLabel_) = "en") } # 确保姓名为英文(可根据需求修改语言代码,比如"zh") FILTER(lang(?name_) = "en") } order by ?name
使用说明
- 修改目标城市:将代码中
"Paris"@en替换为你需要的城市名称和对应语言标签,比如查询北京的艺术家就改成"北京"@zh - 调整语言版本:如果需要非英文的姓名或子类标签,修改
lang(?name_) = "en"和lang(?subClassLabel_) = "en"中的语言代码即可 - 扩展字段:如果还需要其他信息(比如死亡日期、职业),只需在
OPTIONAL块中添加对应的属性,例如OPTIONAL { ?artist dbo:deathDate ?deathDate_ }
内容的提问来源于stack exchange,提问作者user706838
相关产品推荐
相关产品推荐

