Sure.  As I said, I am using these options in .basex:

CHOP = false
SERIALIZER = indent=no

I am using data from the wlc subdirectory of this repo:

https://github.com/openscriptures/morphhb

Here is my .bxs file:

DROP DB oshb-morphology
CREATE DB oshb-morphology
ADD ./morphhb/wlc
RUN ./xquery/oshb-use-qere.xq
EXPORT ./out/oshb

This is the query (oshb-use-quere.xq):

declare default element namespace "http://www.bibletechnologies.net/2003/OSIS/namespace";
declare default function namespace "http://www.w3.org/2005/xquery-local-functions";

declare function local:get-ketiv($base, $catchword)
{
  let $prev := $base/preceding-sibling::*[1]
  let $prevstring := fn:string($prev)
  where $prev and fn:ends-with($catchword, $prevstring)
  return (
    $prev
    ,
    if ($prevstring != $catchword)
    then get-ketiv($prev, fn:substring($catchword, 1, fn:string-length($catchword) - fn:string-length($prevstring)))
    else ()
  )
};

declare updating function local:mark-ketiv($variant)
{
  for $ketiv in get-ketiv($variant, $variant/catchWord)
  return (
    delete node $ketiv/@type,
    insert node attribute type { fn:string-join(($ketiv/@type, "x-ketiv")," ") } into $ketiv
  )
};

let $oshb := db:open("oshb-morphology")
for $verse in $oshb//verse[note[@type='variant']]
for $variant in $verse/note[@type='variant']
return mark-ketiv($variant)

I really appreciate all your help with this!

Jonathan

On Fri, Jul 16, 2021 at 1:55 PM Christian Grün <christian.gruen@gmail.com> wrote:
Hi Jonathan,

Could you provide us with a little step-by-step description that allows us to reproduce your use case?

Thanks in advance,
Christian



Jonathan Robie <jonathan.robie@gmail.com> schrieb am Fr., 16. Juli 2021, 19:42:
I tried adding these options to .basex:

# Local Options
CHOP = false
SERIALIZER = indent=no

It still seems to be putting elements on individual lines, as above, and not just for elements that have been modified.  Is there a way to prevent this?

Jonathan

On Fri, Jul 16, 2021 at 1:33 PM Jonathan Robie <jonathan.robie@gmail.com> wrote:
Hmmm, the original repo puts elements smack dab together on the same line to avoid whitespace issues, perhaps using CSS. When I do the update, it puts the updated elements on separate lines:

<           <w lemma="1121 a" morph="HNcmsc" id="01PQe">בֶּן</w><seg type="x-maqqef">־</seg><w lemma="3967" morph="HAcbsa" id="01Exo">מֵאָ֥ה</w>
---
>           <w lemma="1121 a" morph="HNcmsc" id="01PQe">בֶּן</w>
>           <seg type="x-maqqef">־</seg>
>           <w lemma="3967" morph="HAcbsa" id="01Exo">מֵאָ֥ה</w>

Jonathan

On Fri, Jul 16, 2021 at 11:25 AM Jonathan Robie <jonathan.robie@gmail.com> wrote:
Yes, that is shorter and more readable.  Thanks!

And if I don't have to worry about setting options, that's nicely convenient. Again, thanks!

Jonathan

On Fri, Jul 16, 2021 at 8:53 AM Christian Grün <christian.gruen@gmail.com> wrote:
Thanks, Jonathan, for the code snippet.

>  replace value of node $ketiv/@type with fn:string-join(($ketiv/@type, "x-ketiv"), " ")

This statement should be completely safe, no matter which options you
have set. If you want to avoid if/then/else, you can also do the
following (but it’s not much shorter):

  delete node $ketiv/@type,
  insert node attribute type { string-join(($ketiv/@type, "x-ketiv"),
" ") } into $ketiv