Передача переменной в xdmp: eval Marklogi c Xquery - PullRequest
1 голос
/ 06 августа 2020

Мне нужно передать аргумент в xdmp: eval с помощью xquery:

let $uri :="/tmp/myDoc.csv"

let $doc:= xdmp:eval('fn:doc($uri)' , (),  <options xmlns="xdmp:eval"><database>{xdmp:database("My-Database")}</database></options>) 

return $doc

Но я получаю Undefined variable $uri

Мне нужно сделать это с помощью xdmp: eval по многим причинам, есть ли у кого-нибудь идеи, как это сделать в xquery?

1 Ответ

2 голосов
/ 07 августа 2020

Когда вы оцениваете эту строку, у нее нет контекста, чтобы знать, каким должно быть значение $uri. Вы можете передать эти значения контекста во втором параметре при вызове:

let $uri :="/tmp/myDoc.csv"
let $doc:= xdmp:eval('fn:doc($uri)', 
                     (xs:QName("uri"), $uri),  
                     <options xmlns="xdmp:eval">
                       <database>{xdmp:database("My-Database")}</database>
                     </options>) 
return $doc

Но вам следует подумать об использовании xdmp:invoke-function() вместо этого с анонимной функцией:

let $uri := "/tmp/myDoc.csv"
xdmp:invoke-function(function(){ fn:doc($uri) }, 
  <options xmlns="xdmp:eval">
    <database>{xdmp:database("My-Database")}</database>
  </options>
)

Это в целом проще и безопаснее использовать xdmp:invoke-function.

...