Inheritance 由限制继承的类型是否继承其元素的minOccurs和maxOccurs?

Inheritance 由限制继承的类型是否继承其元素的minOccurs和maxOccurs?,inheritance,xsd,Inheritance,Xsd,下面是一个模式: <xs:complexType name="Base"> <xs:sequence> <xs:element name="opt" minOccurs="0" /> </xs:sequence> </xs:complexType> <xs:complexType name="D1a"> <xs:complexContent> <xs

下面是一个模式:

<xs:complexType name="Base">
    <xs:sequence>
        <xs:element name="opt" minOccurs="0" />
    </xs:sequence>
</xs:complexType>

<xs:complexType name="D1a">
    <xs:complexContent>
        <xs:restriction base="Base">
            <xs:sequence>
                <xs:element name="opt" maxOccurs="0" />
            </xs:sequence>
        </xs:restriction>
    </xs:complexContent>
</xs:complexType>

<xs:complexType name="D1b">
    <xs:complexContent>
        <xs:restriction base="Base">
            <xs:sequence>
                <xs:element name="opt" minOccurs="0" maxOccurs="0" />
            </xs:sequence>
        </xs:restriction>
    </xs:complexContent>
</xs:complexType>

<xs:complexType name="D1c">
    <xs:complexContent>
        <xs:restriction base="Base">
            <xs:sequence>
            </xs:sequence>
        </xs:restriction>
    </xs:complexContent>
</xs:complexType>

VisualStudio验证shema时没有错误。但是XMLSpy说D1a是无效的,因为
maxOccurs
不应该小于
minOccurs
。Visual Studio似乎认为
minOccurs
是从Base继承的,等于0。但是XMLSpy认为
minOccurs
不应该从Base继承,它等于1(默认值)

哪个行为符合XSD规范?

XMLSpy是正确的

根据XSD规范,当您限制complexType时,必须重新定义元素内容模型,但新定义必须与旧定义一致

没有从基类型的定义方式继承任何特定设置(事实上,您甚至可以使用不同的构造定义相同的内容模型)

但就其本身而言,
D1a
的定义是错误的。 在
opt
元素的声明中,缺少
minOccurs
属性。 但它确实存在,默认值为1。
因此,它大于您指定的
maxOccurs
,这当然是胡说八道。Visual Studio认为错误

你能指出XSD规范文本来解释这个问题吗?我试图弄清楚ref=”“元素是继承minOccurs/maxOccurs属性还是重新开始。很难找到reference.XSD 1.0,第3.3.2节,请参见{min occurs}属性的描述:“minOccurs[属性]的实际值,如果存在,否则为1。”规范中没有说明,minOccurs必须从基类型继承。我找不到一个明确的迹象表明,通过限制派生的类型是完全新的。但我也找不到任何复杂类型必须继承受限类型的语句。直观地说,我可以理解,通过限制派生的类型是一个新类型,它只符合受限制的类型,不从中继承任何内容。我忘了注意,它是规范的第1部分:换句话说,规范规定默认情况下
minOccurs
maxOccurs
等于1。规范没有说明这些属性的继承。