挑战
在我的三重商店中,我有一个资源类型电子邮件。该电子邮件类型的资源具有发件人和分配的一个或多个收件人。
让符号" 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)中,我只根据一种资源找到了聚合。
最后,这是我的问题:是否可以聚合发件人和收件人?
答案 0 :(得分:4)
尝试将(COUNT(?sender ?recipient) AS ?count)
替换为(COUNT(?e) AS ?count)
。
这应该有效,因为您想要计算符合条件的电子邮件数量(?e
)。