《web应用与开发》XML Schema 课堂笔记02

Posted Akaid_Tea

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了《web应用与开发》XML Schema 课堂笔记02相关的知识,希望对你有一定的参考价值。

一、XML一些注意点

实体

XML 的保留字例如 <、>、’、”、&
引用时用实体替换保留字
五种常用的实体

实体引用字符字符名称
&lt;<小于
&gt;>大于
&amp&和号
&apos;单引号
&quot;"引号


处理指令

格式:<?指令名 属性="属性值"?>

例如:<?xml version="1.0"?>


CDATA 区段

格式:<![CDATA[不希望被解析的内容]]>


注释

格式:<!-- 注释文字 -->
注意:注释不能出现在第一行,不能嵌套


名称空间

名称空间的声明
默认名称空间:

<person xmlns="http://myst/js001">
<name></name>
</person>


有前缀的名称空间:

<?xml version="1.0"?>
<goods xmlns:s="http://www.njtech.edu.cn/goods/shirts"
xmlns:t="http://www.njtech.edu.cn/goods/trousers"
xmlns:TV="http://www.njtech.edu.cn/goods/TV">
<clothes>
<s:shirt>
<s:name>金利来</s:name>
</s:shirt>
<t:trousers>
<t:name>李宁</t:name>
</t:trousers>
</clothes>
<e_appliances>
<TV:television>
<TV:name>海尔</TV:name>
</TV:television>
</e_appliances>
</goods>


二、XML的校验

XML 解析校验地址


三、 Schema文档的内容与引用方法

Schema文档

<?xml version="1.0"?>
<xs:schema xmlns:xs="http://www.w3.org/2001/XMLSchema"
targetNamespace="http://mynamespace/my">
<xs:element name="root" type="xs:string"/>
</xs:schema>

文档的后缀名为 .xsd
Schema 文档本身也是 XML 文档,需要 XML 声明
根元素是<xs:schema> … </xs:schema>
目标名称空间属性
被XML引用的时候,和xmlns与xsi:schemaLocation对应:

<?xml version="1.0"?>
<root xmlns="http://mynamespace/my"
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xsi:schemaLocation="http://mynamespace/my note.xsd">
文本数据
</root>


Schema的数据类型

属于简单类型数据:
• 字符串xs:string
• 数值xs:int xs:decimal
• 日期xs:date xs:time
• 其他xs:boolean xs:anyURI


常用内置基本数据类型
• 字符串及相关类型
string:表示字符串,原封不动保留所有空白
QName:表示一个包含 XML 命名空间在内的名称

• 数值类型
decimal:表示特定精度的数字
float:表示单精度 32 位浮点数,支持科学计数法
double:表示双精度 64 位浮点数,支持科学计数法
hexBinary:表示十六进制数

• 布尔类型
– boolean:只接受 true、false、0、1

• AnyURI 类型
– anyURI:表示一个 URI,用来定位文件

• 时间类型
– duration:表示持续时间 PnYnMnDTnHnMnS

• P 为起始定界符,T为分隔符
– dateTime:表示特定的时间 YYYY-MM-DDThh:mm:ss
– time:表示特定的时间 hh:mm:ss

• 日期类型
– date:表示日期 YYYY-MM-DD 格式的时间
– gDay:表示日期 DD 格式的时间
– gMonth:表示月份 MM 格式的时间
– gMonthDay:表示月日 MM-DD 格式的时间
– gYear:表示年 YYYY 格式的时间
– gYearMonth:表示年月 YYYY-MM 格式的时间

• 二进制数据类型
– base64Binary:表示任意 base64 编码的二进制数
– hexBinary:表示任意 16 进制编码的二进制数

• Notation 类型
– NOTATION:表示 XML 中的 NOTAITION 类型

• 不能在模式中直接出现的抽象类型,只能用于派生其它类型


内置扩展数据类型
• string 类型派生出来用于约束属性的类型及其描述
– NMTOKEN:必须是合法的 XML 名称

