4

ここに初めて投稿します。Jena (ARQ) API 内で使用するカスタム SPARQL 関数の作成を誰かが手伝ってくれることを期待していました。集計を行うには SPARQL が必要です。すでに avg、count、min、max、および sum を実装していることはわかっていますが、標準偏差と中央値も同様に実行できる必要があります (範囲も必要ですが、それは最小値と最大値のみを使用して行われます)。

クエリが、既に実装されている関数に使用するものと似ていることを願っていました。

PREFIX example: <http://www.examples.com/functions#>  
PREFIX core: <http://www.core.com/values#>  
SELECT (stddev(?price) as ?stddev)  
WHERE {  
    ?s core:hasPrice ?price  
}  

それが可能かどうかはわかりませんが、結果の標準偏差が得られる限り、他のカスタム関数のように使用する必要がある場合でも問題ありません。

私が知っているのは、関数が Java で記述されるということだけです。これは、私がすでにかなりよく知っています。それで、誰かがこれを行う良い方法を知っているか、またはどこからガイダンスを探し始めるべきか疑問に思っていました. ドキュメントを探してみましたが、何もないようです。どんな助けでも大歓迎です。

前もって感謝します。

4

4 に答える 4

2

集約関数は、SPARQL (したがって ARQ) 関数の特殊なケースです。ARQ では、集約関数のセットを拡張するのは簡単ではありませんが、フィルター関数のセットとプロパティ関数のセットを拡張するのは簡単です (そして文書化されています)。とにかく、次のような方法で標準偏差を計算できます。

PREFIX afn: <http://jena.hpl.hp.com/ARQ/function#>
PREFIX core: <http://www.core.com/values#>  
SELECT ( afn:sqrt( sum( (?price - ?avg) * (?price - ?avg) ) / (?count - 1) ) as ?stddev )  
WHERE {
  ?s core:hasPrice ?price .
  {  
    SELECT (avg(?price) as ?avg) (count(*) as ?count) 
    WHERE {  
      ?s core:hasPrice ?price
    }
  }
}  

いずれにせよ、SPARQL 1.1 ドラフトにはない ARQ の「専有」関数である afn:sqrt を使用せざるを得ないため、このクエリは Jena とは異なるフレームワークでは機能しません。

于 2012-06-26T13:25:22.073 に答える
0

はい、ARQ はさまざまな方法で拡張可能です。ARQ 拡張ページは、開始するのに最適な場所です。

于 2012-06-15T07:50:56.373 に答える