复杂元素按内容的复杂程度可以分简单内容元素(simpleContent)和复杂内容元素(complexContent)。simpleContent元素是指元素内容仅包括文本,不含子元素的复杂元素。

      一、simpleContent元素

      1、声明simpleContent元素

       simpleContent元素首先是一个复杂类型元素,声明一个元素为复杂类型元素需要用到complexType。约束一个复杂元素为simpleContent类型时,需要用simpleConten。


<?xml version="1.0" encoding="UTF-8"?>
<xs:schema xmlns:xs="" rel="noopener">http://www.w3.org/2001/XMLSchema" rel="noopener">">
    <xs:element name="customer">
        <xs:complexType>
            <xs:simpleContent>
                <xs:extension base="xs:string">
                    <xs:attribute name="id" type="xs:integer"/>
                    <xs:attribute name="type"type="xs:string"/>                
                </xs:extension>
            </xs:simpleContent>        
        </xs:complexType>    
    </xs:element>
</xs:schema>

      2、类型派生

      类型派生即自定义类型,是一种根据已有类型获得新类型的机制。类型派生的主要手段有约束(restriction)和扩展(extension)。

      约束派生是指通过对基类型的值或内容进行限定,从而得到新的类型。新类型的值是基类型值的子集。约束派生的基类型既可以是简单类型,也可以是复杂类型。对于简单类型,主要通过约束取值的方式进行派生。对于复杂类型,一般通过删除或限制属性,对内容求子集等方法。

<xs:restriction base=”attrType”/>

      扩展派生是指通过对基类型的值或内容模型进行扩充,从而得到新的类型。扩展派生的基类型既可以是简单类型,也可以是复杂类型。不管是简单类型还是福州类型,一般都通过添加元素和属性等方法。

<xs:extension base=”attrType”/>

     3、属性声明

<xs:attribute name=”attrName” type=”attrType”/>

     4、使用use自定义属性

<xs:attribute name=”attrName” type=”attrType” use=”required/optional/prohibited”/>

       value值可以是required、optional或prohibited。required代表该属性必须存在于xml文档中。optional代表该属性可以存在也可以不存在于xml文档中;prohibited则代表该属性不可以出现在xml文档中.

       5、默认值(default)

       default用来给属性赋予默认值,该默认值不同于元素的默认值。属性的默认值只在属性未出现在xml文档中时起作用。当属性为在xml实例文档出现时,处理器将把属性的值视为default选项所设定的值。处理器只是在验证时将属性的值视为默认值进行验证,并不更改xml文档的内容。

<xs:attribute name=”attrName” type=”attrType” default=”default”/>

       6、固定值(fixed)

<xs:attribute name=”attrName” type=”attrType” fixed=”fixedValue”/>

       二、complexContent元素

       1、声明complexContent

       complexContent内向仅包含子元素,不允许出现文本数据。complexContent类型一般有anyType约束派生而来的,可以省略<xs:complexContent>和<xs:restriction base=”xs:anyType”>.

       2、子元素的顺序

       all、sequence和choice用来指示元素的顺序。<xs:all>指定子元素在其父元素中出现时,顺序任意,但每种子元素最多只能出现一次。<xs:sequence>用于指定子元素在其父元素中出现时,顺序必须跟Sch定义的一致。<xs:choice>用于指定在多种子元素中,只能出现一种。<xs:sequence>和<xs:choice>可以嵌套。

      3、元素出现的次数

<xs:element name=”eleName” type=”eleType” minOccurs=”min” maxOccurs=”max”/>

       minOccurs定义元素最少出现次数,最小值为0;maxOccurs定义最多出现的次数,最大可以为unbounded,表示不限制出现册次数。

       三、特殊复杂类型

      1、anyType

      anyType是任意类型,对其进行扩展仍为任意类型。

      2、空元素

      不含属性的空元素:

<?xml version="1.0" encoding="UTF-8"?>
<xs:schema xmlns:xs="" rel="noopener">http://www.w3.org/2001/XMLSchema" rel="noopener">">
    <xs:element name="example">
        <xs:complexType>
            <xs:complexContent>
                <xs:extension base="xs:anyType"/>
            </xs:complexContent>        
        </xs:complexType>    
    </xs:element>
</xs:schema>

     含属性的空元素:

<?xml version="1.0" encoding="UTF-8"?>
<xs:schema xmlns:xs="" rel="noopener">http://www.w3.org/2001/XMLSchema" rel="noopener">">
    <xs:element name="example">
        <xs:complexType>
                <xs:extension base="xs:string">
                    <xs:attribute name="id" type="xs:integer"/>
                    <xs:attribute name="type"type="xs:string"/>                
                </xs:extension>
        </xs:complexType>    
    </xs:element>
</xs:schema>