我在如何直接在scxml文件中内联编写语法规则而不是在外部grxml文件中链接它们时遇到了一些麻烦。
让我举一个例子说明:
combat.scxml
------------
<?xml version="1.0" encoding="utf-8"?>
<scxml xmlns="http://www.w3.org/2005/07/scxml" xmlns:vxml="http://www.w3.org/2001/vxml" version="1.0" initial="Start">
<state id="WeaponChoice">
<onentry>
<vxml:prompt>What kind of weapon do you want to use?</vxml:prompt>
</onentry>
<datamodel>
<data id="WeaponChoiceGrammar" expr="./combat.grxml#weapon"/>
</datamodel>
</state>
</scxml>
combat.grxml
------------
<?xml version="1.0" encoding="utf-8"?>
<grammar>
<rule id="weapon">
<one-of>
<item>sword</item>
<item>knife</item>
<item>hammer</item>
<item>bow</item>
<item>crossbow</item>
</one-of>
</rule>
</grammar>
如果我想在&lt; data&gt;中内联编写该语法规则在combat.scxml中的元素,我会这样做:
combat.scxml
------------
<?xml version="1.0" encoding="utf-8"?>
<scxml xmlns="http://www.w3.org/2005/07/scxml" xmlns:vxml="http://www.w3.org/2001/vxml" version="1.0" initial="Start">
<state id="WeaponChoice">
<onentry>
<vxml:prompt>What kind of weapon do you want to use?</vxml:prompt>
</onentry>
<datamodel>
<data id="WeaponChoiceGrammar">
<rule id="weapon">
<one-of>
<item>sword</item>
<item>knife</item>
<item>hammer</item>
<item>bow</item>
<item>crossbow</item>
</one-of>
</rule>
</data>
</datamodel>
</state>
</scxml>
现在,让我们假设combat.grxml是这样的:
combat.grxml
------------
<?xml version="1.0" encoding="utf-8"?>
<grammar>
<rule id="weapon">
<one-of>
<item tag="melee"><ruleref uri="#melee"/></item>
<item tag="ranged"><ruleref uri="#ranged"/></item>
</one-of>
</rule>
<rule id="melee">
<one-of>
<item>sword</item>
<item>knife</item>
<item>hammer</item>
</one-of>
</rule>
<rule id="ranged">
<one-of>
<item>bow</item>
<item>crossbow</item>
</one-of>
</rule>
</grammar>
现在,我怎么能在&lt; data&gt;中内联写入内联在combat.scxml中的元素,就像我之前的情况一样?
答案 0 :(得分:1)
根据SCXML建议,这几乎是未定义的,取决于您的平台。但是,我怀疑只是混合使用vxml和scxml命名空间就足以满足任何兼容的SCXML解释器。您很可能需要调用VoiceXML浏览器并将VoiceXML标记作为发送请求的一部分发送,或者为vxml命名空间中的可执行内容提供自定义元素。
JVoiceXML VoiceXML解释器作为uSCXML中的调用者(通过W3C MMI生命周期事件)有一些初步支持,您可以将自己的元素注册为自定义命名空间中的可执行内容,从而允许这两种方法。