XSD 1.1 通过条件类型切换、跨字段断言、动态枚举、开放内容模型等增强,将业务逻辑验证下沉至模式层;依赖 XPath 2.0 且需解析器显式支持。
XSD 1.1 在 XSD 1.0 基础上引入了多项实用增强,主要解决约束表达力不足、跨元素联动校验难、模式复用不灵活等问题。它不是简单升级,而是让 XML 模式真正支持业务逻辑级验证。
允许根据元素或属性的值动态选择类型定义。比如:
元素,当 method="credit" 时,必须包含 ;当 method="bank" 时,则要求 存在。 + 实现按需校验,无需拆分成多个复杂类型。
支持 XPath 2.0 表达式,在任意作用域内对多个字段做逻辑判断。常见用途包括:
)substring(birthDate, 1, 4)))
不再局限于静态枚举列表,可基于上下文生成有效值集合:
或结合 与 test 实现) 配合函数(如 matches()、starts-with())实现正则级动态过滤
openContent)允许在已定义元素中插入未声明但符合规则的扩展子元素,适合插件化或版本兼容场景:
mode="suffix" 或 mode="interleave" 控制扩展位置和顺序基本上就这些。XSD 1.1 的核心思路是把部分原本要靠程序代码完成的业务规则,下沉到模式层直接表达——不复杂但容易忽略的是,它依赖 XPath 2.0,且需要解析器明确支持 XSD 1.1(如 Xerces-J 2.12+、Saxon-EE)。