XML文档的模式定义文件—— XSD

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>


-----------------------------------------文章到此就结束啦-------------------------------------------


版权声明:本文为qq_50563523原创文章,遵循CC 4.0 BY-SA版权协议,转载请附上原文出处链接和本声明。