MaxOccurs在选择中

时间:2015-02-15 06:26:01

标签: xml xsd

有什么区别:

  <choice maxOccurs="unbounded">
     <element ref="test:A" maxOccurs="1"/>
  </choice>

  <choice maxOccurs="1">
    <element ref="test:A" maxOccurs="unbounded"/>
  </choice>

出于任何实际目的?

2 个答案:

答案 0 :(得分:2)

在这种特殊情况下,没有什么,但是当你为选择添加替代品时会出现差异:

<choice maxOccurs="unbounded">
  <element ref="test:A" maxOccurs="1"/>
  <element ref="test:B" maxOccurs="1"/>
</choice>

将允许任何数量的A和B元素,而

<choice maxOccurs="1">
  <element ref="test:A" maxOccurs="unbounded"/>
  <element ref="test:B" maxOccurs="unbounded"/>
</choice>

允许任意数量的As或任意数量的B,但不能混合使用两者。

答案 1 :(得分:1)

该特定组合没有区别。选择单个替代无限次数与选择一次以允许无限数量的单个替代选择相同。

如何看待xsd:choice基数

@minOccurs@maxOccurs出现在xs:choice时,替代品中选项的数量的最小或最大次数受到限制。

然后 ,对于每个这样的选择,选择的子替代选择的基数开始发挥作用。

组合示例

以下是以正则表达式表示法表示的一些示例。还提供了给定组合的有效序列的实例。

<choice minOccurs="1" maxOccurs="1">
  <element name="A" minOccurs="1" maxOccurs="1"/>
  <element name="B" minOccurs="1" maxOccurs="1"/>
</choice>

正则表达式[AB]

有效序列包括:

  • A

<choice minOccurs="0" maxOccurs="1">
  <element name="A" minOccurs="1" maxOccurs="1"/>
  <element name="B" minOccurs="1" maxOccurs="1"/>
</choice>

正则表达式[AB]?

有效序列包括:

  • 没有
  • A

<choice minOccurs="1" maxOccurs="unbounded">
  <element name="A" minOccurs="1" maxOccurs="1"/>
  <element name="B" minOccurs="1" maxOccurs="1"/>
</choice>

正则表达式[AB]+

有效序列包括:

  • 包含至少一个A或一个B
  • 的任何组合

<choice minOccurs="1" maxOccurs="1">
  <element name="A" minOccurs="1" maxOccurs="unbounded"/>
  <element name="B" minOccurs="1" maxOccurs="unbounded"/>
</choice>

正则表达式A+|B+

有效序列包括:

  • A
  • AA
  • AAA
  • BB
  • BBB

<choice minOccurs="1" maxOccurs="1">
  <element name="A" minOccurs="0" maxOccurs="1"/>
  <element name="B" minOccurs="0" maxOccurs="unbounded"/>
</choice>

正则表达式A?|B*

有效序列包括:

  • 没有
  • A
  • BB
  • BBB

<choice minOccurs="0" maxOccurs="unbounded">
  <element name="A" minOccurs="1" maxOccurs="1"/>
  <element name="B" minOccurs="1" maxOccurs="1"/>
</choice>

或者

<choice minOccurs="0" maxOccurs="unbounded">
  <element name="A" minOccurs="0" maxOccurs="unbounded"/>
  <element name="B" minOccurs="0" maxOccurs="unbounded"/>
</choice>

或者

<choice minOccurs="0" maxOccurs="unbounded">
  <element name="A" minOccurs="1" maxOccurs="1"/>
  <element name="B" minOccurs="1" maxOccurs="unbounded"/>
</choice>

Etc

正则表达式[AB]*

有效序列包括:

  • 没有
  • 包含至少一个A或一个B
  • 的任何组合

默认值

@minOccurs@maxOccurs的默认值均为1.