对象节点到元素节点的转换失败?

object-node to element-node conversion fails?

我正在尝试为 JavaScript 中的角色设置默认功能,如下所示:

declareUpdate(); 
var sec = require('/MarkLogic/security.xqy'); 
var pid = 3223704;
var role = 'scc-proj-' + pid + '-member';
sec.roleSetDefaultPermissions("scc-proj-3223704-member",(xdmp.permission("scc-proj-3223704-member", "read")));

这给出了一个错误:

[javascript] XDMP-AS: $permissions as element(sec:permission)* -- Invalid coercion: object-node{"capability": text{"read"}, "roleId": text{"12999117528518422097...} as element(sec:permission)

如果我调查一下,似乎 xdmp.permissions() 返回一个对象节点,而 sec.roleSetDefaultPermissions() 需要一个元素节点。所以似乎有些类型转换不起作用...

等效的 XQuery 工作正常。

  1. 这可以在 javascript 中解决吗?
  2. 作为解决方法,我可以 运行 来自 javascript 的 XQuery 和 xdmp.eval 或调用吗?

只需将 element 作为第三个可选 $output-kind 参数传递给 xdmp.permission:

xdmp.permission("scc-proj-3223704-member", "read", "element");