【发布时间】:2016-08-15 19:13:27
【问题描述】:
我是一名使用 MarkLogic 数据库的 Java 开发人员。我的代码的一个关键功能是它能够动态生成 4-6 个 SPARQL 查询并通过 HTTP GET 请求运行它们。每个结果相加然后返回。我现在需要对这些结果进行一致排序。
由于我对每个查询的结果进行分页(使用 LIMIT 和 OFFSET 语句),每个查询都有自己的 ORDER BY 语句。如果不将排序嵌入到查询中,结果页面将无序返回。
但是,每个查询都会返回自己的结果,这些结果是单独排序的,需要合并到一个排序列表中。我的偏好是字母数字排序,在考虑大小写之前考虑字符,并将空值和空值排序到最后。 (例如:“0123456789AaBbCc…WwXxYyZz”)
我已经在我的 Java 代码中使用自定义比较方法做到了这一点,但我最近遇到了一个问题:我的结果仍然没有返回 sorted。我遇到的问题源于这样一个事实,即我的自定义排序方案与 SPARQL 使用的排序方案完全分开,从而导致一组明显未排序的结果。虽然我考虑过在返回结果之前从头开始对结果进行排序,而不是假设 MarkLogic 正在返回排序结果,但这似乎是不必要的浪费,甚至可能无法解决我的问题。
在我的研究中,我无法找到为 SPARQL 设置排序规则的任何方法,也没有找到编写自定义排序规则的方法。本页 (https://www.w3.org/TR/rdf-sparql-query/#modOrderBy) 上的文档特别指出 SPARQL 的 ORDER BY 是基于由 XPATH 的 fn:compare 驱动的比较方法。该函数引用了此页面 (https://www.w3.org/TR/xpath-functions/#collations),其中特别提到了用于指定排序规则以及使用 Unicode 排序规则算法的替代实现的选项。我找不到任何详细说明如何实际执行此操作的内容。
简而言之,我有什么方法可以操纵或控制 SPARQL 查询如何比较字符以影响最终顺序?
【问题讨论】:
-
我认为自定义排序取决于三元组存储和 SPARQL 引擎。我不知道 MarkLogic,但我想如果存在这样的选项,开发人员会知道,直接向他们寻求帮助可能会更快。
-
我不确定我是否理解你。您是否建议我询问为 MarkLogic 工作的开发人员?
-
是的,至少 w.r.t.一些特定于工具的自定义订单支持。如果没有,那么您唯一能做的就是@JoshuaTaylor 在下面的回答中显示的内容。
标签: sorting sparql marklogic collation