S1000D 数据字典与代码表是什么?取值约束、版本与检查
数据字典(Data Dictionary)负责解释数据模型中的元素、属性和术语;代码表(Code List)负责规定某个代码字段可以使用哪些值以及每个值的含义。两者把“字段是什么”和“字段允许填什么”连接起来,是 S1000D Schema、BREX、编辑器和项目业务规则之间的重要基础。
数据字典解决什么问题?
同一个字段如果在不同团队、不同编辑器或不同交付批次中有不同解释,结构化内容就会失去可交换性。数据字典为元素、属性、数据类型、定义、上下文和使用边界提供统一说明,使作者、审核人员、工具开发者和验收人员可以按照同一套术语理解数据。
数据字典与代码表的区别
| 对象 | 主要回答的问题 | 通常记录的内容 | 项目使用重点 |
|---|---|---|---|
| 数据字典(Data Dictionary) | 这个元素或属性是什么?放在哪里? | 名称、定义、数据类型、结构关系、适用上下文、必填性或关联说明。 | 统一术语,确认 Schema 和工具实现采用的版本。 |
| 代码表(Code List) | 这个字段允许填哪些代码? | 代码值、显示名称、定义、状态、生效范围、废止或替代关系。 | 控制取值,避免同义码、拼写差异和未经批准的扩展。 |
| Schema | 文档的结构能否被解析? | 元素顺序、层级、数据类型、出现次数和基本约束。 | 做结构校验;不能单独表达全部项目语义。 |
| BREX / 项目业务规则 | 本项目在标准允许范围内还要求什么? | 对象路径、使用限制、项目必填项、禁用组合和例外处理。 | 将组织规则转为可执行校验,并保留审批依据。 |
数据字典和代码表经常被一起发布或由工具共同读取,但它们的职责不同。一个字段可能引用代码表,也可能使用日期、数字、文本或受格式限制的值,不应把所有取值约束都误称为代码表。
常见术语和字段关系
| 术语 | 含义 | 检查重点 |
|---|---|---|
element | 数据模块中的结构化元素,用于承载内容或组织层级。 | 名称、父子关系、顺序和适用模块类型是否符合 Schema。 |
attribute | 附着在元素上的属性,用于提供身份、分类、状态或其他机器可读信息。 | 数据类型、必填性、默认值和代码表关联是否明确。 |
| 数据类型 | 描述值的形式,例如文本、数字、日期、标识符或受格式约束的字符串。 | 格式、长度、大小写、单位和空值处理是否统一。 |
| 允许值 / allowed value | 某字段可以接受的规范值集合。 | 来源是规范代码表、项目扩展表还是内部映射表。 |
| 代码定义 | 代码对应的名称、含义、适用范围和状态说明。 | 代码值与显示文本不能只靠人工记忆维持。 |
| 状态与生效范围 | 代码或定义何时生效、停用,以及适用于哪些项目或版本。 | 新旧值能否共存,历史数据如何解释和迁移。 |
取值约束如何生效?
一个完整的取值约束通常由多个层次共同组成:数据字典解释字段的语义和类型,Schema 约束结构与基础数据类型,代码表列出可选值,BREX 或项目规则进一步限制上下文、组合和适用范围。工具可以据此在编辑、导入、批量检查和发布前分别给出提示或阻断。
- 识别字段:先确认元素或属性的正式名称、路径和所属数据模块类型。
- 确认类型:检查文本、数字、日期、标识符等基础格式,统一长度、大小写、单位和空值策略。
- 加载代码表:只允许当前版本和当前项目范围内的有效代码,显示代码的名称与定义。
- 检查上下文:同一代码在不同模块、系统或适用性条件下可能有不同限制,应执行 BREX 和项目规则。
- 记录来源:错误、警告、豁免和例外都应能追溯到版本、规则编号或审批记录。
一个代码表与取值校验示例
假设项目为某个“维修任务优先级”字段建立代码表。下面的表格是说明数据关系的示意,不是任何 S1000D Issue 的官方代码表,也不能直接用于交付。
| 代码 | 显示名称 | 定义 | 状态 | 适用范围 |
|---|---|---|---|---|
R | 例行 | 按计划周期执行的维修任务。 | 有效 | 基础维修手册 |
U | 紧急 | 发现故障后应优先处理的维修任务。 | 有效 | 故障隔离与现场维修 |
X | 停用 | 历史代码,不得用于新模块。 | 停用 | 仅历史数据 |
<maintenanceTask priorityCode="R"> <!-- priorityCode 的值、名称和适用范围由项目代码表定义 --> </maintenanceTask>
校验这个示例时,工具至少应确认:字段路径允许使用 priorityCode;值 R 在当前代码表版本中存在且有效;当前模块类型和适用范围允许使用该值;停用值 X 不得用于新建模块;显示名称应从代码表读取,不能由作者随意改写。
代码表和数据字典的版本管理
数据字典或代码表一旦被数据模块、BREX、适用性和上下游系统使用,就应纳入配置管理。版本变化不只是文件名变化,还要明确哪些定义、允许值、状态和映射发生了改变。
| 变更类型 | 潜在影响 | 建议动作 |
|---|---|---|
| 新增代码 | 新模块可使用新值,旧工具可能无法识别。 | 明确生效版本、下游兼容性和回归样例。 |
| 停用代码 | 新建模块不能继续使用,历史模块仍需解释。 | 保留历史定义,禁止新建引用,制定迁移或豁免策略。 |
| 修改定义 | 同一代码在不同版本中可能产生语义歧义。 | 优先新增代码或新版本,记录影响评估和审批依据。 |
| 调整字段类型或路径 | Schema、BREX、编辑器和转换程序可能同时受影响。 | 同步更新规则、样例、接口和验收用例。 |
项目应为每个版本保留发布日期、适用 Issue、来源、批准人、变更说明和兼容策略。跨版本迁移时,不能只做字符串替换,还要检查代码含义、上下文和历史交付物。
项目检查清单
- 版本:数据字典、Schema、代码表和 BREX 是否属于同一个已批准的 S1000D Issue 与项目基线?
- 来源:每个字段和代码是否标明规范来源、项目扩展来源或内部映射来源?
- 定义:代码值、显示名称、定义、单位、大小写和适用范围是否一致?
- 状态:新增、有效、停用、替代和历史保留状态是否可识别,工具是否阻止新建模块使用停用值?
- 约束:Schema、代码表、BREX 和项目规则的校验顺序、错误级别和豁免方式是否明确?
- 回归:是否用正例、非法值、缺失值、边界值、旧版值和跨模块场景做过回归检查?
- 交付:代码表和数据字典的版本、变更记录、映射和依赖是否随项目基线一起归档?
常见问题
S1000D 数据字典是什么?
数据字典描述元素、属性和术语的名称、定义、数据类型、结构关系、适用范围以及与允许值或代码表的关联。
代码表和数据字典有什么区别?
数据字典解释字段是什么、如何组织和使用;代码表列出某个代码字段允许使用的代码及其含义。
Schema、BREX 和代码表如何配合?
Schema 约束结构和数据类型,数据字典提供模型定义,代码表提供允许值,BREX 和项目规则表达更细的使用限制。
项目可以修改 S1000D 的代码表吗?
不能任意改写正式规范的代码表。应区分规范值、项目扩展值和内部映射值,明确来源、命名、审批和交付边界。
代码表版本变化会影响哪些内容?
可能影响数据模块、BREX、适用性、检索索引、旧版交付包和上下游接口,应记录生效范围并做回归校验。