xquerysaxon

Why does XQuery add an extra space?


XQuery adds a space and I don't understand why. I have the following simple query :

declare option saxon:output "method=text";

for $i in 1 to 10
return concat(".", $i, "	", 100, "
", ".")

I ran it with Saxon (SaxonEE9-5-1-8J and SaxonHE9-5-1-8J):

java net.sf.saxon.Query -q:query.xq -o:result.txt

The result is the following:

.1  100
. .2    100
. .3    100
. .4    100
. .5    100
. .6    100
. .7    100
. .8    100
. .9    100
. .10   100
.

My question comes from the presence of an extra space between dots. The first line is OK but the folllowing lines (2 to 10) have that space and I don't understand why. What we see as spaces between digits is in fact a tabulation inserted by the character reference.

Could you enlighten me about that behavior ?

PS: I have added saxon as a tag for the question even if the question is not specific to Saxon.


Solution

  • I think your query returns a sequence of string values which are then by default concatenated with a space (see http://www.w3.org/TR/xslt-xquery-serialization/#sequence-normalization where it says "For each subsequence of adjacent strings in S2, copy a single string to the new sequence equal to the values of the strings in the subsequence concatenated in order, each separated by a single space"). If you don't want that then you can use

    string-join(for $i in 1 to 10
    return concat(".", $i, "	", 100, "
", "."), '')