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

How do I verify that my SCXML defines a valid state machine?

我刚刚开始研究定义状态机和 SCXML looks attractive, especially the Apache Commons SCXML for Java。显然我可以验证 XML(使用适当的 XSD)。

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

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

uSCXML 发行版中的 uscxml-analyze 工具可以做到这一点:

$ uscxml-browser -c ../../test/w3c/ecma/test144.scxml

它会检查一大堆 issues:

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

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