Returns the contiguous sequence of items in the value of $sourceSeq
beginning at the position indicated by the value of $startingLoc and
continuing for the number of items indicated by the value of $length.
fn:subsequence( $sourceSeq as item()*,$startingLoc as xs:doubleitem()*fn:subsequence( $sourceSeq as item()*,$startingLoc as xs:double,$length as xs:doubleitem()*In the two-argument case, returns:
$sourceSeq[fn:round($startingLoc) le position()]
In the three-argument case, returns:
$sourceSeq[fn:round($startingLoc) le position()
and position() lt fn:round($startingLoc) + fn:round($length)]let $seq := ("item1", "item2", "item3", "item4", "item5")
The expression fn:subsequence($seq, 4) returns ("item4", "item5").
The expression fn:subsequence($seq, 3, 2) returns ("item3", "item4").
The first item of a sequence is located at position 1, not position 0.
If $sourceSeq is the empty sequence, the empty sequence is returned.
In the two-argument case, the function returns a sequence comprising those items of $sourceSeq whose index position (counting from one)
is greater than or equal to the value of $startingLoc (rounded to an integer). No error occurs if $startingLoc is
zero or negative.
In the three-argument case, The function returns a sequence comprising those items of $sourceSeq whose index position (counting from one)
is greater than or equal to the value of $startingLoc (rounded to an integer), and
less than the sum of $startingLoc and $length (both rounded to integers). No error occurs if $startingLoc is
zero or negative, or if $startingLoc plus $length exceeds the number of items in the sequence, or if
$length is negative.
As a consequence of the general rules, if $startingLoc is
-INF and $length is +INF, then
fn:round($startingLoc) + fn:round($length) is NaN; since
position() lt NaN is always false, the result is an empty sequence.
The reason the function accepts arguments of type xs:double is that many
computations on untyped data return an xs:double result; and the reason for
the rounding rules is to compensate for any imprecision in these floating-point
computations.