1

次の基本的なクエリがあります。これは、アーティストが描いた絵の数を取得します

PREFIX dc: <http://purl.org/dc/terms/>  
SELECT (COUNT(?numberOfPaintings) AS ?howMany)  
WHERE  {  ?numberOfPaintings dc:creator "Artists_Name" . }

変数?howManyは、たとえば 20 (絵画) を返します — これまでのところ、とても良いです。ASK WHEREアーティストが 10 枚以上の絵を描いたかどうかを確認するために使用する別のクエリを作成したいと思いtrueますfalse

クエリの一部で使用?numberOfPaintings > 10してみましたASKが、まだ実行する必要があることはわかっていますが、これまでのところ、演算子は関数のコンテキストでCOUNTしか見ていないため、このような他の状況で使用する方法がわかりません1。>FILTER

4

2 に答える 2

3

注: AndyS の回答は、この特定のシナリオに適しています。ここで使用したネストされたselectクエリとフィルター式は、より複雑なクエリ制限に必要になる場合がありますが、この特定のケースは を使用するとより簡単に解決できますhaving

次のようなデータがあるとします。

@prefix : <https://stackoverflow.com/questions/19826515/> .

:a1 :p :b1, :b2, :b3 .
:a2 :p :b1, :b2, :b3, :b4 .
:a3 :p :b1, :b2, :b3, :b4, :b5 .

次に、次のようなクエリ:

select ?a (count(?b) as ?num) where {
  ?a :p ?b 
}
group by ?a

?aeachとその の数を返します?b

-------------
| a   | num |
=============
| :a3 | 5   |
| :a1 | 3   |
| :a2 | 4   |
-------------

次に、そのクエリを別のクエリでラップし、 でフィルタリングする必要があります?num > ...。例えば、。の場合3:

prefix : <https://stackoverflow.com/questions/19826515/>
ask where { 
  {
    select ?a (count(?b) as ?num) where {
      ?a :p ?b 
    }
    group by ?a
  }
  filter( ?num > 3 )
}
Yes

の場合7、no が得られます。

prefix : <https://stackoverflow.com/questions/19826515/>
ask where { 
  {
    select ?a (count(?b) as ?num) where {
      ?a :p ?b 
    }
    group by ?a
  }
  filter( ?num > 7 )
}
No
于 2013-11-07T02:30:20.697 に答える