3

挑战

在我的三重商店中,我有一个资源类型电子邮件。该电子邮件类型的资源分配有一个发件人和一个或多个收件人。

让符号“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)中,我只发现了基于一种资源的聚合。

所以最后,这是我的问题:是否可以汇总发件人和收件人?

4

1 回答 1

4

尝试替换(COUNT(?sender ?recipient) AS ?count)(COUNT(?e) AS ?count).

这应该可行,因为您想要计算?e符合您的条件的电子邮件 ( ) 的数量。

于 2012-09-08T09:13:18.603 回答