我尝试用 CTA 设计一个 XSD。我有以下 XML:
<?xml version="1.0" encoding="UTF-8"?>
<persons xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xsi:noNamespaceSchemaLocation="test.xsd">
<person version="1">
<firstname>toto</firstname>
<lastname>tutu</lastname>
</person>
<person version="2">
<firstname>toto</firstname>
<lastname>tutu</lastname>
<birthdate>2017-12-18</birthdate>
</person>
</persons>
XSD 看起来像:
<xs:schema xmlns:xs="http://www.w3.org/2001/XMLSchema"
xmlns:vc="http://www.w3.org/2007/XMLSchema-versioning"
elementFormDefault="qualified"
vc:minVersion="1.1">
<xs:complexType name="person_v1">
<xs:sequence>
<xs:element name="firstname" type="xs:token"/>
<xs:element name="lastname" type="xs:token"/>
</xs:sequence>
<xs:attribute name="version" type="xs:token" use="required" fixed="1"/>
</xs:complexType>
<xs:complexType name="person_v2">
<xs:sequence>
<xs:element name="firstname" type="xs:token"/>
<xs:element name="lastname" type="xs:token"/>
<xs:element name="birthdate" type="xs:date"/>
</xs:sequence>
<xs:attribute name="version" type="xs:token" use="required" fixed="2"/>
</xs:complexType>
<xs:element name="person">
<xs:alternative test="@version=1" type="person_v1"/>
<xs:alternative test="@version=2" type="person_v2"/>
</xs:element>
<xs:element name="persons">
<xs:complexType>
<xs:sequence>
<xs:element ref="person" maxOccurs="unbounded"/>
</xs:sequence>
</xs:complexType>
</xs:element>
</xs:schema>
XML 针对 XSD 进行验证,但在 XSD 中:
- 如果我删除版本属性,它会验证,
- 如果我将版本 1 替换为 3,它会验证,
- 如果我删除人员的所有内容,它会验证。
我的 XSD 上一定少了一些东西。