3. 数据交换中的格式与语义基础
在多学科模型接口中,数据交换格式决定了“信息能否被对方读懂”。格式解决的是语法问题——数据如何排列、分隔、嵌套;语义解决的是含义问题——同一个字段名在不同学科中是否指同一物理量、同一单位、同一坐标系。选错格式,往往不是数据传不过去,而是传过去之后被错误解释。
五类格式的定位差异
CSV 是最轻量的表格格式,以行列表头承载二维数据,适合参数扫描结果、实验测点表、批量工况记录。它的优点是任何工具都能读,缺点是只能表达二维、无类型、无嵌套、无元数据,单位与坐标系必须靠外部约定。
JSON 以键值对和数组表达层次结构,天然适合接口报文、配置参数、模型元数据。它支持嵌套和类型区分(字符串、数值、布尔、数组、对象),但不擅长承载大规模数值数组,且浮点精度在序列化时可能损失。
XML 通过标签和属性表达结构,支持命名空间、Schema 校验和属性扩展,适合需要严格契约、跨组织交换、带自描述的工程数据。代价是冗余度高、解析开销大。
HDF5 是层次化二进制容器,支持多维数组、分块存储、压缩、部分读取和丰富元数据,适合大规模仿真结果、网格数据、时间序列场量。它把“数据+结构+元数据”放在同一文件内,是科学计算领域的主力格式。
通用二进制(如自定义结构体、FlatBuffers、Protobuf 等)追求紧凑与高速,适合高频实时接口、嵌入式传输、内存映射。代价是可读性差,必须依赖双方约定的布局或 schema。
转换要点:先对齐语义,再选格式
格式转换最容易出错的不是语法解析,而是语义锚点没有对齐。以下四个锚点在跨学科交换中必须显式声明:
- 单位与量纲:结构分析常用 N、mm、MPa,热分析常用 W、m、K。若接口不声明单位,接收方可能把 mm 当 m 使用,导致刚度矩阵差 10⁹ 量级。
- 坐标系与方向:不同学科可能采用右手系或左手系,Z 轴可能向上或向下。转换时必须明确旋转矩阵或轴映射关系,否则位移、力矩方向会整体反向。
- 维度与索引顺序:HDF5 默认行优先(C 顺序),而部分数值库使用列优先(Fortran 顺序)。一个 3×4 矩阵若顺序错位,会变成 4×3,后续运算全部失效。
- 时间基准与步长:绝对时间戳与相对步数不能混用;不同求解器的自适应步长在交换前应重采样到统一时间网格。
典型转换路径与实现示例
以“CSV 参数表 → JSON 接口报文 → HDF5 结果归档”为例,说明一条常见链路。假设 CSV 中有一组工况参数:
case_id,youngs_modulus_MPa,poisson_ratio,density_kg_m3
C01,210000,0.30,7850
C02,70000,0.33,2700
C03,120000,0.28,4500
转换为 JSON 时,需要把表头映射为带单位的字段名,并保持数值类型:
{
"cases": [
{"case_id": "C01", "youngs_modulus": {"value": 210000, "unit": "MPa"},
"poisson_ratio": 0.30, "density": {"value": 7850, "unit": "kg/m3"}},
{"case_id": "C02", "youngs_modulus": {"value": 70000, "unit": "MPa"},
"poisson_ratio": 0.33, "density": {"value": 2700, "unit": "kg/m3"}}
],
"coordinate_system": "right-handed, Z-up",
"time_basis": "steady-state"
}
写入 HDF5 时,每个工况建一个 group,参数存为 dataset,并把单位、坐标系写入 attributes:
/cases/C01/youngs_modulus dataset, shape=(1,), dtype=float64
attrs: unit="MPa", coordinate_system="right-handed, Z-up"
/cases/C01/poisson_ratio dataset, shape=(1,), dtype=float64
/cases/C01/density dataset, shape=(1,), dtype=float64
attrs: unit="kg/m3"
这样,接收方读取 HDF5 时,不仅拿到数值,还能直接读取单位与坐标系属性,无需依赖外部文档。若后续需要把结果回传给只支持 CSV 的系统,则从 HDF5 导出时把 attributes 展开为额外列,例如 youngs_modulus_MPa、coordinate_system,保证语义不丢失。
格式选择速查
| 场景 | 推荐格式 | 关键理由 |
|---|---|---|
| 少量参数、人工可读 | CSV / JSON | 编辑方便,工具支持广 |
| 接口报文、配置 | JSON | 嵌套结构、类型清晰 |
| 跨组织契约、需校验 | XML + Schema | 命名空间、严格校验 |
| 大规模数组、场量 | HDF5 | 分块、压缩、部分读取 |
| 高频实时、嵌入式 | 二进制 / Protobuf | 紧凑、低延迟 |
格式本身没有优劣,只有是否匹配当前交换任务的规模、频率、可读性要求和语义承载能力。真正决定接口成败的,是转换过程中语义锚点是否被完整保留。