将 XSD 1.1 转换为 1.0 - 验证错误
Converting XSD 1.1 to 1.0 - Validation Error
当我尝试验证这个时 XSD:
<xs:group name="ValidityDateGroup">
<xs:annotation>
<xs:documentation>Reusable element group to be used where Valid From/Until needs to be captured in xs:date format</xs:documentation>
</xs:annotation>
<xs:all>
<xs:element minOccurs="0" name="ValidFrom" type="xs:date"/>
<xs:element minOccurs="0" name="ValidUntil" type="xs:date"/>
</xs:all>
</xs:group>
<xs:complexType name="NameType">
<xs:choice maxOccurs="unbounded" minOccurs="0">
<!-- SNIP - many more choices here -->
<xs:group ref="ValidityDateGroup"/> <!-- THIS IS WHERE THE ERROR IS -->
</xs:choice>
</xs:complexType>
我收到以下错误:
An 'all' model group must appear in a particle with '{'min occurs'}' = '{'max occurs'}' = 1, and that particle must be of a pair which constitutes the '{'content type'}' of a complex type definition.
我能够让它作为 1.0 XSD 工作的唯一方法是将 'all' 更改为 'sequence':
<xs:group name="ValidityDateGroup">
<xs:annotation>
<xs:documentation>Reusable element group to be used where Valid From/Until needs to be captured in xs:date format</xs:documentation>
</xs:annotation>
<xs:sequence>
<xs:element minOccurs="0" name="ValidFrom" type="xs:date"/>
<xs:element minOccurs="0" name="ValidUntil" type="xs:date"/>
</xs:sequence>
</xs:group>
但这会强制执行特定顺序。
有没有人知道如何让这个 XSD 与 XSD 1.0 一起工作?
你不能让它与 XSD 1.0 一起工作。 "all" 不允许作为选择的一部分。在 1.1 中也是如此。
但是你到底想达到什么目的?您只能选择一个分支,这显然是多余的,只是它指定了 max=unbounded。您的 "all" 组说 From 和 Until 都是可选的,可以按任意顺序出现,而您的 max=unbounded
说该组可以出现任意次数。对我来说,如果这意味着什么,那就意味着您的内容可以包含任意数量的 From
元素和任意数量的 Until
元素,并且它们可以按照您喜欢的任何顺序出现。即表示
<choice maxOccurs="unbounded">
<element name="From"/>
<element name="Until"/>
</choice>
我设法根据 Michael 的回答完成了这项工作,但将选择包装在 ValidityDateGroup 中的序列中:
<xs:group name="ValidityDateGroup">
<xs:sequence>
<xs:choice minOccurs="0" maxOccurs="unbounded">
<xs:element minOccurs="0" name="ValidFrom" type="xs:date"/>
<xs:element minOccurs="0" name="ValidUntil" type="xs:date"/>
</xs:choice>
</xs:sequence>
</xs:group>
因此,引用迈克尔的话,我的内容 "can contain any number of From elements and any number of Until elements, and they can occur in any order"。这也保留了可以在别处重复使用的 ValidityDateGroup。
当我尝试验证这个时 XSD:
<xs:group name="ValidityDateGroup">
<xs:annotation>
<xs:documentation>Reusable element group to be used where Valid From/Until needs to be captured in xs:date format</xs:documentation>
</xs:annotation>
<xs:all>
<xs:element minOccurs="0" name="ValidFrom" type="xs:date"/>
<xs:element minOccurs="0" name="ValidUntil" type="xs:date"/>
</xs:all>
</xs:group>
<xs:complexType name="NameType">
<xs:choice maxOccurs="unbounded" minOccurs="0">
<!-- SNIP - many more choices here -->
<xs:group ref="ValidityDateGroup"/> <!-- THIS IS WHERE THE ERROR IS -->
</xs:choice>
</xs:complexType>
我收到以下错误:
An 'all' model group must appear in a particle with '{'min occurs'}' = '{'max occurs'}' = 1, and that particle must be of a pair which constitutes the '{'content type'}' of a complex type definition.
我能够让它作为 1.0 XSD 工作的唯一方法是将 'all' 更改为 'sequence':
<xs:group name="ValidityDateGroup">
<xs:annotation>
<xs:documentation>Reusable element group to be used where Valid From/Until needs to be captured in xs:date format</xs:documentation>
</xs:annotation>
<xs:sequence>
<xs:element minOccurs="0" name="ValidFrom" type="xs:date"/>
<xs:element minOccurs="0" name="ValidUntil" type="xs:date"/>
</xs:sequence>
</xs:group>
但这会强制执行特定顺序。
有没有人知道如何让这个 XSD 与 XSD 1.0 一起工作?
你不能让它与 XSD 1.0 一起工作。 "all" 不允许作为选择的一部分。在 1.1 中也是如此。
但是你到底想达到什么目的?您只能选择一个分支,这显然是多余的,只是它指定了 max=unbounded。您的 "all" 组说 From 和 Until 都是可选的,可以按任意顺序出现,而您的 max=unbounded
说该组可以出现任意次数。对我来说,如果这意味着什么,那就意味着您的内容可以包含任意数量的 From
元素和任意数量的 Until
元素,并且它们可以按照您喜欢的任何顺序出现。即表示
<choice maxOccurs="unbounded">
<element name="From"/>
<element name="Until"/>
</choice>
我设法根据 Michael 的回答完成了这项工作,但将选择包装在 ValidityDateGroup 中的序列中:
<xs:group name="ValidityDateGroup">
<xs:sequence>
<xs:choice minOccurs="0" maxOccurs="unbounded">
<xs:element minOccurs="0" name="ValidFrom" type="xs:date"/>
<xs:element minOccurs="0" name="ValidUntil" type="xs:date"/>
</xs:choice>
</xs:sequence>
</xs:group>
因此,引用迈克尔的话,我的内容 "can contain any number of From elements and any number of Until elements, and they can occur in any order"。这也保留了可以在别处重复使用的 ValidityDateGroup。