云中君说:
学习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有两个属性值:
- qualified
- unqualified
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属性值集合链接