复杂元素按内容的复杂程度可以分简单内容元素(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>