【发布时间】:2012-01-31 04:00:02
【问题描述】:
我希望能够对我的 XML 文件进行版本控制。我想要一个较旧的 xsd 文件能够验证收到的 XML 文件的较新版本。
为此,我将使用版本属性保护未知的 xml 标记。
问题:如何让 xsd 根据版本属性跳过部分 XML?在下面的示例中,我希望 xsd 能够验证版本 1 和 2 但不是 3 的任何标签。
场景:
<MYXML>
<SOME_XML version="1">
<SOME_VERSION_1_DATA>this_is_data_only_for_version_1</SOME_VERSION_1_DATA>
</SOME_XML>
<SOME_XML version="2">
<SOME_VERSION_2_DATA>this_is_data_only_for_version_2</SOME_VERSION_2_DATA>
</SOME_XML>
<SOME_XML version="3">
<SOME_VERSION_3_DATA>this_is_data_only_for_version_3</SOME_VERSION_3_DATA>
</SOME_XML>
</MYXML>
<xs:complexType name="SOME_XML">
<xs:sequence>
<xs:element minOccurs="0" maxOccurs="1" name="SOME_VERSION_1_DATA" type="xs:string"/>
<xs:element minOccurs="0" maxOccurs="1" name="SOME_VERSION_2_DATA" type="xs:string"/>
</xs:sequence>
<xs:attribute ref="version"/>
</xs:complexType>
<xs:attribute name="version">
<xs:simpleType>
<xs:restriction base="xs:integer">
<xs:enumeration value="1"/>
<xs:enumeration value="2"/>
</xs:restriction>
<xs:anyAttribute processContents="skip"/> <-- SKIP the attribute if NOT 1 ro 2?
</xs:simpleType>
</xs:attribute>
【问题讨论】: