【问题标题】:SPARQL limit only a specific variable in a result tripleSPARQL 仅限制结果三元组中的特定变量
【发布时间】:2013-12-13 09:07:03
【问题描述】:

我试图得到一个只有最高变量的三元组合的 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 订购质量。 (L->M->U)。

我尝试了很多这样的:

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

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

预期的结果应该是:

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

【问题讨论】:

  • answers.semanticweb.com/questions/25647/… 的答案基本相同 - 请仅将您的问题发布在一个地方,然后耐心等待,回答您问题的人都是志愿者并交叉发布到多个论坛和/或列表只会惹恼帮助您的人,同时减少将来遇到相同问题的人实际上找到有用答案的机会

标签: limit sparql semantic-web


【解决方案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          |
---------------------

【讨论】:

    猜你喜欢
    • 2012-02-12
    • 2022-11-04
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2017-08-24
    相关资源
    最近更新 更多