云中君说:
学习XSD是我在学习框架的时候,希望认识和深刻学习框架中xml的配置,进而开始学习xsd。所以一大部分学习案例来自于W3School和String MVC框架的配置文件的xml引用的命名空间。
建议学习这个XSD的小伙伴可以先了解一下我的XML学习总结,在学习这一部分的内容!
如果在学习中发现我的以下问题和错误,可以私信告诉我,也可以在评论区留言给我,我们一起学习一起进步,谢谢大家的支持,感谢大家了!!!
什么是 XSD?
XSD全称是XML Schema Definition。也称为xml Schema。
XML Schema 是基于 XML 的 DTD 替代者。
XML Schema 可描述 XML 文档的结构。
XML Schema 的作用是定义 XML 文档的合法构建模块,类似 DTD。
简单来说
XSD就是书写XML的格式模板,XML中引用的标签和书写内容要符合XSD文档中的要求格式。
XSD头部信息描述的解释
<schema> 元素是每一个 XML Schema 的根元素。
<?xml version="1.0"?>
<xsd:schema>
...
...
</xsd:schema>
<schema> 元素可包含属性。一个 schema 声明往往看上去类似这样:
<?xml version="1.0"?>
<xsd:schema
xmlns="http://www.springframework.org/schema/context"
xmlns:xsd="http://www.w3.org/2001/XMLSchema"
targetNamespace="http://www.springframework.org/schema/context"
elementFormDefault="qualified"
attributeFormDefault="unqualified">
...
...
</xsd:schema>
代码解释
xmlns:xsd="http://www.w3.org/2001/XMLSchema"
显示 schema 中用到的元素和数据类型来自命名空间 “http://www.w3.org/2001/XMLSchema”。同时它还规定了来自命名空间 “http://www.w3.org/2001/XMLSchema” 的元素和数据类型应该使用前缀 xs:
这个属性是通用的属性和属性值
xmlns="http://www.springframework.org/schema/context"
指出默认的命名空间是"http://www.springframework.org/schema/context" 。
targetNamespace="http://www.springframework.org/schema/context"
显示被此schema定义的元素来自命名空间 “http://www.springframework.org/schema/context”
elementFormDefault="qualified"
attributeFormDefault="unqualified"
elementFormDefault和attributeFormDefault有两个属性值:
attributeFormDefault=‘unqualified’ 时表示目标命名空间下的这个属性不要带命名空间前缀.
attributeFormDefault=‘qualified’ 时表示来自目标命名空间下的属性必须要用命名空间前缀修饰.
elementFormDefault=‘unqualified’ 时表示子元素不必须使用命名空间前缀,
但这不等于说这些子元素是属于无命名空间,而是从属于父顶级元素的目标命名空间。
elementFormDefault=‘qualified’ 时表示子元素必须使用命名空间前缀, 当然, 这些子元素是位于目标命名空间之下.
在xml文档中引用Schema
<?xml version="1.0" encoding="UTF-8"?>
<property-placeholder
xmlns:context="http://www.springframework.org/schema/context"
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xsi:schemaLocation="
http://www.springframework.org/schema/context
http://www.springframework.org/schema/context/spring-context.xsd
>
...
</property-placeholder>
代码解释
xmlns:context="http://www.springframework.org/schema/context"
规定使用的命名空间,并且使用空间中的元素前缀用context。
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
规定使用的命名空间,并且使用空间中的元素前缀用xsi。
xsi:schemaLocation="
http://www.springframework.org/schema/context
http://www.springframework.org/schema/context/spring-context.xsd
使用xsi命名空间中的属性schemaLocation,其中的第一个属性是需要使用的命名空间,第二个属性是提供命名空间使用的xml schema的位置。
XSD中定义的内容
- 定义可出现在文档中的元素
- 定义可出现在文档中的属性
- 定义哪个元素是子元素
- 定义子元素的次序
- 定义子元素的数目
- 定义元素是否为空,或者是否可包含文本
- 定义元素和属性的数据类型
- 定义元素和属性的默认值以及固定值
元素的定义
格式:
<xsd:element name="xxx" type="yyy"/>
元素属性的定义
格式:
<xsd:attribute name="xxx" type="yyy"/>
元素的限定
格式:
<xsd:element name="age">
<xsd:simpleType>
<xsd:restriction base="xs:integer">
<xsd:minInclusive value="0"/>
<xsd:maxInclusive value="120"/>
</xsd:restriction>
</xsd:simpleType>
</xs:element>
数据类型的限定
限定 |
描述 |
enumeration |
定义可接受值的一个列表 |
fractionDigits |
定义所允许的最大的小数位数。必须大于等于0。 |
length |
定义所允许的字符或者列表项目的精确数目。必须大于或等于0。 |
maxExclusive |
定义数值的上限。所允许的值必须小于此值。 |
maxInclusive |
定义数值的上限。所允许的值必须小于或等于此值。 |
maxLength |
定义所允许的字符或者列表项目的最大数目。必须大于或等于0。 |
minExclusive |
定义数值的下限。所允许的值必需大于此值。 |
minInclusive |
定义数值的下限。所允许的值必需大于或等于此值。 |
minLength |
定义所允许的字符或者列表项目的最小数目。必须大于或等于0。 |
pattern |
定义可接受的字符的精确序列。 |
totalDigits |
定义所允许的阿拉伯数字的精确位数。必须大于0。 |
whiteSpace |
定义空白字符(换行、回车、空格以及制表符)的处理方式。 |
XSD中各个元素和属性以及含义
XSD 元素
元素 |
解释 |
all |
规定子元素能够以任意顺序出现,每个子元素可出现零次或一次。 |
annotation |
annotation 元素是一个顶层元素,规定 schema 的注释。 |
any |
使创作者可以通过未被 schema 规定的元素来扩展 XML 文档。 |
anyAttribute |
使创作者可以通过未被 schema 规定的属性来扩展 XML 文档。 |
appInfo |
规定 annotation 元素中应用程序要使用的信息。 |
attribute |
定义一个属性。 |
attributeGroup |
定义在复杂类型定义中使用的属性组。 |
choice |
仅允许在 声明中包含一个元素出现在包含元素中。 |
complexContent |
定义对复杂类型(包含混合内容或仅包含元素)的扩展或限制。 |
complexType |
定义复杂类型。 |
documentation |
定义 schema 中的文本注释。 |
element |
定义元素。 |
extension |
扩展已有的 simpleType 或 complexType 元素。 |
field |
规定 XPath 表达式,该表达式规定用于定义标识约束的值。 |
group |
定义在复杂类型定义中使用的元素组。 |
import |
向一个文档添加带有不同目标命名空间的多个 schema。 |
include |
向一个文档添加带有相同目标命名空间的多个 schema。 |
key |
指定属性或元素值(或一组值)必须是指定范围内的键。 |
keyref |
规定属性或元素值(或一组值)对应指定的 key 或 unique 元素的值。 |
list |
把简单类型定义为指定数据类型的值的一个列表。 |
notation |
描述 XML 文档中非 XML 数据的格式。 |
redefine |
重新定义从外部架构文件中获取的简单和复杂类型、组和属性组。 |
restriction |
定义对 simpleType、simpleContent 或 complexContent 的约束。 |
schema |
定义 schema 的根元素。 |
selector |
指定 XPath 表达式,该表达式为标识约束选择一组元素。 |
sequence |
要求子元素必须按顺序出现。每个子元素可出现 0 到任意次数。 |
simpleContent |
包含对 complexType 元素的扩展或限制且不包含任何元素。 |
simpleType |
定义一个简单类型,规定约束以及关于属性或仅含文本的元素的值的信息。 |
union |
定义多个 simpleType 定义的集合。 |
unique |
指定属性或元素值(或者属性或元素值的组合)在指定范围内必须是唯一的。 |
element :定义元素
元素信息:
出现次数 |
在架构中定义的元素的数目。 |
父元素 |
schema、choice、all、sequence |
内容 |
simpleType、complexType、key、keyref、unique |
属性值:
属性 |
属性值 |
含义 |
name |
自定义 |
设置元素的名字 |
default |
自定义 |
设置默认值 |
fixed |
自定义 |
设置固定值,设置后不允许修改 |
id |
自定义 |
规定该元素唯一的id |
ref |
自定义 |
对另一个元素的引用 |
substitutionGroup |
自定义 |
规定可用来替代该元素的元素的名称。 该元素必须具有相同的类型或从指定元素类型派生的类型。 |
maxOccurs |
自定义 |
规定 element 元素在父元素中可出现的最大次数。 |
minOccurs |
自定义 |
规定 element 元素在父元素中可出现的最小次数。 |
abstract |
false |
指示元素是否可以在实例文档中使用。如果该值为 true,则元素不能出现在实例文档中。 相反,substitutionGroup 属性包含该元素的限定名 (QName) 的其他元素必须出现在该元素的位置。多个元素可以在其 substitutionGroup 属性中引用该元素。默认值是 false。 |
block |
extension |
防止通过扩展派生的元素被用来替代该元素。 |
|
restriction |
防止通过限制派生的元素被用来替代该元素。 |
|
substitution |
防止通过替换派生的元素被用来替代该元素。 |
|
#all |
防止所有派生的元素被用来替代该元素。 |
final |
extension |
防止通过扩展派生的元素被用来替代该元素 |
|
restriction |
防止通过限制派生的元素被用来替代该元素 |
|
#all |
防止所有派生的元素被用来替代该元素 |
form |
unqualified |
则无须通过命名空间前缀限定该元素。 |
|
qualified |
必须通过命名空间前缀限定该元素。 |
type |
string |
规定元素的值为字符串类型 |
|
decimal |
规定元素的值为小数类型 |
|
integer |
规定元素的值为整数类型 |
|
boolean |
规定元素的值为布尔型 |
|
date |
规定元素的值为日期类型,实现方式:YYYY-MM-DD |
|
time |
规定元素的值为时间类型,实现方式:HH:MM:SS |
attribute :定义元素的属性
元素信息
出现次数 |
在 schema 元素中定义一次, 在复杂类型或属性组中引用多次 |
父元素 |
attributeGroup、schema、complexType、restriction (simpleContent)、extension (simpleContent)、restriction (complexContent)、extension (complexContent) |
内容 |
annotation、simpleType |
属性 |
属性值 |
含义 |
id |
自定义 |
规定该元素唯一的id |
name |
自定义 |
设置属性的名字 |
default |
自定义 |
设置默认值 |
fixed |
自定义 |
设置固定值,设置后不允许修改 |
form |
unqualified |
指示此属性无须由命名空间前缀限定,且无须匹配此属性的无冒号名称 (NCName),即本地名称。 |
|
qualified |
指示必须通过命名空间前缀和该属性的无冒号名称 (NCName) 来限定此属性。 |
use |
optional |
属性是可选的并且可以具有任何值(默认) |
|
prohibited |
不能使用属性。 |
|
required |
属性的必需的。 |
type |
string |
规定属性的值为字符串类型 |
|
decimal |
规定属性的值为小数类型 |
|
integer |
规定属性的值为整数类型 |
|
boolean |
规定属性的值为布尔型 |
|
date |
规定属性的值为日期类型,实现方式:YYYY-MM-DD |
|
time |
规定属性的值为时间类型,实现方式:HH:MM:SS |
$$元素type属性值集合链接