当我运行我的代码时,它给了我这个错误
[ s4s-att-not-allowed: Attribute 'maxOccurs' cannot appear in element 'element'.]
Run Code Online (Sandbox Code Playgroud)
这是我的架构:
<xs:element name="parameters" maxOccurs="1" minOccurs="0">
<xs:complexType>
<xs:all>
<xs:element ref="p ?"/>
</xs:all>
</xs:complexType>
</xs:element>
Run Code Online (Sandbox Code Playgroud)
<xs:element>可以在顶级(下面xs:schema)声明,但它不能有minOccurs或maxOccurs因为没有上下文就没有任何意义.如果它是root,它只能有一个元素,如果不是,则该信息引用父元素的上下文.这是合法的:
<xs:schema ...>
<xs:element name="parameters">...</xs:element>
...
</xs:schema>
Run Code Online (Sandbox Code Playgroud)
但这不是:
<xs:schema ...>
<xs:element name="parameters" maxOccurs="1" minOccurs="0">...</xs:element>
...
</xs:schema>
Run Code Online (Sandbox Code Playgroud)
您可以参考组中的顶级,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>
Run Code Online (Sandbox Code Playgroud)
以下<parent>是<parameters>发生的上下文,因此您可以说出允许的次数.定义<parameters>是全局的,您可以使用该ref属性来引用它.
如果你永远不需要重复使用,parameters或者你永远不会以parametersroot用户身份获得它,那么你不需要它在顶层,并且可以将它嵌套在你的parent定义中.在这种情况下,你可以使用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>
Run Code Online (Sandbox Code Playgroud)
您还可以参考顶级类型.重用,扩展和限制类型更常见,因此这也是定义元素的有效(和推荐)方法:
<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>
Run Code Online (Sandbox Code Playgroud)