XML Schema (XSD) 学习总结,解读XML Schema(XSD)各个元素和属性的含义

云中君说:
学习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规定子元素能够以任意顺序出现,每个子元素可出现零次或一次。
annotationannotation 元素是一个顶层元素,规定 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 元素在父元素中可出现的最小次数。
abstractfalse指示元素是否可以在实例文档中使用。如果该值为 true,则元素不能出现在实例文档中。 相反,substitutionGroup 属性包含该元素的限定名 (QName) 的其他元素必须出现在该元素的位置。多个元素可以在其 substitutionGroup 属性中引用该元素。默认值是 false。
blockextension防止通过扩展派生的元素被用来替代该元素。
restriction防止通过限制派生的元素被用来替代该元素。
substitution防止通过替换派生的元素被用来替代该元素。
#all防止所有派生的元素被用来替代该元素。
finalextension防止通过扩展派生的元素被用来替代该元素
restriction防止通过限制派生的元素被用来替代该元素
#all防止所有派生的元素被用来替代该元素
formunqualified则无须通过命名空间前缀限定该元素。
qualified必须通过命名空间前缀限定该元素。
typestring规定元素的值为字符串类型
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自定义设置固定值,设置后不允许修改
formunqualified指示此属性无须由命名空间前缀限定,且无须匹配此属性的无冒号名称 (NCName),即本地名称。
qualified指示必须通过命名空间前缀和该属性的无冒号名称 (NCName) 来限定此属性。
useoptional属性是可选的并且可以具有任何值(默认)
prohibited不能使用属性。
required属性的必需的。
typestring规定属性的值为字符串类型
decimal规定属性的值为小数类型
integer规定属性的值为整数类型
boolean规定属性的值为布尔型
date规定属性的值为日期类型,实现方式:YYYY-MM-DD
time规定属性的值为时间类型,实现方式:HH:MM:SS

$$元素type属性值集合链接

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值