You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

使用xdmp:document-load导入本地XML文件到MarkLogic Forest时的两类错误排查求助

咱们一个个拆解这两个问题:

第一个错误:XDMP-PLACEKEYSLOCKING

这个报错的原因很明确:当你手动指定文档要写入的特定Forest时,MarkLogic默认启用的**快速锁定(fast locking)**机制会和这个操作冲突。快速锁定是用来优化自动路由场景下的并发写入性能的,但一旦你手动指定Forest,它就没法正常工作了。

解决起来很简单,只需要在你的XML选项里添加一行关闭快速锁定的配置就行:

xdmp:document-load("C:\Users\admin-rp\Documents\myFile.xml", 
  <options xmlns="xdmp:document-load"> 
    <uri>/myDocs/myDocument.xml</uri> 
    <permissions>{xdmp:default-permissions()}</permissions> 
    <collections>{xdmp:default-collections()}</collections> 
    <repair>full</repair> 
    <forests> 
      <forest>{xdmp:forest("data-hub-FINAL-1")}</forest> 
    </forests> 
    <fast-lock>false</fast-lock> <!-- 新增这行,关闭快速锁定 -->
  </options> 
)

第二个错误:XDMP-INVOPTVAL

这个问题出在permissions参数的格式上。XML格式的选项接受<sec:permission>元素,但map格式的选项对权限的要求完全不同——它需要的是由JSON对象或map实例组成的序列,每个对象必须包含capability(比如"read"、"update")和roleId(角色ID)或者roleName(角色名称)。

你现在的代码里,xdmp:default-permissions("objects")返回的是<sec:permission>元素序列,xdmp:permission("admin", "read", "object")也是一个元素,这些都不符合map选项的格式要求,所以才会报错。

这里给你两种修改方案:

方案1:保留默认权限并转换格式

把默认权限转换成map格式的对象,再添加你需要的admin权限:

xdmp:document-load("C:\Users\admin-rp\Documents\myFile.xml", 
  map:map() 
  => map:with("uri", "/documents/myFiles.xml") 
  => map:with("permissions", (
    -- 将默认权限元素转换成map对象
    xdmp:default-permissions("objects") ! (
      map:map() 
      => map:with("capability", xs:string(sec:capability(.))) 
      => map:with("roleId", xs:string(sec:role-id(.)))
    ),
    -- 添加admin角色的read权限
    map:map() 
    => map:with("capability", "read") 
    => map:with("roleName", "admin")
  )) 
  => map:with("collections", ("DDE_ASN_Booking")) 
  => map:with("repair", "full") 
  => map:with("forests", (xdmp:forest("data-hub-FINAL-1"))) 
  => map:with("fast-lock", false) <!-- 同样要关闭快速锁定,因为指定了Forest -->
)

方案2:直接构造所需权限(不依赖默认权限)

如果不需要默认权限,直接手动构造权限对象更简洁:

xdmp:document-load("C:\Users\admin-rp\Documents\myFile.xml", 
  map:map() 
  => map:with("uri", "/documents/myFiles.xml") 
  => map:with("permissions", (
    map:map() => map:with("capability", "read") => map:with("roleName", "admin"),
    -- 可以按需添加其他权限,比如编辑权限
    map:map() => map:with("capability", "update") => map:with("roleName", "content-editor")
  )) 
  => map:with("collections", ("DDE_ASN_Booking")) 
  => map:with("repair", "full") 
  => map:with("forests", (xdmp:forest("data-hub-FINAL-1"))) 
  => map:with("fast-lock", false)
)

最后提醒一句:只要你手动指定了Forest,不管用XML还是map选项,都必须关闭fast-lock,否则还是会触发第一个错误里的锁定冲突。

内容的提问来源于stack exchange,提问作者Rashmita Purkayastha

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.04.28 19:12:33