如何在XSD架构文件中限制已定义的complexType

时间:2015-12-02 15:31:57

标签: xml xsd schema

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

  <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>

但是,有一种特殊情况,我需要使用完全 2 <object_n>个元素定义对象子类型(<state>) / tags(不多也不少):

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

当我在Schema文件中声明它时,有没有办法扩展/修改/限制这种类型,这样很明显它必须只包含两个子元素?

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

实际上,对象子类型更具有comlpex,因此需要使其成为子类型。

1 个答案:

答案 0 :(得分:0)

您需要使用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>