In general terms why is the [1] index present.
As you noticed, it is redundant. Two reasons why it is still
commonly used: 1. Make it explicit to human readers that the
first element
of the node set returned by key() is used. Not everybody
has always all details of the spec at hand.
2. Moderatly clever processors might take the index as a clue
not to construct the whole node set, which can save time and
memory. Really clever processors could take the same clue
from the presence of the generate-id() function of course,
but the former is still a bit easier to implement and also
more worth to do because the optimization is also an improvement
in many more situations.
A third reason, better than either of these: when you move to XSLT 2.0,
and switch off "backwards compatibility" mode, it will become an error
to supply a sequence of nodes to a function that's designed to handle
only one. So if you really want to process just the first node, you have
to say so.
Michael Kay
XSL-List info and archive: http://www.mulberrytech.com/xsl/xsl-list