• 只能由字母、数字、“_”、“-”、“.”、“:”组成
– NMTOKENS:多个 NMTOKEN,以空格为分隔符
– ID:标识符
– IDREF:引用另一个 ID
– IDREFS:引用多个已有的 ID,以空格为分隔符
– ENTITY:外部实体
– ENTITIES:多个外部实体,以空格为分隔符
– normalizedString:替换字符串内容中换行、制表符和回车符为空白
– token:替换字符串内容中换行、制表符和回车符为空白,自动删除 字符串前后空白,压缩字符串中包含的多个连续的空白
– language:定义合法的语言代码
– Name:含有一个有效的 XML 名称的字符串
– NCName:省略或不带命名空间前缀的 XML 名称字符串,不含冒号

• decimal 类型派生出来用于约束属性的类型及其描述
– byte:有正负的 8 位整数
– short:有正负的 16 位整数
– int:有正负的 32 位整数
– long:有正负的 64 位整数
– unsignedByte:无正负的 8 位整数
– unsignedShort:无正负的 16 位整数
– unsignedInt:无正负的 32 位整数
– unsignedLong:无正负的 64 位整数
– integer:整数值
– negativeInteger:仅包含负值的整数(…, -2, -1)
– nonNegativeInteger:仅包含非负值的整数(0, 1, 2, …)
– nonPositiveInteger:仅包含非正值的整数(…, -2, -1, 0)
– positiveInteger:仅包含正值的整数(1, 2, …)


四、自定义数据类型

自定义简单数据类型

使用 <simpleType></simpleType> 元素定义,例如:

<xs:simpleType name="gender">
	<xs:restriction base="xs:string"> 
		<xs:enumeration value=“男"/> 
		<xs:enumeration value=“女"/> 
	</xs:restriction>
</xs:simpleType>


在xs:element内部定义

<?xml version="1.0"?>
<xs:schema xmlns:xs="http://www.w3.org/2001/XMLSchema"> 
	<xs:element name="gender" >
		<xs:simpleType >
			<xs:restriction base="xs:string"> 
				<xs:enumeration value=""/> 
				<xs:enumeration value=""/> 
			</xs:restriction>
		</xs:simpleType>
	</xs:element >
</xs:schema>


在xs:element外部定义

<?xml version="1.0"?>
<xs:schema xmlns:xs="http://www.w3.org/2001/XMLSchema">
	<xs:element name="gender" type="genderType"/>
	<xs:simpleType name="genderType">
		<xs:restriction base="xs:string"> 
			<xs:enumeration value=""/> 
			<xs:enumeration value=""/> 
		</xs:restriction>
	</xs:simpleType> 
</xs:schema>


simpleType 子元素

限制(restriction)
restriction 元素定义对 simpleType定义的约束
也可用于对simpleContent 或 complexContent 定义的约束

<xs:restriction base="xs:string"> 
	<xs:enumeration value=“男"/> 
	<xs:enumeration value=“女"/> 
</xs:restriction>

base属性:内置数据类型、simpleType 或 complexType 元素
xs:restriction元素的常用子元素:

子元素作用
enumeration枚举类型,供用户选择
fractionDigits限定最大的小数位,用户控制精度
length限定最大的小数位,用户控制精度
maxLength指定长度的最大值
minLength指定最小长度
maxExclusive指定数据的最大值(小于)
maxInclusive指定数据的最大值(小于)
minExclusive指定最小值(大于)
minInclusive指定最小值(大于)
pattern指定最小值(大于)


列表(list)
list元素定义了指定数据类型的值的一个列表

<xs:element name="intvalues" type="valueList" />
	<xs:simpleType name="valueList">
		<xs:list itemType="xs:integer" />
	</xs:simpleType>
<intvalues>100 34 56 -23 1567</intvalues>
<xs:element name=“stringList">
	<xs:simpleType>
		<xs:list itemType="xs:string" />
	</xs:simpleType>
</xs:element>
<stringList>I love XML Schema</stringList>


联合(union)
union元素可定义包含多个 simpleType 的集合型数据类型

<?xml version="1.0"?>
<xs:schema xmlns:xs="http://www.w3.org/2001/XMLSchema">
	<xs:element name="root" type="myType"/>
		<xs:simpleType name="myType">
			<xs:union memberTypes="xs:boolean xs:decimal" />
		</xs:simpleType> 
</xs:schema>


