如何在SPARQL中忽略VALUES子句?
解决SPARQL中让VALUES子句临时失效的测试技巧
嘿,我刚好清楚这个实用的SPARQL小技巧!你要的效果完全可以通过给$U1传入特殊的UNDEF值来实现,具体操作如下:
核心原理
SPARQL里的UNDEF关键字在VALUES子句中表示不对对应变量施加任何约束,换句话说,这个变量可以匹配所有可能的取值,和直接注释掉VALUES子句的效果完全一致。
具体实现
当你需要测试时,只需要给$U1传入(UNDEF)这个值,原查询中的VALUES (?ut) {$U1}就会被解析为:
VALUES (?ut) { (UNDEF) }
这时候这条VALUES子句不会过滤任何结果,等同于你直接注释掉它的状态。
效果对比
- 正常用户输入场景(传入具体URI集合):
GRAPH g1: { VALUES (?ut) { <http://example.com/uri1> <http://example.com/uri2> } ?IC_uri skos:related ?ut . } - 测试场景(传入
UNDEF):GRAPH g1: { VALUES (?ut) { (UNDEF) } ?IC_uri skos:related ?ut . } - 等价于注释掉VALUES的查询:
GRAPH g1: { # VALUES (?ut) {$U1} ?IC_uri skos:related ?ut . }
补充说明
这个特性虽然没有在SPARQL规范中被特别突出,但几乎所有主流的SPARQL查询引擎(比如Apache Jena、Blazegraph、Virtuoso等)都支持UNDEF在VALUES子句中的用法,完全可以放心使用。
内容的提问来源于stack exchange,提问作者Ivo Velitchkov
相关产品推荐
相关产品推荐

