Dear Joe,
Thanks for the kind feedback. I am glad to hear BaseX was useful in your DH 2017 workshops.
the serialization spec notes that the adaptive method delegates the handling of the "indent" parameter to JSON.
Could you possibly point me to this rule in the spec? I remember there was a lot discussion about the adaptive serialization method in the W3 Working Group. As it was difficult to define rules that cover requirements of all members, the initial version differs quite a lot from the final proposal, and various details were left to the implementation (because it was assumed that the method will mostly be used for debugging). I looked up the final version serialization spec [1], which states in 10.1.4 that:
“The indent and suppress-indentation parameters are not directly applicable to the Adaptive output method.”
In BaseX, the parameter is considered indeed when serializing maps and arrays (and other data types as well), but there are various differences between the two serialization methods. Consider the following example (which should also work with other XQuery processors):
xquery version "3.1"; for $method in ('adaptive', 'json') return ( "METHOD: " || $method, "OUTPUT: " || ( try { serialize( map { 'functions': [ false#0, true#0 ]}, map { 'method': $method } ) } catch * { $err:description } ) )
The adaptive can be used to serialize items of any type, whereas the json method is restricted to types that can be represented in JSON.
Does this help? Christian
[1] https://www.w3.org/TR/xslt-xquery-serialization-31/#ADAPTIVE_INDENT
On Thu, Aug 10, 2017 at 4:35 PM, Joe Wicentowski joewiz@gmail.com wrote:
Hi all,
First, I'm just back from DH2017, where Clifford Anderson and I taught two workshops on XQuery using BaseX, along with eXist and Saxon. BaseX performed like a champ. We were able to configure the GUI window to show just the query and results windows—perfect when you're projecting the screen in a large room and want everyone to see. Many thanks for such a great teaching tool! (Our materials are at https://github.com/CliffordAnderson/XQuery4Humanists.)
Back to the topic of this post, though, I noticed a slight difference between BaseX's serialization of arrays when using JSON vs. adaptive methods: with JSON, the array's items are separated by newlines, whereas with adaptive, the items are separated by spaces. This is interesting since the serialization spec notes that the adaptive method delegates the handling of the "indent" parameter to JSON. Some code to reproduce this is below.
I'm curious to know - is there a particular reason for this difference?
Thanks, Joe
serialization-test.xq
xquery version "3.1"; declare namespace output="http://www.w3.org/2010/xslt-xquery-serialization"; let $array := ["Cheapside","London","Dean Prior","Devon"] for $method in ("json", "adaptive") let $serialization-parameters := <output:serialization-parameters> <output:method>{$method}</output:method> <output:indent>yes</output:indent> </output:serialization-parameters> return fn:serialize($array, $serialization-parameters)
serialization-test_results.txt
[ "Cheapside", "London", "Dean Prior", "Devon" ] ["Cheapside", "London", "Dean Prior", "Devon"]