Hi,
Short answer: what you want is to use map:entry() instead of
map:map(). The following returns true (that is, it stores a document
node as the value of the key "key" in the map):
let $doc := document { <foobar/> }
let $map := map:entry('key', $doc)
return
map:get($map, 'key') instance of document-node()
So what is the difference with the following, which stores an element
node instead?
let $doc := document { <foobar/> }
let $map := map:map(
<map:map xmlns:map='http://marklogic.com/xdmp/map'>
<map:entry>
<map:key>key</map:key>
<map:value>{ $doc }</map:value>
</map:entry>
</map:map>)
return
map:get($map, 'key') instance of element()
The difference is that the above first copy the document node to an
XML tree. A document node added to an element is just "ignored", its
children get copied directly, as per the XDM recommendation. This XML
tree is used as an XML representation of a map, and "deserialized".
What is in the element map:value *IS* an element node at this point,
so ends up as such in the map.
This might be more clear if we get rid of all the map machinery:
let $doc := document { <foobar/> }
let $elem := <value>{ $doc }</value>
return
$elem/node() instance of element()
The value of $elem in this last code is the following (which makes
sense, right?, what else could it be?):
<value>
<foobar/>
</value>
Regards,
--
Florent Georges
H2O Consulting
http://h2o.consulting/
On 15 February 2017 at 11:37, Erik Zander wrote:
> Hi All,
>
>
>
> I did iron out why I got errors, now I could use some help finding the
> best solution to it.
>
>
>
> The error is that I have code like
>
>
>
> ……
>
>
>
> let $evalParams := map:map(
>
> <map:map
>
> xmlns:map='http://marklogic.com/xdmp/map'>
>
> <map:entry>
>
> <map:key>document</map:key>
>
> <map:value>{$doc}</map:value>
>
> </map:entry>
>
> </map:map>)
>
> let $resultDocument := xdmp:eval($transformCode, $evalParams)
>
>
>
> where in the $transform code it checks for a document-node
>
> declare variable $document as document-node() external;
>
>
>
> To my understanding this has to do with the map:map structure.
>
>
>
> But is there a good way of going around it. I could use xdmp:unqote but it
> feels a bit messy. I could also put into the database but doing document
> inserts and deletions just for that feels like a bit much overhead.
>
>
>
> Any thoughts on this is greatly appreciated.
>
>
>
> Regards
>
> Erik
>
> _______________________________________________
> General mailing list
> [email protected]
> Manage your subscription at:
> http://developer.marklogic.com/mailman/listinfo/general
>
>
_______________________________________________
General mailing list
[email protected]
Manage your subscription at:
http://developer.marklogic.com/mailman/listinfo/general