XML Schema 进化:派生类型与重定义技巧解析
1. XML 模式变更概述
在动态的互联网环境中,XML 模式并非一成不变,而是需要不断进化以满足新需求。常见的 XML 模式变更类型有三种:添加新的子节点、删除子节点和进行一般性的结构调整。不过在实际应用里,删除子节点的情况较为少见,所以主要探讨添加子节点和结构调整这两种情况。
1.1 XML 模式变更类型
变更类型 | 说明 |
---|---|
添加新的子节点 | 可向现有复杂类型定义或组定义中添加子元素,也能在复杂类型定义或属性组定义里添加属性 |
结构调整 | 涵盖更改元素或属性类型、重新定义组或属性组等 |
1.2 模式变更的约束条件
在构建新的模式时,要保证旧模式下有效的实例在新模式下同样有效。这就要求新模式必须是原模式的超类型,具体规则如下:
- 复杂类型扩展规则 :不能引入比原定义更严格的基数约束。
- 元素和属性类型规则 :子元素和属性所使用的类型必须是原类型定义中对应类型的超类型(或相同)。
- 默认和固定值规则 :不能为现有的子元素和属性引入新的默认或固定值,防止现有实例失效。
- 新