第249章 Smarty数据模型
249.1 Smarty数据模型概念
第248章已经建立:
ViewData→Smarty→Template→HTMLViewData\rightarrow Smarty\rightarrow Template\rightarrow HTML
Smarty本身不产生ICAI数据,而是接收已经由Controller、Service、Engine和Domain Object处理完成的数据。
因此,本章进一步定义Smarty所使用的数据模型。
其基本关系为:
ICAI Domain Data→ViewData→Smarty→HTMLICAI\ Domain\ Data \rightarrow ViewData \rightarrow Smarty \rightarrow HTML
其中,ICAI Domain Data表示机器个体内部已经形成的领域数据;View Data表示为了页面表现而组织的数据结构。
因此:
DomainData≠ViewDataDomainData\neq ViewData ViewData≠TemplateViewData\neq Template Template≠HTMLTemplate\neq HTML
三者分别属于不同层次。
249.2 View Data定义
View Data是View层用于页面表现的数据集合。
可以定义为:
ViewData={Individual,Object,State,Cognition,…}ViewData= \{Individual,Object,State,Cognition,\ldots\}
其中:
- Individual:机器个体数据;
- Object:对象数据;
- State:状态数据;
- Cognition:认知数据。
根据具体页面,还可以继续加入:
Relation
Goal
Capability
Behavior
Action
Result
Memory
Experience
Learning
Maintenance
Message
Error
因此View Data并不是一个固定的单一数据表,而是一种页面数据结构。
249.3 View Data的来源
View Data不是凭空产生的。
其来源关系为:
Repository→DomainObject→Engine→Service→Controller→ViewDataRepository \rightarrow DomainObject \rightarrow Engine \rightarrow Service \rightarrow Controller \rightarrow ViewData
如果数据已经存在于Domain Object中,则Controller可以根据页面需要进行组织。
例如:
$viewData = array(
'individual' => $individualData,
'object' => $objectData,
'state' => $stateData,
'cognition' => $cognitionData
);
最终:
ViewData={IndividualData,ObjectData,StateData,CognitionData}ViewData= \{ IndividualData, ObjectData, StateData, CognitionData \}
249.4 View Data不是数据库记录
必须区分:
DatabaseRecord≠DomainObject≠ViewDataDatabaseRecord\neq DomainObject\neq ViewData
数据库记录主要用于持久化。
Domain Object用于表达领域对象。
View Data用于页面表现。
例如数据库可能保存:
individual_id
individual_type
current_state
current_method
updated_at
而页面可能需要:
ID
名称
类型
状态
当前方法
最后更新时间
Controller可以将数据库经过领域层处理后的结果重新组织为:
ViewDataViewData
因此页面不需要知道数据库表结构。
249.5 View Data的层次结构
ICAI页面可以建立分层View Data:
ViewData
│
├── Individual
│
├── Object
│
├── State
│
└── Cognition
进一步可以扩展:
ViewData
│
├── Individual
│ ├── ID
│ ├── Name
│ └── Type
│
├── Object
│ ├── ID
│ ├── Name
│ └── Attributes
│
├── State
│ ├── Current
│ ├── Previous
│ └── Time
│
└── Cognition
├── Judgment
├── Reason
├── Confidence
└── Time
这样Smarty模板可以通过层级结构访问数据。
249.6 个体数据
个体数据用于描述当前页面所对应的ICAI机器个体。
可以定义:
IndividualData={ID,Name,Type,Status}IndividualData= \{ID,Name,Type,Status\}
例如:
$individualData = array(
'id' => 'ICAI-001',
'name' => '任务处理个体',
'type' => 'TaskProcessor',
'status' => 'running'
);
其中:
id表示机器个体唯一标识;name表示机器个体名称;type表示机器个体类型;status表示当前运行状态。
Smarty模板:
<h2>{$individual.name}</h2>
<p>ID:{$individual.id}</p>
<p>类型:{$individual.type}</p>
<p>状态:{$individual.status}</p>
最终:
IndividualData→Smarty→HTMLIndividualData \rightarrow Smarty \rightarrow HTML
249.7 个体数据与机器个体
页面上的个体数据并不等于机器个体本身。
IndividualData≠IndividualIndividualData\neq Individual
机器个体可能包含:
I={ID,T,O,A,S,R,K,G,C,Md,B,H}I= \{ ID,T,O,A,S,R,K,G,C,Md,B,H \}
而某个页面可能只需要:
ViewData.Individual={ID,Name,Type,Status}ViewData.Individual= \{ID,Name,Type,Status\}
因此View Data是机器个体信息的页面表现子集。
249.8 对象数据
ICAI中的机器个体不是孤立的数据集合,而是由多个对象构成。
对象数据可以定义为:
ObjectData={ID,Type,Name,Attributes}ObjectData= \{ID,Type,Name,Attributes\}
例如:
$objectData = array(
'id' => 'OBJ-001',
'type' => 'Task',
'name' => 'Task-001',
'attributes' => array(
'priority' => 'high',
'source' => 'internal'
)
);
模板:
<h2>对象信息</h2>
<p>对象ID:{$object.id}</p>
<p>对象类型:{$object.type}</p>
<p>对象名称:{$object.name}</p>
<p>优先级:{$object.attributes.priority}</p>
<p>来源:{$object.attributes.source}</p>
249.9 对象数据与个体数据
个体是机器个体的主体。
对象是机器个体认知和行为所涉及的具体对象。
因此:
Individual≠ObjectIndividual\neq Object
例如:
ICAI-001
↓
认知
↓
Task-001
页面数据:
Individual
ID = ICAI-001
Object
ID = OBJ-001
Name = Task-001
二者可以同时存在于View Data:
ViewData={IndividualData,ObjectData}ViewData= \{ IndividualData, ObjectData \}
249.10 对象集合数据
一个机器个体可能同时面对多个对象。
因此:
Objects={O1,O2,…,On}Objects=\{O_1,O_2,\ldots,O_n\}
Controller可以提供:
$objects = array(
array(
'id' => 'OBJ-001',
'name' => 'Task-001',
'type' => 'Task'
),
array(
'id' => 'OBJ-002',
'name' => 'Task-002',
'type' => 'Task'
)
);
Smarty:
<h2>对象列表</h2>
<ul>
{foreach $objects as $object}
<li>
{$object.id}
-
{$object.name}
-
{$object.type}
</li>
{/foreach}
</ul>
这里Smarty只负责集合显示。
对象识别和对象选择仍然属于ICAI认知系统。
249.11 状态数据
状态数据用于表示机器个体、对象或者运行过程在某一时间点的状态。
可以定义:
StateData={Current,Previous,Time}StateData= \{Current,Previous,Time\}
例如:
$stateData = array(
'current' => 'running',
'previous' => 'waiting',
'time' => '2026-09-13 20:00:00'
);
Smarty:
<h2>状态</h2>
<p>当前状态:{$state.current}</p>
<p>之前状态:{$state.previous}</p>
<p>更新时间:{$state.time}</p>
249.12 状态数据的变化
ICAI运行过程中:
Statet→EventStatet+1State_t\xrightarrow{Event}State_{t+1}
例如:
waiting→Startrunningwaiting \xrightarrow{Start} running
View Data应该显示最新状态。
因此:
Statet+1→ViewDatat+1→SmartyState_{t+1} \rightarrow ViewData_{t+1} \rightarrow Smarty
页面显示:
当前状态:running
页面没有改变机器个体状态。
真正的状态变化发生在:
DomainObjectDomainObject
或者对应的领域运行结构中。
249.13 状态数据与状态计算
必须区分:
StateCalculation≠StateDisplayStateCalculation\neq StateDisplay
例如Engine判断:
当前条件满足
并使状态变成:
running
这是领域计算。
而Smarty:
{$state.current}
只是显示:
running
因此:
Engine→StateEngine\rightarrow State
而:
State→ViewData→SmartyState\rightarrow ViewData\rightarrow Smarty
249.14 认知数据
认知数据是ICAI认知过程产生的、用于页面表现的结构化结果。
可以定义:
CognitionData={Object,State,Relation,Judgment,Reason,Confidence,Time}CognitionData= \{ Object, State, Relation, Judgment, Reason, Confidence, Time \}
例如:
$cognitionData = array(
'object' => 'Task-001',
'state' => 'available',
'relation' => 'belongs_to',
'judgment' => '可执行',
'reason' => '对象状态正常且当前能力匹配',
'confidence' => 0.90,
'time' => '2026-09-13 20:05:00'
);
249.15 认知数据的页面显示
Smarty可以直接显示认知结果:
<h2>认知结果</h2>
<p>对象:{$cognition.object}</p>
<p>状态:{$cognition.state}</p>
<p>关系:{$cognition.relation}</p>
<p>判断:{$cognition.judgment}</p>
<p>原因:{$cognition.reason}</p>
<p>置信度:{$cognition.confidence}</p>
<p>时间:{$cognition.time}</p>
最终:
认知结果
对象:Task-001
状态:available
关系:belongs_to
判断:可执行
原因:对象状态正常且当前能力匹配
置信度:0.90
时间:2026-09-13 20:05:00
249.16 认知数据不是认知Engine
必须明确:
CognitionData≠CognitiveEngineCognitionData\neq CognitiveEngine
CognitiveEngine负责:
C=F(O,A,S,R,Sc,K)C=F(O,A,S,R,Sc,K)
其中:
- OO表示对象;
- AA表示属性;
- SS表示状态;
- RR表示关系;
- ScSc表示场景;
- KK表示知识;
- CC表示认知计算结果。
计算完成以后形成:
CognitiveResultCognitiveResult
然后才进入:
CognitiveResult→ViewData→SmartyCognitiveResult \rightarrow ViewData \rightarrow Smarty
因此Smarty不会重新进行认知计算。
249.17 四类核心数据的统一模型
本章四类数据可以统一表示:
ICAIViewData={Individual,Object,State,Cognition}ICAIViewData= \{ Individual, Object, State, Cognition \}
例如:
$viewData = array(
'individual' => $individualData,
'object' => $objectData,
'state' => $stateData,
'cognition' => $cognitionData
);
然后:
$smarty->assign(
'icai',
$viewData
);
模板:
<h1>{$icai.individual.name}</h1>
<p>对象:{$icai.object.name}</p>
<p>状态:{$icai.state.current}</p>
<p>认知:{$icai.cognition.judgment}</p>
形成:
ICAIViewData→Smarty→HTMLICAIViewData \rightarrow Smarty \rightarrow HTML
249.18 完整View Data示例
一个完整的ICAI页面可以使用:
$viewData = array(
'individual' => array(
'id' => 'ICAI-001',
'name' => '任务处理个体',
'type' => 'TaskProcessor',
'status' => 'running'
),
'object' => array(
'id' => 'OBJ-001',
'type' => 'Task',
'name' => 'Task-001',
'attributes' => array(
'priority' => 'high',
'source' => 'internal'
)
),
'state' => array(
'current' => 'available',
'previous' => 'waiting',
'time' => '2026-09-13 20:05:00'
),
'cognition' => array(
'object' => 'Task-001',
'state' => 'available',
'relation' => 'belongs_to',
'judgment' => '可执行',
'reason' => '对象状态正常且当前能力匹配',
'confidence' => 0.90,
'time' => '2026-09-13 20:05:00'
)
);
这个结构已经可以直接作为Smarty的数据入口。
249.19 Smarty完整模板示例
对应模板:
<!DOCTYPE html>
<html lang="zh-CN">
<head>
<meta charset="UTF-8">
<title>ICAI数据模型</title>
</head>
<body>
<h1>ICAI机器个体</h1>
<h2>个体数据</h2>
<p>ID:{$icai.individual.id}</p>
<p>名称:{$icai.individual.name}</p>
<p>类型:{$icai.individual.type}</p>
<p>运行状态:{$icai.individual.status}</p>
<h2>对象数据</h2>
<p>ID:{$icai.object.id}</p>
<p>类型:{$icai.object.type}</p>
<p>名称:{$icai.object.name}</p>
<p>优先级:{$icai.object.attributes.priority}</p>
<p>来源:{$icai.object.attributes.source}</p>
<h2>状态数据</h2>
<p>当前状态:{$icai.state.current}</p>
<p>之前状态:{$icai.state.previous}</p>
<p>时间:{$icai.state.time}</p>
<h2>认知数据</h2>
<p>对象:{$icai.cognition.object}</p>
<p>状态:{$icai.cognition.state}</p>
<p>关系:{$icai.cognition.relation}</p>
<p>判断:{$icai.cognition.judgment}</p>
<p>原因:{$icai.cognition.reason}</p>
<p>置信度:{$icai.cognition.confidence}</p>
<p>时间:{$icai.cognition.time}</p>
</body>
</html>
这就是一个完整的:
ICAIViewData→Smarty→Template→HTMLICAIViewData \rightarrow Smarty \rightarrow Template \rightarrow HTML
数据模型示例。
249.20 View Data与Controller
Controller的职责不是重新计算认知,而是组织页面需要的数据。
例如:
Controller
↓
调用IndividualService
↓
调用CognitiveService
↓
获得Domain Result
↓
组织ViewData
↓
Smarty
因此:
Controller→ViewDataController\rightarrow ViewData
而:
Controller≠SmartyController\neq Smarty
Controller负责页面请求控制。
Smarty负责模板渲染。
249.21 View Data与Service
Service产生业务过程结果。
例如:
CognitiveService→CognitiveResultCognitiveService \rightarrow CognitiveResult
然后:
CognitiveResult→ViewData.CognitionCognitiveResult \rightarrow ViewData.Cognition
因此:
Service≠ViewService\neq View
Service不负责HTML。
View也不负责认知计算。
249.22 View Data与Engine
Engine负责领域计算。
例如:
CognitiveEngine→CognitiveResultCognitiveEngine \rightarrow CognitiveResult
结果进入:
Service→Controller→ViewDataService \rightarrow Controller \rightarrow ViewData
最终:
ViewData→SmartyViewData \rightarrow Smarty
所以:
Engine≠ViewDataEngine\neq ViewData Engine≠SmartyEngine\neq Smarty
249.23 View Data与Repository
Repository负责持久化。
例如:
Repository→DomainObjectRepository \rightarrow DomainObject
Domain Object经过Service和Controller以后,才可能形成:
ViewDataViewData
因此:
Repository≠ViewDataRepository\neq ViewData Repository≠SmartyRepository\neq Smarty
页面不应该直接查询数据库。
249.24 View Data的页面最小原则
页面不应该接收不需要的数据。
例如页面只显示:
ID
名称
状态
则:
ViewData={ID,Name,State}ViewData= \{ID,Name,State\}
没有必要把整个机器个体的所有Memory、Experience、Knowledge和History全部交给模板。
因此:
ViewData=RequiredPresentationDataViewData=RequiredPresentationData
这可以降低页面层与领域层的耦合。
249.25 View Data与数据安全
View Data还具有一个重要作用:控制哪些数据可以进入页面。
Domain Object中可能存在:
内部配置
内部规则
维护信息
系统参数
内部标识
历史数据
页面不一定需要全部显示。
因此:
DomainObject→SelectedData→ViewDataDomainObject \rightarrow SelectedData \rightarrow ViewData
ViewData实际上形成了一层页面数据边界。
249.26 View Data与数据转换
View Data可以进行表现层格式转换。
例如Domain Object中的时间:
2026-09-13 20:05:00
页面可以显示为:
2026年09月13日 20:05
因此:
DomainValue→PresentationValueDomainValue \rightarrow PresentationValue
这种转换属于页面表现需要,而不是修改Domain Object。
因此:
PresentationTransform≠DomainUpdatePresentationTransform\neq DomainUpdate
249.27 View Data与状态颜色
页面可能根据状态显示不同的视觉形式。
例如:
{if $icai.state.current == 'running'}
<span>运行中</span>
{elseif $icai.state.current == 'waiting'}
<span>等待中</span>
{else}
<span>未知状态</span>
{/if}
这是表现层判断。
实际状态仍然来自:
DomainObject.StateDomainObject.State
所以:
DisplayRule≠DomainRuleDisplayRule\neq DomainRule
249.28 View Data与认知历史
认知系统可能保存多个认知结果:
CognitionHistory={C1,C2,…,Cn}CognitionHistory= \{C_1,C_2,\ldots,C_n\}
Controller可以选择最近记录:
$viewData['cognition_history'] = $history;
Smarty循环:
{foreach $icai.cognition_history as $item}
<p>
{$item.time}
-
{$item.judgment}
</p>
{/foreach}
页面因此能够表现认知历史。
但是历史记录的产生和保存属于认知系统与Memory/Persistence层。
249.29 View Data与ICAI页面结构
由此可以建立:
ICAIViewData
│
├── IndividualData
│
├── ObjectData
│
├── StateData
│
└── CognitionData
对应页面:
ICAI页面
│
├── 个体信息
│
├── 对象信息
│
├── 当前状态
│
└── 当前认知
这形成理论结构和页面结构之间的映射:
ICAI Theory→DomainData→ViewData→PageICAI\ Theory \rightarrow DomainData \rightarrow ViewData \rightarrow Page
249.30 四类数据之间的关系
四类数据不是完全独立的。
可以表示为:
Individual→Object→State→CognitionIndividual \rightarrow Object \rightarrow State \rightarrow Cognition
例如:
ICAI-001
↓
Task-001
↓
available
↓
可执行
其含义是:
某一个机器个体面对某一个对象,根据对象状态和其他认知条件形成认知结果。
但是这个关系只是数据表现结构。
真正的认知过程仍然是:
Input→Object→Attribute→State→Relation→Scene→Knowledge→Matching→Judgment→ResultInput \rightarrow Object \rightarrow Attribute \rightarrow State \rightarrow Relation \rightarrow Scene \rightarrow Knowledge \rightarrow Matching \rightarrow Judgment \rightarrow Result
249.31 Smarty数据模型的统一边界
最终可以建立以下边界:
DomainObject≠ViewDataDomainObject\neq ViewData ViewData≠SmartyViewData\neq Smarty Smarty≠HTMLSmarty\neq HTML CognitiveResult≠ViewDataCognitiveResult\neq ViewData
而完整转换链为:
CognitiveResult→ViewData.Cognition→Smarty→HTMLCognitiveResult \rightarrow ViewData.Cognition \rightarrow Smarty \rightarrow HTML
同样:
DomainObject→ViewData.Individual→Smarty→HTMLDomainObject \rightarrow ViewData.Individual \rightarrow Smarty \rightarrow HTML
249.32 Smarty数据模型与ICAI MVC
结合前面章节:
认知MVC
CognitiveEngine→CognitiveResultCognitiveEngine \rightarrow CognitiveResult
行为MVC
BehaviorEngine→BehaviorResultBehaviorEngine \rightarrow BehaviorResult
学习MVC
LearningEngine→LearningResultLearningEngine \rightarrow LearningResult
自我维护MVC
MaintenanceEngine→MaintenanceResultMaintenanceEngine \rightarrow MaintenanceResult
最终都可以进入:
Result→ViewData→Smarty→HTMLResult \rightarrow ViewData \rightarrow Smarty \rightarrow HTML
因此Smarty可以成为ICAI多个运行子系统的统一表现层。
249.33 Smarty数据模型完整流程
综合本章:
Browser
↓
Controller
↓
Service
↓
Engine
↓
Domain Object
↓
Result
↓
ViewData
↓
Smarty
↓
Template
↓
HTML
↓
Browser
其中ViewData承担一个非常重要的转换职责:
Domain/Result→PresentationDataDomain/Result \rightarrow PresentationData
因此:
ViewData=Presentation Data ModelViewData=Presentation\ Data\ Model
249.34 本章总结
第249章建立了Smarty的数据模型。
核心数据包括:
ViewDataViewData IndividualDataIndividualData ObjectDataObjectData StateDataStateData CognitionDataCognitionData
统一模型:
ICAIViewData={Individual,Object,State,Cognition}ICAIViewData= \{ Individual, Object, State, Cognition \}
其完整关系为:
DomainObject+Result→ViewData→Smarty→Template→HTMLDomainObject + Result \rightarrow ViewData \rightarrow Smarty \rightarrow Template \rightarrow HTML
其中:
个体数据回答“当前页面表现的是哪个机器个体”。
对象数据回答“当前机器个体面对或处理哪个对象”。
状态数据回答“对象或机器个体当前处于什么状态”。
认知数据回答“ICAI已经形成了什么认知结果”。
因此,Smarty数据模型不是ICAI的智能模型,而是ICAI智能运行结果进入页面表现层之前的数据组织模型。
最终形成:
Individual→Object→State→Cognition→ViewData→Smarty→HTMLIndividual \rightarrow Object \rightarrow State \rightarrow Cognition \rightarrow ViewData \rightarrow Smarty \rightarrow HTML
由此,ICAI从领域对象、认知计算一直到最终页面输出,形成了连续而清晰的数据映射关系。