xml学习笔记一(XML文件的Schema验证)

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>

 

你可能感兴趣的:(xml,正则表达式)