如果我有一个带有一个或多个子元素的元素,那么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>
Run Code Online (Sandbox Code Playgroud)
Edd*_*die 19
在几乎所有情况下,您都希望将min/max Occurs放在序列中的元素上而不是序列上.使用你的例子:
<xsd:element name="books">
<xsd:complexType>
<xsd:sequence>
<xsd:element ref="book" minOccurs="1" maxOccurs="unbounded"/>
</xsd:sequence>
</xsd:complexType>
</xsd:element>
Run Code Online (Sandbox Code Playgroud)
这是毫不含糊的.如果连续存在一系列书籍元素,则可以指向哪个架构项正在生成它们.然而:
<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>
Run Code Online (Sandbox Code Playgroud)
在这里,如果你book
连续有两个" "元素,你sequence
是连续sequence
两个,还是一个有两个book
元素?这未达到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>
Run Code Online (Sandbox Code Playgroud)
那么这可能允许以下XML,这可能不是你想要的:
<books>
<book/><ebook/><book/><ebook/><book/><ebook/><book/><ebook/>
</books>
Run Code Online (Sandbox Code Playgroud)
而如果你有:
<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>
Run Code Online (Sandbox Code Playgroud)
那么你想要的是清楚明确的:一个或多个book
元素的序列,后跟一个或多个元素的序列ebook
.