是否可以在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子句,但没有成功。

我不确定是否允许对多个资源进行聚合。在SPARQL1.1文档和一个相关的SO问题(在SPARQL中计数)中,我只发现了基于一个资源的聚合。

最后,我的问题是:是否有可能对发送方和接收方进行聚合?

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

这应该有效,因为你想计算符合你的标准的电子邮件数量(?e)。

相关内容

  • 没有找到相关文章

最新更新