在构建xAPI语句时,最初的简单形式仅包含“[actor] [verb] [object]”三个字符串标签,例如“Sally experienced ‘Solo Hang Gliding’”的结构化表示为:
```json
{
"actor": "Sally",
"verb": "experienced",
"object": "Solo Hang Gliding"
}
```
然而,为了在实际应用中实现唯一标识和上下文关联,xAPI语句对象需要更复杂的结构。本文将根据资料内容,详细说明如何构建包含完整身份验证邮箱(mbox)、标准化动词ID(id)以及活动定义(definition)的复杂xAPI语句对象,并解释如何利用`context`或`extensions`字段记录背景信息或附加结果。

### 1. 构建包含唯一标识符的复杂xAPI语句对象

简单字符串的局限性在于无法区分“谁”和“什么”。为了解决这个问题,xAPI语句对象为核心组件添加了结构化字段,以确保唯一识别。一个更完整的xAPI语句示例展示了这一扩展:

```json
{
"actor": {
"name": "Sally Glider",
"mbox": "mailto:sally@example.com" // 包含完整的身份验证邮箱
},
"verb": {
"id": "http://adlnet.gov/expapi/verbs/experienced", // 标准化的动词ID
"display": {"en-US": "experienced"}
},
"object": {
"id": "http://example.com/activities/solo-hang-gliding", // 唯一标识符
"definition": {
"name": { "en-US": "Solo Hang Gliding" }
}
}
}
```

* **Actor (执行者):** 通过添加`mbox`字段(如`mailto:sally@example.com`),可以提供一个用于唯一标识该人的电子邮件地址。此外,`name`字段用于提供描述性名称。
* **Verb (动词):** 使用`id`字段(如`http://adlnet.gov/expapi/verbs/experienced`)来引用一个标准化的动词标识符,这比单纯的字符串更具可追溯性。
* **Object (对象):** 通过添加`id`字段(如`http://example.com/activities/solo-hang-gliding`)来唯一标识所涉及的活动或资源,并在`definition`中提供其名称。

这些结构化的添加,核心目的是“确保我们有了一种方式来关联关于同一人、同一活动或同一动词的语句”。

### 2. 记录背景环境和附加结果数据

除了核心的actor、verb、object结构外,xAPI语句还提供了机制来记录更丰富的上下文信息:

* **Context 字段:** 当需要描述学习发生的背景环境时,可以使用`context`字段。例如,可以记录“‘Sally completed ‘Solo Hang Gliding’ in the context of ‘Army Training Level 1’’”这样的信息。
* **Extensions 字段:** 如果需要附加结果数据,例如记录“‘Bob passed ‘Truck Driving Training’ with score 90%’”,则可以通过在语句中声明自定义字段,即使用`extensions`字段来实现。

通过这些扩展字段,xAPI语句可以承载比基础“我做了什么”更丰富的、多维度的经验数据。

总结来说,从简单的“I did this”到复杂的结构化语句,xAPI通过引入`mbox`、标准化的`id`、`definition`结构,以及灵活的`context`和`extensions`字段,极大地增强了语句的唯一性和信息承载能力,从而实现对经验数据的全面记录和关联。

信息来源