Files
bps-schema/README.md
T

227 lines
8.8 KiB
Markdown
Raw Blame History

This file contains ambiguous Unicode characters
This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.
# bps-schema
建筑性能模拟数据模型。所有类型定义以 draft-2020-12 标准 JSON Schema 为准。
## 文件架构
采用"尺度 × 模拟域"二维分文件架构。每个尺度按几何和模拟域拆分为独立文件。
### 建筑单体尺度
| 文件 | $id | defs | 说明 |
|------|-----|------|------|
| `schema-building.json` | bps/building | 30 | 建筑几何实体,对齐 HBJSON 几何层级 |
| `schema-energy.json` | bps/energy | 49 | EnergyPlus 能耗模拟参数 |
| `schema-radiance.json` | bps/radiance | 25 | Radiance 采光模拟参数 |
| `schema-cfd.json` | bps/cfd | 14 | CFD 建筑风环境模拟参数(AI 生成的示例文件,需人工审核后使用) |
### 社区尺度
| 文件 | $id | defs | 说明 |
|------|-----|------|------|
| `schema-community.json` | bps/community | 7 | 社区几何:Site / Terrain / Road / GreenSpace / WaterBody(AI 生成的示例文件,需人工审核后使用) |
| `schema-community-energy.json` | bps/community-energy | 8 | 区域能源:Plant / Network / Pipe / BuildingConnection(AI 生成的示例文件,需人工审核后使用) |
| `schema-community-cfd.json` | bps/community-cfd | 13 | 社区风环境:计算域 / 网格 / 湍流 / 边界条件 / 求解器(AI 生成的示例文件,需人工审核后使用) |
| `schema-community-microclimate.json` | bps/community-microclimate | 2 | 微气候:UHI 强度 / 风速修正 / 地表反照率(AI 生成的示例文件,需人工审核后使用) |
### 城市尺度
| 文件 | $id | defs | 说明 |
|------|-----|------|------|
| `schema-urban.json` | bps/urban | 3 | 城市几何:ClimateZone / LandUse(AI 生成的示例文件,需人工审核后使用) |
| `schema-urban-energy.json` | bps/urban-energy | 5 | 城市能源:需求聚合 / 可再生能源潜力 / 碳平衡(AI 生成的示例文件,需人工审核后使用) |
| `schema-urban-cfd.json` | bps/urban-cfd | 15 | 城市风环境:行人高度评估 / 街道峡谷 / 风舒适标准(AI 生成的示例文件,需人工审核后使用) |
### 聚合入口
| 文件 | $id | defs | 说明 |
|------|-----|------|------|
| `schema-all.json` | bps/all | 11 | 引用以上所有文件,提供完整验证入口 |
**合计**:11 个领域文件 + 1 个聚合文件,171 个类型定义。
## Schema 规范
所有文件均遵循 [JSON Schema draft-2020-12](https://json-schema.org/draft/2020-12/release-notes):
- `$defs` — 所有类型、枚举、实体的定义区
- `$ref` — 类型引用,使用 JSON Schema 标准 `$ref` 机制
- `oneOf` — 判别联合体(如边界条件的 5 种类型)
- `allOf` — 实体组合(`_IdentifiedObject` + 具体属性)
- `const` / `enum` — 类型判别字段和枚举值
- `required` — 必填字段
- `default` — 缺省值
- `minimum` / `maximum` / `exclusiveMinimum` — 数值约束
- `pattern` / `minLength` / `maxLength` — 字符串约束
- `additionalProperties: false` — 严格模式,禁止额外字段
## schema-building.json:建筑几何
对齐 [honeybee-schema](https://github.com/ladybug-tools/honeybee-schema) 几何层级,覆盖 Model → Room → Face → Aperture/Door → Shade 层级。
### 几何原语
- `Point3D` — 三维坐标 (x, y, z)
- `Face3D` — 平面多边形(boundary + holes + plane)
- `Mesh3D` — 三角/四边形网格(vertices + faces + colors)
- `Plane` — 平面(法线 n + 原点 o + x 轴)
- `Color` — RGBA 颜色
### 边界条件
- `Outdoors` / `Surface` / `Ground` / `Adiabatic` / `OtherSideTemperature`
- Aperture/Door 仅支持 Outdoors 和 Surface 两种
### 标识符规范
- `identifier`:`^[.A-Za-z0-9_-]+$`,1-100 字符
- `display_name`:无限制(仅用于 UI 展示)
- `user_data`:可选字典
## schema-energy.json:能耗模拟参数
覆盖 HBJSON energy properties 核心实体:材料、构造、时间表、负荷、HVAC、构造集、程序类型。
### 材料
- `EnergyMaterial` — 有质量材料
- `EnergyMaterialNoMass` — 无质量材料
- `EnergyMaterialVegetation` — 植被材料
- `EnergyWindowMaterialGlazing` / `Gas` / `GasCustom` / `GasMixture` / `SimpleGlazSys` — 窗材料
- `EnergyWindowMaterialBlind` / `Shade` — 百叶/遮阳
- `EnergyWindowFrame` — 窗框
### 构造
- `OpaqueConstruction` / `WindowConstruction` / `AirBoundaryConstruction` / `ShadeConstruction`
- 各自 Abridged 版本(identifier 引用)
- `WindowConstructionShade` / `WindowConstructionDynamic` — 含动态遮阳的窗构造
### 时间表
- `ScheduleTypeLimit` / `ScheduleDay` / `ScheduleFixedInterval` / `ScheduleRulesetAbridged` / `ScheduleRule`
### 负荷与设定值
- `PeopleAbridged` / `LightingAbridged` / `ElectricEquipmentAbridged` / `GasEquipmentAbridged`
- `ServiceHotWaterAbridged` / `InfiltrationAbridged` / `VentilationAbridged`
- `SetpointAbridged` / `InternalMassAbridged` / `ProcessAbridged`
### 程序类型 / 构造集 / HVAC
- `ProgramTypeAbridged` / `ConstructionSetAbridged`
- `DefaultProgramTypesAbridged` / `DefaultConstructionSetAbridged`
- `IdealAirSystemAbridged`
## schema-radiance.json:采光模拟参数
兼容 HBJSON radiance properties,覆盖 Radiance 材质、构造集、传感器网格、视角。
### 材质(Modifiers)
- `Plastic` — 塑料材质(RGB 反射率 + 镜面度 + 粗糙度)
- `Metal` — 金属材质(继承 Plastic,镜面度默认 0.9)
- `Trans` — 半透明材质(透射漫反射比 + 透射镜面比)
- `Glass` — 玻璃材质(RGB 透射率 + 折射率)
- `Mirror` — 镜面材质(RGB 反射率)
- `Light` / `Glow` — 发光材质(RGB 发射率)
- `BSDF` — 双向散射分布函数材质(BSDF XML 数据 + 朝向)
- `Void` — 空材质
### 材质集(Modifier Sets)
- `WallModifierSetAbridged` / `FloorModifierSetAbridged` / `RoofCeilingModifierSetAbridged`
- `ApertureModifierSetAbridged` / `DoorModifierSetAbridged` / `ShadeModifierSetAbridged`
- `ModifierSet` — 材质集聚合
### 传感器与视角
- `Sensor` / `SensorGrid` — 传感器网格
- `View` — Radiance 视角(6 种视角类型)
## schema-cfd.json:CFD 风环境模拟
独立领域(非 HBJSON),覆盖 CFD 建筑风环境分析的完整参数体系。
### 核心参数
- `WindProfile` — 风剖面(4 种剖面 + 地形类别 + 风向)
- `CFDDomain` — 计算域定义
- `MeshParameters` — 网格设置(基础网格 + 局部加密 + 壁面层)
- `TurbulenceParameters` — 湍流设置(6 种模型 + 壁面函数)
- `BoundaryConditions` — 进出口/顶部/侧面/地面/建筑墙面边界类型
- `SolverSettings` — 求解器设置(稳态/瞬态 + SIMPLE/PISO + 收敛准则)
## schema-community*.json:社区尺度
### 几何(schema-community.json)
- `Site` — 场地顶级实体,含 2D 边界
- `TerrainGrid` / `TerrainTIN` — 高程网格或三角网
- `Road` / `GreenSpace` / `WaterBody` — 基础设施
### 区域能源(schema-community-energy.json)
- `DistrictEnergy` — 区域能源系统顶级实体
- `Plant` — 源站(CHP / Boiler / HeatPump / Chiller / PV 等)
- `Network` — 管网(CHW / HW / Steam / Electricity)
- `Pipe` / `BuildingConnection` — 管段与建筑接入
### 风环境(schema-community-cfd.json)
- `CFDDomain` — 社区尺度计算域
- `MeshParameters` — 含局部加密区域
- `SolverSettings` / `TurbulenceParameters` / `BoundaryConditions`
## schema-urban*.json:城市尺度
### 几何(schema-urban.json)
- `ClimateZone` — 气候分区(边界 + 气候区代码 + 度日数)
- `LandUse` — 用地性质(边界 + 用地类型 + 容积率 + 建筑密度)
### 能源(schema-urban-energy.json)
- `UrbanEnergyDemand` — 各用地类型年度能耗
- `RenewablePotential` — 屋顶/立面/地面可再生能源潜力
- `UrbanEnergyBalance` — 城市能源平衡(自给率 / 碳排放 / EUI)
### 风环境(schema-urban-cfd.json)
- `UrbanCFDSettings` — 城市级 CFD 设置
- `WindComfortAssessment` — 行人风舒适评估(Laws / NEN_8100 / COST_732 标准)
- `MeshParameters` — 含行人高度加密层
## 使用方式
### 数据验证
```bash
pip install jsonschema
python3 -c "
import json, jsonschema
with open('schema-building.json') as f:
schema = json.load(f)
with open('model.hbjson') as f:
data = json.load(f)
jsonschema.validate(data, schema)
"
```
### TypeScript 类型生成
```bash
npx quicktype schema-building.json -o dist/building.d.ts --lang typescript
npx quicktype schema-energy.json -o dist/energy.d.ts --lang typescript
npx quicktype schema-radiance.json -o dist/radiance.d.ts --lang typescript
npx quicktype schema-cfd.json -o dist/cfd.d.ts --lang typescript
```
### Python Pydantic 生成
```bash
pip install datamodel-code-generator
datamodel-codegen --input schema-building.json --output dist/building.py --output-model-type pydantic_v2.BaseModel
datamodel-codegen --input schema-energy.json --output dist/energy.py --output-model-type pydantic_v2.BaseModel
```