Andrew has answered the whitespace questions.
It's a Saxon (not an Oxygen) restriction that XQuery 3.0 and XQuery
Update can't currently be used together in the same query. It happened
that way because both are implemented as extensions to the "core" XQuery
1.0 parser, built using subclassing. (Done that way partly because of
the code separation between different Saxon editions). We need to fix
this mechanism, which is becoming pretty unmanageable with the number of
different language dialects supported. Ideally, I suppose, we should
make a complete break and move to a bottom-up table driven parser; but
XQuery parsing is so fragile with the number of context-dependent
decisions that need to be made, it's a risky change to contemplate.
Michael Kay
Saxonica
On 09/07/2012 19:45, Joe Wicentowski wrote:
Hi all,
I'm having a problem with query I wrote that makes use of the XQuery
Update Facility. The problem is that unwanted whitespace inserted
into the results of my query. Here is my source XML (a TEI-like
list), the query in question, and the output showing the unwanted
whitespace:
source.xml:
-----------------
<list>
<item>See <ref target="#MIDDLEEAST">Middle East</ref></item>
<item xml:id="MIDDLEEAST">Middle East <ref target="#d68">68</ref></item>
</list>
fix-ids.xq:
--------------
let $doc := doc('source.xml')
for $item-id at $count in $doc//item/@xml:id
let $new-id := concat('in', $count)
let $new-target := concat('#', $new-id)
let $targets := $doc//ref[@target = concat('#', $item-id)]/@target
return
(
(: fix @xml:ids :)
replace value of node $item-id with $new-id
,
(: fix @targets :)
for $target in $targets
return
replace value of node $target with $new-target
)
output:
----------
<list>
<item>See <ref target="#in1">Middle East</ref>
</item>
<item xml:id="in1">Middle East <ref target="#d68">68</ref>
</item>
</list>
Note that while the query only modifies attribute values, the results
of the query are somehow re-indented. (Specifically, in the source,
there was no whitespace between </ref> and </item>, but in the
results, </item> is on a new line.
Is this a serialization issue? Is there a way for me to declare some
options that will prevent the unwanted whitespace from being inserted?
I'm not sure whether this is a general XQuery issue or an
implementation-specific issue, so let me know if this isn't the right
forum for this question. I'm using oXygen 13 in XQuery Debugger mode
with Saxon EE-XQuery 9.3.0.5.
(On a related note, I see that XQuery 3.0 has new support for
serialization options --
http://www.w3.org/TR/xquery-30/#id-serialization -- but oXygen doesn't
seem to allow combining XQuery 3.0 with XQuery Update Facility and
Saxon EE. This forum post instructs users to disable XQuery 1.1/3.0
support in order to use XQUF:
http://www.oxygenxml.com/forum/topic6615.html.)
Thanks,
Joe
_______________________________________________
[email protected]
http://x-query.com/mailman/listinfo/talk
_______________________________________________
[email protected]
http://x-query.com/mailman/listinfo/talk