XSD 1.1的新特性有哪些

XSD 1.1 通过条件类型切换、跨字段断言、动态枚举、开放内容模型等增强,将业务逻辑验证下沉至模式层;依赖 XPath 2.0 且需解析器显式支持。

XSD 1.1 在 XSD 1.0 基础上引入了多项实用增强,主要解决约束表达力不足、跨元素联动校验难、模式复用不灵活等问题。它不是简单升级,而是让 XML 模式真正支持业务逻辑级验证。

条件性类型切换(assertxs:alternative

允许根据元素或属性的值动态选择类型定义。比如:

  • 一个 元素,当 method="credit" 时,必须包含 ;当 method="bank" 时,则要求 存在。
  • 通过 + 实现按需校验,无需拆分成多个复杂类型。

跨字段约束(assert 表达式)

支持 XPath 2.0 表达式,在任意作用域内对多个字段做逻辑判断。常见用途包括:

  • 订单总价 = 商品数量 × 单价(
  • 身份证号格式与出生年份一致(如前4位等于 substring(birthDate, 1, 4)
  • 禁止某属性为空的同时另一属性也为空(

更灵活的枚举与动态取值控制

不再局限于静态枚举列表,可基于上下文生成有效值集合:

  • 国家下拉选中“中国”后,省份字段只接受“北京”“上海”等中国省级行政区(通过 或结合 test 实现)
  • 使用 配合函数(如 matches()starts-with())实现正则级动态过滤

开放内容模型增强(xs:openContent

允许在已定义元素中插入未声明但符合规则的扩展子元素,适合插件化或版本兼容场景:

  • 主结构固定,但允许第三方添加带特定命名空间的扩展字段
  • 配合 mode="suffix"mode="interleave" 控制扩展位置和顺序

基本上就这些。XSD 1.1 的核心思路是把部分原本要靠程序代码完成的业务规则,下沉到模式层直接表达——不复杂但容易忽略的是,它依赖 XPath 2.0,且需要解析器明确支持 XSD 1.1(如 Xerces-J 2.12+、Saxon-EE)。