gpt4 book ai didi

sorting - 如何为 SPARQL 查询设置排序规则?

转载 作者:行者123 更新时间:2023-12-02 15:18:24 25 4
gpt4 key购买 nike

我是一名使用 MarkLogic 数据库的 Java 开发人员。我的代码的一个关键功能是它能够动态生成 4-6 个 SPARQL 查询并通过 HTTP GET 请求运行它们。每个的结果加在一起然后返回。我现在需要对这些结果进行一致排序。

由于我对每个查询的结果进行分页(使用 LIMIT 和 OFFSET 语句),每个查询都有自己的 ORDER BY 语句。如果不在查询中嵌入排序,结果页面将乱序返回。

但是,每个查询都会返回自己的结果,这些结果是单独排序的,需要合并到一个排序列表中。我的偏好是字母数字排序,它在考虑大小写之前考虑字符,并将空值和空值排序到最后。 (示例:“0123456789AaBbCc…WwXxYyZz”)

我已经在我的 Java 代码中使用自定义比较方法完成了这项工作,但我最近遇到了一个问题:我的结果仍然没有返回排序。我遇到的问题源于这样一个事实,即我的自定义排序方案与 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 查询比较字符以影响最终顺序的方式吗?

最佳答案

如果我理解您的要求,您想要使用 ORDER BY、OFFSET 和 LIMIT 来选择您要显示的哪些结果,然后您想要另一个 ORDER BY 来确定您将显示这些结果的顺序(可能与您用来选择它们的顺序不同)。您可以使用嵌套查询来做到这一点:

select ?result {
{ select ?result where {
#-- ...
}
order by #-- ...
offset #-- ...
limit #-- ...
}
}
order by #-- ...

自定义排序的支持不多,但您可以在顺序表达式中使用函数,并且可以提供多个表达式以先按一件事排序,然后再按另一件事排序。在您的情况下,看起来您可能想要执行 order lcase(?value) 之类的操作以不区分大小写地进行排序。 (当然,这并不完美。例如,我不清楚是否要对数字前缀进行数字排序(例如,顺序应该是 1、10、2 还是 1、2、10)。 )

关于sorting - 如何为 SPARQL 查询设置排序规则?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/38961492/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com