Page 1 of 1

Formatting XQuery Update output?

Posted: Wed Apr 25, 2018 7:23 pm
by chaeron

I'm using the latest Oxygen 20.0 release, latest Saxon EE XQuery processor.

I'm using XQuery Update to write xml output to a file, using the put() function, but can't seem to find a way to have that output indented.

Here is roughly what my XQuery looks like:

Code: Select all

xquery version "3.1";

declare namespace saxon="";
declare namespace output="";

declare option saxon:output "saxon:indent-spaces=4";
declare option output:method "xml";
declare option output:version "1.0";
declare option output:indent "yes";

declare variable $OUTPUT-OPTIONS :=
        <output:method value="xml"/>
        <output:version value="1.0"/>
        <output:indent value="yes"/>

let $xml :=
        (: generates a child element hierarchy here :)
return (
    put( $xml, "../data/xml/MyFile.xml" )

Neither the saxon nor the standard options are taking hold and the output is not indented. Changing the put() function to be:

Code: Select all

put( $xml, "../data/xml/MyFile.xml",  $OUTPUT-OPTIONS )

doesn't work, since there is no 3-parameter put() function (probably not implemented in Saxon yet).

Any thoughts on how to ensure that MyFile.xml ends up properly indented?



Re: Formatting XQuery Update output?

Posted: Thu Apr 26, 2018 6:29 pm
by adrian

The problem seems to be within Saxon 9.8. I found this bug logged:
Serialization options ignored for XQuery update from command line
However, this doesn't seem to work in 9.7 or from what I tested.


Re: Formatting XQuery Update output?

Posted: Wed May 02, 2018 9:38 pm
by chaeron
The logged bug said it was fixed in, but latest Oxygen is using

You guys gonna speak to Michael about this perhaps?

Re: Formatting XQuery Update output?

Posted: Wed Jun 06, 2018 11:01 am
by adrian

I've logged an issue at Saxonica:
and Michael Kay has already responded there.

So, it seems XQuery Update is still at 1.0, for which there were no serialization properties (first appeared in XQuery 3.0).
There is a W3C working group note from January 2017 regarding XQuery Update Facility 3.0 which does mention a third parameter for fn:put for serialization parameters. However, there may be a while before this becomes a recommendation, or at least a draft, so there are no implementations yet.

Michael proposed as workaround to use the serialization parameters defined in the Saxon configuration. For Oxygen this translates into the following Saxon configuration file:

Code: Select all

<configuration edition="EE" xmlns="">
  <xquery allowUpdate="true"/>
  <serialization indent="yes"/>
Save this to a file (e.g. xqueryUpdateIndentSaxonConfig.xml)
In Oxygen edit the transformation scenario you use to run the XQuery, press the Advanced options (cogwheel button next to the Transformer combo box), check the box "Use a configuration file" and browse for the Saxon configuration file (xqueryUpdateIndentSaxonConfig.xml).