2012-05-08 1 views
8

しかし、私はカウントする方法を見つけ出すことはできませんSPARQL 1.1を使用して別個のタプルの数を問い合わせる方法は?

(COUNT(DISTINCT ?x) as ?count) 

(COUNT(DISTINCT *) as ?count) 

を使用して、クエリ内のすべての変数のための明確なタプルの数についてを使用して単一のエンティティをカウントすることは可能であると考えられます特定の(別個の)タプル。何かのように

(COUNT(DISTINCT ?a ?b ?c) as ?count) 

が動作していないようです。私は間違っているのですか?これは本当にSPARQL 1.1では許可されていませんか?それとも、これをテストするために私が使用しているSesame 2.6.0ではうまく動作しないと思われますか?

答えて

9

ようこそStackOverflow!

あなたの中間結果が唯一あなたが興味を持っている三つの変数?a ?b ?cが含まれていることを確認してください。これを行うの

一つの方法は、サブクエリを使用することです。サブクエリは3つの必要な変数のみを投影します。このような何か:

SELECT (COUNT(*) AS ?count) { 
    SELECT DISTINCT ?a ?b ?c { 
     … 
    } 
} 

(私はゴマがサブクエリをサポートするかどうかはわからない。)

もう一つの方法は、単にあなたのクエリは3つだけの変数が含まれていることを確認することです。クエリ内にさらに変数が必要な場合は、それらをブランクノードに置き換えることができます。 SPARQLグラフパターンの空のノードは、「匿名変数」のように動作します。これにはいくつかの面白いスコープの問題があるので、サブクエリのアプローチはおそらくより良いでしょう。

+1

セサミ2.6がサブクエリをサポートしていることを確認するだけです。しかし2.6.5へのアップデートは良いアイデアかもしれません - 2.6.0以降のサブクエリ評価でいくつかのバグ修正がありました。 –

+0

ありがとう、これはこれを達成するための良いトリックのように見えます。あなたが言ったように、セサミはサブクエリを許可するので、これは実行可能になります。あなたの答えは、実際には、SPARQL言語定義では、これを明示的にカウント式の中で定式化することはできないということを暗示しているようです。 – Johsm

+0

'COUNT'の中に複数の変数を持つことはできません。それは 'COUNT(*)'か 'COUNT(?var)'です。オプションの 'DISTINCT 'があります。 – cygri

関連する問題