我正在创建不同的 SCXML 文件,然后由 Qt 应用程序使用。为了更好地构造我的状态机,我想将一台机器的公共部分与其他所有机器的自定义状态分开。所以我想把我的状态机分成2个文件。
父文件:parentStateMachine.scxml
<?xml version="1.0" encoding="UTF-8"?>
<scxml xmlns="http://www.w3.org/2005/07/scxml"
version="1.0"
binding="early"
xmlns:qt="http://www.qt.io/2015/02/scxml-ext"
name="MyStatemachine.scxml"
qt:editorversion="4.2.2"
datamodel="ecmascript"
initial="s1"
xmlns:xi="http://www.w3.org/2001/XInclude">
<state id="init">
<transition type="external" event="prepare" target="configure"/>
</state>
<state id="configure">
<transition type="external" event="start" target="run"/>
</state>
<parallel id="run">
<!-- include here application specific states-->
<transition type="external" event="stop" target="end"/>
</parallel>
<final id="end">
</final>
</scxml>
特定于应用程序:applicationSpecific1.scxml
<state id="applicationSpecificState1"/>
<state id="applicationSpecificState2"/>
<state id="applicationSpecificState3"/>
我尝试通过两种方式将特定于父应用程序的应用程序包括在内:
我尝试插入
<xi:include href="applicationSpecific1.xml"parse="text"/>
而不是评论。我尝试
<!DOCTYPE scxml [<!ENTITY innerFile SYSTEM "applicationSpecific1.scxml">]>
在xml
标签之后添加,然后添加&innerFile;
而不是评论。
当我加载文档时,它们会被很好地解析,但从行为中我会推断它没有考虑到应用程序特定的 scxml 中定义的任何内容。
PS: 我发现了这个旧的未解决的错误报告,我希望它已经解决了。 https://bugreports.qt.io/browse/QTBUG-1088