mark......
schema.xml
<?xml version="1.0" encoding="UTF-8"?> <root xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:noNamespaceSchemaLocation="schema.xsd"> <textElement>abc</textElement> <complexElement1 attr1="23"> <element1 attr1_2="astring" attr1_3="fd" attr1_4="fixed">fdfd</element1> <element2>12.2</element2> <element2>62.2</element2> <element3>18</element3> </complexElement1> <complexElement2> <element4>22.2</element4> </complexElement2> <complexElement3> <element8>枚举值一</element8> <element7>abcdefghij</element7> <element9>ww_233</element9> <element10>12 457 545</element10> <element11>23:30:55</element11> </complexElement3> <commonElement1 att1="string1" att2="string2"></commonElement1> <commonElement2 att1="string3" att2="string3" att3="string3"></commonElement2> </root>
schema.xsd
<?xml version="1.0" encoding="UTF-8"?>
<!-- XML文件的Schema验证 -->
<xs:schema xmlns:xs="http://www.w3.org/2001/XMLSchema">
<!-- ================= 文本元素的声明 ================ -->
<!-- 文本元素声明,仅仅含有文本,不允许属性和子元素 -->
<xs:element name="textElement" type="xs:string"/>
<!-- ================= 复合元素的声明 ================ -->
<!-- 复合元素声明,要含有属性或子元素,必须采用复合类型 -->
<xs:element name="complexElement1">
<xs:complexType>
<xs:sequence>
<xs:element name="element1">
<!-- 如果是含有属性和文本的复合类型,则必须设置mixed为true(混合类型)。
缺省值为false,即非混合类型,只能有属性,元素不能包含值。
-->
<xs:complexType mixed="true">
<xs:attribute name="attr1_1" type="xs:int"/>
<xs:attribute name="attr1_2" type="xs:string" use="required"/>
<xs:attribute name="attr1_3" type="xs:string" use="optional" default="default"/>
<xs:attribute name="attr1_4" type="xs:string" use="required" fixed="fixed"/>
<!-- 声明元素的属性,属性默认可有可无 -->
<!-- 声明元素的属性并设置该属性为必须:use="required" -->
<!-- 声明元素的属性并设置该属性默认值:default="default"。
有默认值时,use必须是optional。
设置了默认值后,属性的值也可以是别的值。
-->
<!-- 声明元素的属性并设置该属性固定值:fixed="fixed"。
设置了固定值之后,属性的值只能是指定的值。
-->
</xs:complexType>
</xs:element>
<!-- 设置元素出现次数为0-3的任意多个:minOccurs最少出现次数,maxOccurs最大出现次数。
元素的出现次数缺省值为1,也就是说,当不显示的指明出现次数时,将默认必须出现一次,
且只能出现一次。
注意:minOccurs和maxOccurs不能出现在集合类型为all的集合的元素中。
-->
<xs:element name="element2" type="xs:float" minOccurs="0" maxOccurs="3"/>
<!-- 声明元素,并指定类型为用户自定义类型。(见下文) -->
<xs:element name="element3" type="type1"/>
</xs:sequence>
<xs:attribute name="attr1" type="xs:int"/>
<!-- 队列集合,元素按顺序出现,且必须全部出现。 -->
<!-- 元素中含有子元素和属性时,先定义元素再定义属性。 -->
</xs:complexType>
</xs:element>
<xs:element name="complexElement2">
<xs:complexType>
<xs:choice>
<xs:element name="element4" type="xs:float" maxOccurs="2"/>
<xs:element name="element5" type="xs:double"/>
<xs:element name="element6" type="xs:int"/>
</xs:choice>
<!-- 多选一集合,只能出现一个元素 -->
</xs:complexType>
</xs:element>
<xs:element name="complexElement3">
<xs:complexType>
<xs:all>
<xs:element name="element7" type="type2"/>
<xs:element name="element8" type="type3"/>
<xs:element name="element9" type="type4"/>
<xs:element name="element10" type="type5"/>
<xs:element name="element11" type="xs:string"/>
</xs:all>
<!-- 全选集合,元素出现的顺序不限,且必须全部出现。 -->
</xs:complexType>
</xs:element>
<!-- ================= 根元素的声明,此处定义整个xml文件的结构 ================ -->
<!-- 声明根元素 -->
<xs:element name="root">
<xs:complexType>
<xs:sequence>
<!-- 引用元素:ref="元素名(name值)" -->
<xs:element ref="textElement"/>
<xs:element ref="complexElement1"/>
<xs:element ref="complexElement2"/>
<xs:element ref="complexElement3"/>
<xs:element ref="commonElement1"/>
<xs:element ref="commonElement2"/>
</xs:sequence>
</xs:complexType>
</xs:element>
<!-- ================= 属性组的声明及使用 ================ -->
<!--声明属性组:attgp1,包含两个属性:att1/att2-->
<xs:attributeGroup name="attgp1">
<xs:attribute name="att1" type="xs:string"/>
<xs:attribute name="att2" type="xs:string"/>
</xs:attributeGroup>
<!--声明元素commonElement1,引用属性组attgp1以包含两个属性:att1/att2-->
<xs:element name="commonElement1">
<xs:complexType>
<xs:attributeGroup ref="attgp1"/>
</xs:complexType>
</xs:element>
<!--声明元素commonElement2,首先引用属性组attgp1以包含两个属性:att1/att2,
接着声明自己的属性:att3
-->
<xs:element name="commonElement2">
<xs:complexType>
<xs:attributeGroup ref="attgp1"/>
<xs:attribute name="att3" type="xs:string"/>
</xs:complexType>
</xs:element>
<!-- ================= 自定义类型 ================ -->
<!-- 声明自定义类型,本类型为int型,最小值(包含界值)10,最大值(不包含界值)20 -->
<xs:simpleType name="type1">
<xs:restriction base="xs:int">
<xs:minInclusive value="10"/>
<xs:maxExclusive value="20"/>
</xs:restriction>
</xs:simpleType>
<!-- 声明自定义类型,本类型为string型,最小长度(包含界值)4,最大长度(包含界值)10 -->
<xs:simpleType name="type2">
<xs:restriction base="xs:string">
<xs:minLength value="4"/>
<xs:maxLength value="10"/>
</xs:restriction>
</xs:simpleType>
<!-- 声明自定义类型,本类型为枚举类型,元素的值只能为枚举值中的任一个 -->
<xs:simpleType name="type3">
<xs:restriction base="xs:string">
<xs:enumeration value="枚举值一"/>
<xs:enumeration value="枚举值二"/>
</xs:restriction>
</xs:simpleType>
<!-- 声明自定义类型,本类型为正则表达式验证类型,元素的值按正则表达式匹配 -->
<xs:simpleType name="type4">
<xs:restriction base="xs:string">
<xs:pattern value="\w+_\d{2,3}"/>
<!-- 正则表达式 -->
</xs:restriction>
</xs:simpleType>
<!-- 声明自定义类型,本类型为列表类型,元素的值为列表且列表中值的类型为int。
列表各值之前以空格隔开,可以有一个或多个值。
-->
<xs:simpleType name="type5">
<xs:list itemType="xs:int"/>
<!-- 定义列表中值的类型 -->
</xs:simpleType>
</xs:schema>