可以在SPARQL中聚合两个以上的资源吗?

可以在SPARQL中聚合两个以上的资源吗?,sparql,aggregation,allegrograph,Sparql,Aggregation,Allegrograph,挑战 在我的triple store中,我有一封资源类型的电子邮件。该电子邮件类型的资源分配了一个发件人和一个或多个收件人 将符号“A->B”定义为“A是电子邮件的发件人,B是其中一个收件人” 现在,我想知道以下几点:A向B发送了多少封电子邮件?注意A和B的作用很重要,即A->B不同于B->A 格式错误的SPARQL查询 为了回答所有可用配对的问题,我编写了以下SPARQL(1.1)查询: 前缀rdf: 前缀foaf: 前缀电子邮件: 选择?发件人?收件人(计数(?发件人?收件人)作为?计数)

挑战

在我的triple store中,我有一封资源类型的电子邮件。该电子邮件类型的资源分配了一个发件人和一个或多个收件人

将符号“A->B”定义为“A是电子邮件的发件人,B是其中一个收件人”

现在,我想知道以下几点:A向B发送了多少封电子邮件?注意A和B的作用很重要,即A->B不同于B->A

格式错误的SPARQL查询

为了回答所有可用配对的问题,我编写了以下SPARQL(1.1)查询:

前缀rdf:
前缀foaf:
前缀电子邮件:
选择?发件人?收件人(计数(?发件人?收件人)作为?计数)
在哪里{
?发送方rdf:类型foaf:人员。
?收件人rdf:类型foaf:人员。
?e rdf:键入电子邮件:电子邮件。
电子邮箱:发件人?发件人。
电子邮件:收件人?收件人。
}
分组依据?发件人?收件人
这不起作用,AllegroGraph向我提供了错误
格式错误的查询:第5行,找到了?收件人(类型为varname)
-第5行是SELECT子句。我尝试了其他一些变体,修改了SELECT和/或GROUPBY子句,但没有成功

我不确定是否允许对多个资源进行聚合。在和一个相关的SO问题()中,我只找到了基于一个资源的聚合

最后,我的问题是:是否可以将发送者和接收者聚合起来?

尝试将
(COUNT(?sender?recipient)替换为?COUNT)
替换为
(COUNT(?e)AS?COUNT)

这应该行得通,因为您想计算符合您标准的电子邮件(
?e
)的数量

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