如何编写带条件逻辑的参数化SPARQL INSERT查询合并两条插入逻辑
合并后的参数化SPARQL查询
你可以通过UNION拆分两个条件分支,实现单条查询覆盖两种逻辑,兼容所有支持SPARQL 1.1标准的三元组存储,代码如下:
PREFIX : <http://www.google.com/go#> INSERT { <http://www.google.com/go/guest> <http://www.google.com/go/hasRelatives> ?targetState } WHERE { # 分支1:参数$state为USA时,匹配所有State类型实体 { ?targetState a :State . FILTER ($state = <http://www.google.com/go/State-USA>) } UNION # 分支2:参数$state不为USA时,仅匹配传入的指定州 { BIND ($state AS ?targetState) ?targetState a :State . FILTER ($state != <http://www.google.com/go/State-USA>) } }
逻辑说明
- 当传入的
$state等于<http://www.google.com/go/State-USA>时,仅触发第一个分支,会查询所有类型为:State的实体作为插入对象,和你原本的第一条查询效果完全一致 - 当传入的
$state为其他州URI时,仅触发第二个分支,直接将传入的$state作为插入对象,同时保留了类型校验避免传入非法值,和你原本的第二条查询效果一致
如果不想额外声明前缀,直接把查询中的:State替换为完整URI <http://www.google.com/go#State> 即可,功能不会有任何变化。
内容的提问来源于stack exchange,提问作者Ian Kurtis
相关产品推荐
相关产品推荐

