XML - Schema之資料型別擴充套件

襲冷發表於2014-06-30

一、定義 

<?xml version="1.0" encoding="UTF-8"?>

<schema xmlns="http://www.w3.org/2001/XMLSchema" elementFormDefault="qualified"  
	targetNamespace="http://www.xilen.com/customer" xmlns:customer="http://www.xilen.com/customer">
	
	 <!-- 定義當前名稱空間的根元素customer  -->
	<element name="customer" type="customer:customerType"/>

	<complexType name="customerType"> <!-- 定義customer的資料型別  -->
		<sequence>
			<element name="name" type="customer:nameType"/> <!-- 定義customer的name子元素,資料型別引用nameType的定義 -->
			<element name="address" type="customer:addressType"/><!-- 定義customer的address子元素,資料型別引用nameType的定義 -->
			
			<element name="extName" type="customer:extNameType"/> <!-- 擴充套件後的元素  -->
			<element name="extAddress" type="customer:extAddressType"/>  <!-- 擴充套件後的元素  -->
		</sequence>
	</complexType>
	
	<simpleType name="nameType"> <!-- 定義Name -->
		<restriction base="string">
			<pattern value="[a-zA-Z][_a-zA-Z0-9]*" /> <!-- 定義正則來規範名稱 -->
			<minLength value="3" /> <!-- 定義最小長度 -->
			<maxLength value="18" /> <!-- 定義最大長度 -->
		</restriction>
	</simpleType>
	
	<complexType name="addressType"> <!-- 定義address的資料型別  -->
		<sequence>
			<element name="code" type="customer:codeType" /> <!-- 定義address的code子元素,資料型別引用codeType的定義 -->
			<element name="info" type="customer:infoType"/> <!-- 定義address的info子元素,資料型別引用infoType的定義 -->
		</sequence>
	</complexType>
	
	<simpleType name="codeType"> <!-- 定義Code -->
		<restriction base="string"> <!-- 定義限定條件,基於string的型別  -->
			<pattern value="[0-9]*"/>
			<length value="6"/> <!-- 定義最小長度 -->
		</restriction>
	</simpleType>
	
	<simpleType name="infoType" > <!-- 定義Info的型別 -->
		<restriction base="string"> <!-- 定義限定條件,基於string的型別  -->
			<minLength value="0"/> <!-- 定義最小長度 -->
			<maxLength value="255"/> <!-- 定義最大長度 -->
		</restriction>
	</simpleType>
	
<!-- - - - - - - - - - - - - - - - - - -  分隔線 - - - - - - - - - - - - - - - -  - -->
	
	<!-- 對複雜型別addressType進行擴充套件,新增note子元素  -->
	<complexType name="extAddressType">
		<complexContent>
			<extension base="customer:addressType">
				<sequence>
					<element name="note" type="string"/>
				</sequence>
			</extension>
		</complexContent>
	</complexType>
	
	<!-- 對簡單型別nameType進行擴充套件,新增id屬性 -->
	<complexType name="extNameType">
		<simpleContent>
			<extension base="customer:nameType">
				<attribute name="id" type="string"/>
			</extension>
		</simpleContent>
	</complexType>
		
</schema>
三、使用

<?xml version="1.0" encoding="UTF-8"?>
<customer xmlns="http://www.xilen.com/customer" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
	xsi:schemaLocation="http://www.xilen.com/customer ext_customer.xsd">
	<name>Tom</name>
	<address>
		<code>100000</code>
		<info>BeiJing</info>
	</address>
	<extName id="extId-0001">ExtTom</extName> <!-- 新增了Id屬性  -->
	<extAddress>
		<code>100000</code>
		<info>BeiJing</info>
		<note>Home</note> <!-- 新增了note子元素 -->
	</extAddress>
</customer>

 
 

 
 

相關文章