约束与限定

XML Schema 教程 · 第 6 章 · 8 次浏览

大 Schema 要复用类型:全局定义 + 局部引用。复杂类型还支持 extension 继承扩展(类似类的继承)。

命名类型

complexType name="AddressType" 全局定义,元素 type="AddressType" 引用。一处定义,多处使用。

extension 扩展

在已有类型基础上加子元素(类似继承):complexContent + extension base="基础类型"。

代码示例

<xs:schema xmlns:xs="http://www.w3.org/2001/XMLSchema">

  <!-- 全局复杂类型 -->
  <xs:complexType name="AddressType">
    <xs:sequence>
      <xs:element name="city" type="xs:string"/>
      <xs:element name="street" type="xs:string"/>
      <xs:element name="zip" type="xs:string"/>
    </xs:sequence>
  </xs:complexType>

  <!-- 引用 -->
  <xs:element name="company">
    <xs:complexType>
      <xs:sequence>
        <xs:element name="name" type="xs:string"/>
        <xs:element name="address" type="AddressType"/>
      </xs:sequence>
    </xs:complexType>
  </xs:element>

  <!-- 扩展 -->
  <xs:complexType name="PersonType">
    <xs:sequence>
      <xs:element name="name" type="xs:string"/>
    </xs:sequence>
  </xs:complexType>
  <xs:complexType name="EmployeeType">
    <xs:complexContent>
      <xs:extension base="PersonType">
        <xs:sequence>
          <xs:element name="salary" type="xs:decimal"/>
        </xs:sequence>
      </xs:extension>
    </xs:complexContent>
  </xs:complexType>
</xs:schema>