Nan*_*ana 3 optimization rdf sparql linked-data
比如在RDF数据集中,有一组值,范围从0到100(例如,百分比).我想计算给定范围内的值的数量,例如,100 - 90 | 90 - 80 | ...... | 10 - 0.我期望的输出如下所示:
???????????????????????????
? Range ? Count ?
???????????????????????????
? 100 >= x < 90 ? 4521 ?
? 90 >= x < 80 ? 650 ?
? ... ? ... ?
? 10 >= x <= 0 ? 2650 ?
???????????????????????????
Run Code Online (Sandbox Code Playgroud)
我目前正在使用SPARQL子查询和过滤器来获得解决方案.但这似乎是一个常见的用例,我的直觉告诉我应该有更好的方法来做到这一点.是否有更好(或更有效)的方法来达到这个答案?
目前的解决方案如下所示.
PREFIX dqv: <http://www.w3.org/ns/dqv#>
select distinct ?count90_100 ?count80_90 ?count10_0 where {
?m a dqv:QualityMeasurement .
{ select count(?m) as ?count90_100 where { ?m dqv:value ?value FILTER (?value > 90 && ?value <= 100) }}
{ select count(?m) as ?count80_90 where { ?m dqv:value ?value FILTER (?value > 80 && ?value <= 90) }}
{ select count(?m) as ?count10_0 where { ?m dqv:value ?value FILTER (?value >= 0 && ?value <= 10) }}
}
Run Code Online (Sandbox Code Playgroud)
您可以使用值块指定范围的上限和下限,并为每个范围"id"获取"id".然后你可以分组该范围.例如,
select ?rangeId (count(?x) as ?numMatches) {
values (?rangeId ?min ?max) { (0 0 10)
(1 10 20)
#-- ...
(8 80 90)
(9 90 100) }
#-- query that finds a value for ?x...
filter (?min <= ?x && ?x < ?max)
}
group by ?rangeId
Run Code Online (Sandbox Code Playgroud)