在 SPARQL 的 CONSTRUCT 函数中使用 COUNT

Use COUNT inside a CONSTRUCT function in SPARQL

我正在尝试编写一个 SPIN 规则来计算传入引用的数量并将此数字设置为 属性 值。例如,计算特定机器上发生的问题数。因此,我需要计算 rdfs:occuredOn 类型的传入引用的数量(域:问题,范围:机器)。

CONSTRUCT {
?machine rdfs:numberOfIssues ?n .
}

WHERE {
?machine a ex:Machine .
?issue a ex:Issue .
?issue ?r ?machine .
(COUNT(?r) AS ?n) //Error
}       

提前致谢!

只允许 GroupGraphPattern,即您必须在 WHERE 子句中使用子 SELECT 查询:

CONSTRUCT 
  { 
    ?machine rdfs:numberOfIssues ?n .
  }
WHERE
  { { SELECT  ?machine (COUNT(?r) AS ?n)
      WHERE
        { ?machine  a  owl:Machine .
          ?issue    a  owl:Issue ;
                    ?r        ?machine
        }
      GROUP BY ?machine
    }
  } 

请注意,您应该从不用户内置namespaces/prefixes(例如owl:rdfs:rdf:, xsd:, 等等)为您的域 ontology!