如何在 SPARQL 中自定义 ORDER BY 条件

How to customize ORDER BY condition in SPARQL

我不想按字母顺序排列 SPARQL 查询的输出,而是按照我自己定义的特定顺序排列。我找不到有关如何操作的信息。

比如我有一个查询:

 SELECT DISTINCT ?a ?b ?c
 WHERE { ... }
 ORDER BY ?c

变量 c 的取值范围有限:"s"、"m"、"m1"、"m2"、"p" 和"w"。 我希望顺序如下:

1) s
2) m
3) m1
4) m2
4) p
5) w

所以,这不是按字母顺序排列的。 如何强制 ORDER BY 按此顺序对输出进行排序?

我使用 SPARQL 端点 Fuseki 查询海龟文件,并使用 jinja2 模板呈现结果。

您可以通过编写实现排序逻辑的自定义函数并将该函数注入您的 SPARQL 引擎来实现任何自定义排序顺序。请参阅 this tutorial on how to create a custom function for the Sesame SPARQL engine - 其他 SPARQL 引擎具有类似的功能。

一旦你有了这个函数,你就可以在 ORDER BY 参数中使用它:

SELECT ....
ORDER BY ex:customFunction(?c)

general 中,您需要编写自定义函数,如 中所述。但是,当您的值数量有限,并且您知道特定的顺序时,您可以简单地包含一个 values 块,将每个值与其排序索引相关联,然后对其进行排序。例如,如果你想对一些尺寸进行排序,你可以这样做:

select ?item where {
  values (?size ?size_) { ("small" 1) ("medium" 2) ("large" 3) }
  ?item :hasSize ?size 
}
order by ?size_