如果我有一个元素与一个或多个子元素,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>
在几乎所有的情况下,你想把元素的最小/最大值发生在序列中,而不是在序列上.使用你的例子:
原文链接:https://www.f2er.com/xml/292794.html<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>
那么你打算什么是清楚和明确的:一个或多个书籍元素的序列后面是一个或多个电子书单元的序列.