我想按字母顺序排序SPARQL查询的输出,但是按照我自己定义的特定顺序排序。我找不到有关如何操作的信息。
例如,我有一个查询:
SELECT DISTINCT ?a ?b ?c
WHERE { ... }
ORDER BY ?c
变量c
可以包含有限的值范围:" s"," m"," m1"," m2& #34;," p"和" w"。
我希望订购如下:
1) s
2) m
3) m1
4) m2
4) p
5) w
所以,它不是按字母顺序排列的。 如何强制ORDER BY按此顺序排序输出?
我使用SPARQL端点Fuseki来查询turtle文件,使用jinja2模板来呈现结果。
答案 0 :(得分:3)
在 general 中,您需要编写自定义函数,如Jeen's answer中所述。但是,当您拥有有限数量的值并且您知道特定排序时,您只需包含一个值块,该块将每个值与其排序索引相关联,然后对其进行排序。例如,如果你想对某些尺寸进行排序,你可以这样做:
select ?item where {
values (?size ?size_) { ("small" 1) ("medium" 2) ("large" 3) }
?item :hasSize ?size
}
order by ?size_
答案 1 :(得分:1)
您可以通过编写实现排序逻辑的自定义函数并将该函数注入SPARQL引擎来实现任何自定义排序顺序。请参阅this tutorial on how to create a custom function for the Sesame SPARQL engine - 其他SPARQL引擎具有类似的功能。
拥有此功能后,您可以在ORDER BY参数中使用它:
SELECT ....
ORDER BY ex:customFunction(?c)