繁体   English   中英

MarkLogic 能否转换 function 返回 2 个文档节点或原始内容+自定义响应节点?

[英]Can MarkLogic transform function return 2 document nodes OR original content+custom response node?

我们有这个用例,我们需要在加载内容期间在我们的转换代码中执行 2 个操作:

  1. 原始二进制文档插入
  2. 在原件上应用xdmp:document-filter()并使用xdmp:document-insert通过 function 手动插入

现在,问题是可能存在二进制文档转换失败的情况,然后我们希望发生两件事:

  1. 原始文档仍然插入到数据库中

  2. 以这种形式将响应发送回 NiFi:

     [ { "result": { "uri": "/test/abc.pdf", "message": "Successful ingestion", "success": true } }, { "result": { "uri": "/test/abc.pdf.xhtml", "message": "Failed: due to xyz error", "success": false } } ]

我似乎没有找到一种方法可以通过当前的 function 定义实现这一目标,即:

declare function example:transform(
  $context as map:map,
  $params as map:map,
  $content as document-node()
) as document-node()**

如果我尝试返回原始 $content 和响应节点 - (document{$input}, document{$res}) OR (document{$input}, $res)它不允许我这样做:

XDMP-AS: (err:XPTY0004) $service($context, $service-params, $input) -- 无效强制: (document{binary{"255044462d312e330a25e2e3cfd30a312030206f626a0a3c3c0a2f48542f4465..."-}, {text{array ""}, object-node{"result":object-node{"uri":text{"..."}, ...}}}}) as document-node()

如果有人遇到类似问题,或者可以指导是否可以根据当前 model 实现这一点,请提供任何意见。

您需要返回一个document-node() ,它只能有一个子节点。 因此,创建一个array-node()然后将对象序列放入数组中:

document{ 
  array-node{
    $input,
    $res
  }
}

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM