XML Schema extension 元素

  • 定义和使用

    extension 元素扩展了现有的 simpleType 或 complexType 元素。
    父元素:simpleContent, complexContent
  • 语法

    <extension
      id=ID
      base=QName
      any attributes
      >
      
      (annotation?,((group|all|choice|sequence)?,
      ((attribute|attributeGroup)*,anyAttribute?)))
      
    </extension>
    (?符号声明该元素可以出现零次或一次,而 * 符号声明该元素可以出现0次或多次。)
  • 参数

    属性 描述
    id 可选的。 指定元素的唯一ID
    base 需要。 指定内置数据类型,simpleType 元素或 complexType 元素的名称
    any attributes 可选的。 用非模式命名空间指定任何其他属性。
  • 示例

    以下示例通过添加属性来扩展现有的 simpleType:
    <?xml version="1.0"?>
      <xs:schema xmlns:xs="http://www.w3.org/2001/XMLSchema">
      
      <xs:simpleType name="size">
        <xs:restriction base="xs:string">
          <xs:enumeration value="small" />
          <xs:enumeration value="medium" />
          <xs:enumeration value="large" />
        </xs:restriction>
      </xs:simpleType>
      
      <xs:complexType name="jeans">
        <xs:simpleContent>
          <xs:extension base="size">
            <xs:attribute name="sex">
              <xs:simpleType>
                <xs:restriction base="xs:string">
                  <xs:enumeration value="male" />
                  <xs:enumeration value="female" />
                </xs:restriction>
              </xs:simpleType>
            </xs:attribute>
          </xs:extension>
        </xs:simpleContent>
      </xs:complexType>
      
    </xs:schema>
    以下示例通过添加三个元素来扩展现有的 complexType 元素:
    <?xml version="1.0"?>
    <xs:schema xmlns:xs="http://www.w3.org/2001/XMLSchema">
    
    <xs:element name="employee" type="fullpersoninfo"/>
    
    <xs:complexType name="personinfo">
      <xs:sequence>
        <xs:element name="firstname" type="xs:string"/>
        <xs:element name="lastname" type="xs:string"/>
      </xs:sequence>
    </xs:complexType>
    
    <xs:complexType name="fullpersoninfo">
      <xs:complexContent>
        <xs:extension base="personinfo">
          <xs:sequence>
            <xs:element name="address" type="xs:string"/>
            <xs:element name="city" type="xs:string"/>
            <xs:element name="country" type="xs:string"/>
          </xs:sequence>
        </xs:extension>
      </xs:complexContent>
    </xs:complexType>
    
    </xs:schema>