M20*_*M20 2 rdf filter sparql boolean-operations
我想知道单词的顺序是否在OR过滤器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") )
Run Code Online (Sandbox Code Playgroud)
此查询是否表明test1在结果过滤中的优先级高于test2?换句话说,它是否会影响结果的顺序?如果我将结果限制为20,例如低于总数(比如说60),我会先得到test1的结果然后再得到test2的结果吗?
如果没有,有没有办法确定这样的优先权?
此查询是否表明test1在过滤结果时的优先级高于test2?换句话说,它会影响结果的顺序吗?如果我将结果限制为20,例如低于总数(比如说60),我会先得到test1的结果然后再得到test2的结果吗?
如果在查询结束时没有订单,则不会指定订单,因此实现肯定会根据过滤器更改排序,但似乎不太可能,至少不是以任何明显的方式.当你问,"我会先得到test1的结果然后再得到test2",这表明对过滤器的作用有点误解. 过滤器是一种指定结果必须满足的一些条件才能包含在结果集中的方法.从概念上讲,在过滤器之前,在工作结果集中有一个结果列表,然后对每个结果应用过滤器测试,并保留满足测试的那些.在任何有意义的意义上,test1或test2都没有"结果".应用测试的不同方式可能会影响排序,例如,取决于它是否:
final results = {}
for (result in working results)
for (testi in tests)
if result passes test
add result to final results
Run Code Online (Sandbox Code Playgroud)
要么
final results = {}
for (testi in tests)
for (result in working results)
if result passes test
add result to final results
Run Code Online (Sandbox Code Playgroud)
由于最终结果是一个集合,你最终会得到相同的集合,但由于结果最终作为列表提供,因此可以想象这可能会影响您看到结果的顺序.但正如我上面所说,它不太可能你会以这种方式获得任何可靠,有意义的差异.
如果没有,有没有办法确定这样的优先权?
如果您想以某种方式订购结果,您需要弄清楚如何获得优先级,然后您可以通过它订购.例如,在您的情况下,您可以执行以下操作:
select ?keywords {
values ?test { "test1" "test2" "test3" }
#-- get a binding for ?keywords...
filter regex(str(?keywords), ?test)
}
order by ?test
Run Code Online (Sandbox Code Playgroud)
在这种情况下,由于?test的值具有可靠的排序,您可以根据匹配的测试值来排序结果.当然,如果?关键字匹配多个?test值,您会在结果中多次看到它.
如果条件不像字符串那么简单,您仍然可以使用值来指定优先级:
select ?keywords {
values (?test ?priority) { ("test1" 3) ("test2" 0) ("test3" 5)}
#-- get a binding for ?keywords...
filter regex(str(?keywords), ?test)
}
order by ?priority
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
289 次 |
| 最近记录: |