XML Schema:choice和minOccurs

时间:2012-12-21 06:04:32

标签: 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>

当选择minOccurs&gt;时会发生什么? 1?这是否意味着元素“开始”可以发生3次?

2 个答案:

答案 0 :(得分:12)

  

当选择minOccurs&gt;时会发生什么? 1?这是否意味着元素“开始”可以发生3次?

<Start>可能会发生3次或更多次!选择minOccurs为多于1允许元素集出现多次或不同元素多次出现。

详细说明: 在上面的示例中,您已将minOccurs应用为<Choice>的3和maxOccurs为无界!这意味着.. <Choice>下列出的子元素,其中任意三个或重复三次的任何标记都应出现在其父级下面!示例XML列在下面:

让我们假设这些标记集出现在名为<parent>的节点下,然后:

  <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'和'功能'定义了minOccurs =“0”..

此添加会导致Validator传递不包含子元素的父级。 ie:

  <parent>
  </parent>

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

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

答案 1 :(得分:4)

在可读的类似regexp的语法中,而不是大量的尖括号,你有

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

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

要回答您的具体问题,是的,&#39;开始&#39;可以发生三次(或更多次)。事实上,它可以发生任何次数。