首页 理论 架构 工程 文档 白皮书 著作 研究 案例 下载 博客 关于 开始使用 →

第57章 SATE Template

第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 主要负责:

  1. 定义输出结构
  2. 定义数据位置
  3. 定义变量
  4. 定义属性访问
  5. 定义方法调用
  6. 定义条件
  7. 定义循环
  8. 定义上下文范围

因此:

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 负责“如何表现”,而不是“如何思考”。

Leave a Reply

Your email address will not be published. Required fields are marked *