SPARQL仅限制结果三元组中的特定变量

时间:2013-12-13 09:07:03

标签: limit sparql semantic-web

我尝试获得SPARQL结果,只有三重组合的最高变量。

好的,我们试着解释一下。

假设我们得到了类似的东西:

:resource1 pred:hasQuality :UltraQuality
:resource2 pred:hasQuality :MediumQuality
:resource2 pred:hasQuality :LowQuality
:resource3 pred:hasQuality :UltraQuality
:resource3 pred:hasQuality :LowQuality
:resource4 pred:hasQuality :LowQuality

现在,我希望以最高质量获得所有资源。质量可以通过ORDER BY或MAX订购。 (1→M-> U)。

我尝试了很多这样的事情:

SELECT ?res ?qual
WHERE {
    ?res pred:hasQuality ?qual.
}
ORDER BY ?res DESC(?qual)

但是现在,如果同一个?res有多个三元组,我想消除其他三元组。

预期结果应为:

:resource1 :UltraQuality
:resource2 :MediumQuality
:resource3 :UltraQuality
:resource4 :LowQuality

1 个答案:

答案 0 :(得分:1)

您希望group by项目,为您提供每个项目的一组质量。从该项目中,您希望获取最大值。假设你有这些数据:

@prefix : <http://stackoverflow.com/q/20562673/1281433/>

:a :quality 3 .
:a :quality 4 .
:a :quality 5 .

:b :quality 9 .

:c :quality 2 .
:c :quality 1 .

然后你可以使用这样的查询:

prefix : <http://stackoverflow.com/q/20562673/1281433/>

select ?item (max(?quality) as ?maxQuality)
where {
  ?item :quality ?quality .
}
group by ?item

你会得到这些结果:

---------------------
| item | maxQuality |
=====================
| :b   | 9          |
| :c   | 2          |
| :a   | 5          |
---------------------