首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >MarkLogic内容处理框架管道必须是线性的还是非循环的?

MarkLogic内容处理框架管道必须是线性的还是非循环的?
EN

Stack Overflow用户
提问于 2019-03-09 05:59:16
回答 2查看 42关注 0票数 0

我的理解是,由于每个状态转换都有一个当前状态和一个未来状态(一旦成功),由此产生的CPF管道将是线性的,如文档所示:

42403

一国是否可能有条件地过渡到一国或另一国(分支)?使用上面的例子,是否可以根据某些条件从B国过境到C国或国家F国?这个answer (by @rjrudin)通过操作域来建议一条路由。

如果可以实现分支,是否有可能过渡到以前的状态(循环)?例如,有条件地从K国过境到B国或L国,这将使一些迭代处理成为可能。

EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2019-03-09 09:22:58

看看这个简单的CPF操作模块:

代码语言:javascript
复制
xquery version "1.0-ml";
import module namespace cpf="http://marklogic.com/cpf" 
  at "/MarkLogic/cpf/cpf.xqy";
declare variable $cpf:document-uri as xs:string external;
declare variable $cpf:transition as node() external;
if (cpf:check-transition($cpf:document-uri,$cpf:transition)) then try {
  let $doc := fn:doc($cpf:document-uri)
  return
      xdmp:node-insert-child(
        $doc/book,
        <last-updated>{fn:current-dateTime()}</last-updated>
      ),
  xdmp:log( "add last-updated ran OK" ),
  cpf:success($cpf:document-uri, $cpf:transition, ())
} catch ($e) {
  cpf:failure($cpf:document-uri, $cpf:transition, $e, ())
}
else ()

(抄录自中央公积金指南:https://docs.marklogic.com/guide/cpf/quickStart#id_76015)

是对cpf:successcpf:failure的调用决定了接下来应用的是什么状态。然而,cpf:success函数有第三个param (这里是空序列),它允许您为目标状态提供一个覆盖。使用该参数,您可以将文档转换到任何您喜欢的状态。

但是要小心,如果您不小心的话,您可以很容易地创建无限循环(通过指向您之前已经传递的状态),或者创建半途而废(通过错误类型的状态名称导致它不再被处理)。

哈哈!

票数 1
EN

Stack Overflow用户

发布于 2019-03-11 15:18:41

在特定状态转换的定义中有条件/动作对是可能的。CPF实际上并不关心管道是线性的还是循环的:它只是查看文档的当前状态并执行其上的条件来决定下一步要做什么。

如果您想看到一个循环样条的例子,"PDF转换(图像批处理)“管道循环(源在Installer/conversion/alternatives/batched-pdf-pipeline.xml).中)诀窍是在两个不同的状态之间循环:某些优化可能会挫败返回到同一状态的尝试。

票数 2
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/55074474

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档