《web应用与开发》XML Schema 课堂笔记02
Posted Akaid_Tea
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了《web应用与开发》XML Schema 课堂笔记02相关的知识,希望对你有一定的参考价值。
一、XML一些注意点
实体
XML 的保留字例如 <、>、’、”、&
引用时用实体替换保留字
五种常用的实体
实体引用 | 字符 | 字符名称 |
---|---|---|
< | < | 小于 |
> | > | 大于 |
& | & | 和号 |
' | ’ | 单引号 |
" | " | 引号 |
处理指令
格式:<?指令名 属性="属性值"?>
例如:<?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的校验
三、 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="¥d{1}-¥d{4}-¥d{4}-¥d{1}/TP¥d{4}" />
</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