XML 架构:在 xs:sequence 中使用 minOccurs 和 maxOccurs

XML Schema: usage of minOccurs and maxOccurs within xs:sequence

给定一个有效的 XSD:

<xs:schema attributeFormDefault="unqualified" elementFormDefault="qualified" xmlns:xs="http://www.w3.org/2001/XMLSchema">
<xs:element name="personinfo">
  <xs:complexType>
    <xs:sequence maxOccurs="2">
      <xs:element name="firstname" type="xs:string" minOccurs="0" maxOccurs="1"/>
      <xs:element name="lastname" type="xs:string"/>
    </xs:sequence>
  </xs:complexType>
</xs:element>
</xs:schema>

对于针对此 XSD 的有效 XML,<personinfo> 应包含最多 2 个 <firstname> 后跟 <lastname> 的序列。我将 minOccursmaxOccurs 添加到 firstname。对于下面的 XML 文件:

<personinfo>
  <firstname>lalal</firstname>
  <lastname>fwfw</lastname>
  <firstname>lalal</firstname>
  <lastname>fwfw</lastname>
</personinfo>

为什么到 validator 仍然有效?不要 minOccursmaxOccurs 只是用 xs:sequence 覆盖 maxOccurs

Don't minOccurs and maxOccurs just overwrite the maxOccurs by xs:sequence?

不,对封闭 xs:sequence 的出现限制意味着组本身可以共同出现或按指定重复。对包含的单个元素的出现约束单独影响这些元素,而不管它们的集合如何出现。

对于您的 XSD,可以有一个或两个序列,每个序列带有 firstname(可选)和 lastname(必需)。