自定义复杂数据类型

复杂类型指包含了属性和(或)子元素的元素的数据类型
2种格式:

<xs:element name="标记名">
	<xs:complexType>
		定义子元素,定义属性
	</xs:complexType>
</xs:element>
<xs:element name="标记名" type="自定义类型名称">
	<xs:complexType name="自定义类型名称">
		定义子元素,定义属性
	</xs:complexType>

属性:<xs:attribute name="xxxx" type="xxxx"/>
子元素:<xs:element name="xxxx" type="xxxx"/>


包含属性
• xs:complexType元素里可以包含多个xs:attribute元素
• 每个xs:attribute元素为xs:element定义的元素添加一个属性

<?xml version="1.0"?>
<xs:schema xmlns:xs="http://www.w3.org/2001/XMLSchema">
	<xs:element name="root">
		<xs:complexType>
			<xs:attribute name="category" type="xs:string"/>
			<xs:attribute name="id" type="xs:int"/>
		</xs:complexType>
	</xs:element>
</xs:schema>
<?xml version="1.0"?>
<root category="abc" id="123"></root>


xs:attribute元素的type属性
type的属性值: 内置简单类型,自定义简单类型

<?xml version="1.0"?>
<xs:schema xmlns:xs="http://www.w3.org/2001/XMLSchema">
<xs:element name="BookName">
<xs:complexType>
<xs:attribute name="ISBN" type="ISBNType" />
</xs:complexType>
</xs:element>
<xs:simpleType name="ISBNType">
<xs:restriction base="xs:string">
<xs:pattern value="¥d1-¥d4-¥d4-¥d1/TP¥d4" />
</xs:restriction>
</xs:simpleType>
</xs:schema> 


xs:attribute元素的use属性

• 可以使用use属性,定义是否要求使用该attribute
• 可选属性值optional, required, prohibited
• 默认值是optional

<?xml version="1.0"?>
<xs:schema xmlns:xs="http://www.w3.org/2001/XMLSchema">
	<xs:element name="root">
		<xs:complexType>
			<xs:attribute name="category" type="xs:string" use="optional"/>
			<xs:attribute name="id" type="xs:int" use="required"/>
			<xs:attribute name="SID" use="prohibited"/>
		</xs:complexType>
	</xs:element>
</xs:schema>


包含子元素

<?xml version="1.0"?>
<xs:schema xmlns:xs="http://www.w3.org/2001/XMLSchema">
	<xs:element name="root">
		<xs:complexType>
			<xs:sequence>
				<xs:element name="name" type="xs:string" />
				<xs:element name="sid" type="xs:string" />
			</xs:sequence>
		</xs:complexType>
	</xs:element>
</xs:schema>
<?xml version="1.0"?>
<root>
	<name>aaa</name>
	<sid>123</sid>
</root>


Order 指示器
• 用来定义子元素顺序
• 3种:
<xs:all>
• 子元素可以以任意顺序书写
<xs:sequence>
• 子元素必须按和定义一致的顺序书写
<xs:choice>
• 仅可包含一个声明的子元素
• 可通过Occurrence指示器指定每个子元素可以出现的次数


Occurrence 指示器
• minOccurs指定最少出现次数,取值>=0
• maxOccurs指定最多出现次数,无限制为unbounded
• 默认值均为1,即该元素必须出现1次

<?xml version="1.0"?>
<xs:schema xmlns:xs="http://www.w3.org/2001/XMLSchema">
	<xs:element name="contact">
		<xs:complexType>
			<xs:sequence>
				<xs:element name="name" type="xs:string"/>
				<xs:element name="phoneNumber" type="xs:string"
				minOccurs="1" maxOccurs="3"/>
			</xs:sequence>
		</xs:complexType>
	</xs:element>
</xs:schema>

以上是关于《web应用与开发》XML Schema 课堂笔记02的主要内容,如果未能解决你的问题,请参考以下文章

《web应用与开发》 Web Services与XML 课堂笔记01

xml schema 学习笔记

xml schema 建立xml文档

不同版本(2.3-3.1)web.xml文件的schema头部声明

动态网站开发讲课笔记02:Java Web概述

XML-Schema验证