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 <joe...@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
> 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
> ```txt
> [
>   "Cheapside",
>   "London",
>   "Dean Prior",
>   "Devon"
> ]
> ["Cheapside", "London", "Dean Prior", "Devon"]
> ```

Reply via email to