XML Schema中的final和fixed属性怎么用

14次阅读

final 限制类型派生,作用于 complexType/simpleType;fixed 强制实例值固定,作用于 element/Attribute。二者互斥且不可与 default 共存:final 防扩展或限制,fixed 要求值严格匹配并禁止缺失。

XML Schema中的final和fixed属性怎么用

final 和 fixed 是 xml Schema(XSD)中两个用途明确、作用层级不同的控制属性:final 管类型派生行为,作用于 complexTypesimpleType 定义;fixed 管实例值强制约束,作用于 elementattribute 声明。二者不能混用,也不可同时与 default 共存。

final:限制类型派生方式

它用来防止其他类型基于当前类型做特定形式的扩展或限制,常用于保护基类型的设计意图。

  • #all:完全禁止任何派生(extension、restriction、list、union 都不可)
  • extension:只禁止通过 派生(即不允许加新字段)
  • restriction:只禁止通过 派生(即不允许缩窄取值范围)
  • 多个值组合:如 final="extension restriction",空格分隔,禁止两种方式
  • 若未显式设置,其默认值继承finalDefault 默认为空,即不限制

示例:不希望 Address 被限制派生,只允许扩展出 USAddress、UKAddress:

final=”restriction”>
  
    
    
  

fixed:强制元素或属性取固定值

它让某个元素或属性在 XML 实例中**必须等于指定值**,否则校验失败。适用于版本号、状态码、国家编码等不变字段。

  • 仅适用于简单内容元素(text-only)或属性
  • default 互斥:一个声明中不能同时出现 fixeddefault
  • 如果元素/属性存在,其值必须严格匹配 fixed 值;若不存在,则校验直接失败(不像 default 会补默认值)
  • 效果类似编程语言中的 const,但由 Schema 层强制执行

示例:要求 country 属性恒为 “US”:

fixed=”US”/>

合法实例:...;非法实例:(缺少该属性)。

常见误用提醒

  • final 只能写在 或根 上,不能用在
  • fixed 不能用于复杂类型元素(含子元素或属性的 element),否则校验器报错
  • final="list"final="union" 仅对 有效;final 不支持这两个值
  • 使用 fixed 时,建议配合 use="required"(对 attribute)或确保元素必出现(对 element),避免因缺失导致校验失败而非值不符
text=ZqhQzanResources