blockDefault和finalDefault是XSD根元素的全局控制属性:前者默认禁止类型被extension/restriction/substitution替代(使用侧),后者默认禁止类型被extension/restriction派生(定义侧),均支持#all或组合值,可被子元素显式属性覆盖。

blockDefault 和 finalDefault 是 XSD 中定义在 <schema></schema> 根元素上的两个高级控制属性,它们的作用是统一设置整个架构中所有类型或元素的默认“封锁行为”,避免每个地方都重复写 block 或 final。
blockDefault:防止类型被意外替代
它控制的是“哪些派生方式不被允许用于替代当前类型”。适用于 <complextype></complextype> 和 <element></element> 元素的 block 属性默认值。
- 取值可以是
#all,或extension、restriction、substitution的组合(用空格分隔) - 比如
blockDefault="extension restriction"表示:除非显式覆盖,否则所有复杂类型默认禁止通过扩展或限制来替代 - 实际效果是,在实例文档中,即使某个元素声明了类型 A,而类型 B 是 A 的 extension,只要 A 的 block 属性(或默认值)包含
extension,B 就不能用来替换 A - 常用于强约束场景,比如确保接口契约不被子类型悄悄绕过
finalDefault:防止类型被进一步派生
它控制的是“哪些派生方式不被允许用于从当前类型再定义新类型”。适用于 <complextype></complextype> 和 <simpletype></simpletype> 的 final 属性默认值。
标签: .net
版权声明:除非特别标注,否则均为本站原创文章,转载时请以链接形式注明文章出处。
还木有评论哦,快来抢沙发吧~