2

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

我用 mode=voice 和 dtmf 试过了。

除了语音服务器,我还需要其他什么吗?文件位于同一文件夹中。

4

1 回答 1

4

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

于 2011-01-06T10:46:11.967 回答