我跟进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 by
,order by
和可能bind
如何互动。
答案 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)
未指定字符串的顺序。
在2011-04-22,19:01,Steve Harris写道:
在2011-04-22,06:18,Jeen Broekstra写道:
但是,查看SPARQL 1.1查询规范,我认为这不是一个有保证的结果:据我所知,解决方案修饰符
ORDER BY
应该应用于之后的解决方案序列 >分组和聚合,因此它不会影响GROUP_CONCAT
的输入顺序。这是正确的。