将XQuery函数调用树序列化为XML并执行它

时间:2017-06-21 00:39:05

标签: xquery marklogic

我有一组XQuery函数,表示可以执行以转换数据值的各种操作。每个函数都将获取一个值,以及转换所需的一些参数。计划是执行一系列嵌套函数调用来计算最终值。这个想法是这些管道将被配置,然后在执行之前保持不变,因为将使用不同的起始值重复调用相同的函数管道。因此,我们的想法是将调用堆栈表示为一系列嵌套的XML元素,即

<mylib:escape>
  <value>
    <mylib:select>
      <config>
        <index>2</index>
      </config>
      <value>
        <mylib:tokenize>
          <config>
            <delimiter>,</delimiter>
          </config>
          <value>
            $starting-value
          </value>
        </mylib:tokenize>
      </value>
    </mylib:select>
  </value>
</mylib:escape>

在mylib模块命名空间中,我会有函数:

declare function mylib:tokenize($value as xs:string, $delimiter as xs:string) as xs:string
{ ... }

declare function mylib:select($value as xs:string, $index as xs:int) as xs:string
{ ... }

declare function mylib:escape($value as xs:string) as xs:string
{ ... }
  1. 这是一个坏主意,我应该采取不同的方法
  2. 是否存在可能已提供此功能的现有库?
  3. 此帖子标记为MarkLogic,因为我将从MarkLogic执行此操作。

    感谢。

1 个答案:

答案 0 :(得分:0)

这主要是基于意见的(如果mods关闭你的问题,不要感到惊讶),但听起来你有一组转换组件和一组描述特定转换管道配置的文档。对我来说,这似乎是一种合理的关注点分离。我不知道任何现有的库完全重复这个,但它确实类似于XProc

我唯一的注意事项是,除非您特别需要将管道存储为文档,否则您可以简单地编写XQuery函数来代表管道,并避免构建组件以将XML转换为XQuery函数调用的开销。如果您需要使功能更具组合性,请查看higher-order (i.e.: first-class) functions