voicexml中外部语法的结构

时间:2011-01-05 19:55:52

标签: external grammar 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中吗?

还是需要更多代码?

提前致谢

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

----------------编辑-------

您好,

我正在引用语法文件:

<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 个答案:

答案 0 :(得分:4)

至少你需要XML声明(条目)。 Doctypes通常是可选的(对于一些解析器,你最好避免使用)。对于大多数语法,大多数其他属性也可以避免。

以下内容来自SRGS (grammar) specification

中的示例
  <?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。这是不好的形式,但并不总是被注意到。如果Internet链接断开,则系统无法正确响应。而且,如果你有足够的音量,你可能会被识别为DOS攻击并被阻止一段时间。