xml – XSD发生界限是否在序列或元素上?

前端之家收集整理的这篇文章主要介绍了xml – XSD发生界限是否在序列或元素上?前端之家小编觉得挺不错的,现在分享给大家,也给大家做个参考。
如果我有一个元素与一个或多个子元素,min / maxoccurs属性应该在xsd:sequence元素,xsd:元素,两者或两者?
<xsd:element name="books">
  <xsd:complexType>
    <xsd:sequence minOccurs="1" maxOccurs="unbounded"> <!-- here? -->
      <xsd:element ref="book" minOccurs="1" maxOccurs="unbounded"/> <!-- or here? -->
    </xsd:sequence>
  </xsd:complexType>
</xsd:element>
在几乎所有的情况下,你想把元素的最小/最大值发生在序列中,而不是在序列上.使用你的例子:
<xsd:element name="books">
  <xsd:complexType>
    <xsd:sequence>
      <xsd:element ref="book" minOccurs="1" maxOccurs="unbounded"/>
    </xsd:sequence>
  </xsd:complexType>
</xsd:element>

这是明确的.如果您有一系列书籍元素,您可以指出正在生成它们的模式项目.然而:

<xsd:element name="books">
  <xsd:complexType>
    <xsd:sequence minOccurs="1" maxOccurs="unbounded"/>
      <xsd:element ref="book" minOccurs="1" maxOccurs="unbounded"/>
    </xsd:sequence>
  </xsd:complexType>
</xsd:element>

在这里,如果你有两个“书”元素,你有两个序列在​​一行,还是一个序列与两个书元素?这不符合Unique Particle Attribution要求.

最后,如果将序列中的最小/最大值发生了,然后再添加一个附加元素:

<xsd:element name="books">
  <xsd:complexType>
    <xsd:sequence minOccurs="1" maxOccurs="unbounded"/>
      <xsd:element ref="book"/>
      <xsd:element ref="ebook"/>
    </xsd:sequence>
  </xsd:complexType>
</xsd:element>

那么这可能允许以下XML,这可能不是你打算的:

<books>
  <book/><ebook/><book/><ebook/><book/><ebook/><book/><ebook/>
</books>

而如果你有:

<xsd:element name="books">
  <xsd:complexType>
    <xsd:sequence/>
      <xsd:element ref="book" minOccurs="1" maxOccurs="unbounded"/>
      <xsd:element ref="ebook" minOccurs="1" maxOccurs="unbounded"/>
    </xsd:sequence>
  </xsd:complexType>
</xsd:element>

那么你打算什么是清楚和明确的:一个或多个书籍元素的序列后面是一个或多个电子书单元的序列.

原文链接:https://www.f2er.com/xml/292794.html

猜你在找的XML相关文章