структура внешней грамматики в voicexml - PullRequest
2 голосов
/ 05 января 2011

как выглядит структура внешней грамматики 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?

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

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

---- EDIT ----

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

<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

---------------- Edit -------

Здравствуйте,

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

<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>

Я пробовал это с mode = voice и dtmf.

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

1 Ответ

4 голосов
/ 06 января 2011

Как минимум вам понадобится декларация 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-атака и на некоторое время заблокированы.

...