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

时间:2015-02-15 18:09:09

标签: sparql

我想按字母顺序排序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模板来呈现结果。

2 个答案:

答案 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)