Xquery版本的";不在「;条款未按预期工作

Xquery版本的";不在「;条款未按预期工作,xquery,basex,Xquery,Basex,我有一个xml文件,可以通过以下链接下载: 我正在尝试在mymovies.xml中选择所有没有“真人秀”和“夏令营”风格的电影。为了实现这一点,我使用以下查询 for $movie in db:open("movies","movies.xml")/movies/movie where $movie/styles/style!=("noir","anthology") return $movie 但是,电影中的所有节点都处于选中状态。我的问题出了什么问题 一些专家指出,由于涉及到XQuery

我有一个xml文件,可以通过以下链接下载:

我正在尝试在mymovies.xml中选择所有没有“真人秀”和“夏令营”风格的电影。为了实现这一点,我使用以下查询

for $movie in db:open("movies","movies.xml")/movies/movie
where $movie/styles/style!=("noir","anthology")
return $movie
但是,电影中的所有节点都处于选中状态。我的问题出了什么问题


一些专家指出,由于涉及到XQuery的语义,标准的not equal操作符在这种情况下无法工作。然而,我的目的是找到SQL特性的对应查询,而不仅仅是理解语义。

=使用集合比较逻辑

对于不在该序列中的值,例如“foo”,表达式
“foo”!=(“noir”、“文选”)
返回
true
但是,表达式
“noir”!=(“黑色”、“文选”)
也会返回
true
。这是因为“黑”并不等于序列中的一个项目,“文选”,即使它也等于序列中的一个项目。表达式
“noir”=(“noir”,“文选”)
返回
true
,因为“noir”等于序列中的一个项目“noir”

请参阅本规范:

注意:如果
$x
绑定到一个节点集,那么
$x=“foo”
并不意味着与
不($x!=“foo”)
相同:当且仅当
$x
中的某个节点具有字符串值
foo
时,前者为真;当且仅当
$x
中的所有节点都具有字符串值
foo
时,后者才成立

使用:

或:


我正在使用deep equal的hi的可能重复项如下:
对于db中的$movie:open(“movies”、“movies.xml”)/movies/movie,其中deep equal($movie/styles/style,(“文选”、“noir”))返回$movie
,但它不起作用
where not($movie/styles/style=("noir","anthology"))
where $movie/styles/style[not(.=("noir","anthology"))]