DMN决策模型XML是严格遵循OMG规范、可被引擎直接执行的可执行定义,根节点必须为并声明正确命名空间,含至少一个、和,FEEL表达式需语法正确且大小写敏感。
DMN 决策模型的 XML 是一个结构清晰、严格遵循 OMG 规范的 XML 文档,后缀通常为 .dmn。它不是随便写的配置文件,而是可被引擎(如 Camunda、Flowable、Drools)直接解析执行的可执行决策定义。
是唯一入口所有合法 DMN XML 必须以 为根,且必须声明正确的命名空间(不同版本略有
差异):
temperature <= 20 "Soup" > 20 "Salad"
xmlns 必须匹配你用的 DMN 版本(如 20151130、20191111),否则引擎会拒载或报 namespace not supported
id 和 name 都要设:前者是部署 key(Camunda 中用于 decisionService.evaluateDecisionByKey("dish")),后者是业务可读名namespace 不是 URL,只是命名空间标识符,但必须全局唯一,避免跨项目冲突 的结构不能少三要素一个可用的决策表必须包含:
(带 )
(含 和 )常见错误:
typeRef(如 typeRef="number"),导致 FEEL 表达式解析失败,报 cannot coerce string to number
里写 temperature > 20 —— 错!这里只允许变量引用(如 temperature),条件逻辑写在 里 中字符串没加双引号("Soup"),FEEL 会当成未定义变量,报 unknown variable 'Soup'
DMN 默认使用 FEEL(Friendly Enough Expression Language),不是 JavaScript,也不是 SpEL:
"Hot" 、temperature > 30 and location = "Beijing"
temperature > 30 && location == "Beijing" (用了 JS 语法)TEMPERATURE > 30 (变量名大小写不匹配流程传入的 temperature)FEEL 支持:
+ - * /
> (注意是 =,不是 ==)
"abc",拼接用 +("Hello" + " " + name)[1,2,3],取值用方括号:list[1]
DMN 引擎加载时会校验 XML 结构。如果你手写或拼接生成 XML,最容易漏的是:
没配 )typeRef=number → 必须是 typeRef="number") 在 DMN 1.1 不可用,只在 1.3+ 支持)建议做法:
https://www./link/7a9693015c73ae1d46ea1e8fd0c7a1fb),实时标红cvc-complex-type.2.4.a: Invalid content was found starting with element 'input'. One of '{input}' is expected. → 说明标签顺序错了(DMN 要求 input 必须在 output 前)真正容易被忽略的点是:XML 命名空间和 XSD 版本必须完全一致——哪怕只差一个字符,引擎就拒绝加载,且错误信息极其模糊。