

本文属于机器翻译版本。若本译文内容与英语原文存在差异，则一律以英文原文为准。

# 语法定义
<a name="grammar-srgs-spec"></a>

本主题显示了 Amazon Lex V2 支持的 SRGS 规范的各个部分。所有规则均在 SRGS 规范中定义。有关更多信息，请参阅《W3C 正式推荐标准》中的[1.0 版语音识别语法规范](https://www.w3.org/TR/speech-grammar/)。

**Topics**
+ [标头声明](srgs-header.md)
+ [支持的 XML 元素](srgs-supported-xml.md)
+ [令牌](srgs-tokens.md)
+ [规则引用](srgs-rule-reference.md)
+ [序列和封装](srgs-sequence.md)
+ [重复](srgs-repeats.md)
+ [语言](srgs-language.md)
+ [标签](srgs-tags.md)
+ [Weight](grammar-weights.md)

本文档包括从 W3C 语音识别语法规范 1.0 版（[网址为 https://www.w3）中复制和衍生的材料。 org/TR/speech-grammar/](https://www.w3.org/TR/speech-grammar/))。引文信息如下：

[版权所有](http://www.w3.org/Consortium/Legal/ipr-notice#Copyright) © 2004 [W3C®](http://www.w3.org/)（[MIT](http://www.csail.mit.edu/)、[ERCIM](http://www.ercim.org/)、[Keio](http://www.keio.ac.jp/)），保留所有权利。适用 W3C [责任](http://www.w3.org/Consortium/Legal/ipr-notice#Legal_Disclaimer)、[商标](http://www.w3.org/Consortium/Legal/ipr-notice#W3C_Trademarks)、[文档使用](http://www.w3.org/Consortium/Legal/copyright-documents)和[软件许可](http://www.w3.org/Consortium/Legal/copyright-software)规则。

SRGS 规范文档，即 [W3C 正式推荐标准](https://www.w3.org/2004/02/Process-20040205/tr.html#RecsW3C)，可通过以下许可从 W3C 获得。

## 许可证文本
<a name="license-text"></a>

许可证

通过 and/or 复制本文档或链接到本声明的 W3C 文档，即表示您（被许可人）同意您已阅读、理解并将遵守以下条款和条件：

特此允许出于任何目的以任何方式复制和分发本文档或与本声明相链接的 W3C 文档的内容，且无需支付任何费用或特许权使用费，前提是您在使用的文档的所有副本或其任何部分中包含以下内容：
+ 指向原始 W3C 文档的链接或网址。
+ [http://www.keio.ac.jp/](http://www.keio.ac.jp/) [http://www.w3。 org/Consortium/Legal/2015/doc-许可证](http://www.w3.org/Consortium/Legal/2015/doc-license)”
+ （*如果存在*）W3C 文档的状态。

如果篇幅允许，应提供本**声明**的全文。我们要求您在实施本文档或其任何部分内容时创建的任何软件、文档或其他项目或产品中提供作者身份归属。

本许可不授予对 W3C 文档进行修改或衍生的权利，但以下情况除外：为便于实施本文档中规定的技术规范，任何人均可在软件、软件随附的支持材料以及软件文档中准备和分发衍生作品以及本文档的部分内容，前提是所有此类作品都包含以下声明。但是，明确禁止发布本文档的衍生作品以用作技术规范。

此外，“代码组件”（明确标记为 Web IDL 的部分中的 Web IDL、W3C 定义的标记（HTML、CSS 等）以及明确标记为代码示例的计算机编程语言代码）均根据 [W3C 软件许可证](http://www.w3.org/Consortium/Legal/copyright-software)获得许可。

该声明是：

“版权所有 © 2015 W3C®（MIT、ERCIM、Keio、Beihang）。本软件或文档包括从 [W3C 文档的标题和 URI] 复制或衍生的材料。”

免责声明

本文档“按原样”提供，并且版权所有者不作任何明示或暗示的陈述或保证，包括但不限于对适销性、适用于特定用途、不侵权或侵犯所有权的保证；本文档的内容适用于任何目的；也不保证该等内容的实施不会侵犯任何第三方的专利、版权、商标或其他权利。

版权所有者对因使用本文档或执行或履行其内容而造成的任何直接、间接、特殊或后果性损害不承担任何责任。

未经事先明确书面许可，版权所有者的名称和商标不得用于与本文档或其内容相关的广告或宣传。本文档中的版权所有权将始终归版权所有者所有。

# 标头声明
<a name="srgs-header"></a>

下表显示了语法槽位类型支持的标头声明。有关更多信息，请参阅《W3C 正式推荐标准》*1.0 版语音识别语法规范*中的[语法标头声明](https://www.w3.org/TR/speech-grammar/#S4.1)。


| 声明 | 规范要求 | XML 表单 | Amazon Lex 支持 |  规范 | 
| --- | --- | --- | --- | --- | 
| 语法版本 | 必需 | [4.3](https://www.w3.org/TR/speech-grammar/#S4.3)：grammar 元素上的 version 属性 | 必需 | SRGS | 
| XML 命名空间 | 必填项（仅限 XML） | [4.3](https://www.w3.org/TR/speech-grammar/#S4.3)：grammar 元素上的 xmlns 属性 | 必需 | SRGS | 
| 文档类型 | 必填项（仅限 XML） | [4.3](https://www.w3.org/TR/speech-grammar/#S4.3)：XML DOCTYPE | 推荐 | SRGS | 
| 字符编码 | 推荐 | [4.4](https://www.w3.org/TR/speech-grammar/#S4.4)：XML 声明中的 encoding 属性 | 推荐 | SRGS | 
| 语言 | 在语音模式下是必需的 在 DTMF 模式下被忽略 | [4.5](https://www.w3.org/TR/speech-grammar/#S4.5)：grammar 元素上的 xml:lang 属性 | 在语音模式下是必需的 在 DTMF 模式下被忽略 | SRGS | 
| Mode | 可选 | [4.6](https://www.w3.org/TR/speech-grammar/#S4.6)：grammar 元素上的 mode 属性 | 可选 | SRGS | 
| 根规则 | 可选 | [4.7](https://www.w3.org/TR/speech-grammar/#S4.7)：grammar 元素上的 root 属性 | 必填 | SRGS | 
| 标记格式 | 可选 | [4.8](https://www.w3.org/TR/speech-grammar/#S4.8)：grammar 元素上的 tag-format 属性 | 支持字符串字面量 ECMAScript 和 | SRGS、SISR | 
| 基本 URI | 可选 | [4.9](https://www.w3.org/TR/speech-grammar/#S4.9)：grammar 元素上的 xml:base 属性 | 可选 | SRGS | 
| 发音词典 | 可选、允许多个 | [4.10](https://www.w3.org/TR/speech-grammar/#S4.`0)：lexicon 元素 | 不支持 | SRGS、PLS | 
| 元数据 | 可选、允许多个 | [4.11.1](https://www.w3.org/TR/speech-grammar/#S4.11.1)：meta 元素 | 必需 | SRGS | 
| XML 元数据 | 可选、仅限 XML | [4.11.2](https://www.w3.org/TR/speech-grammar/#S4.11.2)：metadata 元素 | 可选 | SRGS | 
| Tag | 可选、允许多个 | [4.12](https://www.w3.org/TR/speech-grammar/#S4.12)：tag 元素 | 不支持全局标记 | 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">

<grammar xmlns="http://www.w3.org/2001/06/grammar"
         xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
         xml:base="http://www.example.com/base-file-path"
         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"
         mode="voice"
         root="city"
         tag-format="semantics/1.0">
```

# 支持的 XML 元素
<a name="srgs-supported-xml"></a>

Amazon Lex V2 支持以下 XML 元素作为自定义语法：
+ `<item>`
+ `<token>`
+ `<tag>`
+ `<one-of>`
+ `<rule-ref>`

# 令牌
<a name="srgs-tokens"></a>

下表显示了语法槽位类型支持的令牌规范。有关更多信息，请参阅《W3C 正式推荐标准》*1.0 版语音识别语法规范*中的[令牌](https://www.w3.org/TR/speech-grammar/#S2.1)。


| 令牌类型 | 示例 | 是否支持？ | 
| --- | --- | --- | 
| 单个无引号令牌 | hello | 是 | 
| 单个无引号令牌：非字母 | 2 | 可以 | 
| 单个引号的令牌、无空格 | "hello" | 支持。如果双引号只包含单个令牌，则将其删除 | 
| 两个由空格分隔的令牌 | bon voyage | 是 | 
| 四个由空格分隔的令牌 | this is a test | 是 | 
| 单个引号的令牌，有空格 | "San Francisco | 否 | 
| 前后有 <token> 标记的单个 XML 令牌 | <token>San Francisco</token> | 不支持（与单个引号且有空格的令牌相同） | 

**备注**
+ *单个引号的令牌，有空格*：该规范要求将用双引号括起来的单词视为单个令牌。Amazon Lex V2 将其视为以空格分隔的令牌。
+ *<token> 中的单个 XML 令牌*：该规范需要以 <token> 分隔的单词来表示一个令牌。Amazon Lex V2 将其视为以空格分隔的令牌。
+ 当您的语法中发现任何一种用法时，Amazon Lex V2 都会引发验证错误。

**示例**

```
<rule id="state" scope="public">
    <one-of>
        <item>FL</item>
        <item>MA</item>
        <item>NY</item>
    </one-of>
</rule>
```

# 规则引用
<a name="srgs-rule-reference"></a>

下表汇总了语法文档中可能存在的各种形式的规则引用。有关更多信息，请参阅《W3C 正式推荐标准》*1.0 版语音识别语法规范*中的[规则引用](https://www.w3.org/TR/speech-grammar/#S2.2)。


| 引用类型 | XML 表单 | 支持 | 
| --- | --- | --- | 
| [2.2.1](https://www.w3.org/TR/speech-grammar/#S2.2.1) 对本地规则的显式引用 | <ruleref uri="\$1rulename"/> | 是 | 
| [2.2.2](https://www.w3.org/TR/speech-grammar/#S2.2.2) 对由 [URI](https://www.w3.org/TR/speech-grammar/#term-uri) 标识的语法的命名规则的显式引用 | <ruleref uri="grammarURI\$1rulename"/> | 否 | 
| [2.2.2](https://www.w3.org/TR/speech-grammar/#S2.2.2) 对由 [URI](https://www.w3.org/TR/speech-grammar/#term-uri) 标识的语法的根规则的隐式引用 | <ruleref uri="grammarURI"/> | 否 | 
| [2.2.2](https://www.w3.org/TR/speech-grammar/#S2.2.2) 对由具有[媒体类型](https://www.w3.org/TR/speech-grammar/#term-media-type)的 [URI](https://www.w3.org/TR/speech-grammar/#term-uri) 标识的语法的命名规则的显式引用 | <ruleref uri="grammarURI\$1rulename" type="media-type"/> | 否 | 
| [2.2.2](https://www.w3.org/TR/speech-grammar/#S2.2.2) 对由具有[媒体类型](https://www.w3.org/TR/speech-grammar/#term-media-type)的 [URI](https://www.w3.org/TR/speech-grammar/#term-uri) 标识的语法的根规则的隐式引用 | <ruleref uri="grammarURI" type="media-type"/> | 否 | 
| [2.2.3](https://www.w3.org/TR/speech-grammar/#S2.2.3) 特殊规则定义 | `<ruleref special="NULL"/>` `<ruleref special="VOID"/>` `<ruleref special="GARBAGE"/>` | 否 | 

**备注**

1. 语法 URI 是一个外部 URI。例如 `http://grammar.example.com/world-cities.grxml`。

1. 媒体类型可以是：
   + `application/srgs+xml`
   + `text/plain`

**示例**

```
<rule id="city" scope="public">
    <one-of>
        <item>Boston</item>
        <item>Philadelphia</item>
        <item>Fargo</item>
    </one-of>
</rule>

<rule id="state" scope="public">
    <one-of>
        <item>FL</item>
        <item>MA</item>
        <item>NY</item>
    </one-of>
</rule>

<!-- "Boston MA" -> city = Boston, state = MA -->
<rule id="city_state" scope="public">
    <ruleref uri="#city"/> <ruleref uri="#state"/>
</rule>
```

# 序列和封装
<a name="srgs-sequence"></a>

以下示例显示了支持的序列。有关更多信息，请参阅《W3C 正式推荐标准》*1.0 版语音识别语法规范*中的[序列和封装](https://www.w3.org/TR/speech-grammar/#S2.3)。

**示例**

```
<!-- sequence of tokens -->
this is a test

<!--sequence of rule references-->
<ruleref uri="#action"/> <ruleref uri="#object"/>

<!--sequence of tokens and rule references-->
the <ruleref uri="#object"/> is <ruleref uri="#color"/>

<!-- sequence container -->
<item>fly to <ruleref uri="#city"/> </item>
```

# 重复
<a name="srgs-repeats"></a>

下表显示了支持的规则重复扩展。有关更多信息，请参阅《W3C 正式推荐标准》*1.0 版语音识别语法规范*中的[重复](https://www.w3.org/TR/speech-grammar/#S2.5)。


| XML 表单示例 | 行为 | 是否支持？ | 
| --- | --- | --- | 
| *repeat="n"* repeat="6" | 所包含的表达式恰好重复“n”次。“n”必须为“0”或正整数。 | 是 | 
| *repeat="m-n"* repeat="4-6" | 所包含的扩展在“m”与“n”次（含）之间重复。“m”和“n”必须都是“0”或正整数，并且“m”必须小于或等于“n”。 | 是 | 
| *repeat="m-"* repeat="3-" | 所包含的扩展会重复“m”次或更多次（含）。“m”必须是“0”或正整数。例如，“3-”声明所包含的扩展可以出现三次、四次、五次或更多次。 | 是 | 
| *repeat="0-1"*  | 所包含的扩展是可选的。 | 是 | 
| <item repeat="2-4" repeat-prob="0.8"> |   | 否 | 

# 语言
<a name="srgs-language"></a>

以下讨论适用于语法的语言标识符。有关更多信息，请参阅《W3C 正式推荐标准》*1.0 版语音识别语法规范*中的[语言](https://www.w3.org/TR/speech-grammar/#S2.7)。

默认情况下，语法是单一语言文档，[语法标头](https://www.w3.org/TR/speech-grammar/#S4.1)的语言声明中提供了[语言标识符](https://www.w3.org/TR/speech-grammar/#term-language)。除非另有声明，否则该语法中的所有令牌均**将根据该语法的语言进行处理**。**不支持**语法级别的语言声明。

在以下示例中：

1. Amazon Lex V2 **支持**语言“en-US”的语法标头声明。

1. **不支持**项目级语言附件（中高亮显示*red*）。如果语言附件与标头声明不同，Amazon Lex V2 会引发验证错误。

```
<?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">

  <!--
     single language attachment to tokens
     "yes" inherits US English language
     "oui" is Canadian French language
  -->
  <rule id="yes">
    <one-of>
      <item>yes</item>
      <item xml:lang="fr-CA">oui</item>
    </one-of>
  </rule>

  <!-- Single language attachment to an expansion -->
  <rule id="people1">
    <one-of xml:lang="fr-CA">
      <item>Michel Tremblay</item>
      <item>André Roy</item>
    </one-of>
  </rule>
</grammar>
```

# 标签
<a name="srgs-tags"></a>

以下讨论适用于为语法定义的标签。有关更多信息，请参阅《W3C 正式推荐标准》*1.0 版语音识别语法规范*中的[标记](https://www.w3.org/TR/speech-grammar/#S2.6)。

根据 SRGS 规范，可以通过以下方式定义标记：

1. 作为标头声明的一部分，如[标头声明](srgs-header.md)中所述。

1. 作为 *<rule>* 定义的一部分。

支持以下标记格式：
+ `semantics/1.0`(SISR， ECMAScript)
+ `semantics/1.0-literals`（SISR 字符串文本）

不支持以下标记格式：
+ `swi-semantics/1.0`（Nuance 专有）

**示例**

```
<grammar xmlns="http://www.w3.org/2001/06/grammar"
         xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
         xml:base="http://www.example.com/base-file-path"
         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"
         mode="voice"
         root="city"
         tag-format="semantics/1.0-literals">
    <rule id="no">
        <one-of>
            <item>no</item>
            <item>nope</item>
            <item>no way</item>
        </one-of>
        <tag>no</tag>
    </rule>
</grammar>
```

# Weight
<a name="grammar-weights"></a>

您可以为元素添加*权重*属性。权重是一个正的浮点值，表示语音识别期间项目中短语的增强程度。有关更多信息，请参阅《W3C 正式推荐标准》1.0 版语音识别语法规范中的[权重](https://www.w3.org/TR/speech-grammar/)。

权重必须大于 0 且小于等于 10，且只能有一个小数位。如果权重大于 0 且小于 1，则该短语会被负增强。如果权重大于 1 且小于等于 10，则该短语会被正增强。权重 1 等同于无权重，而且该短语不做增强处理。

为项目指定适当的权重以提高语音识别性能是一项艰巨的任务。以下是一些在指定权重时可以遵循的提示：
+ 开始时使用没有指定项目权重的语法。
+ 确定语音中经常被误认的模式。
+ 对权重应用不同的值，直到您注意到语音识别性能有所改善并且没有回归为止。

**示例 1**

例如，如果有适用于机场的语法，并且您发现 *New York* 经常被误认为是 *Newark*，则可以通过将“New York”的权重指定为 5 来对该值进行正增强。

```
<rule> id="airport">
    <one-of>
        <item>
            Boston
            <tag>out="Boston"</tag>
        </item>
        <item weight="5">
            New York
            <tag>out="New York"</tag>
        </item>
        <item>
            Newark
            <tag>out="Newark"</tag>
        </item>
    </one-of>
</rule>
```

**示例 2**

例如，您有适用于机票预订代码的语法，该机票预定代码以英文字母开头，后跟三位数字。该预定代码最有可能以 B 或 D 开头，但您会发现 B 经常被误认为是 P，D 经常被误认为是 T。此时，您可以对 B 和 D 进行正增强。

```
<rule> id="alphabet">
    <one-of>
        <item>A<tag>out.letters+='A';</tag></item>
        <item weight="3.5">B<tag>out.letters+='B';</tag></item>
        <item>C<tag>out.letters+='C';</tag></item>
        <item weight="2.9">D<tag>out.letters+='D';</tag></item>
        <item>E<tag>out.letters+='E';</tag></item>
        <item>F<tag>out.letters+='F';</tag></item>
        <item>G<tag>out.letters+='G';</tag></item>
        <item>H<tag>out.letters+='H';</tag></item>
        <item>I<tag>out.letters+='I';</tag></item>
        <item>J<tag>out.letters+='J';</tag></item>
        <item>K<tag>out.letters+='K';</tag></item>
        <item>L<tag>out.letters+='L';</tag></item>
        <item>M<tag>out.letters+='M';</tag></item>
        <item>N<tag>out.letters+='N';</tag></item>
        <item>O<tag>out.letters+='O';</tag></item>
        <item>P<tag>out.letters+='P';</tag></item>
        <item>Q<tag>out.letters+='Q';</tag></item>
        <item>R<tag>out.letters+='R';</tag></item>
        <item>S<tag>out.letters+='S';</tag></item>
        <item>T<tag>out.letters+='T';</tag></item>
        <item>U<tag>out.letters+='U';</tag></item>
        <item>V<tag>out.letters+='V';</tag></item>
        <item>W<tag>out.letters+='W';</tag></item>
        <item>X<tag>out.letters+='X';</tag></item>
        <item>Y<tag>out.letters+='Y';</tag></item>
        <item>Z<tag>out.letters+='Z';</tag></item>
    </one-of>
</rule>
```