Re: [basex-talk] Adding UIDs to all the elements in a collection

2016-10-18 Thread Christian GrĂ¼n
> Is there a better way to do this?

Your query could probably be shortened as follows:

  let $new := db:open($newName) update {
.//* ! (insert node attribute UID { generate-id() } into .)
  }
  ...

It does the same as your original query. But maybe you were asking for
a better solution to compare documents against each other?


[basex-talk] Adding UIDs to all the elements in a collection

2016-10-18 Thread Graydon Saunders
HI --

In the process of trying to find the differences between two collections of
schemas (the XML differences, as opposed to the not-semantically-meaningful
differences in the order of the definitions), I find myself wanting to
stick UIDs on everything.  (So I can go "oh, this element node is
different, but it has descendant elements UIDs also in the list of
differences, I don't want this one, the descendants are more precise"
(because if I don't do something like this, I'm getting xsd:schema every
time...))

I haven't done anything with updating expressions before.

By itself, in the GUI,

for $x in /descendant-or-self::*
return insert node(attribute UID {generate-id($x)}) into $x

works.  Since I would like everything in one query, with a little flailing
I've got as far as

let $new as document-node()+ :=
  for $each in db:open($newName)
  return
  copy $temp := $each
  modify (
for $x in $temp/descendant-or-self::*
return insert node(attribute UID {generate-id($x)}) into $x
  )
  return $temp

return $new

And there are all the elements with UID attributes associated with them.

Is there a better way to do this?

Thanks!
Graydon