XML - Schema

Schema简介

基于XML的DTD替代者
描述XML文档的结构
也称作XML Schema定义(XML Schema Definition,XSD)
在2001,5,2成为W3C标准

Schema作用

定义XML文档的合法构建,类似 DTD
定义可出现在文档中的元素
定义可出现在文档中的属性
定义哪个元素是子元素
定义子元素的次序
定义子元素的数目
定义元素是否为空,或者是否可包含文本
定义元素和属性的数据类型
定义元素和属性的默认值以及固定值

Schema取代DTD理由

基于XML编写
扩充了数据类型,还支持自定义类型
功能更强大(比如支持继承extends的概念,支持属性组Group的概念)
支持命名空间

Schema文档结构

<?xml version="1.0" encoding="UTF-8"?>
<!--
	xs:schema是Schema的根元素
	xmlns:xs
		这个地址不能变,这个是定义schema本身的
		用于构造schema元素和数据类型
		来自http://www.w3.org/2001/XMLSchema命名空间
	targetNamespace
		这个是定义本schema
		用于构造本schema元素和数据类型
		属于http://www.example.org/XMLSchema命名空间
-->
<xs:schema xmlns:xs="http://www.w3.org/2001/XMLSchema"
	targetNamespace="http://www.example.org/XMLSchema">
	<!-- 存放实际内容 -->
</xs:schema>

Schema数据类型

简单类型
	内置数据类型
		string		表示字符串
		boolean		布尔型
		decimal		代表特定精度的数字
		float		表示单精度32位浮点数
		double		表示双精度64位浮点数
		duration	表示持续时间 
		dateTime	代表特定的时间 
		time		代表特定的时间,但是是每天重复的
		date		代表日期 
		hexBinary	代表十六进制数
		anyURI		代表一个URI,用来定位文件
		NOTATION	代表 NOTATION类型
		ID			用于唯一标识元素
		IDREF		参考ID类型的元素或属性
		ENTITY		实体类型
		NMTOKEN		NMTOKEN类型
		NMTOKENS	NMTOKEN类型集
		long		表示整型数
		int			表示整型数
		short		表示整型数
		byte		表示整型数
	用户自定义类型
		通过simpleType定义
复杂类型
	通过complexType定义

Schema的元素类型详解

schema
	作用:包含已经定义的schema
	属性:xmlns/targetNamespace
element
	作用:声明一个元素
	属性:name/type/ref/minOccurs/maxOccurs/substitutionGroup/fixed/default
group
	作用:把一组元素声明组合在一起,以便它们能够一起被复合类型应用
	属性:name/ref
attribute
	作用:声明一个属性
	属性:name/type/ref/use
	备注:use的使用方式有三种required必须,optional不是必须的,prohibited禁止的
attributeGroup
	作用:把一组属性声明组合在一起,以便可以被复合类型应用
	属性:name/ref
simpleType
	作用:定义一个简单类型,它决定了元素和属性值的约束和相关信息
	属性:name
	内容:restrict/list/union
complexType
	作用:定义一个复合类型,它决定了一组元素和属性值的约束和相关信息
	属性:name
simpleContent
	作用:应用于complexType,对它的内容进行约束和扩展
choice
	作用:允许唯一的一个元素从一个组中被选择
	属性:minOccurs/maxOccurs
sequence
	作用:给一组元素一个特定的序列
list
	作用:从列表中选择多个,中间用空格隔开
union
	作用:多个取一个
restriction
	作用:约束,限定一个范围

simpleType与complexType的区别

simpleType类型的元素不能有子元素和属性
complexType类型的元素可以有子元素和属性
当需要基于内置基本数据类型定义一个新的数据类型时使用simpleType(一般这是做限制)

Schema简单元素

简易元素指那些只包含文本的元素,它不会包含任何其他的元素或属性
定义简单元素:
	<xs:element name="author" type="xs:string"/>
简单元素默认值或者固定值
	<xs:element name="font" type="xs:string" default="red"/>
	<xs:element name="font" type="xs:string" fixed="red"/>

Schema复杂元素

复合元素指包含其他元素或属性的XML元素

有四种类型的复合元素:
	空元素
	包含其他元素的元素
	仅包含文本的元素
	包含元素和文本的元素
	
