SPARQL 1.1规范中MIN/MAX聚合器跳过未绑定值的定义位置问询
SPARQL 1.1中MIN/MAX聚合器忽略未绑定值的规范依据
这个行为完全符合SPARQL 1.1的官方规范,具体定义可以在**SPARQL 1.1查询语言规范的第18.5节(聚合函数)**中找到:
首先,所有SPARQL聚合函数(除了COUNT(*)这种特殊情况)的通用规则是:会忽略组内导致聚合表达式未绑定的成员。针对MIN和MAX,规范里还有更明确的说明:
MIN(expr)返回组内表达式expr的最小RDF术语值,计算时会忽略所有使expr未绑定的组成员;MAX(expr)同理,返回最大值,同样跳过未绑定的expr值。
结合你给出的示例来看:
执行插入语句后,数据中有两组匹配:
?s = <http://s1>时,?o1 = <http://o1>,optional块匹配到?o2 = <http://o2>(绑定状态)?s = <http://x>时,?o1 = <http://y>,optional块无匹配,?o2处于未绑定状态
按照规范,MIN(?o2)会自动跳过第二个未绑定的?o2,只基于第一个绑定的<http://o2>计算最小值,所以最终返回<http://o2>,这和Virtuoso、Stardog的表现一致。
内容的提问来源于stack exchange,提问作者zut
相关产品推荐
相关产品推荐

