

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

# 语法槽位类型
<a name="building-srgs"></a>

使用语法槽位类型，您可以按照 SRGS 规范以 XML 格式编写自己的语法，以便在对话中收集信息。Amazon Lex V2 可以识别符合语法中指定规则的言语。您还可以使用语法文件中的 ECMAScript 标签来提供语义解释规则。然后，当出现匹配时，Amazon Lex 会将标签中设置的属性作为已解析值返回。

您只能在英语（澳大利亚）、英语（英国）和英语（美国）区域设置中创建语法槽位类型。

语法槽位类型分为两个部分。首先是使用 SRGS 规范格式编写的语法本身。该语法解释用户的言语。如果该言语被语法所接收，该言语是匹配的，否则就会被拒绝。如果匹配了某个言语，则该言语将传递给脚本（如有）。

第二个是语法槽类型的一部分，它是一个可选脚本 ECMAScript ，用于将输入转换为插槽类型返回的已解析值。例如，您可以使用脚本将口语数字转换为数字。 ECMAScript 语句包含在<tag>元素中。

以下示例依据 SRGS 规范采用 XML 格式，其中显示了 Amazon Lex V2 接受的有效语法。该语法定义了一种接受卡号，并确定这些卡号是用于普通账户还是高级账户的语法槽位类型。有关可接受句法的更多信息，请参阅以下主题：[语法定义](grammar-srgs-spec.md)和[脚本格式](grammar-ecmascript-spec.md)。

```
<grammar version="1.0" xmlns="http://www.w3.org/2001/06/grammar"
         xml:lang="en-US" tag-format="semantics/1.0" root="card_number">

   <rule id="card_number" scope="public">
        <item repeat="0-1">
            card number
        </item>
        <item>
            seven
            <tag>out.value = "7";</tag>
         </item>
         <item>
            <one-of>
               <item>
                  two four one
                  <tag> out.value = out.value + "241"; out.card_type = "premium"; </tag>
               </item>
               <item>
                  zero zero one
                  <tag> out.value = out.value + "001"; out.card_type = "regular";</tag>
               </item>
            </one-of>
         </item>
   </rule>
</grammar>
```

上述语法仅接受两种类型的卡号：7241 或 7001。这两者都可以选择以“卡号”为前缀。它还包含可用于语义解释的 ECMAScript 标签。通过语义解释，言语“卡号七二四一”将返回以下对象：

```
{
    "value": "7241",
    "card_type": "premium"
}
```

在、和操作返回的对象中，此`resolvedValues`对象作为 JSON 序列化字符串返回。[RecognizeText[RecognizeUtterance[StartConversation](https://docs.aws.amazon.com/lexv2/latest/APIReference/API_runtime_StartConversation.html)](https://docs.aws.amazon.com/lexv2/latest/APIReference/API_runtime_RecognizeUtterance.html)](https://docs.aws.amazon.com/lexv2/latest/APIReference/API_runtime_RecognizeText.html)

## 添加语法槽位类型
<a name="adding-grammar-slot-type"></a>

**要添加语法槽位类型，请执行以下操作：**

1. 将槽位类型的 XML 定义上传到 S3 存储桶。记下存储桶名称和文件路径。
**注意**  
最大文件大小为 100 KB。

1. 登录 AWS 管理控制台并通过以下网址打开 Amazon Lex 控制台[https://console.aws.amazon.com/lex/](https://console.aws.amazon.com/lex/)。

1. 从左侧菜单中选择**机器人**，然后选择要添加语法槽位类型的机器人。

1. 选择**查看语言**，然后选择要添加语法槽位类型的语言。

1. 选择**查看槽位类型**。

1. 选择**添加槽位类型**，然后选择**添加语法槽位类型**。

1. 指定槽位类型的名称，然后选择**添加**。

1. 选择包含定义文件的 S3 存储桶，然后输入文件路径。选择**保存槽位类型**。