sparql group by和order by:not ordered

时间:2017-11-23 17:26:22

标签: sparql jena fuseki

我跟进query,其中schema.org数据库用于查找类的子项数 - 作为比我的应用程序更简单的数据库。我想按字母顺序连接孩子的名字。查询

prefix schema:  <http://schema.org/>
prefix rdfs:    <http://www.w3.org/2000/01/rdf-schema#>

select    ?child  (group_concat (?string) as ?strings) 
where {
  ?child  rdfs:subClassOf schema:Event .
     ?grandchild rdfs:subClassOf ?child .
  bind (strafter(str(?grandchild), "http://schema.org/") as ?string)
}   group by ?child  order by asc(?string)
limit 20 

给出

schema:PublicationEvent   "OnDemandEvent BroadcastEvent"
schema:UserInteraction    "UserPageVisits UserComments UserPlays UserBlocks UserDownloads UserPlusOnes UserLikes UserCheckins UserTweets"

不按字母顺序排列。如果我将排序顺序替换为desc,结果完全相同。我似乎不明白group byorder by和可能bind如何互动。

2 个答案:

答案 0 :(得分:3)

在组内推送订单需要额外的select子查询:

prefix schema:  <http://schema.org/>
prefix rdfs:    <http://www.w3.org/2000/01/rdf-schema#>

select    ?child  (group_concat (?string) as ?strings) 

where {
    select * 
    {
     ?child  rdfs:subClassOf schema:Event .
     ?grandchild rdfs:subClassOf ?child .
     bind (strafter(str(?grandchild), "http://schema.org/") as ?string)
    } order by asc(?string)
}   group by ?child  
limit 20 

答案 1 :(得分:1)

18.5.1.7 GroupConcat

  

未指定字符串的顺序。

From the horse's mouth

  

在2011-04-22,19:01,Steve Harris写道:

     
    

在2011-04-22,06:18,Jeen Broekstra写道:

         
      

但是,查看SPARQL 1.1查询规范,我认为这不是一个有保证的结果:据我所知,解决方案修饰符ORDER BY应该应用于之后的解决方案序列 >分组和聚合,因此它不会影响GROUP_CONCAT的输入顺序。

    
         

这是正确的。