структура внешней грамматики в voicexml

как выглядит структура внешней грамматики vxml?

на данный момент у меня есть следующая встроенная грамматика:

<grammar root="main" version="1.0" xml:lang="de-DE">

  <rule id="main" scope="public">
    <one-of>
      <item> 1 </item>
      <item> 2 </item>
      <item>3 </item>
      <item> 4</item>
    </one-of>
  </rule>

</grammar>

вместо этой встроенной грамматики я хочу написать

<grammar src = "mygrammar.grxml" type="application/srgs+xml" />

и обратитесь к внешней грамматике.

Могу ли я просто скопировать встроенную грамматику и поместить ее в mygrammer.grxml?

или мне нужно еще несколько строк кода?

заранее спасибо

----РЕДАКТИРОВАТЬ----

теперь, где раньше была моя встроенная грамматика, у меня есть

<grammar src = "grammar_produkte.grxml" type="application/srgs+xml" />

и моя внешняя грамматика выглядит так (как вы сказали):

<?xml version="1.0" ?>
<grammar root="main" version="1.0" xml:lang="de-DE">

  <rule id="main" scope="public">
    <one-of>
      <item> 1 </item>
      <item> 2 </item>
      <item> 3 </item>
      <item> 4 </item>
    </one-of>
  </rule>
</grammar>

но это не работает. Пишет, что произошла ошибка и приложение останавливается. Я сделал что-то не так? Файл находится в том же каталоге, что и .vxml.

Я использую MS Speech Server 2007.

----------------Редактировать-------

Привет,

Я ссылаюсь на файл грамматики с помощью:

<grammar src = "grammar_produkte2.grxml" type="application/srgs+xml"  />

В дополнение к грамматике, которую я использовал раньше, теперь я использую этот пример (с веб-сайта):

 <?xml version="1.0"?>

<grammar xml:lang="de-DE" 
tag-format="semantics-ms/1.0" version="1.0" 
root="Root" mode="voice" 
xmlns="http://www.w3.org/2001/06/grammar" 
xmlns:sapi=
"http://schemas.microsoft.com/
Speech/2002/06/SRGSExtensions">


    <rule id="produkte" scope="public">
       <one-of>
        <item>
          <item>ham</item>
          <tag>$._value = "ham"</tag>
        </item>
        <item>
          <item>roast beef</item>
          <tag>$._value = "roast beef"</tag>
        </item>
        <item>
          <item>italian</item>
          <tag>$._value = "italian"</tag>
        </item>
      </one-of>
     </rule>
 </grammar>

Я попробовал это с режимом = голос и DTMF.

Нужно ли мне что-нибудь еще, кроме речевого сервера? Файлы находятся в той же папке.


person Tyzak    schedule 05.01.2011    source источник


Ответы (1)


Как минимум вам понадобится XML-декларация (запись). Типы документов обычно необязательны (и для некоторых парсеров лучше их избегать). Большинства других атрибутов для большинства грамматик также можно избежать.

Ниже приведен пример из спецификации SRGS (грамматика):

  <?xml version="1.0" encoding="ISO-8859-1"?>

  <!DOCTYPE grammar PUBLIC "-//W3C//DTD GRAMMAR 1.0//EN"
       "http://www.w3.org/TR/speech-grammar/grammar.dtd"> 
   <!-- the default grammar language is US English --> 
   <grammar xmlns="http://www.w3.org/2001/06/grammar"
      xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
      xsi:schemaLocation="http://www.w3.org/2001/06/grammar
      http://www.w3.org/TR/speech-grammar/grammar.xsd"
      xml:lang="en-US" version="1.0">
    ...
   </grammar>

В вашем конкретном примере и для большинства платформ должно быть достаточно следующего:

<?xml version="1.0" ?>
<grammar root="main" version="1.0" xml:lang="de-DE">
  <rule id="main" scope="public">
    <one-of>
      <item> 1 </item>
      <item> 2 </item>
      <item>3 </item>
      <item> 4</item>
    </one-of>
  </rule>
</grammar>

Выше я упомянул, что doctype в некоторых случаях является проблемой. Я нашел некоторые системы, которые постоянно загружают DTD, если они есть в списке. Это дурной тон, но не всегда замечаемый. Если связь с Интернетом обрывается, система не отвечает правильно. И, если у вас достаточно объема, вы можете быть идентифицированы как DOS-атака и заблокированы на определенный период времени.

person Jim Rush    schedule 06.01.2011
comment
хм.. не работает, подробнее я написал в своем посте выше. - person Tyzak; 06.01.2011
comment
Я нашел образец на devx.com/codemag/Article/30085/1954. для платформы МСС. Может потребоваться атрибут формата тега в элементе грамматики. Стандартным значением для вашей грамматики будет семантика/1.0-литералы, но если бы она не была встроенной, вы бы не ожидали, что она понадобится в качестве внешней грамматики. В противном случае это выглядит правильно, и другие атрибуты должны быть необязательными. - person Jim Rush; 06.01.2011