两种方式定义复合元素
	直接声明
		<xs:element name="employee">
		  	<xs:complexType>
		    	<xs:sequence>
		      		<xs:element name="firstname" type="xs:string"/>
		      		<xs:element name="lastname" type="xs:string"/>
		    	</xs:sequence>
		  	</xs:complexType>
		</xs:element>
	引用声明
		<xs:element name="employee" type="personinfo"/>
		<xs:complexType name="personinfo">
			<xs:sequence>
				<xs:element name="firstname" type="xs:string"/>
				<xs:element name="lastname" type="xs:string"/>
			</xs:sequence>
		</xs:complexType>

Schema属性

简易元素无法拥有属性,假如某个元素拥有属性,它就会被当作某种复合类型
	但是属性本身总是作为简易类型被声明的
声明:
	<xs:attribute name="style" type="xs:string"/>
属性默认值和固定值
	<xs:attribute name="style" type="xs:string" default="bold"/>
	<xs:attribute name="style" type="xs:string" fixed="bold"/>
属性可选和必选
	<xs:attribute name="style" type="xs:string" fixed="bold" use="required"/>

Schema数据类型的限定

minInclusive	定义数值的下限,所允许的值必需大于或等于此值
maxInclusive	定义数值的上限,所允许的值必须小于或等于此值
enumeration		定义可接受值的一个列表
pattern			定义可接受的字符的精确序列
whiteSpace		定义空白字符(换行,回车,空格,制表符)的处理方式
length			定义所允许的字符或者列表项目的精确数目,必须大于或等于0
minLength		定义所允许的字符或者列表项目的最小数目,必须大于或等于0
maxLength		定义所允许的字符或者列表项目的最大数目,必须大于或等于0
fractionDigits	定义所允许的最大的小数位数,必须大于等于0
minExclusive	定义数值的下限,所允许的值必需大于此值
maxExclusive	定义数值的上限,所允许的值必须小于此值
totalDigits		定义所允许的阿拉伯数字的精确位数,必须大于0

Schema几个元素的使用方法

group
	<xs:complexType name="myComplexType">
	  	<xs:group ref="myGroup"/>
	</xs:complexType>
	<xs:group name="myGroup">
		<xs:sequence  minOccurs="0" maxOccurs="unbounded">
			<xs:element name="cat" type="xs:string"/>
			<xs:element name="dog" type="xs:string"/>
	  	</xs:sequence>
	</xs:group>

attributeGroup	
	<xs:complexType name="myElementType">
	    <xs:attributeGroup ref="myAttributeGroup"/>
	</xs:complexType>
	<xs:attributeGroup name="myAttributeGroup">
		<xs:attribute name="someattribute1" type="xs:integer"/>
		<xs:attribute name="someattribute2" type="xs:string"/>
	</xs:attributeGroup>

choice	
	<xs:complexType name="myComplexType">
	 	<xs:choice minOccurs="1" maxOccurs="1">
	  		<xs:element name="cat" type="xs:string"/>
			<xs:element name="dog" type="xs:string"/>
	 	</xs:choice>
	</xs:complexType>
	
sequence
	<xs:element name="myElement">
	  	<xs:complexType>
	  		<xs:sequence  minOccurs="0" maxOccurs="unbounded">
	    		<xs:element name="cat" type="xs:string"/>
				<xs:element name="dog" type="xs:string"/>
	    	</xs:sequence>
	  	</xs:complexType>
	</xs:element>

list
	<xs:simpleType name="abc">
		<xs:list itemType="xs:date"/>
	</xs:simpleType>

union
	<xs:complexType name="myComplexType">
	 	<xs:union>
	  		<xs:element name="cat" type="xs:string"/>
			<xs:element name="dog" type="xs:string"/>
	 	</xs:union>
	</xs:complexType>
	
restriction
	<xs:restriction base="xs:integer">
		<xs:minInclusive value="0"/>
		<xs:maxInclusive value="100"/>
	</xs:restriction>

enumeration
	<xs:simpleType>
		<xs:restriction base="xs:string">
			<xs:enumeration value="US"/>
			<xs:enumeration value="European"/>
			<xs:enumeration value="UK"/>
		</xs:restriction>
	</xs:simpleType>

更多内容请查看

点击打开链接

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

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值