В XQuery литерал XML может содержать результат встроенного выражения.
Такие выражения могут включать вызов xdmp:invoke()
.
В результате должен работать код, подобный следующему непроверенному примеру (замена синтаксиса MarkLogic 9 для карты внешних переменных на эквивалент MarkLogic 8, если вы используете MarkLogic 8):
let $doc :=
<document>
<p>This is a sample document.</p>
{xdmp:invoke("test2.xqy",
map:entry("var1","Hello")
=> map:with("var2", "world")
)}
</document>
return (
xdmp:document-insert("/test1.xml", $doc),
$doc
)
Кстати, эффективнее вернуть вставленный документ из той же транзакции, чем читать документ в отдельной транзакции.Если вставка не удалась, транзакция не вернет документ, поэтому чтение в отдельной транзакции не дает большей уверенности.
Надеюсь, что поможет,