2012-06-14 42 views
4

首次發佈此處。我希望有人能夠幫助我製作在Jena(ARQ)API中使用的自定義SPARQL函數。我需要SPARQL做一些聚合,並且我知道它已經實現了avg,count,min,max和sum,但我需要能夠做標準偏差和中位數(我也需要範圍,但這可以是隻用min和max來完成)。使用Jena API在SPARQL中自定義函數

我希望查詢可能類似於您使用的已經實現的功能是什麼:

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編寫,我已經很熟悉了。所以,我想知道是否有人知道一個好方法去做這件事,或者從哪裏開始尋找一些指導。我試過尋找它的文檔,但似乎沒有任何東西。任何幫助將不勝感激。

在此先感謝。

回答

2

我不確定你可以做什麼而不需要真正改變語法。

SUM(...),例如是由SPARQL語法定義的關鍵字:

的過濾器功能或屬性的功能可能不是你正在找。

順便說一下,您也不會在SQL中獲得STDDEV。是否因爲需要傳遞兩次數據?

+0

謝謝,看了更多後,似乎你是對的,我不想要一個過濾器或屬性函數。據說,是否有任何方法可以節省結果,然後將這些結果與SPARQL分開彙總? (我對ARQ還不是很熟悉) – endorphins

0

是的,ARQ以各種方式可擴展。 ARQ extensions page將是最好的開始。

+0

我不確定這種情況下的過濾器功能是否有效。 – castagna

+0

這很有幫助,但我將如何使用max函數的示例來查找一組結果的最大值? (最大的例子是在[鏈接](http://jena.apache.org/documentation/query/writing_functions.html)) – endorphins

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 
    } 
    } 
} 

我反正被迫使用AFN:開方是在SPARQL 1.1草案的ARQ「專有」的功能沒有,所以這個查詢止跌」 t工作在與Jena不同的框架上