10

この非常に単純なモデルを考えると:

@prefix :        <http://example.org/tags#> .
@prefix owl:     <http://www.w3.org/2002/07/owl#> .
@prefix rdf:     <http://www.w3.org/1999/02/22-rdf-syntax-ns#> .
@prefix rdfs:    <http://www.w3.org/2000/01/rdf-schema#> .
@prefix xsd:     <http://www.w3.org/2001/XMLSchema#> .

:tag  rdf:type rdf:Property .

:item1
      rdf:type owl:Thing ;
      :tag    "a"^^xsd:string .

:item2
      rdf:type owl:Thing ;
      :tag    "a"^^xsd:string , "b"^^xsd:string .

:item3
      rdf:type owl:Thing ;
      :tag    "a"^^xsd:string , "b"^^xsd:string , "c"^^xsd:string .

アイテムのリストとそれぞれが持っているタグの数を取得しようとしています:

item  tagCount
===== ========
item1 1
item2 2
item3 3

これが私のクエリです:

SELECT ?item (count(?tag) as ?tagcount)
WHERE {
     ?item :tag ?tag
}

ただし、返されます:

item  tagCount
===== ========
      6

私が読んだことから、これはうまくいくはずです。私はイエナ2.6.4を使用しています

4

3 に答える 3

7

私はこれを試していませんがGROUP BY ?item、クエリの最後に追加してみてください。GROUP BYそれがなければ、行の総数を数えるだけだと思います。

于 2012-05-04T00:30:48.347 に答える
4

バインディングが結果に表示されるようにするには、group by キーワードを使用する必要があるため、これは次のようになります。

SELECT ?item (count(?tag) as ?tagcount) WHERE { ?item :tag ?tag } group by ?item

クエリの途中で何かをカウントしたい場合は、次のようにします。内部の選択クエリを独自のブロックに配置する方法に注意してください {}

SELECT * {
    ?item a owl:Thing .

    {
        SELECT ?item (count(?tag) as ?tagcount)
        WHERE {
             ?item :tag ?tag
        } group by ?item
    } 
}
于 2013-04-24T15:27:26.453 に答える
0

@user2316243 による副選択は不要であるため、次のクエリは同等です。

SELECT ?item (count(?tag) as ?tagcount)
WHERE {
   ?item a owl:Thing .
   ?item :tag ?tag .
} GROUP BY ?item
于 2016-04-22T16:56:23.433 に答える