元数据模块
@cornerstonejs/metadata 是当前 Cornerstone3D 的规范元数据层。
它把元数据摄入、带类型的提供者解析和共享缓存行为集中起来,
这样应用就不必重复实现各数据源专有的元数据转换逻辑。
该包当前的职责
- 负责元数据提供者的注册,以及带类型提供者的编排。
- 把源元数据归一化为 core / tools 所使用的通用模块输出。
- 在源元数据类型与派生元数据类型之间提供元数据缓存的协调。
- 暴露用于标签映射、normalized 对象处理和元数据组织流程的工具函数。
引入路径的建议
- 推荐:从
@cornerstonejs/metadata引入元数据 API。 - 旧版兼容:
@cornerstonejs/core目前仍通过core/src/metaData.ts重新导出元数据 API,但这条路径已废弃。
提供者模型
该模块支持两种互补的提供者模式:
- 通用提供者链(
addProvider):按优先级排序的提供者,优先级最高的排在最前。 - 带类型的提供者链(
addTypedProvider):按类型组合提供者, 并在通用链中通过一个带类型的提供者桥接进来。
这使得应用可以一边保留旧的提供者集成,一边逐步采用带类型的提供者。
Add 路径摄入与 NATURALIZED
当前的元数据改动通过 add 路径增加了显式的摄入处理器:
metaData.addMetaData(type, query, options)会路由到带类型的typeAdd提供者。NATURALIZED是 DICOM 源数据的规范基础元数据状态。- 调用方可以提供源载荷(例如 DICOMweb JSON 或 Part10 数据), 由元数据层统一完成 naturalize 和缓存。
缓存与 imageId 模型(当前行为)
- 共享的带类型缓存支持读穿(read-through)以及进行中请求的去重。
- 源元数据(尤其是
NATURALIZED)应当以规范的基础 imageId 为键。 - 派生的按帧模块则在帧 imageId 上解析。
- 帧 / 基础的归一化以及帧影像的展开,由元数据提供者
(包括
FRAME_IMAGE_IDS)负责,而不再散落在各个调用点。
初始化与提供者注册
registerDefaultProviders() 会接好默认的带类型提供者栈及相关辅助函数。
如果应用启动流程重置或重新初始化了提供者链,
那么必须在 init 之后重新注册所需的提供者。
在从旧代码路径迁移时这一点尤其重要——旧代码里提供者只注册一次, 并依赖持久的全局状态。
显示集
元数据层还负责把一个序列的各个实例组织成显示集(display set)——
也就是视口渲染的单位——通过与框架无关的拆分规则完成,
并以数据形态的 IDisplaySet 暴露出来。由于这是个大话题
(拆分管线、驱动视口、缓存、拆分规则模型和数据模型),它有独立的一页:
- 显示集 ——
splitImageIdsBySplitRules→createDisplaySetFromGroup→ 通过setDisplaySets驱动视口 / 通过registerDisplaySetMetadata缓存,拆分规则模型 (含 DWI 的完整示例),以及IDisplaySet的属性与模块增强模式。
各包之间的边界
@cornerstonejs/metadata:元数据摄入、提供者链、normalized 模块解析、 元数据专属的缓存编排。@cornerstonejs/core:渲染 / 运行时原语,以及面向渲染的缓存与加载器。@cornerstonejs/dicom-image-loader:获取 / 解码管线, 以及把源数据交接给元数据层。- adapters:在已解析的元数据与工具 / 分割表示形式之间做转换。