XSD文件详解(以Maven为例)
什么是XSD
XML Schema 的作用是定义 XML 文档的合法构建模块,类似 DTD。
XML Schema 是基于 XML 的 DTD 替代者。
XML Schema 描述 XML 文档的结构。
XML Schema 语言也称作 XML Schema 定义(XML Schema Definition,XSD)。
XML Schema:
Xml Schema的用途
根元素
schema 声明:
<?xml version="1.0"?> <xs:schema xmlns:xs="http://www.w3.org/2001/XMLSchema" elementFormDefault="qualified" targetNamespace="http://maven.apache.org/POM/4.0.0"xmlns="http://maven.apache.org/POM/4.0.0"> ... ... </xs:schema>xmlns:xs=“http://www.w3.org/2001/XMLSchema” 表示元素和数据类型等定义来自w3,同时它还规定了来自命名空间 w3 的元素和数据类型应该使用前缀 xs:
targetNamespace=“http://maven.apache.org/POM/4.0.0” 显示被此 schema 定义的元素 来自命名空间
xmlns=“http://maven.apache.org/POM/4.0.0” 表示此文档的默认命名空间
elementFormDefault=“qualified” 任何 XML 实例文档所使用的且在此 schema 中声明过的元素必须被命名空间限定
在 XML 文档中引用 Schema
<?xml version="1.0" encoding="UTF-8"?> <project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd"> </project>规定了默认命名空间的声明。此声明会告知 schema 验证器,在此 XML 文档中使用的所有元素都被声明于"http://maven.apache.org/POM/4.0.0" 这个命名空间。
schemaLocation 属性有两个值。第一个值是需要使用的命名空间。第二个值是供命名空间使用的 XML schema 的位置
XSD简易元素
除此之外,简易元素还有几个属性,nillable:表示XML文档中某个[元素取值] 是否可以为空,默认值为false,表示不能为空,fixed: 表示要定义元素的固定值,此元素只可以取这些值
<xs:attribute name="combine.children" type="xs:string"/>
name=”combine.children” 表示要定义属性的名字,type=”xs:string” 表示要定义属性的数据类型,
除此之外,default=”2001-01-11” 表示要定义属性的默认值,fixed=”2001-01-11” 表示要定义属性的固定值,use=”required” 表示此属性是否是必须指定的,即如果不指定就不符合Schema,默认没有use=”required”属性表示属性可有可无
简易元素的限定主要有以下几种类型
| enumeration | 定义可接受值的一个列表 |
| fractionDigits | 定义所允许的最大的小数位数。必须大于等于0。 |
| length | 定义所允许的字符或者列表项目的精确数目。必须大于或等于0。 |
| maxExclusive | 定义数值的上限。所允许的值必须小于此值。 |
| maxInclusive | 定义数值的上限。所允许的值必须小于或等于此值。 |
| maxLength | 定义所允许的字符或者列表项目的最大数目。必须大于或等于0。 |
| minExclusive | 定义数值的下限。所允许的值必需大于此值。 |
| minInclusive | 定义数值的下限。所允许的值必需大于或等于此值。 |
| minLength | 定义所允许的字符或者列表项目的最小数目。必须大于或等于0。 |
| pattern | 定义可接受的字符的精确序列。 |
| totalDigits | 定义所允许的阿拉伯数字的精确位数。必须大于0。 |
| whiteSpace | 定义空白字符(换行、回车、空格以及制表符)的处理方式。 |
最大最小值限定
<xs:element name="age"><xs:simpleType><xs:restriction base="xs:integer"><xs:minInclusive value="0"/> <xs: minInclusive>表示最小值,包括指定值<xs:maxInclusive value="120"/> <xs: maxInclusive>表示最大值,包括指定值</xs:restriction></xs:simpleType> </xs:element>枚举限定
<xs:element name="car"><xs:simpleType><xs:restriction base="xs:string"><xs:enumeration value="Audi"/><xs:enumeration value="Golf"/><xs:enumeration value="BMW"/></xs:restriction></xs:simpleType> </xs:element>模式约束
<xs:element name="letter"><xs:simpleType><xs:restriction base="xs:string"><xs:pattern value="[a-z]"/> 可接受的值只有小写字母 a - z 其中的一个<xs:pattern value="[A-Z][A-Z][A-Z]"/> 可接受的值是大写字母 A - Z 其中的三个<xs:pattern value="[a-zA-Z][a-zA-Z][a-zA-Z]"/>可接受的值是大写或小写字母 a - z 其中的三个<xs:pattern value="[xyz]"/> 可接受的值是字母 x, y 或 z 中的一个<xs:pattern value="[0-9][0-9][0-9][0-9][0-9]"/> 可接受的值是五个阿拉伯数字的一个序列,且每个数字的范围是 0-9<xs:pattern value="([a-z])*"/> 可接受的值是 a - z 中零个或多个字母<xs:pattern value="([a-z][A-Z])+"/> 可接受的值是一对或多对字母,每对字母由一个小写字母后跟一个大写字母组成<xs:pattern value="male|female"/> 可接受的值是 male 或者 female<xs:pattern value="[a-zA-Z0-9]{8}"/> 可接受的值是由 8 个字符组成的一行字符,这些字符必须是大写或小写字母 a - z 亦或数字 0 - 9</xs:restriction></xs:simpleType> </xs:element>空白字符限定
<xs:element name="address"><xs:simpleType><xs:restriction base="xs:string"><xs:whiteSpace value="preserve"/> whiteSpace 限定被设置为 "preserve",这意味着 XML 处理器不会移除任何空白字符<xs:whiteSpace value="replace"/> whiteSpace 限定被设置为 "replace",这意味着 XML 处理器将替换所有空白字符(换行、回车、空格以及制表符)<xs:whiteSpace value="collapse"/>whiteSpace 限定被设置为 "collapse",这意味着 XML 处理器将移除所有空白字符(换行、回车、空格以及制表符会被替换为空格,开头和结尾的空格会被移除,而多个连续的空格会被缩减为一个单一的空格)</xs:restriction></xs:simpleType> </xs:element>长度限定
<xs:element name="password"><xs:simpleType><xs:restriction base="xs:string"><xs:length value="8"/> 值必须精确到 8 个字符<xs:minLength value="5"/> 值最小为 5 个字符<xs:maxLength value="8"/> 最大为 8 个字符</xs:restriction></xs:simpleType> </xs:element>XSD复合类型
定义复合元素有两种方法
1、 通过命名此元素,可直接对元素进行声明
2、元素可以使用 type 属性,这个属性的作用是引用要使用的复合类型的名称
<xs:element name="dependencyManagement" minOccurs="0" type="DependencyManagement"></xs:element> <xs:complexType name="DependencyManagement"> <xs:all><xs:element name="dependencies" minOccurs="0"><xs:complexType><xs:sequence><xs:element name="dependency" minOccurs="0" maxOccurs="unbounded" type="Dependency"/></xs:sequence></xs:complexType></xs:element></xs:all></xs:complexType>空元素
<xs:element name="configuration" minOccurs="0"><xs:complexType><xs:attribute name="combine.children" type="xs:string"/><xs:attribute name="combine.self" type="xs:string"/></xs:complexType></xs:element>仅含元素
<xs:sequence>。它意味着被定义的元素必须按上面的次序出现在元素中
仅含文本
此类型仅包含简易的内容(文本和属性),因此我们要向此内容添加 simpleContent 元素。当使用简易内容时,我们就必须在 simpleContent 元素内定义扩展或限定,就像这样:
混合元素
为了使字符数据可以出现在 “letter” 的子元素之间,mixed 属性必须被设置为 “true”
指示器
通过指示器,我们可以控制在文档中使用元素的方式。在XSD中有七种指示器:
Order 指示器:All,Choice,Sequence ;用于定义元素的顺序
Occurrence 指示器:maxOccurs,minOccurs;Occurrence 指示器用于定义某个元素出现的频率。maxOccurs 以及 minOccurs 的默认值均为 1。
Group 指示器:Group name, attributeGroup name;Group 指示器用于定义相关的数批元素。
<all> 指示器规定子元素可以按照任意顺序出现,且每个子元素必须只出现一次<xs:element name="person"><xs:complexType><xs:all><xs:element name="firstname" type="xs:string"/><xs:element name="lastname" type="xs:string"/></xs:all></xs:complexType> </xs:element>
<choice> 指示器规定可出现某个子元素或者可出现另外一个子元素(非此即彼):<xs:element name="person"><xs:complexType><xs:choice><xs:element name="employee" type="employee"/><xs:element name="member" type="member"/></xs:choice></xs:complexType> </xs:element>
<sequence> 规定子元素必须按照特定的顺序出现:<xs:element name="person"><xs:complexType><xs:sequence><xs:element name="firstname" type="xs:string"/><xs:element name="lastname" type="xs:string"/></xs:sequence></xs:complexType> </xs:element>
指示器可规定某个元素可出现的最大次数,如需使某个元素的出现次数不受限制,请使用 maxOccurs=“unbounded” 这个声明<xs:element name="person"><xs:complexType><xs:sequence><xs:element name="full_name" type="xs:string"/><xs:element name="child_name" type="xs:string" maxOccurs="10"/></xs:sequence></xs:complexType> </xs:element>
指示器可规定某个元素能够出现的最小次数:<xs:element name="person"><xs:complexType><xs:sequence><xs:element name="full_name" type="xs:string"/><xs:element name="child_name" type="xs:string"maxOccurs="10" minOccurs="0"/></xs:sequence></xs:complexType> </xs:element>
用来定义相关的一组元素。<xs:group name="persongroup"><xs:sequence><xs:element name="firstname" type="xs:string"/><xs:element name="lastname" type="xs:string"/><xs:element name="birthday" type="xs:date"/></xs:sequence> </xs:group><xs:element name="person" type="personinfo"/><xs:complexType name="personinfo"><xs:sequence><xs:group ref="persongroup"/><xs:element name="country" type="xs:string"/></xs:sequence> </xs:complexType>
用来定义相关的一组属性。<xs:attributeGroup name="personattrgroup"><xs:attribute name="firstname" type="xs:string"/><xs:attribute name="lastname" type="xs:string"/><xs:attribute name="birthday" type="xs:date"/> </xs:attributeGroup><xs:element name="person"><xs:complexType><xs:attributeGroup ref="personattrgroup"/></xs:complexType> </xs:element>
any元素
通过使用 <any> 元素,我们可以通过任何元素(在 <lastname> 之后)扩展 “person” 的内容
<xs:element name="person"><xs:complexType><xs:sequence><xs:element name="firstname" type="xs:string"/><xs:element name="lastname" type="xs:string"/><xs:any minOccurs="0"/></xs:sequence></xs:complexType> </xs:element>anyAttribute元素
元素使我们有能力通过未被 schema 规定的属性来扩展 XML 文档!
<xs:element name="person"><xs:complexType><xs:sequence><xs:element name="firstname" type="xs:string"/><xs:element name="lastname" type="xs:string"/></xs:sequence><xs:anyAttribute/></xs:complexType> </xs:element>substitutionGroup元素替换
<xs:element name="name" type="xs:string"/> <xs:element name="navn" substitutionGroup="name"/><xs:complexType name="custinfo"><xs:sequence><xs:element ref="name"/></xs:sequence> </xs:complexType><xs:element name="customer" type="custinfo"/> <xs:element name="kunde" substitutionGroup="customer"/>XSD数据类型
1、XSD字符串
字符串数据类型用于可包含字符串的值,可包含字符、换行、回车以及制表符。
可与字符串数据类型一同使用的限定:enumeration、length、maxLength、minLength、pattern (NMTOKENS、IDREFS 以及 ENTITIES 无法使用此约束)、whiteSpace
| 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 | 不包含换行符、回车或制表符、开头或结尾空格或者多个连续空格的字符串 |
2、日期和时间类型
| date | 定义一个日期值 |
| dateTime | 定义一个日期和时间值 |
| duration | 定义一个时间间隔 |
| gDay | 定义日期的一个部分 - 天 (DD) |
| gMonth | 定义日期的一个部分 - 月 (MM) |
| gMonthDay | 定义日期的一个部分 - 月和天 (MM-DD) |
| gYear | 定义日期的一个部分 - 年 (YYYY) |
| gYearMonth | 定义日期的一个部分 - 年和月 (YYYY-MM) |
| time | 定义一个时间值 |
3、数值数据类型
可与数值数据类型一同使用的限定:enumeration、fractionDigits、maxExclusive、maxInclusive、minExclusive、minInclusive、pattern、totalDigits、whiteSpace
| 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 位整数 |
4、杂项数据类型
可与杂项数据类型一同使用的限定:enumeration (布尔数据类型无法使用此约束*)、length (布尔数据类型无法使用此约束)、maxLength (布尔数据类型无法使用此约束)、minLength (布尔数据类型无法使用此约束)、pattern、whiteSpace
| anyURI | |
| base64Binary | |
| boolean | |
| double | |
| float | |
| hexBinary | |
| NOTATION | |
| QName |
总结
以上是生活随笔为你收集整理的XSD文件详解(以Maven为例)的全部内容,希望文章能够帮你解决所遇到的问题。
- 上一篇: gcc和g++有什么区别?
- 下一篇: 测试内存对齐对运行速度的影响