如何在SPARQL中实现多值替换?
多值代码映射的SPARQL实现方案
你当前的查询仅能通过REPLACE实现单一值替换,要批量处理多个ENV_XXX代码到真实名称的映射,可采用以下两种实用方案:
方案一:嵌套REPLACE函数
适合映射关系较少的场景,通过多层嵌套REPLACE依次处理每个代码映射:
SELECT ?code_type ?TYPE_JEU { GRAPH xxx:optimized { OPTIONAL { ?o xxx:code_type ?code_type } FILTER (?code_type IN ( "ENV_BAL"^^xsd:string, "ENV_BBF"^^xsd:string, "ENV_CAB"^^xsd:string, "ENV_JRG"^^xsd:string, "ENV_STO"^^xsd:string, "ENV_TJE"^^xsd:string, "ENV_TOB"^^xsd:string, "ENV_TPP"^^xsd:string )) } # 依次添加每个代码的映射规则 BIND ( REPLACE( REPLACE( REPLACE(?code_type, "ENV_TOB", "Slide"), "ENV_BAL", "Ball" # 替换为对应真实名称 ), "ENV_BBF", "Box" # 替换为对应真实名称 # 可继续嵌套REPLACE添加更多映射 ) AS ?TYPE_JEU ) }
方案二:使用VALUES构建映射表
适合映射关系较多的场景,通过VALUES定义完整的代码-名称映射表,结构更清晰易维护:
SELECT ?code_type ?TYPE_JEU { GRAPH xxx:optimized { OPTIONAL { ?o xxx:code_type ?code_type } FILTER (?code_type IN ( "ENV_BAL"^^xsd:string, "ENV_BBF"^^xsd:string, "ENV_CAB"^^xsd:string, "ENV_JRG"^^xsd:string, "ENV_STO"^^xsd:string, "ENV_TJE"^^xsd:string, "ENV_TOB"^^xsd:string, "ENV_TPP"^^xsd:string )) } # 定义代码与真实名称的映射表 VALUES (?code ?name) { ("ENV_TOB"^^xsd:string "Slide") ("ENV_BAL"^^xsd:string "Ball") ("ENV_BBF"^^xsd:string "Box") ("ENV_CAB"^^xsd:string "Cabinet") ("ENV_JRG"^^xsd:string "Jar") ("ENV_STO"^^xsd:string "Storage") ("ENV_TJE"^^xsd:string "Tray") ("ENV_TPP"^^xsd:string "Tupperware") } # 匹配代码并绑定真实名称,未匹配项保留原代码 BIND(COALESCE(?name, ?code_type) AS ?TYPE_JEU) }
内容的提问来源于stack exchange,提问作者SDA
相关产品推荐
相关产品推荐

