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好的项目,所以我会推荐坏的项目。