在DMN规范中,盒装函数(正式名称为Boxed Function Definition)是一种用于表示参数化决策逻辑的图形化符号。

它主要用于定义业务知识模型(Business Knowledge Model,BKM)内的可重用逻辑,使得一套复杂的规则或计算公式可以被多个不同的决策调用。
以下是关于盒装函数的详细解析:
1.图形结构
一个盒装函数由三个核心单元格(Cells)组成,通常垂直排列:
l 类型(Kind):位于顶部的单元格,指明函数的实现方式。可选值包括:FEEL、ONNX、PMML或Java。
如果该单元格留空或标识为FEEL,则表示这是一个标准FEEL函数。
l 参数(Parameters):在括号内列出零个或多个以逗号分隔的参数名称。这些参数定义了函数执行所需的输入变量。
l 主体(Body):一个盒装表达式,代表函数的具体逻辑。它可以是一个简单的FEEL表达式、一个决策表,甚至是另一个嵌套的盒装上下文。
2.函数的分类与映射
盒装函数支持多种后端实现,通过“类型”单元格进行区分:
l FEEL函数:主体是一个引用了上述参数的FEEL表达式。
l 外部定义函数(Java,PMML,ONNX):这类函数的主体是一个包含映射信息的上下文。
Java:需要在主体中提供类名(class)和公共静态方法的签名(methodsignature)。
ONNX:包含指向模型文件的file IRI以及定义了张量类型和维度的functionsignature。
PMML:包含指向PMML文档的documentIRI和可选的model名称。
3.元模型定义(Metamodel)
在DMN的抽象语法层,盒装函数对应于FunctionDefinition类。
l 它继承自Expression基类,这意味着它可以作为其他表达式的一部分被嵌套使用。
l 它的主要属性包括一组FormalParameter(形式参数,类型为InformationItem)和一个body(主体表达式)。
l 它通过kind属性来区分是原生FEEL逻辑还是对外部AI模型(如ONNX)的调用。
4.执行语义
在执行层面,盒装函数被视为一个具有词法闭包的Lambda表达式。当该函数被调用时,系统会执行一个绑定(Binding)过程:将调用方提供的实际参数值赋给函数内部的形式参数,然后在这一语境下评估主体表达式的值并返回结果。
示例应用:
在规范提供的示例中,计算“每月还款额”的PMT逻辑就是一个典型的盒装函数。它定义了rate(利率)、term(期限)和amount(金额)三个参数,主体则是执行具体金融计算的数学公式。