Marklogic-xdmp:eval生成错误,例如;无效选项节点";

Marklogic-xdmp:eval生成错误,例如;无效选项节点";,marklogic,Marklogic,MarkLogic7,Windows7 我正在尝试编写Xquery,以便在单个事务中使用xdmp:load和xdmp:delete函数更改文档的URI(ML的本地版本) 我终于决定使用xdmp:eval。是什么产生了错误 代码如下:- for $SrcFileNode in xdmp:directory("/Abstracts/", "infinity") [position() lt 10] (: get filename from path string :) let $Filename :

MarkLogic7,Windows7

我正在尝试编写Xquery,以便在单个事务中使用
xdmp:load
xdmp:delete
函数更改文档的URI(ML的本地版本)

我终于决定使用
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) 
:)
xdmp:directory(“/Abstracts/”,“infinity”)中的$SrcFileNode的
[position()lt 10]
(:从路径字符串获取文件名:)
让$Filename:=(如果(fn:contains)(fn:documenturi($SrcFileNode),“.zip/”)
然后fn:documenturi($SrcFileNode),“.zip/”之后的子字符串
else fn:documenturi($SrcFileNode),“Loadrecords/”之后的子字符串
)
(:创建新URI“document{…}”会更好吗?:)
让$newURInode:=xdmp:unquote(
fn:concat('/Abstracts/'
,$Filename,'none'
,xdmp:default-permissions(),“”
,‘摘要’,“”)
)
(:获取节点名称的字符串:)
让$SrcFileStr:=xdmp:quote(fn:documenturi($SrcFileNode))
(:在应用于当前文件的单个事务中生成复制+删除操作的字符串。使用“xdmp:eval”实现该操作:
让$LoadDelCMD:=“xquery版本”1.0-ml”;
声明选项xdmp:事务模式“更新”;
xdmp:文档加载($SrcFileStr,$newURInode);
xdmp:文档删除($SrcFileStr);
xdmp:commit()'
(:对当前文档执行复制/删除:)
(:第一次尝试。。。
返回xdmp:eval($LoadDelCMD,(),不同事务为true)
:)
(:第二次尝试。。。
let$Option:=文档{不同事务为true}
返回xdmp:eval($LoadDelCMD,(),$Option)
:)
(:第三次尝试。。。
让$Option2:=xdmp:unquote('different transaction true')
返回xdmp:eval($LoadDelCMD,(),$Option2)
:)

关于错误本身,它正在抱怨
$Option
包含包装在文档节点中的options元素。通过删除文档节点构造函数来摆脱文档节点。如果从文件中提取选项,则可以通过在其后面添加
/*
来将其展开

除此之外,我认为你把事情弄得太复杂了。如果您只想更新文档,那么不需要删除,只需再次插入或加载到相同的uri即可。如果要将文档移动到其他位置,只需在与删除相同的事务中执行插入/加载即可。只要没有对同一uri应用插入/加载/删除,就不会发生冲突的更新,并且所有更新都会在代码成功结束时同时保持

您不是第一个希望在数据库中移动/重命名文档的人。此处链接到一个不错的助手函数,用于在数据库中移动文档:

哦,顺便说一下,你的评估是加载和删除同一个uri。这听起来不像是更改文档的URI


关于错误本身,它正在抱怨
$Option
,其中包含包装在文档节点中的options元素。通过删除文档节点构造函数来摆脱文档节点。如果从文件中提取选项,则可以通过在其后面添加
/*
来将其展开

除此之外,我认为你把事情弄得太复杂了。如果您只想更新文档,那么不需要删除,只需再次插入或加载到相同的uri即可。如果要将文档移动到其他位置,只需在与删除相同的事务中执行插入/加载即可。只要没有对同一uri应用插入/加载/删除,就不会发生冲突的更新,并且所有更新都会在代码成功结束时同时保持

您不是第一个希望在数据库中移动/重命名文档的人。此处链接到一个不错的助手函数,用于在数据库中移动文档:

哦,顺便说一下,你的评估是加载和删除同一个uri。这听起来不像是更改文档的URI


关于错误本身,它正在抱怨
$Option
,其中包含包装在文档节点中的options元素。通过删除文档节点构造函数来摆脱文档节点。如果从文件中提取选项,则可以通过在其后面添加
/*
来将其展开

除此之外,我认为你把事情弄得太复杂了。如果您只想更新文档,那么不需要删除,只需再次插入或加载到相同的uri即可。如果要将文档移动到其他位置,只需在与删除相同的事务中执行插入/加载即可。只要没有对同一uri应用插入/加载/删除,就不会发生冲突的更新,并且所有更新都会在代码成功结束时同时保持

您不是第一个希望在数据库中移动/重命名文档的人。此处链接到一个不错的助手函数,用于在数据库中移动文档:

哦,顺便说一下,你的评估是加载和删除同一个uri。这听起来不像是更改文档的URI


关于错误本身,它正在抱怨
$Option
,其中包含包装在文档节点中的options元素。通过删除文档节点构造函数来摆脱文档节点。如果从文件中提取选项,则可以通过在其后面添加
/*
来将其展开

除此之外,我认为你把事情弄得太复杂了。如果您只想更新文档,那么不需要删除,只需再次插入或加载到相同的uri即可。如果要将文档移动到其他位置,只需在与删除相同的事务中执行插入/加载即可。只要没有应用于sa的插入/加载/删除