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。规范没有说明这些属性的继承。