如何在查询sparql中获取最大值

如何在查询sparql中获取最大值,sparql,Sparql,我想知道在另一个SELECT中应用计数后,如何在sparql查询中获得最大值。我的代码是: #PREFIX nobel: <http://data.nobelprize.org/terms/> #PREFIX cat: <http://data.nobelprize.org/resource/category/> #PREFIX foaf: <http://xmlns.com/foaf/0.1/> #PREFIX dbo: <http://dbpedia

我想知道在另一个SELECT中应用计数后,如何在sparql查询中获得最大值。我的代码是:

#PREFIX nobel: <http://data.nobelprize.org/terms/>
#PREFIX cat: <http://data.nobelprize.org/resource/category/>
#PREFIX foaf: <http://xmlns.com/foaf/0.1/>
#PREFIX dbo: <http://dbpedia.org/ontology/> 
#PREFIX dbp: <http://dbpedia.org/property/>
#PREFIX dbr: <http://dbpedia.org/resource/>
#PREFIX owl: <http://www.w3.org/2002/07/owl#>
#PREFIX afn: <http://jena.hpl.hp.com/ARQ/function#>
#PREFIX rdfs: <http://www.w3.org/2000/01/rdf-schema#>

Select ?advisorName (max (?c) as ?m ) {#the answer is empty.. )
SELECT ?advisorName (count (distinct (?category)) as ?c) (max (?c) as ?m) { 
     ?student a nobel:Laureate ;
            owl:sameAs ?dbpStudent ;
            foaf:name ?studentName ;
            nobel:nobelPrize ?pStudent .          
     ?pStudent nobel:category ?category .   

FILTER (afn:namespace(?dbpStudent) = str(dbr:))        
SERVICE <http://dbpedia.org/sparql> {    
{ ?dbpStudent dbo:doctoralAdvisor ?dbpAdvisor .}
union
{?dbpAdvisor dbo:doctoralStudent ?dbpStudent.  }    
 ?dbpAdvisor rdfs:label ?advisorName  .
Filter (lang(?advisorName)= "en")   }}
group by ?dbpStudent ?advisorName
order by desc (?c)  }
#前缀:
#前缀cat:
#前缀foaf:
#前缀dbo:
#前缀dbp:
#前缀dbr:
#前缀owl:
#前缀afn:
#前缀rdfs:
选择?advisorName(max(?c)作为?m){#答案为空..)
选择?advisorName(count(distinct(?category))作为?c(max(?c)作为?m){
?学生a诺贝尔奖获得者;
猫头鹰:sameAs?dbpStudent;
foaf:姓名?学生姓名;
诺贝尔奖:诺贝尔奖?学生。
学生诺贝尔奖:类别?类别。
过滤器(afn:名称空间(?dbpStudent)=str(dbr:)
服务{
{?dbpStudent dbo:doctoralAdvisor?dbpAdvisor.}
联盟
{?dbpAdvisor dbo:doctoralStudent?dbpStudent.}
?dbpAdvisor rdfs:标签?advisorName。
过滤器(lang(?advisorName)=“en”)}
分组依据?dbpStudent?advisorName
按desc(?c)}排序
非常感谢

这不是答案,而是用作更复杂的注释! 在开始调试之前,您的查询应该使用标准SPARQL语法:

SELECT  ?advisorName (MAX(?c) AS ?m)
WHERE
  { { SELECT  ?advisorName (COUNT(DISTINCT ?category) AS ?c)
      WHERE
        { ?student  rdf:type          nobel:Laureate ;
                    owl:sameAs        ?dbpStudent ;
                    foaf:name         ?studentName ;
                    nobel:nobelPrize  ?pStudent .
          ?pStudent  nobel:category   ?category
          FILTER ( afn:namespace(?dbpStudent) = str(dbr:) )
          SERVICE <http://dbpedia.org/sparql>
            {   { ?dbpStudent  dbo:doctoralAdvisor  ?dbpAdvisor }
              UNION
                { ?dbpAdvisor  dbo:doctoralStudent  ?dbpStudent }
              ?dbpAdvisor  rdfs:label  ?advisorName
              FILTER ( lang(?advisorName) = "en" )
            }
        }
      GROUP BY ?advisorName
    }
  }
GROUP BY ?advisorName
ORDER BY DESC(?c)
选择advisorName(最大(?c)为?m)
哪里
{{选择?advisorName(计数(不同类别)为?c)
哪里
{?学生rdf:类型诺贝尔奖获得者;
猫头鹰:sameAs?dbpStudent;
foaf:姓名?学生姓名;
诺贝尔奖:诺贝尔奖?学生。
学生诺贝尔奖:类别?类别
过滤器(afn:名称空间(?dbpStudent)=str(dbr:)
服务
{{dbpStudent dbo:doctoralAdvisor?dbpAdvisor}
联合
{?dbpAdvisor dbo:doctoralStudent?dbpStudent}
?dbpAdvisor rdfs:标签?advisorName
过滤器(lang(?advisorName)=“en”)
}
}
分组依据?advisorName
}
}
分组依据?advisorName
按描述排序(?c)
我不明白的是:

  • 为什么在外部SELECT查询中的变量
    ?dbpStudent
    上有一个
    group by
    ,因为内部SELECT查询未返回该变量,因此没有此类绑定
  • 为什么还要在内部SELECT查询中计算最大值
所以我的问题是,这个查询的总体目标是什么

  • 如果你想知道每位顾问的诺贝尔奖类别总数,你应该使用总和
  • 如果你想要一个导师能通过他/她的学生获得的最高分数
  • 如果你想

  • 一旦我们决定了您的查询应该做什么,我们就可以通过检查中间结果开始调试了。

    您好,欢迎使用SO,因为您可能知道堆栈溢出不是免费的编码服务,所以请告诉我们您已经尝试了什么,然后我们会提供帮助。关于如何使问题变得伟大的更多有用提示可以在这里找到:为什么在子选择中也有“(max(?c)as?m”?”?子选择是否返回预期值?为什么在外部查询中按
    ?dbpStudent
    分组?一般来说,整个查询是非标准SPARQL。。。您正在使用的三重存储应该无法解析查询。感谢您抽出时间。对此我很抱歉。我正在阅读如何使用sparql:)不用担心,基本的sparql很简单,更复杂的任务确实可能会很复杂。有时候,用一个SPARQL查询甚至是不可能的。非常感谢你。这是我第一次使用sparql,我不了解很多事情。我真的很抱歉这个代码:S。它现在对你有用吗?您希望查询的最终结果是什么?