本主题与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:B和B(或它们的替换组中的元素)违反了“唯一粒子属性”。在对此模式进行验证期间,将为这两个粒子创建歧义。我怎么能解决这个问题
发布于 2014-11-29 12:43:36
这是两种类似的方法:
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元素)。
https://stackoverflow.com/questions/27200364
复制相似问题