当我运行我的代码时,它给了我这个错误
[ s4s-att-not-allowed: Attribute 'maxOccurs' cannot appear in element 'element'.]
这是我的架构:
<xs:element name="parameters" maxOccurs="1" minOccurs="0">
<xs:complexType>
<xs:all>
<xs:element ref="p ?"/>
</xs:all>
</xs:complexType>
</xs:element>
答案 0 :(得分:6)
<xs:element>
可以在顶级(xs:schema
下方)宣布,但它不能minOccurs
或maxOccurs
,因为它不会没有背景的任何意义。如果它的根只能有一个元素,如果不是,则该信息指的是父元素的上下文。这是合法的:
<xs:schema ...>
<xs:element name="parameters">...</xs:element>
...
</xs:schema>
但这不是:
<xs:schema ...>
<xs:element name="parameters" maxOccurs="1" minOccurs="0">...</xs:element>
...
</xs:schema>
您可以将引用到xs:element
等组中的顶级xs:sequence
。在这里你可以使用这些属性,因为现在你有了一个上下文(这个组中允许多少个)。这是合法的:
<xs:schema ...>
<xs:element name="parent">
<xs:complexType>
<xs:sequence>
<xs:element ref="parameters" maxOccurs="1" minOccurs="0" />
</xs:sequence>
</xs:complexType>
</xs:element>
<xs:element name="parameters">
<xs:complexType>
<xs:all>
<xs:element ref="p" minOccurs="0"/>
</xs:all>
</xs:complexType>
</xs:element>
...
</xs:schema>
此处<parent>
是发生<parameters>
的上下文,因此您可以说明其中允许的次数。 <parameters>
的定义是全局的,您可以使用ref
属性来引用它。
如果您永远不需要重复使用parameters
,或者如果您永远不会以parameters
为根,那么您在顶层不需要它,并且可以将其嵌入parent
1}}定义。在这种情况下,您可以将name
属性与minOccurs
和maxOccurs
一起使用。
<xs:schema ...>
<xs:element name="parent">
<xs:complexType>
<xs:sequence>
<xs:element name="parameters" maxOccurs="1" minOccurs="0" />
<xs:complexType>
<xs:all>
<xs:element ref="p" minOccurs="0"/>
</xs:all>
</xs:complexType>
</xs:element>
</xs:sequence>
</xs:complexType>
</xs:element>
...
</xs:schema>
您还可以参考顶级类型。重用,扩展和限制类型更常见,因此这也是定义元素的有效(和推荐)方式:
<xs:schema ...>
<xs:element name="parent">
<xs:complexType>
<xs:sequence>
<xs:element name="parameters" type="ParameterType" maxOccurs="1" minOccurs="0" />
</xs:sequence>
</xs:complexType>
</xs:element>
<xs:complexType name="ParameterType">
<xs:all>
<xs:element ref="p" minOccurs="0"/>
</xs:all>
</xs:complexType>
...
</xs:schema>