This is the mail archive of the xsl-list@mulberrytech.com mailing list .


Index Nav: [Date Index] [Subject Index] [Author Index] [Thread Index]
Message Nav: [Date Prev] [Date Next] [Thread Prev] [Thread Next]
Other format: [Raw text]

Comparisons in XPath 2.0


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


Index Nav: [Date Index] [Subject Index] [Author Index] [Thread Index]
Message Nav: [Date Prev] [Date Next] [Thread Prev] [Thread Next]