XML Schema:choice和minOccurs

Dyn*_*ope 11 xsd

在下面的这个例子中,

        <xs:complexType>
        <xs:choice minOccurs="3" maxOccurs="unbounded">
            <xs:element ref="Start"/>
            <xs:element ref="Center"/>
            <xs:element ref="End"/>
            <xs:element ref="PI" minOccurs="0"/>
            <xs:element ref="Feature" minOccurs="0" maxOccurs="unbounded"/>
        </xs:choice>
        </xs:complexType>
Run Code Online (Sandbox Code Playgroud)

选择minOccurs> 1时会发生什么?这是否意味着元素"开始"可以发生3次?

Inf*_*nd' 12

选择minOccurs> 1时会发生什么?这是否意味着元素"开始"可以发生3次?

是的<Start>可以发生3次或更多次!将minOccurs选择为多于1允许元素集出现多次或不同元素多次出现.

详细说明: 在上面的例子中,你已经将minOccurs应用为3,<Choice>而将maxOccurs应用为无界!这意味着..下面列出的子元素<Choice>,其中任何三个或重复三次的任何标记应该出现在他们的父母之下!示例XML如下所示:

让我们假设这些标记集出现在一个名为<parent>then 的节点下:

  <parent>
    <Start>Start1</Start>
    <Center>Center1</Center>
    <End>End1</End>
  </parent>
Run Code Online (Sandbox Code Playgroud)

- - - - 要么 - - - -

  <parent>
    <Center>Start1</Center>
    <Center>Center1</Center>
    <Feature>End1</Feature>
  </parent>
Run Code Online (Sandbox Code Playgroud)

- - - - 要么 - - - -

 <parent>
    <Start>Start1</Start>
    <Start>Start1</Start>
    <Start>Start1</Start>
    <Start>Start1</Start>
  </parent>
Run Code Online (Sandbox Code Playgroud)

以上所有组合均有效!

但是你还为'PI'和'功能'定义了minOccurs ="0".

此添加导致Validator也传递没有子元素的父级.即:

  <parent>
  </parent>
Run Code Online (Sandbox Code Playgroud)

如果从这两个元素中删除minOccurs,则验证会强制您包含最少3个标记以包含在父元素下.

也有maxOccurs="unbounded"用于Feature元素是没有用的!如果您添加或取消它,行为将不会改变..