Schema使用<element..,/>定义元素。
元素类型分类:
普通元素、空元素类型、混合内容类型。
空元素类型用于定义元素内容为空(null)的元素。
Schema提供了两种定义空元素类型的方式:
1:扩展长度为0的字符串;
2:限制anyType,Schema推荐方法。
混合内容类型的定义,只需在<complexType.../>元素中增加mixed="true"即可。
<element.../>的常用属性:
name:元素名;
type:元素类型;
fixed:指定一个固定值;
default:指定一个默认值;
abstract:指定该属性为抽象元素。
ref:引用一个以有的全局元素,不能和name、type属性同时出现;
minOccurs:只能在定义子元素才能使用,表示最少出现次数;
maxOccurs:只能在定义子元素才能使用,表示最大出现次数,当maxOccurs="unbounded"时表示无限个;
nillable:指定是否可以将显式的零值(值是null的占位符)分配给该元素内容。使用方法:当定义元素类型时指定nillable="true",则可在使用该元素时指定nil="true"。nil在"http://www.w3.org/2001/XMLSchema-instance"命名空间中。
Schema定义元素的两种方式:
1:全局元素:
2:局部元素:即子元素。
Schema为定义子元素提供了如下3个元素:
1:<sequence.../>:该元素包含的所有子元素出现顺序与定义顺序必须保持一致;
2:<choice.../>:该元素包含的所有子元素只能出现其中之一;
3:<all.../>:该元素包含的子元素可以任意次序出现。
使用<all.../>的注意事项:
1:其包含的子元素布恩那个重复出现;
2:不能与<sequence.../>和<choice.../>同时出现。
<sequence.../>和<choice.../>还可以互相嵌套使用。
Schema也提供了对元素组的支持,其使用<group.../>来定义和使用元素组
定义元素组时其可选的子元素有:
<sequence.../>:有序元素;
<choice.../>:互斥元素;
<all.../>:无序元素;
使用时只需在<group.../>元素中使用ref属性即可。
示例:
test.xsd
<?xml version="1.0" encoding="GBK"?>
<xs:schema xmlns:xs="http://www.w3.org/2001/XMLSchema">
<!-- 定义全局元素 -->
<xs:element name="global" type="xs:string"/>
<xs:element name="global2" type="xs:string"/>
<!-- 定义一个包含子元素的元素 -->
<xs:element name="local">
<!-- 定义元素类型 -->
<xs:complexType>
<xs:sequence>
<xs:element ref="global" minOccurs="2" maxOccurs="unbounded"/>
<xs:element ref="global2" nillable="true"/>
</xs:sequence>
</xs:complexType>
</xs:element>
</xs:schema>
test.xml
<?xml version="1.0" encoding="GBK"?>
<local xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xsi:noNamespaceSchemaLocation="test.xsd">
<global>one</global>
<global>two</global>
<global2 xsi:nil="true"/>
</local>
空元素示例:
<?xml version="1.0" encoding="GBK"?>
<xs:schema xmlns:xs="http://www.w3.org/2001/XMLSchema">
<!-- 定义一个长度为0的字符串 -->
<xs:simpleType name="emptyString">
<xs:restriction base="xs:string">
<xs:maxLength value="0"/>
</xs:restriction>
</xs:simpleType>
<xs:element name="name">
<!-- 定义元素类型 -->
<xs:complexType>
<xs:simpleContent>
<xs:extension base="emptyString">
<xs:attribute name="first" type="xs:token"/>
<xs:attribute name="last" type="xs:token"/>
</xs:extension>
</xs:simpleContent>
</xs:complexType>
</xs:element>
</xs:schema>
<?xml version="1.0" encoding="GBK"?>
<xs:schema xmlns:xs="http://www.w3.org/2001/XMLSchema">
<xs:element name="name">
<!-- 定义元素类型 -->
<xs:complexType>
<xs:attribute name="first" type="xs:token"/>
<xs:attribute name="last" type="xs:token"/>
</xs:complexType>
</xs:element>
</xs:schema>
混合元素示例:
<?xml version="1.0" encoding="GBK"?> <xs:schema xmlns:xs="http://www.w3.org/2001/XMLSchema"> <xs:element name="name"> <!-- 定义元素类型 --> <xs:complexType mixed="true"> <xs:sequence> <xs:element name="element1" type="xs:string"/> <xs:element name="element2" type="xs:decimal"/> </xs:sequence> <xs:attribute name="first" type="xs:token"/> <xs:attribute name="last" type="xs:token"/> </xs:complexType> </xs:element> </xs:schema>