XML-Schema : maxOccurs , minOccurs



当我运行代码时,它会给我这个错误

[ 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>

<xs:element>可以在顶层(在xs:schema之下)声明,但不能有minOccursmaxOccurs,因为没有上下文就没有意义。如果它是根,它只能有一个元素,如果不是,则该信息引用父元素的上下文。这是合法的:

<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:sequence)中的顶级xs:element。在这里,可以使用这些属性,因为现在您有了上下文(该组中允许多少个)。这是合法的:

<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定义中。在这种情况下,可以将name属性与minOccursmaxOccurs一起使用。

<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>

最新更新