MarkLogic 7, Windows 7.MarkLogic - xdmp: Eval порождает ошибки, такие как «недопустимые опции узла»
Я пытаюсь написать XQUERY изменить идентификаторы URI документов (локальная версия ML) с помощью xdmp:load
и xdmp:delete
работает в одной транзакции.
Я, наконец, решил использовать xdmp:eval
. Что порождает ошибку?
кода следующим образом: -
for $SrcFileNode in xdmp:directory("/Abstracts/", "infinity") [position() lt 10]
(: get filename from path string :)
let $Filename := (if (fn:contains(fn:document-uri($SrcFileNode),".zip/"))
then fn:substring-after(document-uri($SrcFileNode),".zip/")
else fn:substring-after(document-uri($SrcFileNode),"Loadrecords/")
)
(: create new URI would "document{...}" be better? :)
let $newURInode := xdmp:unquote(
fn:concat('<options xmlns="xdmp:document-load"><uri>/Abstracts/'
,$Filename,'</uri><repair>none</repair><permissions>'
,xdmp:default-permissions(),'</permissions><collections><collection>'
,'Abstracts','</collection></collections></options>')
)
(: get string of node's name :)
let $SrcFileStr := xdmp:quote(fn:document-uri($SrcFileNode))
(: build a string of the copy + delete actions in a single transaction as applied to the current file. Implement the action using "xdmp:eval" :)
let $LoadDelCMD := 'xquery version "1.0-ml";
declare option xdmp:transaction-mode "update";
xdmp:document-load($SrcFileStr,$newURInode);
xdmp:document-delete($SrcFileStr);
xdmp:commit()'
(: execute the copy/delete for the current document :)
(: 1st attempt...
return xdmp:eval($LoadDelCMD,(),<options xmlns="xdmp:eval"> <isolation>different-transaction</isolation> <prevent-deadlocks>true</prevent-deadlocks></options>)
:)
(: 2nd attempt...
let $Option := document{<options xmlns="xdmp:eval"><isolation>different-transaction</isolation> <prevent-deadlocks>true</prevent-deadlocks></options>}
return xdmp:eval($LoadDelCMD,(),$Option)
:)
(: 3rd attempt...
let $Option2 := xdmp:unquote('<options xmlns="xdmp:eval"> <isolation>different-transaction</isolation> <prevent-deadlocks>true</prevent-deadlocks></options>')
return xdmp:eval($LoadDelCMD,(),$Option2)
:)
Ошибки .... "[1,0 мл] XDMP-INVOPTNOD: xdmp: Eval (" XQuery версия " 1,0 мл "; ... ",(), документ {<опции xmlns = "xdmp: eval"> разная транзакция <предотвращение-блокировки> t ...}) - Неверный узел опций: fn: doc ("") "ИЛИ" [1.0-ml] XDMP-BADCHAR: (ошибка: XPST0003) Неожиданный символ найденный «» (0x0022) В строке 3 колонка 58 « В строке 48 столбца 8 –