0

後でクエリ (SPARQL) で使用するために変数にカウントを割り当てようとしています。

以下を機能させることさえできません。

SELECT ?resultsCount
WHERE{
    ?subject ?predicate ?object.
    BIND(COUNT(?object) AS ?resultsCount)
}

?resultsCount単純に86 (結果の数) ではなく、空の結果が何度も繰り返されるため、構文またはセマンティクスに何か問題があります。

ただし、次の操作を行うと、結果の数 (たとえば 86) が得られます。

SELECT (COUNT(?object) AS ?resultsCount)
WHERE{
    ?subject ?predicate ?object
}

最初の例のようにBIND作業する方法はありますか? COUNTそうでない場合、同じ種類の機能を取得する別の正しい方法はありますか?

Blazegraph 2.1.2 を使用しています。それはバグでしょうか?

4

1 に答える 1

2

countは集計関数です。countを使用するには、クエリでgroup byを使用し、射影で countを使用する必要があります。Countは、各グループ内の結果の数をカウントします。また、 countでdistinctを使用することもできるため、次のようなことを行って、各サブジェクトの個別のオブジェクトの数を取得できます。

select ?subject (count(?object) as ?numObjects) {
    ?subject ?predicate ?object
}
group by ?subject

一致の数をカウントしようとしているだけの場合は、 group byなしでcountを使用できます(これにより、単一の暗黙的なグループが得られます)。

select (count(*) as ?numResults) {
    ?subject ?predicate ?object
}
于 2016-08-08T00:36:40.727 に答える