XML文档的模式定义文件—— XSD
XML Schema 的作用是定义 XML 文档的合法构建模块,类似 DTD。
XSD是一个文本文件,独立于XML文档,其扩展名为.xsd
XSD的基本结构如下:
<?xml version="1.0"?>
<xsd:schema xmlns:xsd="http://www.w3.org/XMLSchema">
</xsd:schema>
命名空间
命名空间是W3C推荐的XML的一项标准,用于限制XML文档中元素的属性和命名范围
命名空间的声明
使用同一资源标识符URI(United Resource Identifier)表示命名空间
"xmlns"为关键字
"xsd"为命名空间的前缀,可以自行命名
最后一部分" "中的内容是URI
xmlns:xsd="http://ww./XMLSchema"
在XML文档中使用命名空间
在xml中使用命名空间应该注意其覆盖范围,说明那些元素和属性在该命名空间中
在XSD中使用命名空间
XSD本身是一个XML文件,在一个XSD中通过包含另一个XSD,使两个XSD联合起来
Schema中的全局成分
全局成分指元素xsd:schema的直接子结点,包括元素声明、属性声明、简单类型定义、复杂类型定义、组定义、属性组定义
<xsd:schema xmlns="http://www.w3.org/XMLSchema"> </xsd:schema>
Schema中的非全局成分
有时也需要奖非原句的Schema成分定义到目标命名空间中去
<xsd:schema xmlns="http://www.w3.org/XMLSchema"
elementFromDefault="qualified" > </xsd:schema>
简单数据类型
简单类型的定义
在XSD中定义
<xsd:schema
xmlns:xsd="http://www.w3.org/XMLSchema">
<xsd:element name=" ">
<xsd:complexType>
<xsd:sequence>
<xsd:element name="ele_Name" type="ele_Type"/>
</xsd:sequence>
</xsd:complexType>
</xsd:element>
</xsd:schema>
xml文档
<?xml version="1.0" encoding="UTF-8" ?>
<internet_club
xmlns:xsi="http://www.w3.org/XMLSchema"
xsi: name=" xsi_Name">
<member_name>content</member_name>
</internet_club>
简单类型的种类
内置基本类型
数字类型
decimal (任意精度的十进制数)
float(浮点数)
double(双精度数)
hexBinary(十六进制数)
base64Binary(base64二进制数)
名字 | 秒数 |
---|---|
byte | 有正负的 8 位整数 |
decimal | 十进制数 |
int | 有正负的 32 位整数 |
integer | 整数值 |
long | 有正负的 64 位整数 |
negativeInteger | 仅包含负值的整数 ( …, -2, -1.) |
nonNegativeInteger | 仅包含非负值的整数 (0, 1, 2, …) |
nonPositiveInteger | 仅包含非正值的整数 (…, -2, -1, 0) |
positiveInteger | 仅包含正值的整数 (1, 2, …) |
short | 有正负的 16 位整数 |
unsignedLong | 无正负的 64 位整数 |
unsignedInt | 无正负的 32 位整数 |
unsignedShort | 无正负的 16 位整数 |
unsignedByte | 无正负的 8 位整数 |
时间类型
名称 | 描述 |
---|---|
date | 定义一个日期值 |
dateTime | 定义一个日期和时间值 |
duration | 定义一个时间间隔 |
gDay | 定义日期的一个部分 - 天 (DD) |
gMonth | 定义日期的一个部分 - 月 (MM) |
gMonthDay | 定义日期的一个部分 - 月和天 (MM-DD) |
gYear | 定义日期的一个部分 - 年 (YYYY) |
gYearMonth | 定义日期的一个部分 - 年和月 (YYYY-MM) |
time | 定义一个时间值 |
其他类型
string(字符串):有限长的字符序列
boolean(布尔型):取值为true、false、1、0
anyURI(任意统一资源标识符):URI包含统一资源定位符URL和统一资源名URN
QName(XML限定名):在XML的命名空间中定义
NOTATION(符号):非XML对象使用NOTATION进行定义和处理
内置派生类型
string派生的串类型
名称 | 描述 |
---|---|
ENTITIES | |
ENTITY | |
ID | 在 XML 中提交 ID 属性的字符串 (仅与 schema 属性一同使用) |
IDREF | 在 XML 中提交 IDREF 属性的字符串(仅与 schema 属性一同使用) |
IDREFS language | 包含合法的语言 id 的字符串 |
Name | 包含合法 XML 名称的字符串 |
NCName | |
NMTOKEN | 在 XML 中提交 NMTOKEN 属性的字符串 (仅与 schema 属性一同使用) |
NMTOKENS | |
normalizedString | 不包含换行符、回车或制表符的字符串 |
QName | |
string | 字符串 |
token | 不包含换行符、回车或制表符、开头或结尾空格或者多个连续空格的字符串 |
decimal派生的整数类型
名字 | 描述 |
---|---|
byte | 有正负的 8 位整数 |
decimal | 十进制数 |
int | 有正负的 32 位整数 |
integer | 整数值 |
long | 有正负的 64 位整数 |
negativeInteger | 仅包含负值的整数 ( …, -2, -1.) |
nonNegativeInteger | 仅包含非负值的整数 (0, 1, 2, …) |
nonPositiveInteger | 仅包含非正值的整数 (…, -2, -1, 0) |
positiveInteger | 仅包含正值的整数 (1, 2, …) |
short | 有正负的 16 位整数 |
unsignedLong | 无正负的 64 位整数 |
unsignedInt | 无正负的 32 位整数 |
unsignedShort | 无正负的 16 位整数 |
unsignedByte | 无正负的 8 位整数 |
自定义的简单类型
对简单类型进行适当修改形成自定义的简单类型
首先,选择一个合适的简单类型作为基类型
然后,对该基类型添加一些限制条件
例如,以xsd:string作为基类型,然后对其添加限制条件
<?xml version="1.0" encoding="UTF-8" ?>
<xsd:schema
elementFormDefault="qualified"
xmlns:xsd="http://www.w3.org/XMLSchema">
<xsd:simpleType name="stName">
<xsd:restriction base="xsd:string">
<xsd:pattern value="5"/>
</xsd:restriction>
</xsd:simpleType>
</xsd:schema>
自定义元素的格式
采用正则表达式(Regular Expressions,Regex)为元素的定义格式
Regex表达式定义了可以出现在元素内容中的字母、数字、符号和它们的顺序。
字符 | 描述 |
---|---|
. | 代表任何字符 |
\d | 代表任何数字 |
\D | 代表任何非数字的字符 |
\s | 表示空格 |
\S | 表示任何非空格的字符 |
* | 匹配前面的子表达式零次或多次。例如,zo* 能匹配 “z” 以及 “zoo”。* 等价于{0,}。 |
+ | 匹配前面的子表达式一次或多次。例如,‘zo+’ 能匹配 “zo” 以及 “zoo”,但不能匹配 “z”。+ 等价于 {1,}。 |
? | 匹配前面的子表达式零次或一次。例如,“do(es)?” 可以匹配 “do” 、 “does” 中的 “does” 、 “doxy” 中的 “do” 。? 等价于 {0,1}。 |
[A-Z] | [A-Z] 表示一个区间,匹配所有大写字母,[a-z] 表示所有小写字母。 |
[0-9] | 表示0到9的值的范围。 |
this|that | 表示允许的内容为this或that,多个内容时可以增加竖线 |
{n} | n 是一个非负整数。匹配确定的 n 次。例如,‘o{2}’ 不能匹配 “Bob” 中的 ‘o’,但是能匹配 “food” 中的两个 o。 |
{n,} | n 是一个非负整数。至少匹配n 次。例如,‘o{2,}’ 不能匹配 “Bob” 中的 ‘o’,但能匹配 “foooood” 中的所有 o。‘o{1,}’ 等价于 ‘o+’。‘o{0,}’ 则等价于 ‘o*’。 |
{n,m} | m 和 n 均为非负整数,其中n <= m。最少匹配 n 次且最多匹配 m 次。例如,“o{1,3}” 将匹配 “fooooood” 中的前三个 o。‘o{0,1}’ 等价于 ‘o?’。请注意在逗号和两个数之间不能有空格。 |
数值的嵌入和范围的设定
在XSD中可以设定数字、日期和时间的最值
<xsd:element name="ele_name">
<xsd:simpleType>
<xsd:restriction base="xsd:integer">
<xsd:min value="0"/>
<xsd:max value="1000"/>
</xsd:restriction>
</xsd:simpleType>
</xsd:element>
枚举类型的定义
<xsd:element name="ele_name">
<xsd:simpleType>
<xsd:restriction base="xsd:integer">
<xsd:enumeraion value="a"/>
<xsd:enumeraion value="b"/>
</xsd:restriction>
</xsd:simpleType>
</xsd:element>
列表类型的定义
1、XSD定义
<xsd:simpleType name="st_name">
<xsd: base="xsd:date"/>
</xsd:simpleType>
<xsd:element name="list_name" type="datelist"/>
2、XML文档
<list_name>content</list_name>
限制简单类型的长度
XSD可以限制简单数据类型的最大长度
<xsd:element name="ele_name">
<xsd:simpleType>
<xsd:restriction>
<xsd:length value="50"/>
</xsd:restriction>
</xsd:simpleType>
</xsd:element>
设定元素的值
在XSD中,可以设定元素的默认值,也可以将元素设定为一个固定值
1、XSD定义
<?xml version="1.0" encoding="UTF-8"?>
<xsd:schema
elementFormDefault="qualified"
xmlns:xs="http://www.w3.org/XMLSchema">
</xsd:schema>
2、XML文档
<status1>content</status1>
<status2>content</status2>
复杂数据类型
复杂数据类型由简单数据类型和其他复杂数据类型构造而成
复杂数据类型分类
只含子元素的复杂数据类型定义
此种类型的元素只含有子元素及其属性
<member_name>
<family_name> content </family_name>
<given_name> content </given_name>
</member_name>
只含子元素的复杂类型由一系列简单复杂数据类型和其他复杂类型元素组成
<xsd:schema
elementFormDefault="qulified"
xmlns="http://www.w3.org/XMLSchama">
<xsd:sequence>
<xsd:element name="name1" type="xsd:string"/>
<xsd:element name="name2" type="xsd:string"/>
<xsd:element name="name3" type="xsd:integer"/>
</xsd:sequence>
</xsd:schema>
只含文本的复杂数据类型定义
这种类型的元素只含有文本和属性、不含有子元素
<description member="new">
content
</description>
空元素的复杂数据类型定义
空元素可以有属性,但不能子元素或文本
<member_ID number="123456"/>
组的定义
有时一组元素会在模式的多个地方出现
如果一组元素定义一个组名,就可以方便的通过组名引用这组元素
<xsd:group name="group_name">
<xsd:sequence>
<xsd:element name="name1" type="string"/>
<xsd:element name="name2" type="string"/>
<xsd:element name="name3" type="string"/>
</xsd:sequence>
</xsd:group>
<!-- 应用 -->
<xsd:group ref="group_name">
</xsd:group>
元素属性的定义
每一个元素都可以定义一个或多个属性
有时需要通过设置属性的use值对属性在文档中出现的方式加以限制
use可以设置为一下几种情况
use值 | 意义 |
---|---|
required | 必须赋值 |
optional | 可有可无 |
prohibited | 禁止赋值 |
fixed | 固定值 |
default | 默认值 |
实例:
<xsd:attribute_group name="group_name">
<xsd:attribute name="name1" type="string" use="required">
</xsd:attribute>
<xsd:attribute name="name2" type="integer" use="prohibited">
</xsd:attribute>
</xsd:attribute_group>
<!-- 应用 -->
<xsd:attribute_group ref="group_name">
</xsd:attribute_group>
-----------------------------------------文章到此就结束啦-------------------------------------------