SPARQL可选未绑定VS筛选器不存在

SPARQL可选未绑定VS筛选器不存在,sparql,semantic-web,Sparql,Semantic Web,以下各项之间是否存在差异(在性能、标准方面或其他方面): 选择distinct?不带乘客的飞机,其中{ ?无乘客的飞机a。 筛选器不存在{ ?无乘客的飞机?乘客。 } } 以及: 选择distinct?不带乘客的飞机,其中{ ?无乘客的飞机a。 可选的{ ?无乘客的飞机?乘客。 } 过滤器(!绑定(?乘客))。 } 没有真正的区别。第二个版本是旧版本,它也适用于SPARQL 1.0引擎。但是,第一个版本是首选的,因为它读起来更直观。不,第二个版本是旧版本,也适用于SPARQL 1.0引擎。很明

以下各项之间是否存在差异(在性能、标准方面或其他方面):

选择distinct?不带乘客的飞机,其中{
?无乘客的飞机a。
筛选器不存在{
?无乘客的飞机?乘客。
}
}
以及:

选择distinct?不带乘客的飞机,其中{
?无乘客的飞机a。
可选的{
?无乘客的飞机?乘客。
}
过滤器(!绑定(?乘客))。
}

没有真正的区别。第二个版本是旧版本,它也适用于SPARQL 1.0引擎。但是,第一个版本是首选的,因为它读起来更直观。

不,第二个版本是旧版本,也适用于SPARQL 1.0引擎。很明显,第一种方法(至少对我来说)更容易理解,语法更直观。是的,可能会有一些性能差异,但可能与实现和数据有关。正如其他人所建议的,使用第一种形式是因为你的意图更明确
select distinct ?planeWithoutPassengers where {
    ?planeWithoutPassengers a <http://example.org/plane> .
    filter not exists {
        ?planeWithoutPassengers <http://example.org/hasPassenger> ?passenger .
    }
}
select distinct ?planeWithoutPassengers where {
    ?planeWithoutPassengers a <http://example.org/plane> .
    optional {
        ?planeWithoutPassengers <http://example.org/hasPassenger> ?passenger .
    }
    filter (!bound(?passenger)).
}