2017-11-23 26 views
1

私はqueryにフォローアップしています。ここでschema.orgデータベースは、自分のアプリケーションよりも単純なデータベースとして、クラスの子の数を調べるために使用されます。私は子供の名前をアルファベット順に連結したいと思っています。クエリsparqlグループby order by:注文しない

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がどのようにやり取りするのか分からないようです。

答えて

1

18.5.1.7 GroupConcat

文字列の順序が指定されていません。


From the horse's mouth:2011-04-22オン

、19時01分には、スティーブ・ハリスは書きました:

を2011年4月22日には、午前6時18分で、Jeen Broekstraが書いた:

しかし、SPARQL 1.1のクエリ仕様を見ると、私はこれをiと思う保証された結果ではありません。私は解決修飾子ORDER BYを解決順序に適用し、のグループ化と集約の後に適用する必要がありますので、GROUP_CONCATの入力順序には影響しません。

これは正しいです。

+0

group_concat'は、指定されたが、このように句の配列から取られていない 'の文字列の順序それは 'order by'節によって定義されるべきです。私は後で、追加の 'select'サブクエリが必要であることを発見しました。 – user855443

+0

@ user855443それは本当ではありません。 Stanislav Kralinはまったく正しい。 'group_concat'の入力はマルチセットなので、順序は失われます。トリプルストアに応じて、それは保持されるかもしれませんが、W3Cの仕様によれば、その保証はありません。 – AKSW

0

追加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 
+0

Stanislav Kralinが正しいです。 'group_concat'がマルチセットで機能するので、注文が保たれるという保証はありません。 – AKSW

+0

@ user855443、ミスタイプのため、私は以前のコメントをあなたの答えに取り除きました。私は、この動作がエンドポイント固有であると言いました。 [Wikidata SPARQL Endpoint](https://query.wikidata.org/)の[この類似のクエリ](https://pastebin.com/bxnGWiGc)をテストしてください。どのトリプラストストアを使用していますか? –

+1

私はjena-fuseki 3.4を使用します。あなたの例では 'asc'を' desc'で置き換えると順序が変わらないのですか? – user855443