理解有效的XML文件Schema

 

引言:
XML(可扩展标记语言)作为一种常用的数据交换格式,在许多应用程序中被广泛使用。为了确保XML文件的有效性和一致性,常常采用XML Schema来定义XML文件的结构和规则。本博客将介绍XML文件Schema的概念、结构及其在有效XML文件中的作用,帮助读者更好地理解和使用XML Schema。

内容概要:

1. 什么是XML Schema?
   - 对XML文件进行约束和验证的一种技术。
   - 使用XML Schema定义XML文件的结构、元素类型和属性。
   - 基于XML Schema可以检查XML文件是否符合预期的结构和规则。

2. XML Schema的结构:
   - 命名空间声明和引用。
   - 元素声明和约束。
   - 属性声明和约束。
   - 数据类型定义和限制。

3. 命名空间声明和引用:
   - 解决XML文件中元素名称和属性名的冲突问题。
   - 使用命名空间可以将相关的元素和属性分组,并避免命名冲突。
   -引用元素是利用element标记符的ref属性实现的。
语法:
<xsd:element name="user" type="xsd:string" />
<xsd:sequence>
    <xsd:element ref="user" /> <!--当前元素就是user元素-->
</xsd:sequence>
4. 元素声明和约束:
   - 定义XML文件中允许的元素及其嵌套关系。
   - 可以设置元素的最小和最大出现次数、必需性以及其他限制。
   -XSD中元素是利用element标识符来声明,在上面的示例中name属性是元素的名字,type属性是元素值的类型,可以使XML Schema中内置的数据类型或其他类型。
全部元素如下:
元素    说明
name    元素的名称
type    元素值的类型
minOccurs    该元素在父元素中最少出现的次数(默认为1,必须大于等于0)
maxOccurs    该元素在父元素中最多出现的次数(默认为1,必须大于等于0),当设置为unbounded表示不限制


5. 属性声明和约束:
   - 定义XML文件中元素允许的属性及其限制。
   - 可以设置属性的数据类型、是否必需以及其他约束。
#定义属性
  在XML Schema文档中可以按照定义元素的方法定义属性,但受限制程度较高。可以应用在attribute元素定义中的属性如下表所示。
属性    含义
defalt    初始默认值
fixed    不能修改和覆盖的固定属性值
name    属性的名称
ref    对前一个属性定义的引用
type    该属性的XSD类型或者简单类型
use    如何使用属性 optional(可选属性,即属性不是必须的,默认是这个)、prohibited(禁止使用)或者required(强制必须)。
form    确定attributeFormDefault的本地址
id    模式文档中属性唯一的ID
#创建属性
语法如下:
<xsd:attribute name="age" type="xsd:integer" />
复制
该语句定义了一个名为age的属性,它的值必须为整数。把它添加到模式中时,它必须是schema元素,complexType元素或者attributeGroup元素的子元素。
代码示例:
<xsd:element name="name">
<xsd:complexType>
<xsd:sequence>
<xsd:element name="first" type="xsd:string" />
</xsd:sequence>
<xsd:attribute name="age" type="xsd:integer" use="optional" /> <!--将属性添加到元素name属性中-->
</xsd:complexType>
</xsd:element>

6. 数据类型定义和限制:
   - 定义XML文件中属性或元素的数据类型。
   - 支持常见的数据类型,如字符串、整数、浮点数等。
   - 可以设置数据的取值范围、格式要求等。
