2012-09-07 31 views
3

挑戰是否可以在SPARQL中聚合兩個資源?

在我的三重商店中,我有一個資源類型電子郵件。該電子郵件類型的資源包含發件人和一個或多個收件人分配。

讓符號「A-> B」定義爲「A是B是其中一個收件人的電子郵件的發件人」。

現在,我想知道以下內容:人A向B發送了一封電子郵件多少次?請注意,A和B的作用很重要,即A→B不同於B-> A。

畸形SPARQL查詢

爲了回答這個問題,所有可用的配對,我寫了這個SPARQL(1.1)查詢:

PREFIX rdf: <http://www.w3.org/1999/02/22-rdf-syntax-ns#> 
PREFIX foaf: <http://xmlns.com/foaf/0.1/> 
PREFIX email: <http://example.com/schema/for/email/> 

SELECT ?sender ?recipient (COUNT(?sender ?recipient) AS ?count) 
WHERE { 
    ?sender rdf:type foaf:Person. 
    ?recipient rdf:type foaf:Person. 

    ?e rdf:type email:Email. 
    ?e email:sender ?sender. 
    ?e email:recipient ?recipient. 
} 
GROUP BY ?sender ?recipient 

這不起作用,AllegroGraph給我錯誤MALFORMED QUERY: Line 5, Found ?recipient (of type varname) - 第5行是SELECT子句。我嘗試了一些其他變體,改變了SELECT和/或GROUP BY子句,但沒有成功。

我不確定是否允許在多個資源上進行聚合。在SPARQL 1.1 docs和相關的SO問題(Counting in SPARQL)中,我只找到基於一個資源的聚合。

因此,最後,這是我的問題:是否有可能聚合發件人和收件人?

回答

4

嘗試用(COUNT(?e) AS ?count)代替(COUNT(?sender ?recipient) AS ?count)

這應該工作,因爲您要計算符合您的條件的電子郵件數量(?e)。

相關問題