如何在 XSD 架构文件中限制定义的复杂类型

How to limit defined complexType in XSD Schema file

我在 XSD 文件中定义了一个 object 子类型:

  <xs:complexType  name="object">
    <xs:sequence>
      <xs:element name="state"  maxOccurs="unbounded"  type="xs:string"/>
    </xs:sequence>
  </xs:complexType>

如您所见,<state> 标记被配置为可以出现任意次数(从 1 次开始)。所以这将是一个例子,我使用定义的 <object>:

  <System>
    <object_1>
      <state>string_1</state>
      <state>string_2</state>
      <state>string_3</state>
    <object_1>
    <object_2>
      <state>string_4</state>
    <object_2>
    ...
  </System>

但是,有一种特殊情况,我需要定义一个 object 子类型 (<object_n>) exactly 2 <state> elements/tags(不多也不少):

<object_n>
  <state>string_n1</state>
  <state>string_n2</state>
</object_n>

当我在 Schema 文件中声明这种类型时,有没有办法 extend/modify/limit 明确它必须只包含两个子元素?

<xs:element  type="object">
  <xs:somewayToLimitChildren/>

实际上,对象子类型比较复杂,因此需要将其设为子类型。

您需要使用 xs:restriction 创建一个新类型:

<xs:complexType name="newObject">
    <xs:complexContent>
        <xs:restriction base="object">
            <xs:sequence>
                <xs:element name="state"  minOccurs="2"  maxOccurs="2" type="xs:string"/>
            </xs:sequence>    
        </xs:restriction>
    </xs:complexContent>
</xs:complexType>