##Schema基本数据类型
Schema的基本数据类型如下:
数据类型    说明
boolean    true/false
datetime    格式:CCYY-MM-DDThh:mm:ss
decimal    任意精度的十进制数字
string    字符串数据
int    整型
nonNegativeInteger    大于或等于0的整型
nonPositiveInteger    小于或等于0的整型
short    短整型 -32768到32767
##约束
内置的数据类型功能虽然已经有一定的限制功能,但是还是远远不足够的,更进一步的约束还是来看看约束。
约束    说明
enumeration    用空格分开的一组指定的数值,它把数据类型约束为指定的值
fractionDigit    指定小数点后的最大位数
length    长度单位
minExclusive    下限值
maxExclusive    上限值
minLength    最小长度单位
maxLength    最大长度单位
minInclusive    最小值,所有的值都应该大于或等于该值
maxInclusive    最大值,所有的值都应该小于或等于该值
pattern    数据类型的值必须匹配的指定模式,必须是一个正则表达式
totalDigits    指定小数最大位数的值
whiteSpace    其值为preserve(值中的空格不能改变)、replace(所有的制表符、换行符、回车符都用空格代替)、collapse(执行replace,删除相邻的、结尾处和开头处的空格)。
要使用上面约束表的约束,就要利用元素restriction。这个元素中有两个属性:ID属性是模式文档中restriction元素的位置标识符;base属性设置为一个内置的XSD数据类型或者现有的简单类型定义,它是一种被限制的类型。
示例:将一个整数的取值范围设置为1~100之间。
<xsd:restriction base="xsd:int">
<xsd:minInclusive value="1" />
<xsd:maxInclusive value="100" />
</xsd:restriction>
复制
##简单类型
简单类型是对一个节点的可能值进一步限制的自定义数据类型。创建简单类型需要利用simpleType元素,其定义如下:
<simpleType id="ID" name="NCName" final="(#all|((list|union|restriction)))" />
复制
ID属性应唯一地标明文档内的simpleType元素,name不能使用冒号字符。simpleType不能包含元素,也不能有属性,它基本上是一个值,或者是一个值的集合。
例如:
<xsd:simpleType name="USState">
<xsd:restriction base="xsd:string">
<xsd:enumeration value="AK">
<xsd:enumeration value="AL">
<xsd:enumeration value="AR">
</xsd:restriction>
</xsd:simpleType>
<xsd:element name="statement" type="USState" />
复制
以上文档对应有效的xml文档如下:
<statement>AK</statement>
复制
注意取值只能够为AK、AR、AL中的一个。
##列表类型
list可以用来定义列表类型。
<xsd:simpleType name="listOfIntType">
<xsd:list itemType="Integer"/>
</xsd:simpleType>
<xsd:element name="listOfMyInt" type="listOfType"/>
复制
listIfIntType这个类型被定义为一个Integet的列表,元素listOfMyInt的值可以是几个整数,他们之间用空格分开。
有效的xml文档如下:
<listOfMyInt>1 2 3 123</listOfMyInt>
复制
##联合类型
union可以用来定义一个联合类型。例如:
<xsd:simpleType name="zipUnion">
<xsd:union memberTypes="USState listOfMyIntType"/>
</xsd:simpleType>
<xsd:element name="zips" type="zipUnion"/>
复制
用union来定义一个联合类型,里面的成员类型保罗USState和listOfMyIntType,应用了联合类型的元素的值可以是这些原子类型或列表类型中的一个类型的示例,但是一个元素实例不能同时包含两个类型。
有效的XML文档如下:
<zips>CA</zips>
<zips>9192 192391 129</zips>
<zips>AK</zips>
复制
无效的XML文档如下:
<zips>AL 2231</zips>
复制
同时包含两个是错误的。
##匿名类型
前面定义元素类型的时候总是先定义一个数据类型,然后再把元素的type设成新定义的数据类型。如果这个新的数据类型只会用一次,我们就可以直接设置在元素定义里面,而不用另外来设置。
例如:
<xsd:element name="quantity">
<xsd:simpleType>
<xsd:restriction base="xsd:positiveInteger">
   <xsd:maxExclusive value="100"/>
</xsd:restriction>
</xsd:simpleType>
</xsd:element>
复制
元素quantity的类型就是一个从1~99的整数。对于这种没有用type引入,直接定义在element元素里面的类型,我们称之为匿名类型。
##复杂类型
复杂类型的定义必须使用complexType元素,在这里可以包含属性和元素。在复杂类型的使用中,主要是complexType和simpleType配合使用。
##内容模型
内容模型可以对在XML文档内使用的元素、属性和类型进行限制,确定用户可以再XML实例的那些等级添加自己的元素和属性。

7. 使用XML Schema进行有效性验证:
   - 将XML文件与对应的XML Schema进行验证,以确保XML文件的有效性和一致性。
   - 常用的工具和库,如XSD、libxml等。

结论:
XML Schema作为一种强大的工具,可以帮助开发人员定义和验证XML文件的结构和规则。通过使用XML Schema,可以确保XML文件的有效性,并提供更详细的约束和限制。了解XML Schema的概念和使用方法,对于在XML数据交换和处理中起到至关重要的作用。

 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值