XML - Schema之数据类型重用

一、定义

<?xml version="1.0" encoding="UTF-8"?>
<!--   
    xmlns:xs="http://www.w3.org/2001/XMLSchema" :schema必须有的命名空间,这里别名为xs   
    targetNamespace="http://www.xilen.com/books" :当前schema的命名空间  
    xmlns:tns="http://www.xilen.com/books" :引入的命名空间,这里表示引入当前这个schema,这里别名为tns
-->  
<xs:schema xmlns:xs="http://www.w3.org/2001/XMLSchema" elementFormDefault="qualified"  
	targetNamespace="http://www.xilen.com/user" xmlns:tns="http://www.xilen.com/user">

	<xs:element name="user" type="tns:userType"/> <!-- 定义根元素user  -->

	<xs:complexType name="userType"> <!-- 定义user的数据类型  -->
		<xs:sequence>
			<xs:element name="name" type="tns:nameType"/> <!-- 定义user的name子元素,数据类型引用nameType的定义 -->
			<xs:element name="age" type="tns:ageType" /> <!-- 定义user的age元素,数据类型引用ageType的定义 -->
			<xs:element name="sex" type="tns:sexType" /> <!-- 定义user的sex子元素,数据类型引用sexType的定义 -->
			<xs:element name="roles" type="tns:rolesType" /> <!-- 定义user的roles子元素,数据类型引用rolesType的定义 -->
		</xs:sequence>
		<xs:attribute name="id" type="tns:idType"/> <!-- 定义user的属性,数据类型引用idType的定义 -->
	</xs:complexType>
	
	<xs:complexType name="rolesType"> <!-- 定义roles的数据类型  -->
		<xs:sequence maxOccurs="unbounded" minOccurs="0"> <!-- 定义roles的子元素的容量  -->
			<xs:element name="role" type="tns:roleType" /> <!-- 定义roles的子元素,数据类型引用roleType的定义   -->
		</xs:sequence>
	</xs:complexType>
	
	<xs:complexType name="roleType"> <!-- 定义role的数据类型  -->
		<xs:sequence>
			<xs:element name="name" type="tns:nameType" /> <!-- 定义role的name子元素,数据类型重用用nameType的定义 -->
			<xs:element name="note" type="tns:noteType"/> <!-- 定义role的note子元素,数据类型引用noteType的定义 -->
		</xs:sequence>
		<xs:attribute name="id" type="tns:idType"/><!-- 定义role的id属性,数据类型重用IdType的定义  -->
	</xs:complexType>

	<xs:simpleType name="idType">  <!-- 定义ID类型 -->
		<xs:restriction base="xs:int"> <!-- 定义限定条件,基于int的类型  -->
			<xs:minInclusive value="1" /> <!-- 最小值 -->
			<xs:maxInclusive value="999999999" /> <!-- 最大值  -->
		</xs:restriction>
	</xs:simpleType>
	
	<xs:simpleType name="nameType"> <!-- 定义Name -->
		<xs:restriction base="xs:string">
			<xs:pattern value="[a-zA-Z][_a-zA-Z0-9]*" /> <!-- 定义正则来规范名称 -->
			<xs:minLength value="3" /> <!-- 定义最小长度 -->
			<xs:maxLength value="18" /> <!-- 定义最大长度 -->
		</xs:restriction>
	</xs:simpleType>
	
	<xs:simpleType name="ageType"> <!-- 定义age的类型  -->
		<xs:restriction base="xs:int"> <!-- 定义限定条件,基于int的类型 -->
			<xs:minInclusive value="0" /><!-- 最小包含0 -->
			<xs:maxExclusive value="150" /><!-- 最大不包含150 -->
		</xs:restriction>
	</xs:simpleType>
	
	<xs:simpleType name="sexType"> <!-- 定义sex的类型  -->
		<xs:restriction base="xs:string"> <!-- 定义限定条件,基于string的类型  -->
			<xs:enumeration value="MAN" /> <!-- 定义sex为枚举,只可以选择其一 -->
			<xs:enumeration value="WOMAN" /> 		
			<xs:enumeration value="OTHER" /> 		
		</xs:restriction>
	</xs:simpleType>
	
	<xs:simpleType name="noteType" > <!-- 定义note的类型 -->
		<xs:restriction base="xs:string"> <!-- 定义限定条件,基于string的类型  -->
			<xs:minLength value="0"/> <!-- 定义最小长度 -->
			<xs:maxLength value="255"/> <!-- 定义最大长度 -->
		</xs:restriction>
	</xs:simpleType>
</xs:schema>

 二、引用

<?xml version="1.0" encoding="UTF-8"?>
<!-- xmlns:user="http://www.xilen.com/user": 将引用的user.xsd别名为user -->
<user:user xmlns:user="http://www.xilen.com/user" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
	xsi:schemaLocation="http://www.xilen.com/user user.xsd"
	id="1">

	<user:name>admin</user:name>
	<user:age>25</user:age>
	<user:sex>MAN</user:sex>
	<user:roles>
		<user:role id="1">
			<user:name>System</user:name>
			<user:note>Management System</user:note>
		</user:role>
		<user:role id="2">
			<user:name>Order</user:name>
			<user:note>Management Order</user:note>
		</user:role>
	</user:roles>
</user:user>
 
 

 

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值