58097e4d129af684ce3ef2853132629b7b9c5b38
archgen-schema
统一建筑数据模型(Unified Building Design Schema)。
仓库文件
| 文件 | 说明 |
|---|---|
schema-building.json |
建筑几何 + 核心实体(Building, Floor, Room, Aperture, Boundary, Element, Shaft 等) |
schema-energy.json |
能耗模拟领域(Material, Construction, RoomProgram, Schedule 等) |
Schema 规则
1. JSON 为唯一真理源
所有类型定义以 JSON 文件为准。TypeScript / Python 等语言的绑定代码均从 JSON 生成,不得手工维护。
2. 不保存派生数据
Schema 只保存原始定义数据,不包含任何可从已有字段计算得出的值。
❌ area — 可由 region 计算
❌ volume — 可由 region + height 计算
❌ boundingBox — 可由子实体几何计算
✅ region — 房间轮廓点集
✅ height — 房间高度
3. 字段命名
| 规则 | 示例 |
|---|---|
| 使用 camelCase | siteBasePoint, sillHeight, openRatio |
| 避免缩写(广为人知的除外) | identifier 而非 id, displayName 而非 name |
| 布尔值用正面语义 | operable 而非 nonOperable |
| 枚举值用 snake_case | exterior_wall, curtain_wall |
4. 类型系统
基础类型:
string— 字符串number— 浮点数integer— 整数boolean— 布尔值object— 任意对象
复合类型:
TypeName[]— 数组,如Polyline3d的points字段类型为Point3d[]TypeName— 引用自定义类型或实体
自定义类型定义在 types 段,描述纯数据结构,不是业务实体。例如 Point3d(三维点)、Polyline3d(多段线)、TimePoint(时刻点)。
5. 实体结构
"EntityName": {
"description": "中文说明",
"tags": { "scale": ["building"], "simulation": ["energy"] },
"attributes": {
"fieldName": {
"type": "string",
"required": true,
"unit": "m",
"default": 0,
"description": "字段说明",
"tags": { "scale": ["building"], "simulation": ["energy", "daylight"] }
}
},
"children": {
"childName": {
"type": "ChildEntity",
"multiple": true,
"description": "子实体说明"
}
}
}
attributes— 标量字段(string, number, boolean, enum, 自定义类型)children— 关联的子实体(1:1 或 1:N)required: true— 必填字段,序列化时必须存在default— 缺省值(可选字段未提供时使用)unit— 单位标注(仅文档用途)
6. 判别联合体(Discriminated Union)
当一个实体存在多种形态时,使用 variants 表达:
"Room": {
"discriminator": "creationMethod",
"variants": {
"planar_extrude": { ... },
"mass_slice": { ... },
"manual": { ... }
}
}
不同变体可包含不同的必填字段。判别字段的值决定了使用哪个变体。当前使用判别联合体的实体:
Room— 判别字段creationMethod,变体:planar_extrude、mass_slice、manualAperture— 判别字段sourceType,变体:hosted、declarative
7. 枚举
枚举定义在 enums 段,每个枚举列出所有允许值。
8. 尺度与模拟类型标签(tags)
每个字段可标注两个维度的标签:
尺度(scale):
| 标签 | 说明 |
|---|---|
building |
建筑尺度 |
community |
社区/街区尺度 |
urban |
城市尺度 |
模拟类型(simulation):
| 标签 | 说明 |
|---|---|
energy |
能耗模拟 |
daylight |
采光分析 |
solar |
日照分析 |
thermal_comfort |
热舒适分析 |
carbon |
碳排放核算 |
wind |
风环境模拟 |
general |
通用(不特定于某种模拟) |
标签用于快速筛选特定尺度或某类模拟分析所需的字段。例如:
"northAngle": {
"type": "number",
"tags": { "simulation": ["energy", "daylight", "solar", "thermal_comfort", "wind"] }
}
表示 northAngle 对能耗、采光、日照、热舒适、风环境模拟均有影响。
"embodiedCarbon": {
"type": "number",
"tags": { "scale": ["building", "community", "urban"], "simulation": ["carbon"] }
}
表示 embodiedCarbon 适用于建筑/社区/城市三个尺度,仅用于碳排放核算。
9. 不绑定特定工具
Schema 中不出现特定软件、工具或 DSL 的名称(如 GSA、AML、BSS、ant-model)。Schema 只描述建筑数据本身,不描述数据的生成方式。
使用方式
各项目从 JSON schema 生成对应语言的类型代码:
# TypeScript(示例)
python3 scripts/gen-ts.py schema-building.json > dist/building.d.ts
# Python Pydantic(示例)
python3 scripts/gen-py.py schema-building.json > archgen_schema/building.py
具体生成器不在本仓库维护,由各消费项目自行管理。
建筑/社区尺度最小化的字段需要确定一个规则。默认或者非默认需要有个判定。 可能有md/skill来规范化操作。 影响性能的要素需要捋清楚 什么是智能优化?形态优化,还是需要性能目标?
Description
Building Performance Schema - schema-building.json and schema-energy.json
3.9 MiB
Languages
JavaScript
36.1%
CSS
32.6%
HTML
31.3%