We are attempting to insert some new elements with attributes into an XML document from a string. The elements have a name space prefix such as asy:

If I use an external variable containing XML to perform a node insert

example :-
declare namespace asy="http://xml.acme.com/asy";
declare variable $part external; insert nodes $part as first into db:open("PARTDB")/asy:assembly[@name="ZB09010"]
The characters in the xs:string $path reserved for XML e.g. < > etc are converted to &lt; &gt; etc and the insert silently fails.

if I change the insert statement to :
insert nodes fn:parse-xml($part) as first into db:open("PARTDB")/asy:assembly[@name="ZB09010"]
I get the message

FODC0006 (Line 1): The prefix "asy" for element "asy:part" is not bound.

If I add 
declare namespace asy="http://xml.acme.com/asy";

at the beginning of the $path variable contents before the XML I get
FODC0006 (Line 1): Content is not allowed in prolog.

If I then change the statement to :
insert nodes xquery:eval($part) as first into db:open("PARTDB")/asy:assembly[@name="ZB09010"]

The insert works as expected.
Note that if the same XML is defined within the query using 
let $path := < new xml stuff >

The insert works fine just using $path with no functions applied.
Is this behavior correct and is using xquery:eval($part) the right approach or am I just lucky it works and I should have been doing something different?

Thanks for any insight you can offer.