final属性用于按需禁止特定类型的派生方式,确保类型契约稳定:对simpleType可限制restriction/list/union派生,对complexType/element可禁用extension/restriction;支持#all全锁及schema级finalDefault默认策略。
final 属性的作用就是明确禁止某些类型的派生方式,防止别人基于你定义的类型创建子类型。它不是全局禁用所有派生,而是按需锁定特定路径,比如只允许扩展但不允许限制,或干脆全部封死。
针对 simpleType 的 final 控制
对简单类型(如字符串、整数、自定义邮编类型)设 final,能阻止后续通过 restriction(限制)、list(列表)、union(联合)等方式派生新类型。
- 写
final="restriction":别人不能用 去缩小取值范围(比如不能从 string 派生出“最多10位字母”的子类型) - 写
final="list":禁止把它变成列表类型(如不能让一个整数类型变成“整数列表”) - 写
final="#all":彻底锁死——任何派生方式都不允许 - 如果类型里用了
fixed属性(比如固定了 pattern),那即使没写 final,试图在派生中改这个 fixed 值也会失败
针对 complexType 和 element 的 final 控制
对复合类型或元素声明加 final,主要是防止继承式扩展或限制,尤其在需要保证结构稳定时很关键。