扩展现有的complexType

时间:2014-11-29 08:25:14

标签: xsd

此主题与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;。在针对此模式进行验证期间,将为这两个粒子创建歧义。。我如何解决问题

1 个答案:

答案 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元素)。