如何忽略SPARQL中的值?

如何忽略SPARQL中的值?,sparql,Sparql,我的部分查询如下所示: GRAPH g1: {VALUES (?ut) {$U1} ?IC_uri skos:related ?ut . } 通常,根据用户输入,$U1获取URI列表。我想为测试目的发送$U1的值,以便忽略值声明并考虑所有可能的值。事实上,它应该产生与以下相同的结果: GRAPH g1: { # VALUES (?ut) {$U1} ?IC_uri skos:related ?ut . } 我记得有一种方

我的部分查询如下所示:

  GRAPH g1: {VALUES (?ut) {$U1}
        ?IC_uri skos:related ?ut .
    }
通常,根据用户输入,
$U1
获取URI列表。我想为测试目的发送
$U1
的值,以便忽略值声明并考虑所有可能的值。事实上,它应该产生与以下相同的结果:

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

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

我建议三种选择:

  • 过滤器(?ut IN($ut))
    ,传递
    $ut
    而不是URI列表
  • BIND($ut as?ut)
    ,传递
    $ut
    而不是单个URI
  • 值(?ut){(unde)}
    ,传递
    (unde)
    ,而不是以空格分隔的URI列表(括号括起来)
这种SPARQL注射不能被认为是安全的

第一次提到的
unde
关键字是:

如果变量在
VALUES
子句中没有特定解决方案的值,则使用关键字
unde
代替RDF术语


忽略什么?
values
子句的某些值?当然,您可以通过
#
对一行进行注释。除此之外,SPARQL只有
减号
过滤器(不在(…)
过滤器不存在{…}
,来进行某种否定。其他任何东西都超出了SPARQL规范afaik.Hm,试着通过
UNDEF
。@StanislavKralin它可以工作!谢谢。请把它作为一个答案,以便人们能够从中受益。我目前无法在另一个平台上测试它,以确定它是否是特定于实现的(与AKSW注释有关),但无论如何,这是一个有价值的知识。@AKSW,我刚刚检查过,它在SPARQL规范中:“如果变量在VALUES子句中没有特定解决方案的值,则使用关键字UNDEF而不是RDF术语。”@AKSW查询是在URL重写规则之后进行的。客户端应用程序不能忽略
值,因为它根本无法访问查询。它不是一个以空格分隔的URI列表,因此,我使用()-语法。我使用URL重写规则将控件保留在服务器端。因此请求是http://{source pattern}/{$U1},这就是为什么a,B,C URI的列表没有空格的原因:http://{source pattern}/(a)(B)(C)