filter - SPARQL OR 过滤器指令有优先权吗?

标签 filter sparql rdf 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") )

这个查询是否表明 test1 在筛选结果时比 test2 具有更高的优先级?换句话说,它会影响结果的顺序吗?例如,如果我将结果限制为 20,低于总数(比方说 60),我会先得到 test1 的结果,然后再得到 test2 的结果吗?

如果没有,有没有办法建立这样的优先级?

最佳答案

Does this query indicates that test1 has more priority than test2 in the filtering the results ? in other words, does it affect the order of the results? in case where I am limiting the results to 20 for example which is lower than the total (let's say 60), will I get the results of test1 first and then test2 ?

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

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

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

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

if not, is there a way to establish such a priority?

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

select ?keywords {
  values ?test { "test1" "test2" "test3" }
  #-- get a binding for ?keywords...
  filter regex(str(?keywords), ?test)
}
order by ?test

在这种情况下,由于 ?test 的值具有可靠的排序,您可以根据匹配的 ?test 值对结果进行排序。当然,如果 ?keywords?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

关于filter - SPARQL OR 过滤器指令有优先权吗?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/38127066/

相关文章:

rest - 将 SOAP UI 用于 Marklogic SPARQL REST API 时出现问题

xml - 将没有定义结束字符的 xml 命名空间正确扩展为有效的 URI

javascript - 按元素名称过滤表

android - 在android中过滤Realm对象

python - OpenCV 卡尔曼滤波器 w/python 的实际实现?

sparql - 如何跳过 DBpedia SPARQL 请求中的错误日期?

asp.net-mvc - 使用下拉列表过滤 MVC 中的结果

异步请求超时通知

namespaces - RDF:命名空间来识别编程语言(JS、C#、...)

SPARQL 多值属性 - 渲染结果