替代组是一个 XML 模式功能,可以提供在 XML 消息中用一个元素替代另一个元素的方法。
替代组是一个全局元素列表,这些元素可替代另一个被称为头元素的全局元素。
通过将一个全局元素(成员元素)上的替换组属性设置为指向另一个全局元素(头 元素)来定义替换组。 这将成员元素添加到头元素的替代组。
- 头元素
- 头元素是可以替代的元素。 解析消息时,该消息的其中一个成员元素可以替代头元素出现,而不会引起验证错误。
- 抽象元素
- 抽象元素是必须替代的头元素,并且通过元素中的“abstract”属性指示。 通常,抽象元素在它们的替代组中有其他元素,如果没有,那么抽象元素将不起作用。 在消息定义中任何出现了抽象元素的位置,都必须改为显示该抽象元素的替代组的成员。
- 元素上的阻塞属性
- 元素上的阻塞属性限制了可替代元素的全局元素的集合。 阻塞属性可以接受值限制、扩展、替代或全部的任何子集。
- 如果阻塞属性包含限制,那么基于元素类型限制的元素无法被元素替代。
- 如果阻塞属性包含扩展,那么基于元素类型扩展的元素无法被元素替代。
- 如果阻塞属性包含替代,那么属于元素的替代组的元素不能被元素替代。
- 如果阻塞属性包含全部,那么以上所有局限性都适用。
- 元素上的最终属性
- 元素上的最终属性限制了可以属于元素的替代组的全局元素集。 最终属性可使用值限制、扩展或全部的任意子集。
- 如果最终属性包含限制,那么基于元素类型限制的元素不能存在于元素的替代组中。
- 如果最终属性包含扩展,那么基于元素类型扩展的元素不能存在于元素的替代组中。
- 如果最终属性包含全部,那么以上两条局限性都适用。
- 复杂类型上的阻塞属性
- 复杂类型上的阻塞属性限制了可以替代该类型的其他类型的集合。 阻塞属性可以采用值限制、扩展或全部。 这些值的含义与针对元素上的阻塞属性显示的值相同。 作为替代组成员的元素只能替代头元素,前提是该元素的类型与头元素类型上的阻塞属性兼容。
- 缺省阻塞和最终属性
- 可以在消息定义文件级别设置阻塞和最终属性的缺省值。 如果已经为一个或两个属性设置了缺省值,而在对象级别尚未设置相关阻塞或最终属性,将使用该对象的缺省设置。 可以覆盖对象级别中的缺省设置。