2012-02-08 9 views
2

は、のセマンティクス=と!= XQueryで

("foo", "bar") = ("foo", "bar") 

は値trueを生み出します。それは明らかです。しかし、私はまた

("foo", "bar") != ("foo", "bar") 

は、私はむしろ驚くべき見つけた、trueを生み出すことに気づきました。 =not($x = $y)と打ち消すことができ、=には何らかのセグメントセマンティクスがあることに気付きましたが、誰でも!=のセマンティクスを説明したり、その参照を提供したりできますか?

答えて

3

documentation for XQueryのセクション「3.5.2一般的な比較」に記載されています。

次の例には、両方とも の2つの一般的な比較が含まれています。この例は、=と!= 演算子が互いに逆ではないという事実を示しています。推論に読む

(1, 2) = (2, 3) 
(1, 2) != (2, 3) 

rules of Atomizationがここに非難しているかのように、それは私に読み込みます。要素がuntypedAtomicである場合、パーサは、どのようにオペレータの動作ではなく、要素自体に基づいて操作の違いを許容する比較が行われるべきかを「推測」することが自由である。

+0

Aha: "最初のオペランドシーケンスと2番目のオペランドシーケンスのいずれかに、必要な大小関係を持つ原子値のペアがある場合のみ、比較結果は真です。私はまだこの定義の成果を完全に把握していませんが、少なくとも私は完全な定義を持っています。ありがとう! –

3

XQuery =および!=は実在する演算子です。 要素が左側に設定されている場合は、のいずれかの要素が右辺の要素にtrueを返します。=!=>、...のアルファベットのない比較演算子文字)。左側

("foo", "bar") != ("foo", "bar") 

「fooが」右側に!=「バー」であるので、全体の比較が真です。

等価比較にはdeep-equalを使用し、質問で既に提案した非等価比較の否定バージョンを使用します。

+0

実際、 'not($ x = $ y)'は私が望んだことをしますが、+1は私の注意を「深い平等」にするためです。 –

関連する問題