xml约束:
一、概念:
由于xml文件是可扩展的,且里面的标签可以自定义的,只要符合xml的最基本要求,那么就可以写一个xml文件。但是在实际应用中,我们需要针对某一个特定的应用,给xml中引入一下语法,这些语法用来检测特定应用的xml文件编写是否正确。
例如mybatis中使用的DTD约束,spring中使用的shema约束。
作用:
规定xml文档的书写规则
二、dtd约束:
1.概念:
DTD(Document Type Definition),全称为文档类型定义。一种简单的约束技术,功能单一
2.dtd文件的语法:
(1)定义元素(标签)
格式:<!ELEMENT 元素名称 (元素内容)>
元素内容的三种定义:
EMPTY | 内容只能为空 |
(#PCDATA) | 普通文本,不能写标签。 |
ANY | 是任何内容。 |
(2)定义子元素(子标签)
格式:<!ELEMENT 元素名称 (子元素名称 1,子元素名称 2,.....)>
注意:
若子元素用逗号分开,说明须按照声明顺序从左到右编写XML文档。
如果子元素用“|”分开,说明任选其一
用+、*、?来表示元素出现的次数,默认是1次;
(3)定义属性
格式:<!ATTLIST 元素名称 属性名称 属性类型 默认值>
属性类型:
CDATA | 值为字符数据 (character data) |
(en1|en2|..) | 此值是枚举列表中的一个值 |
ID | 值为唯一的 id(属性值不能是“”或有相同的值) |
默认值:
#REQUIRED | 属性值是必需的 |
#IMPLIED | 属性不是必需的 |
#FIXED value | 属性值是固定的 |
例子:
注意:dtd文档必须用utf-8编码格式保存
3.引入dtd文档到xml文档中
(1)内部dtd
例子:DTD约束和xml写在一个文件中。
(2)外部dtd
1).引用本地的DTD文档时:
格式:<!DOCTYPE 根元素 SYSTEM "dtd文件的位置"> ,其中,SYSTEM :本地文件系统
例子:
2).引用公共网络上的DTD文档时:
格式:<!DOCTYPE 根元素 PUBLIC "DTD文件名字" "DTD文件网络文件位置的url">
三、schema约束:
1.概念:
一种复杂的约束技术, 一个标识,标识一个xml文档被哪个Schema文档约束
通过schema来解决DTD的不足,dtd里面有PCDATA类型,但是在schema里面可以支持更多的数据类型,比如 年龄只能是整数,在schema可以直接定义一个整数类型,schema语法更加复杂,schema目前不能替代dtd
2.优点:
XML Schema符合XML语法结构。
DOM、SAX等XML API很容易解析出XML Schema文档中的内容。
XML Schema对名称空间支持得非常好。
XML Schema比XML DTD支持更多的数据类型,并支持用户自定义新的数据类型。
XML Schema定义约束的能力非常强大,可以对XML实例文档作出细致的语义限制。
XML Schema不能像DTD一样定义实体,比DTD更复杂,但XML Schema现在已是w3c组织的标准,它正逐步取代DTD。
3.定义schema文档:
例子:声明schema根元素并定义元素;
注意:
在schema中, 每个约束模式文档都可以被赋予一个唯一的使用URI标识的名称空间,
XML文件引用schema约束的时候, 便是通过这个名称空间来声明来自哪个shema约束文档的.
在xsd文档中, 至少要包括shema根元素和xml模式命名空间的定义, 元素定义等
4.引入schema约束:
在新建的xml文档中加入声明后, 引入schema的约束文档
1.首先声明约束来自哪个名称空间, 使用xmlns="" 来指定,
2.引入的名称空间和哪个xsd文件对应,
使用schemaLocation="" 来指定, 第一个为名称空间, 第二个为xsd文件路径.
例子: