挑战
在我的三重商店中,我有一个资源类型电子邮件。该电子邮件类型的资源分配有一个发件人和一个或多个收件人。
让符号“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 文档和相关的 SO 问题(Counting in SPARQL)中,我只发现了基于一种资源的聚合。
所以最后,这是我的问题:是否可以汇总发件人和收件人?