当我尝试验证此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>
我收到以下错误:
所有&#39;模型组必须出现在一个粒子中,{&#39; min恰好&#39;}&#39; =&#39; {&#39; max出现&#39;}&#39; = 1,并且该粒子必须是一对构成&#39;内容类型&#39;}&#39;复杂类型定义。
我能够将其作为1.0 XSD工作的唯一方法是更改全部&#39;到一个&#39;序列&#39;:
<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一起使用?
答案 0 :(得分:1)
您无法使用XSD 1.0。一个&#34;所有&#34;不允许作为选择的一部分。这在1.1中也是如此。
但是你真正想要实现的目标是什么?您只选择了一个分支,这显然是多余的,除了它指定max = unbounded。你的所有&#34; group表示From和Until都是可选的,可以按任意顺序显示,而max=unbounded
表示该组可以出现任意次。对我而言,如果这意味着什么,则意味着您的内容可以包含任意数量的From
元素和任意数量的Until
元素,并且它们可以按您喜欢的任何顺序发生。也就是说,这意味着
<choice maxOccurs="unbounded">
<element name="From"/>
<element name="Until"/>
</choice>
答案 1 :(得分:0)
我设法让这个工作基于迈克尔的答案,但将选择包装在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>
因此,引用Michael,我的内容&#34;可以包含任意数量的From元素和任意数量的Until元素,它们可以按任何顺序出现&#34;。这也保留了ValidityDateGroup,可以在别处重复使用。