如何验证我的 SCXML 定义了有效的状态机?

Kev*_*inM 3 java scxml

我刚刚开始研究定义状态机,SCXML看起来很有吸引力,尤其是Apache Commons SCXML for Java。显然我可以验证 XML(使用适当的 XSD)。

但是,我显然找不到任何方法来验证定义的状态机是否有效(没有死胡同,没有无法访问的状态等)。

但是如何在执行之前验证已定义的状态机?特别是我对可以集成到构建工具链中的工具(即从命令行)感兴趣。

sra*_*ski 5

来自uSCXML发行版的 uscxml-analyze 工具将做到这一点:

$ uscxml-browser -c ../../test/w3c/ecma/test144.scxml
Run Code Online (Sandbox Code Playgroud)

它检查一大堆问题

  • 必需属性
  • 有效的父元素
  • 有效的默认历史配置
  • 有效的初始过渡
  • 有效的初始属性
  • 无法访问的状态层次结构
  • state id 属性的唯一性
  • 转换的有效目标
  • 冗余/不可选择的转换
  • 多余的历史元素
  • 目标集的合法配置
  • 一堆属性/元素组合约束
  • 数据模型表达式的有效语法

uSCXML 解释器还将在解释过程中检查宏步骤中的循环。