首页 > 解决方案 > 如何忽略 SPARQL 中的值?

问题描述

我的部分查询如下所示:

  GRAPH g1: {VALUES (?ut) {$U1}
        ?IC_uri skos:related ?ut .
    }

通常,根据用户输入,$U1获取 URI 列表。我想发送用于测试目的的值,$U1以便忽略值的声明并考虑所有可能的值。事实上,它应该产生与以下相同的结果:

  GRAPH g1: {
        # VALUES (?ut) {$U1}
        ?IC_uri skos:related ?ut .
    }

我记得有一种方法可以做到这一点,但我在 SPARQL 规范中找不到它。

标签: sparql

解决方案


我建议三个选项:

  • FILTER (?ut IN ($ut)), 传递$ut而不是 URI 列表;
  • BIND ($ut as ?ut), 传递$ut而不是单个 URI;
  • VALUES (?ut) {(UNDEF)}(UNDEF)而不是用空格分隔的(括号括起来的)URI 列表。

这种 SPARQL 注射不能被认为是安全的。

10.2.2 VALUES 示例UNDEF中首先提到的关键字:

如果变量在子句中没有特定解的值VALUES,则使用关键字UNDEF而不是 RDF 术语。


推荐阅读