12

在下面的这个例子中,

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

What happens when choice has minOccurs > 1? 这是否意味着元素“开始”可以出现 3 次?

4

2 回答 2

12

What happens when choice has 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>

- - - - 或者 - - - -

  <parent>
    <Center>Start1</Center>
    <Center>Center1</Center>
    <Feature>End1</Feature>
  </parent>

- - - - 或者 - - - -

 <parent>
    <Start>Start1</Start>
    <Start>Start1</Start>
    <Start>Start1</Start>
    <Start>Start1</Start>
  </parent>

以上所有组合均有效!

但是您还为 'PI' 和 'Feature' 定义了 minOccurs="0" ..

此添加导致 Validator 也传递没有子元素的父元素。IE:

  <parent>
  </parent>

如果您从这两个元素中删除 minOccurs,则验证会强制您在父项下包含至少 3 个标签。

也有maxOccurs="unbounded"for FeatureElement 是没有用的!如果您添加或删除它,行为不会改变..

于 2012-12-21T08:35:31.540 回答
4

在可读的类似正则表达式的语法中,而不是冗长的尖括号中,你有

(开始 | 中心 | 结束 | PI?| 特征*){3,}

这意味着括号内的任何内容 3 次或更多次,并且每次都不必是相同的项目。鉴于有可以为空的替代方案 - PI?和 Feature* - 在选项中,整个表达式也是可以为空的,这意味着任何数量的空值(包括零)也将满足约束。

要回答您的具体问题,是的,“开始”可以出现三次(或多次)。事实上,它可以发生任何次数。

于 2012-12-21T22:56:53.387 回答