在这个时间点上,这个问题不是那么容易解决的;这是因为大多数 XSD 处理器都是 1.0,并且 XSD 1.1 规范中引入的模式版本不能向后应用。要了解有关它的更多信息(一般而言),请查看The Schema Versioning Namepsace以及第4.2.2 节条件包含中包含的示例。
您可以实现自己的预处理解决方案,即至少有助于选择合适的 XSD 处理器,例如:
<?xml version="1.0" encoding="utf-8" ?>
<!-- XML Schema generated by QTAssistant/XSD Module (http://www.paschidev.com) -->
<xsd:schema xmlns:xsd="http://www.w3.org/2001/XMLSchema" xmlns:vc="http://www.w3.org/2007/XMLSchema-versioning">
<xsd:element name="e" vc:minVersion="1.1">
<xsd:complexType>
<xsd:all>
<xsd:element name="a" minOccurs="0"/>
<xsd:element name="b" maxOccurs="unbounded"/>
</xsd:all>
</xsd:complexType>
</xsd:element>
<xsd:element name="e" vc:minVersion="1.0" vc:maxVersion="1.1">
<xsd:complexType>
<xsd:choice maxOccurs="unbounded">
<xsd:element name="a" minOccurs="0"/>
<xsd:element name="b" />
</xsd:choice>
</xsd:complexType>
</xsd:element>
</xsd:schema>
这样至少您将使用 XSD 1.1 认可的版本控制方法;它还带有一个处理模型。对于某些任务,建立一个至少可以处理XSD处理器(1.0或1.1)的预处理前处理器相对容易。为了在封闭环境中变得更简单,您还可以选择一个约定,您可以xsd:schema
用 vc:minVersion="1.1" 标记整体 - 基本上是您似乎想要开始的内容。
关于您的最后一段,XSD 处理器的选择必须是断言而不是暗示。这是因为 XSD 1.1 允许在 XSD 1.0 中不可能的构造(例如,all
包含最大出现次数大于 1 的粒子的合成器)......所以除非事先做出决定:要使用的处理器,XSD 可能会也可能不会无效。而无论使用何种处理器,其他内容都将无效。