Subject: Comparisons in XPath 2.0
From: Jeni Tennison <jeni@xxxxxxxxxxxxxxxx>
Date: Wed, 2 Jan 2002 22:40:00 +0000
|
Hi,
For all that there are lots of ways of comparing values in XPath 2.0,
there doesn't seem to be one that compares sequences.
If you have something like:
<line start="0 300" end="300 0" />
where start and end both have typed values - @start is the sequence of
two integers (0, 300) and @end is the sequence of two integers (300,
0). In this particular language, @start and @end are x,y coordinates.
How can you work out whether start and end have the same value?
@start eq @end
returns an error because the typed values for each node return a
sequence with more than one value.
@start = @end
also returns an error (I think), because it is equivalent to:
some $s in (@start) satisfies (some $e in (@end) satisfies $e eq $s)
and @start eq @end returns an error.
I think it would make more sense to say that eq can only be used with
single nodes, but that it compares sequences of simple values with a
xf:sequence-deep-equal() comparison (each simple typed value is the
same as the simple typed value with the same index in the compared
sequence). Thus:
@start = @end
would be equivalent to:
@start eq @end
which would be equivalent to:
(0, 300) eq (300, 0)
which would be false. If @end were (0, 300) instead, the comparison
would be:
(0, 300) eq (0, 300)
which would be true.
Cheers,
Jeni
---
Jeni Tennison
http://www.jenitennison.com/
XSL-List info and archive: http://www.mulberrytech.com/xsl/xsl-list
|