restriction是收窄类型取值范围或结构的派生机制,extension是扩展复杂类型以增加新内容的机制;前者支持简单与复杂类型、仅减少允许值,后者仅支持复杂类型、可添加新元素或属性。
restriction 和 extension 是 XSD 中用于定义类型派生的两个核心机制,作用方向相反:restriction 是“收窄”已有类型的取值范围或结构,extension 是“扩展”已有类型以增加新内容。
用于在保持兼容的前提下,对父类型施加更严格的约束。它不增加新成分,只减少允许的值或结构可能性。
base 属性,引用一个已存在的简单类型或复杂类型minInclusive、maxLength、enumeration、pattern 等用于在父类型基础上“追加”新内容,使新类型能表达更多数据。扩展后的新类型兼容原类型(即原类型的实例仍合法),但能力更强。
complexContent 使用,典型结构是:...
对比维度如下:
triction 的 base 可以是简单类型(如 xs:integer)或复杂类型;extension 的 base 必须是复杂类型不复杂但容易忽略:simpleContent 下的 extension 只能加 attribute,不能加子元素;而 complexContent 下的 extension 才能加子元素——这个边界由内容模型决定,不是关键字本身。