xs:XSD中的选择是否允许生成XML中的多个元素?

Mia*_*ach 2 xml xsd

我坚持使用XSD的"选择"元素描述.它指出,只有一个元素,来自该标记内的元素可以在有效的XML中找到:

允许所选组中包含的一个且仅一个元素出现在包含元素中.

(http://msdn.microsoft.com/en-us/library/ms256109%28v=vs.110%29.aspx)

从另一方面看,属性maxOccurs ="unbounded"可能会改变相反的情况,现在任何数量的元素都可能出现在'choice'所描述的类型中:请参考这个问题:

XSD - 如何允许任何次序的元素?

那么在里面有选择指标的类型中可以找到多少个元素?

lex*_*ore 5

那么在里面有选择指示符的类型中可以找到多少个元素?

取决于minOccurs/maxOccurs所述的choice元件。

正好是child1或 之一child2

<xs:choice>
  <xs:element name="child1" type="xs:int"/>
  <xs:element name="child2" type="xs:string"/>
</xs:choice>
Run Code Online (Sandbox Code Playgroud)

其中一个child1child2或无:

<xs:choice minOccurs="0">
  <xs:element name="child1" type="xs:int"/>
  <xs:element name="child2" type="xs:string"/>
</xs:choice>
Run Code Online (Sandbox Code Playgroud)

至少有一个或一个以上的child1child2在任意顺序:

<xs:choice maxOccurs="unbounded">
  <xs:element name="child1" type="xs:int"/>
  <xs:element name="child2" type="xs:string"/>
</xs:choice>
Run Code Online (Sandbox Code Playgroud)

零个或多个child1or child2,以任意顺序:

<xs:choice minOccurs="0" maxOccurs="unbounded">
  <xs:element name="child1" type="xs:int"/>
  <xs:element name="child2" type="xs:string"/>
</xs:choice>
Run Code Online (Sandbox Code Playgroud)

我个人尽量避免模式中的可重复选择和序列,因为它们使结构过于“异构”。


C. *_*een 5

说出选择的MSDN页面允许"选定组中包含的一个且仅有一个元素"的措辞严厉.嗯,不,那太慷慨了.作为xsd:choice的描述,它是错误的.

选项包含零个或多个备选项,并且当且仅当这些备选项中的至少一个与输入匹配时才匹配部分输入.(实际上,这几乎总是意味着'如果这些替代品中只有一个与输入相匹配':如果有多个替代品匹配输入,则内容模型几乎肯定违反了"独特粒子归因"规则.)

因此,在备选方案A1,A2,A3,......中进行选择当且仅当A1匹配该序列或A2,或A3,......或An时,才匹配输入中的元素序列.

如果每个替代A1,...,An是具有minOccurs = maxOccurs = 1的单个元素,那么它们都不是可重复的,并且如果选择本身不可重复,那么您引用的描述或多或少是准确的.但是,任何一些事情都可能导致多个元素被一个选择匹配:

  • 选择本身可以重复(正如词典已经指出的那样); 以下选项匹配A,B和C元素的任何序列:

    <xsd:choice minOccurs="0" maxOccurs="unbounded">
      <xsd:element ref="A"/>
      <xsd:element ref="B"/>
      <xsd:element ref="C"/>
    </xsd:choice>
    
    Run Code Online (Sandbox Code Playgroud)
  • 个别选择可能是可重复的; 以下选项匹配任何非空的A元素序列,或任何非空的B元素序列,或恰好一个C元素:

    <xsd:choice>
      <xsd:element ref="A" maxOccurs="unbounded"/>
      <xsd:element ref="B" maxOccurs="unbounded"/>
      <xsd:element ref="C"/>
    </xsd:choice>
    
    Run Code Online (Sandbox Code Playgroud)
  • 各个备选方案可以是匹配多个元素的序列或选择; 以下选项匹配A和B元素的任何非空序列,或序列D,E,F:

    <xsd:choice>
      <xsd:choice maxOccurs="unbounded">
        <xsd:element ref="A"/>
        <xsd:element ref="B"/>
      </xsd:choice>
      <xsd:sequence>
         <xsd:element ref="D"/>
         <xsd:element ref="E"/>
         <xsd:element ref="F"/>
      </xsd:sequence>
    </xsd:choice>
    
    Run Code Online (Sandbox Code Playgroud)

你的问题的答案

那么在里面有选择指标的类型中可以找到多少个元素?

与问题的答案相同

那么元素中可以找到多少个元素?

要么

那么符合正则表达式的符号序列有多长?