Как написать грамматические правила в элементе <data> в файле scxml?
У меня возникли проблемы с выяснением того, как писать грамматические правила прямо в файлах 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>
Если бы я хотел встроить это правило грамматики в элемент в battle.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>
Теперь давайте предположим, что battle.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>
Теперь, как я могу записать это inline в элемент в battle.scxml, как я это делал в предыдущем случае?
1 ответ
Это в значительной степени не определено согласно рекомендации SCXML и будет зависеть от вашей платформы. Однако я сомневаюсь, что простого смешивания пространств имен vxml и scxml достаточно для любого совместимого интерпретатора SCXML. Скорее всего, вам потребуется вызвать браузер VoiceXML и отправить разметку VoiceXML как часть запросов на отправку или предоставить настраиваемые элементы для исполняемого содержимого в пространстве имен vxml.
Существует некоторая предварительная поддержка для интерпретатора JVoiceXML VoiceXML в качестве инициатора в uSCXML (через события жизненного цикла W3C MMI), и вы можете зарегистрировать свои собственные элементы как исполняемый контент в пользовательских пространствах имен, что позволяет использовать оба подхода.