此主题与xsd: define an element that can be repeated an even number of times相关。我想使用带扩展名的complexContent创建一个新的复杂类型。我试过这个:
<xs:schema xmlns:xs="http://www.w3.org/2001/XMLSchema" >
<xs:complexType name="evenOccurrence">
<xs:sequence minOccurs="0" maxOccurs="unbounded">
<xs:element name="B" maxOccurs="2" minOccurs="2"/>
</xs:sequence>
</xs:complexType>
<xs:complexType name="oddOcurrence">
<xs:complexContent>
<xs:extension base="evenOccurrence">
<xs:sequence>
<xs:element name="B"/>
</xs:sequence>
</xs:extension>
</xs:complexContent>
</xs:complexType>
此代码生成以下错误: cos-nonambig:B和B(或来自其替换组的元素)违反&#34;独特粒子归因&#34;。在针对此模式进行验证期间,将为这两个粒子创建歧义。。我如何解决问题
答案 0 :(得分:0)
这是两种类似的方式:
1-没有扩展名:
<xs:complexType name="oddOcurrence">
<xs:sequence>
<xs:element name="B" /> <!-- 1 time -->
<xs:sequence minOccurs="0" maxOccurs="unbounded">
<!-- 2n times -->
<xs:element name="B" maxOccurs="2" minOccurs="2" />
</xs:sequence>
</xs:sequence>
</xs:complexType>
2-相似,带扩展名
<xs:complexType name="elementOneTime">
<xs:sequence>
<!-- 1 time -->
<xs:element name="B" />
</xs:sequence>
</xs:complexType>
<xs:complexType name="oddOcurrence">
<xs:complexContent>
<xs:extension base="elementOneTime">
<xs:sequence minOccurs="0" maxOccurs="unbounded">
<!-- 2n times -->
<xs:element name="B" maxOccurs="2" minOccurs="2" />
</xs:sequence>
</xs:extension>
</xs:complexContent>
</xs:complexType>
编辑:¿为什么不明确?
由于 evenOccurrence 可以为空,当解析器找到第一个 B元素和 oddOccurance 时,它不知道它是否解析 evenOccurance 的第一个B或仅出现一次的 B元素。
首先放置只有在消除歧义后才能出现的元素,因为第一个 B元素将被分析,然后解析器将进入分析 oddOccurence 类型(所有其他B元素)。