Page 1 of 1

Formatting XQuery Update output?

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

I'm using the latest Oxygen 20.0 release, latest Saxon EE 9.8.0.8 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="http://saxon.sf.net/";
declare namespace output="http://www.w3.org/2010/xslt-xquery-serialization";


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:serialization-parameters>
        <output:method value="xml"/>
        <output:version value="1.0"/>
        <output:indent value="yes"/>
    </output:serialization-parameters>;
   

let $xml :=
    <root>
    {
        (: generates a child element hierarchy here :)
    }
    </root>
   
   
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?

Thanks!

....A

Re: Formatting XQuery Update output?

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

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 9.8.0.11 from what I tested.

Regards,
Adrian

Re: Formatting XQuery Update output?

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

You guys gonna speak to Michael about this perhaps?

Re: Formatting XQuery Update output?

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

I've logged an issue at Saxonica: https://saxonica.plan.io/issues/3809
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="http://saxon.sf.net/ns/configuration">
  <xquery allowUpdate="true"/>
  <serialization indent="yes"/>
</configuration>
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).

Regards,
Adrian