在Java开发中我们经常使用到第三方框架,例如Spring,而Spring框架的配置文件如果之前没有配置过,或者它不常使用的属性我们都不知道如何配置。其它Spring配置文件中顶部都里面都是对应的xsd文件,它来规范我们来编写xml配置文件。相信通过以下的文章大家可以知道如何的通过XSD文件来准确的配置Java框架的xml文件。
1、Xml Schema的用途
xsd是XML Schema Definition 缩写.可扩展标记语言架构是以可扩展标记语言(标准通用标记语言的子集)为基础的,它用于可替代文档类型定义(外语缩写:DTD);一份XML schema文件描述了可扩展标记语言文档的结构。它的主要用途如下:
- 定义可出现在文档中的元素
- 定义可出现在文档中的属性
- 定义哪个元素是子元素
- 定义子元素的次序
- 定义子元素的数目
- 定义元素是否为空,或者是否可包含文本
- 定义元素和属性的数据类型
- 定义元素和属性的默认值以及固定值
2、Xml Schema根元素
<?xml version="1.0"?>
<xs:schema xmlns:xs="http://www.w3.org/2001/XMLSchema" 表示数据类型等定义来自w3
targetNamespace="http://www.w3schools.com" 表示文档中要定义的元素来自什么命名空间
xmlns="http://www.w3schools.com"表示此文档的默认命名空间是什么
elementFormDefault="qualified"> 表示要求xml文档的每一个元素都要有命名空间指定
……定义主体部分……
</xs:schema>
3、定义一个简单元素
简易元素指那些只包含文本的元素。它不会包含任何其他的元素或属性。
4、定义一个属性
简易元素无法拥有属性。假如某个元素拥有属性,它就会被当作某种复合类型。但是属性本身总是作为简易类型被声明的。
5、定义元素或者属性值的限制
1).最大值最小值限制
<xs:element name="age">
<xs:simpleType>
<xs:restriction base="xs:integer">
<xs:minInclusive value="0"> 表示大于等于0,</xs: minExclusive>表示最小值但是不包括指定值
<xs:maxInclusive value="120"> 表示小于等于120,</xs: maxExclusive>
</xs:restriction>
</xs:simpleType>
</xs:element>
2).枚举限制,指只能在指定的几个值中取值
<xs:element name="car" type="carType"/>
<xs:simpleType name="carType">
<xs:restriction base="xs:string">
<xs:enumeration value="Audi"/>
<xs:enumeration value="Golf"/>
<xs:enumeration value="BMW"/>
</xs:restriction>
</xs:simpleType>
3)模式(pattern)限制,指字符串的格式必须满足制定的匹配模式
3.1)对值的限定
下面的例子定义了带有一个限定且名为 “age” 的元素。age 的值不能低于 0 或者高于 120:
3.2)对一组值的限定
如需把 XML 元素的内容限制为一组可接受的值,我们要使用枚举约束(enumeration constraint)。
下面的例子定义了带有一个限定的名为 “car” 的元素。可接受的值只有:Audi, Golf, BMW:
注释:在这种情况下,类型 “carType” 可被其他元素使用,因为它不是 “car” 元素的组成部分。
3.3)对一系列值的限定
如需把 XML 元素的内容限制定义为一系列可使用的数字或字母,我们要使用模式约束(pattern constraint)。
下面的例子定义了带有一个限定的名为 “letter” 的元素。可接受的值只有小写字母 a - z 其中的一个:
3.4)对一系列值的其他限定
下面的例子定义了带有一个限定的名为 “letter” 的元素。可接受的值是 a - z 中零个或多个字母:
3.5)对长度的限定
如需限制元素中值的长度,我们需要使用 length、maxLength 以及 minLength 限定。
本例定义了带有一个限定且名为 “password” 的元素。其值必须精确到 8 个字符:
6、定义复杂类型
复杂类型是指定义元素中包含属性或者子元素的类型
1)定义只包含子元素的复杂类型
<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>
2)定义只包含属性的复杂类型
<xs:element name="product" type="prodtype"/>
<xs:complexType name="prodtype">
<xs:attribute name="prodid" type="xs:positiveInteger"/>
</xs:complexType>
3)定义只包含内容的复杂类型
<xs:element name="shoesize" type="shoetype"/>
<xs:complexType name="shoetype">
<xs:simpleContent>
<xs:extension base="xs:integer">
<xs:attribute name="country" type="xs:string" />
</xs:extension>
</xs:simpleContent>
</xs:complexType>
4)定义包含内容和子元素混合的复杂类型
<xs:element name="letter">
<xs:complexType mixed="true">
<xs:sequence>
<xs:element name="name" type="xs:string"/>
<xs:element name="orderid" type="xs:positiveInteger"/>
<xs:element name="shipdate" type="xs:date"/>
</xs:sequence>
</xs:complexType>
</xs:element>
7、数据类型
1)字符串数据类型(String Data Type)
字符串数据类型可包含字符、换行、回车以及制表符。下面是一个关于某个 scheme 中字符串声明的例子:
<xs:element name="customer" type="xs:string"/>
文档中的元素看上去应该类似这样:
<customer>John Smith</customer>
或者类似这样:
<customer> John Smith </customer>
注释:如果您使用字符串数据类型,XML 处理器就不会更改其中的值。
2)日期及时间数据类型(Date and Time Data Types)
日期数据类型用于定义日期。下面是一个有关 schema 中日期声明的例子:
<xs:element name="start" type="xs:date"/>
文档中的元素看上去应该类似这样:
<start>2002-09-24</start>
3)数值数据类型(Numeric Data Types)
十进制数据类型用于规定一个数值。下面是一个关于某个 scheme 中十进制数声明的例子。
<xs:element name="prize" type="xs:decimal"/>
文档中的元素看上去应该类似这样:
<prize>999.50</prize>
或者类似这样:
<prize>+999.5450</prize>
或者类似这样:
<prize>-999.5230</prize>
注释:您可规定的十进制数字的最大位数是 18 位。
4)杂项数据类型(Miscellaneous Data Types)
逻辑数据性用于规定 true 或 false 值。下面是一个关于某个 scheme 中逻辑声明的例子:
<xs:attribute name="disabled" type="xs:boolean"/>
文档中的元素看上去应该类似这样:
<prize disabled="true">999</prize>
注释:合法的布尔值是 true、false、1(表示 true) 以及 0(表示 false)。
参考地址:Schema 教程
本文只是截取参考地址的重点内容,具体信息可以参考以上XSD教程网站。