第57章 SATE Template
SATE(SAI Template Engine)中的 Template(模板) 是表现层的核心结构。
上一章已经确定:
Data + Template + Rule → SATE → Rendered Expression → Output
因此,Template 不是数据本身,也不是认知、推理、决策机制,而是规定:
结构化数据应该按照什么结构、什么条件、什么方式表现出来。
SATE Template 的核心目标是:让已经存在的结构化数据按照确定性的模板规则形成表现结果。
1. Template 定义
1.1 Template 是什么
Template 是 SATE 用来描述输出结构的模板对象。
简单来说:
Template = Output Structure + Variable + Property + Method + Condition + Loop
例如,一个简单的 HTML 模板:
<div>
<h1>{{title}}</h1>
<p>{{content}}</p>
</div>
其中:
Template
├── Structure
├── Variable
├── Property
├── Method
├── Condition
└── Loop
SATE 根据输入数据进行映射:
Data
↓
Template
↓
Variable Mapping
↓
Condition Processing
↓
Loop Processing
↓
Render
↓
Output
1.2 Template 不产生知识
必须明确:
Template ≠ Knowledge
Template ≠ Cognition
Template ≠ Reasoning
Template ≠ Decision
Template ≠ Learning
例如:
Data:
{
"name": "Product A",
"price": 100
}
模板:
<h1>{{name}}</h1>
<p>{{price}}</p>
SATE 只是把已有数据放入指定位置。
它不会因为模板而产生:
新的事实
新的知识
新的认知
新的推理结论
1.3 Template 的核心职责
Template 主要负责:
- 定义输出结构
- 定义数据位置
- 定义变量
- 定义属性访问
- 定义方法调用
- 定义条件
- 定义循环
- 定义上下文范围
因此:
Template = 表现结构定义
2. Template Object
Template Object 是模板中的对象。
在 SATE 中,对象可以作为模板数据访问的基本单位。
例如:
Product
{
name
price
stock
state
}
模板:
<div>
<h1>{{Product.name}}</h1>
<p>{{Product.price}}</p>
</div>
这里:
Product
就是 Template Object。
2.1 Object 的作用
Template Object 主要用于组织结构化数据。
例如:
Company
├── name
├── address
├── services
└── contact
模板可以访问:
Company.name
Company.address
Company.services
Company.contact
形成:
Object → Property
2.2 对象嵌套
对象可以继续包含对象:
Company
{
name
address
contact
}
其中:
address
{
city
country
}
模板可以表示:
<h1>{{Company.name}}</h1>
<p>{{Company.address.city}}</p>
<p>{{Company.address.country}}</p>
访问路径:
Company
↓
address
↓
city
这实际上是一种确定性的对象属性映射。
3. Template Variable
Template Variable 是模板中的变量。
例如:
<h1>{{name}}</h1>
其中:
name
就是 Template Variable。
SATE 执行时:
name
↓
Context
↓
Data
↓
Value
例如:
Data:
{
"name": "WSaiOS"
}
模板:
<h1>{{name}}</h1>
结果:
<h1>WSaiOS</h1>
3.1 Variable 的基本结构
可以抽象为:
TemplateVariable
{
name
path
value
type
state
}
例如:
{
name: "name",
path: "Company.name",
value: "Company A",
type: "STRING",
state: "RESOLVED"
}
3.2 Variable Resolution
变量不是直接“生成”出来的,而是进行解析:
Variable Name
↓
Variable Path
↓
Context
↓
Object
↓
Property
↓
Value
例如:
{{Company.name}}
解析:
Company
↓
name
↓
"Company A"
然后输出:
Company A
3.3 Variable 状态
变量可能出现不同状态:
RESOLVED
EMPTY
MISSING
INVALID
CONFLICT
例如:
{{Company.phone}}
如果数据中没有:
Company.phone
SATE 不应该自动创造一个电话号码。
而应该根据模板策略产生确定结果,例如:
EMPTY
或者:
MISSING
4. Template Property
Template Property 用于访问对象的属性。
基本结构:
Object.Property
例如:
Product.name
Product.price
Product.state
模板:
<h1>{{Product.name}}</h1>
<p>{{Product.price}}</p>
<p>{{Product.state}}</p>
4.1 Property 的基本作用
Property 是对象的数据描述。
例如:
Product
{
name: "Electric Toothbrush",
price: 29.90,
state: "active"
}
对应:
Product.name
Product.price
Product.state
4.2 Property 类型
SATE 可以识别不同类型:
STRING
INTEGER
FLOAT
BOOLEAN
DATE
TIME
DATETIME
ARRAY
OBJECT
ENUM
STATE
例如:
Product.price
类型:
FLOAT
而:
Product.state
类型:
STATE
类型决定 SATE 如何进行表现处理。
4.3 Property 不等于 Method
例如:
Product.name
表示:
读取属性
而:
Product.getName()
表示:
调用方法
所以:
Property = 数据
Method = 操作
5. Template Method
Template Method 是模板中允许调用的对象方法。
例如对象:
Product
{
name
price
getName()
getPrice()
}
模板:
<h1>{{Product.getName()}}</h1>
<p>{{Product.getPrice()}}</p>
执行:
Template
↓
Method Resolution
↓
Product.getName()
↓
Method Result
↓
Render
5.1 Method 的作用
Method 主要用于对已有数据执行明确的操作。
例如:
formatPrice()
getDisplayName()
getStateText()
例如:
Product.price = 29.9
方法:
Product.formatPrice()
返回:
"$29.90"
模板:
<p>{{Product.formatPrice()}}</p>
5.2 Method 必须受到控制
SATE 不应该允许模板任意执行系统方法。
因此可以定义:
Allowed Method
例如:
format()
get()
escape()
display()
而不是让模板获得任意系统执行权限。
可以建立:
Template
↓
Method Resolver
↓
Allowed Method
↓
Execute
↓
Result
这样可以避免 Template 变成一个任意程序执行器。
5.3 Template Method 的边界
必须保持:
Template Method ≠ Reasoning
Template Method ≠ Decision
Template Method ≠ Learning
模板方法主要解决:
数据如何表现。
而不是:
系统应该如何思考。
6. Template Condition
Template Condition 用于根据已有数据决定是否表现某一部分内容。
基本形式:
IF Condition THEN Output
例如:
{{if Product.state == "active"}}
<p>Available</p>
{{/if}}
执行:
Product.state
↓
Condition Check
↓
TRUE
↓
Render
输出:
<p>Available</p>
6.1 Condition 状态
模板条件可以返回:
TRUE
FALSE
UNKNOWN
CONFLICT
例如:
Product.stock > 0
如果:
stock = 20
结果:
TRUE
如果:
stock = 0
结果:
FALSE
如果:
stock
不存在:
UNKNOWN
6.2 ELSE
可以支持:
{{if Product.stock > 0}}
<p>In Stock</p>
{{else}}
<p>Out of Stock</p>
{{/if}}
其执行过程:
读取 Product.stock
↓
条件判断
┌────┴────┐
TRUE FALSE
↓ ↓
In Stock Out of Stock
6.3 Template Condition 与 Rule 的区别
两者不能混淆。
Rule
→ 控制系统逻辑
Template Condition
→ 控制表现结构
例如:
Rule:
IF battery < 30
THEN Device.state = needs_charge
这是系统逻辑。
而:
IF Device.state == needs_charge
THEN display warning
这是模板表现逻辑。
因此:
Rule = 规定系统行为
Template Condition = 决定表现内容
7. Template Loop
Template Loop 用于重复表现数组或集合中的数据。
例如:
Products
[
Product_A,
Product_B,
Product_C
]
模板:
<ul>
{{foreach Products as Product}}
<li>{{Product.name}}</li>
{{/foreach}}
</ul>
执行:
Products
↓
Product_A → Render
Product_B → Render
Product_C → Render
最终形成:
<ul>
<li>Product A</li>
<li>Product B</li>
<li>Product C</li>
</ul>
7.1 Loop Context
循环过程中,每一次循环都会产生自己的上下文:
Products
↓
Loop
├── Context 1 → Product_A
├── Context 2 → Product_B
└── Context 3 → Product_C
因此:
{{Product.name}}
在每一次循环中代表当前对象。
7.2 Loop Index
可以提供:
index
例如:
{{foreach Products as Product}}
<p>{{index}} - {{Product.name}}</p>
{{/foreach}}
结果:
1 - Product A
2 - Product B
3 - Product C
Index 是模板运行状态,不属于业务对象本身。
7.3 Loop 不改变数据
这是非常重要的一点:
Loop = 重复表现
不是:
Loop = 批量修改数据
例如:
Products
经过 Loop 后:
Products
本身没有因为模板循环而发生改变。
因此:
Template Loop → Read → Render
而不是:
Template Loop → Modify Business Data
8. Template Context
Template Context 是模板执行过程中当前可访问的数据环境。
它解决的问题是:
当前模板可以访问哪些对象、变量、属性和方法?
例如:
Context
{
Company
Product
User
CurrentDate
}
模板:
<h1>{{Company.name}}</h1>
<h2>{{Product.name}}</h2>
<p>{{User.name}}</p>
SATE 从 Context 中解析这些对象。
8.1 Context 结构
可以定义:
TemplateContext
{
data
objects
variables
methods
parent
state
}
例如:
TemplateContext
{
objects:
{
Company,
Product,
User
},
variables:
{
title,
current_date
},
state:
"ACTIVE"
}
8.2 Context 层级
Context 可以具有层级结构。
例如:
Root Context
│
├── Company
├── Product
│
└── Loop Context
│
└── Product
在循环内部:
{{Product.name}}
优先从当前 Loop Context 查找。
如果不存在,再根据上下文规则向父级查找。
Current Context
↓
Parent Context
↓
Root Context
8.3 Context 生命周期
Template Context 的生命周期可以定义为:
CREATE
↓
LOAD DATA
↓
RESOLVE
↓
ACTIVE
↓
RENDER
↓
COMPLETE
↓
CLEAR
模板执行完成以后,临时 Context 可以释放。
8.4 Context 与 ShortMemory 的区别
二者也不能混淆。
ShortMemory
→ ICAI 当前认知任务的短期记忆
Template Context
→ SATE 当前模板执行的数据环境
例如:
ICAI ShortMemory
{
task: "delivery_inquiry",
origin: "Shenzhen",
destination: "HongKong"
}
经过表现层转换后,可以形成:
Template Context
{
origin: "Shenzhen",
destination: "HongKong"
}
所以:
Memory → 提供认知连续性
Context → 提供模板执行环境
9. Template 示例
下面建立一个完整的 SATE Template 示例。
假设系统已经得到结构化数据:
Company
{
name: "Company A",
city: "Shenzhen",
state: "active"
}
Products
[
{
name: "Product A",
price: 29.90,
state: "active"
},
{
name: "Product B",
price: 39.90,
state: "inactive"
}
]
9.1 Template
<div class="company">
<h1>{{Company.name}}</h1>
<p>City: {{Company.city}}</p>
{{if Company.state == "active"}}
<p>Status: Active</p>
{{else}}
<p>Status: Inactive</p>
{{/if}}
<h2>Products</h2>
<ul>
{{foreach Products as Product}}
<li>
<strong>{{Product.name}}</strong>
<span>
{{Product.price}}
</span>
{{if Product.state == "active"}}
<span>Available</span>
{{else}}
<span>Unavailable</span>
{{/if}}
</li>
{{/foreach}}
</ul>
</div>
9.2 Template 解析
SATE 首先识别模板结构:
Template
│
├── Company Object
│ ├── name Property
│ ├── city Property
│ └── state Property
│
├── Condition
│
└── Products Loop
│
└── Product Object
├── name Property
├── price Property
└── state Property
9.3 Context 建立
TemplateContext
{
Company,
Products
}
进入 Loop 后:
LoopContext
{
Product
}
9.4 Variable Resolution
例如:
{{Company.name}}
解析:
Variable
↓
Company
↓
name
↓
"Company A"
9.5 Property Resolution
例如:
{{Product.price}}
解析:
Product
↓
price
↓
29.90
9.6 Condition Processing
例如:
Product.state == "active"
第一个产品:
active == active
→ TRUE
第二个产品:
inactive == active
→ FALSE
所以两个产品表现不同。
9.7 Loop Processing
Products
↓
Loop
↓
Product A
↓
Render
↓
Product B
↓
Render
最终得到确定性的表现结果。
SATE Template 完整模型
通过本章,可以将 Template 进一步结构化:
Template
{
id
name
source
objects
variables
properties
methods
conditions
loops
context
state
}
其中:
Template
│
├── Object
│
├── Variable
│
├── Property
│
├── Method
│
├── Condition
│
├── Loop
│
└── Context
形成完整的模板执行结构:
Data
↓
Template Context
↓
Template Object
↓
Variable / Property / Method
↓
Condition
↓
Loop
↓
Render
↓
Expression Result
↓
Output
本章核心模型
Template
↓
Context
↓
Object
↓
Variable
↓
Property / Method
↓
Condition
↓
Loop
↓
Render
↓
Output
核心关系:
Object = 表现对象
Variable = 数据引用
Property = 对象属性
Method = 对象操作
Condition = 表现条件
Loop = 重复表现
Context = 执行环境
Template = 组织以上结构
最终可以定义:
SATE Template 是 SAI 模板引擎中的结构化表现定义对象,用于通过 Object、Variable、Property、Method、Condition、Loop 和 Context 对已有数据进行确定性的结构映射与表现处理。
因此,SATE Template 的位置应该始终保持在:
认知结果
↓
决策结果
↓
行为结果
↓
行动结果
↓
Expression
↓
SATE Template
↓
Rendered Output
Template 负责“如何表现”,而不是“如何思考”。