SPARQL或filter指令中是否有优先级?

SPARQL或filter指令中是否有优先级?,filter,sparql,rdf,boolean-operations,Filter,Sparql,Rdf,Boolean Operations,我想知道单词的顺序是否给出或更改了or filter SPARQL指令中的优先级。比如说 FILTER( regex(STR(?keywords), "test1", "i") || regex(STR(?keywords), "test2", "i") || regex(STR(?keywords), "test3", "i") || regex(STR(?keywords), "test4", "i") || regex(STR

我想知道单词的顺序是否给出或更改了or filter SPARQL指令中的优先级。比如说

FILTER( regex(STR(?keywords), "test1", "i")
        || regex(STR(?keywords), "test2", "i")
        || regex(STR(?keywords), "test3", "i")
        || regex(STR(?keywords), "test4", "i")
        || regex(STR(?keywords), "test5", "i") )
这个查询是否表明test1在过滤结果方面比test2具有更高的优先级?换句话说,它会影响结果的顺序吗?例如,如果我将结果限制在20个,这低于总数(比如说60个),我会先得到test1的结果,然后再得到test2的结果吗

如果没有,有没有办法确定这种优先权

此查询是否表示在中test1的优先级高于test2 过滤结果?换句话说,它会影响订单吗 结果如何?如果我将结果限制为20 例如,如果低于总数(假设为60),我会得到 先测试1,然后测试2的结果

当查询结束时没有order by时,不会指定顺序,因此实现当然可以基于过滤器更改顺序,但这似乎不太可能,至少不会以任何明显的方式。当你问“我会先得到test1的结果,然后再得到test2的结果吗?”这意味着对过滤器的功能有点误解筛选是一种指定结果必须满足某些条件才能包含在结果集中的方法。从概念上讲,过滤器之前,工作结果集中有一个结果列表,然后对每个结果应用过滤器测试,并保留满足测试的结果。test1或test2没有任何有意义的“结果”。应用测试的不同方式可能会影响排序,例如,取决于其是否:

final results = {}
for (result in working results) 
  for (testi in tests)
    if result passes test
      add result to final results

由于最终结果是一个集合,您最终将得到相同的集合,但由于结果最终以列表形式提供,因此可以想象,这可能会影响您查看结果的顺序。但正如我上面所说的,通过这种方式,你不可能得到任何可靠的、有意义的区别

如果没有,有没有办法确定这种优先权

如果你想以某种方式对结果进行排序,你需要弄清楚如何获得优先级,然后你可以按优先级排序。例如,在您的情况下,您可以执行以下操作:

select?关键字{
值?测试{“test1”“test2”“test3”}
#--获取?关键字的绑定。。。
过滤器正则表达式(str(?关键字),?测试)
}
按订单?测试
在这种情况下,由于?test的值具有可靠的顺序,因此可以根据匹配的?test的值对结果进行排序。当然,如果?关键字?测试的多个值匹配,您将在结果中多次看到它

如果条件不像字符串那么简单,您仍然可以使用指定优先级:

select?关键字{
值(?test?优先级){(“test1”3)(“test2”0)(“test3”5)}
#--获取?关键字的绑定。。。
过滤器正则表达式(str(?关键字),?测试)
}
按顺序?优先顺序

更高的优先级会产生什么结果?筛选器参数不会以任何方式更改数据,因此它们的顺序不会影响结果(可能会影响性能)。@Sirko抱歉,我的问题不完整,我将更新它。我忘了补充一点,例如,我将结果限制在20个。在超过20个的情况下,我会首先得到test1的结果吗?我不认为标准中有任何规定。如果您想为某些条目赋予优先级,则必须使用ORDER子句。
final results = {}
for (testi in tests)
  for (result in working results) 
    if result passes test
      add result to final results