Включить результат XQuery через include в MarkLogic - PullRequest
0 голосов
/ 12 октября 2018

Любой способ, которым мы можем включить результат XQuery в документ XML, так как мы включаем другой документ или XPath.

Например:

xquery version "1.0-ml";
declare namespace xi="http://www.w3.org/2001/XInclude";

xdmp:document-insert("/test1.xml", <document>
  <p>This is a sample document.</p>
  <xi:include href="test2.xml"/> 
</document>);

xquery version "1.0-ml";
import module namespace xinc="http://marklogic.com/xinclude" at "/MarkLogic/xinclude/xinclude.xqy"; 

xinc:node-expand(fn:doc("/test1.xml"))

Можно сделать это следующим образом:

xquery version "1.0-ml";
declare namespace xi="http://www.w3.org/2001/XInclude";

xdmp:document-insert("/test1.xml", <document>
  <p>This is a sample document.</p>
  <xi:include href="test2.xqy?var1=Hello&var2=world/> 
</document>);

xquery version "1.0-ml";
import module namespace xinc="http://marklogic.com/xinclude" at "/MarkLogic/xinclude/xinclude.xqy"; 

xinc:node-expand(fn:doc("/test1.xml"))

Любая помощь по этому вопросу будет очень признательна.

1 Ответ

0 голосов
/ 13 октября 2018

В 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
    )

Кстати, эффективнее вернуть вставленный документ из той же транзакции, чем читать документ в отдельной транзакции.Если вставка не удалась, транзакция не вернет документ, поэтому чтение в отдельной транзакции не дает большей уверенности.

Надеюсь, что поможет,

...