SPARQL如何进行登录排序

SPARQL如何进行登录排序,sparql,rdf,semantic-web,owl,ontology,Sparql,Rdf,Semantic Web,Owl,Ontology,这个问题是关于如何操作的,所以它不是关于**为什么不工作*所以我没有向您提供最低限度的数据,但如果您需要,我非常乐意这样做 这是我的问题 select ?item (AVG(?ratingValue) as ?avg) (COUNT(*) as ?count) { values ?specificUser {bo:ania} ?user a rs:User ; rs:hasRated [ rs:hasRatingDate ?ratingDate ; rs:aboutItem

这个问题是关于如何操作的,所以它不是关于**为什么不工作*所以我没有向您提供最低限度的数据,但如果您需要,我非常乐意这样做

这是我的问题

select  ?item (AVG(?ratingValue) as ?avg) (COUNT(*) as ?count) 
{
    values ?specificUser {bo:ania}
    ?user a rs:User ; rs:hasRated [ rs:hasRatingDate ?ratingDate ; rs:aboutItem ?item ; a rs:Likes ; rs:ratesBy ?ratingValue ] .

    FILTER ( ?ratingDate >= (now() - "P10000D"^^xsd:duration) )
   # FILTER (?user != ?specificUser)
}
group by ?item 
这是我的结果

我不想按
?avg
订购,但我想按以下方式订购:

?平均值-(对数(?计数)+1)

你知道怎么做吗

老实说,我一开始甚至不知道如何做
日志,因为他们没有说有任何对数函数应用于数值

文档:

并查看利维坦函数库


下一个版本(Jena 3.1)支持“XPath/XQuery functions v3”中的
math:log

如果您的端点支持日志函数,您只需添加
order by(?.avg-log(?.count))
。(请注意+1并不影响排序,因为它只是一个常量。)如果端点不支持它,那么您需要以某种方式近似它。@JoshuaTaylor我正在使用fuseki,它听起来还不支持它,我试图根据项目的重要性来排序,平均值在这里没有帮助(这是评级的平均值),因为看看
bo:1984
,它有一个可能的最高评级(1),但是
bo:animalFarm
有4个评级,平均值
0.92
,所以逻辑上我应该推荐
bo:animalFarm
而不是
bo:1984
,这就是为什么我认为
log
可以给我一个正确的顺序。你知道还有什么其他方法可以排序并应用于SPARQL吗?你可以将
avg
count
相乘,然后按降序排序?@WilliamKinaan我没有看到这一点,我正在考虑它,因为我的senario比示例更复杂。我会更新you@WilliamKinaan我在想,做乘法是不正确的,因为假设有一个项目的评分为1000000,所以
count
=1000000,但是评分的平均值是
0.3
(这么小),而另一个项目的评分为1000,平均值为0.9,做乘以你得到30000坏的项目和900好的项目,所以我会推荐坏的项目。