在SPARQL中查找多个对象的最大属性

在SPARQL中查找多个对象的最大属性,sparql,Sparql,我将在这里为类使用通用术语 我有一组对象,每个对象都有多个属性将它们链接到主题。Subject通过另一个属性具有与其关联的整数值 对于每个对象,我希望以最大值检索其主题 检索一个对象具有最大值的主题很容易,基于此:。因为我想要主题本身(而不仅仅是它的值),所以我使用了“获取所有主题,排序它们,限制1”的解决方案 但是,我无法使这种方法适用于多个对象。我试过: SELECT ?object ?subject ?subMaxVal WHERE { ?object a :Object. {

我将在这里为类使用通用术语

我有一组对象,每个对象都有多个属性将它们链接到主题。Subject通过另一个属性具有与其关联的整数值

对于每个对象,我希望以最大值检索其主题


检索一个对象具有最大值的主题很容易,基于此:。因为我想要主题本身(而不仅仅是它的值),所以我使用了“获取所有主题,排序它们,限制1”的解决方案

但是,我无法使这种方法适用于多个对象。我试过:

SELECT ?object ?subject ?subMaxVal
WHERE {
  ?object a :Object.

  {
    SELECT ?subject (?value as ?subMaxVal)
    WHERE {
      ?object :Predicate ?subject.
      ?subject :value ?value.  
    }
    ORDER BY DESC(?value)
    LIMIT 1
  }
}
但这会返回不正确的结果。它为
?subMaxVal
查找一个值,然后返回该值以及数据集中的所有对象(即使该值仅对其中一个对象正确)


我发现有人提到SPARQL子查询首先在内部执行。但是,我无法理解如何形成查询以对每个对象执行子查询。

首先使用子
选择来获得每个对象的最大值。然后在外部查询中,此最大值用于获取主题:

样本数据 如您所见,如果一个对象的多个主题共享最大值,则此查询确实会返回这些主题。在这种情况下,您可以获得这些主题的样本:

查询
前缀:
选择对象(最小(?Sub)作为对象?subMaxVal
在哪里{
?对象a:对象。
宾语:谓语?主语。
?主题:数值?子数值。
#查找每个对象的最大值
{
选择?对象(最大(?值)作为?subMaxVal)
在哪里{
?宾语:谓语?主语。
?主题:价值?价值。
}
按对象分组
}
}
分组依据?对象?子Xval
输出
其思想是首先使用一个子
选择
,以获得每个对象的最大值。然后在外部查询中,此最大值用于获取主题:

样本数据 如您所见,如果一个对象的多个主题共享最大值,则此查询确实会返回这些主题。在这种情况下,您可以获得这些主题的样本:

查询
前缀:
选择对象(最小(?Sub)作为对象?subMaxVal
在哪里{
?对象a:对象。
宾语:谓语?主语。
?主题:数值?子数值。
#查找每个对象的最大值
{
选择?对象(最大(?值)作为?subMaxVal)
在哪里{
?宾语:谓语?主语。
?主题:价值?价值。
}
按对象分组
}
}
分组依据?对象?子Xval
输出
你想要主题,但你没有选择主题——这是我不理解的。这个想法是在子选择中获得最大值,然后在外部查询中获得具有给定最大值的主题。你是对的,这是我的重写错误。我纠正了这个问题,但是这个查询仍然返回错误的值。我已经编辑了问题的更多细节。你想要主题,但你没有选择主题-这是我不理解的。这个想法是在子选择中获得最大值,然后在外部查询中获得具有给定最大值的主题。你是对的,这是我的重写错误。我纠正了这个问题,但是这个查询仍然返回错误的值。我对问题进行了更详细的编辑。
@prefix : <http://ex.org/> .
:o1 :Predicate :s1 ; a :Object . :s1 :value 1 .
:o1 :Predicate :s2 ; a :Object . :s2 :value 2 .
:o1 :Predicate :s3 ; a :Object . :s3 :value 3 .
:o2 :Predicate :s2 ; a :Object . :s2 :value 2 .
:o2 :Predicate :s3 ; a :Object . :s3 :value 3 .
:o3 :Predicate :s2 ; a :Object . :s2 :value 2 .
:o3 :Predicate :s3 ; a :Object . :s3 :value 3 .
:o3 :Predicate :s4 ; a :Object . :s4 :value 3 .
--------------------------------
| object | subject | subMaxVal |
================================
| :o2    | :s3     | 3         |
| :o3    | :s4     | 3         |
| :o3    | :s3     | 3         |
| :o1    | :s3     | 3         |
--------------------------------
--------------------------------
| object | subject | subMaxVal |
================================
| :o1    | :s3     | 3         |
| :o3    | :s3     | 3         |
| :o2    | :s3     | 3         |
--------------------------------