【问题标题】:Is it possible to aggregate over two resources in SPARQL?是否可以在 SPARQL 中聚合两个资源?
【发布时间】:2012-09-01 19:14:35
【问题描述】:

挑战

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

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

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

【问题讨论】:

    标签: sparql aggregation allegrograph


    【解决方案1】:

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

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

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2011-06-04
      • 2020-02-15
      • 2017-01-06
      • 2020-07-03
      • 1970-01-01
      相关资源
      最近更新 更多