文章目录
1、 XML
1.1 xml简介
xml全称为Extensible Markup Language,可扩展的标记语言。
类似于html语言,html语言用各种规定好的标签来封装文本数据。而不同的是html使用的标签html语言规定好的,每个标签都有自己特定的功能。
xml这门语言它没有定义任何的标记,而标记是由使用者自己来定义,但是由于标签名称以及属性名称都由用户自己来命名,导致别人在使用的时候很不方便。
所以给xml语言定义了一些约束文档,这些约束文档就专门用来约束当前这个xml中能够书写的具体的标签以及属性等信息。
1.2 xml作用
- 程序的配置文件(最常见)
主要配置一些具有复杂层级关系的数据 - 数据传输:
不同语言之间的数据交换 - 数据存储:
可以用作小型数据库
2、约束文件
基于以上的简介,由于xml的标签由用户自己定义,因此在开发的时候,每个人都可以根据自己的需求来定义xml标签,这样导致项目中的xml难以维护,因此需要使用一定的规范机制来约束xml文件中的标签书写。
而约束文件分为两类:
- DTD约束
DTD(Document Type Definition) - Schema约束
XSD (XML Schema Definition)
2.1 DTD约束
2.1.1 先自己定义一个xml文档:
<?xml version="1.0" encoding="UTF-8"?>
<users>
<user>
<name>zhangsan</name>
<age>23</age>
<addr>shanghai</addr>
</user>
<user>
<name>lisi</name>
<age>24</age>
<addr>beijing</addr>
</user>
</users>
2.1.2 书写DTD来约束xml文件
拓展名为dtd,在xml文件中有多少个标签,就在dtd中写多少个ELEMENT标签
<?xml version="1.0" encoding="UTF-8" ?>
<!ELEMENT users (user+) >
<!ELEMENT user (name,age,addr) >
<!ELEMENT name (#PCDATA) >
<!ELEMENT age (#PCDATA)>
<!ELEMENT addr (#PCDATA)>
2.1.3 引入DTD约束
DTD主要用来约束xml文件,DTD可以单独写在文件中(外部引入),也可以直接定义在xml中(内联),可以在xml中引入第三方的公共DTD。
-
内联方式:
在xml根标签中直接书写<!DOCTYPE 根标签名 [ 具体的标签的约束 ]>
<?xml version="1.0" encoding="UTF-8"?> <!DOCTYPE users[ <!ELEMENT users (user+) > <!ELEMENT user (name,age,addr) > <!ELEMENT name (#PCDATA) > <!ELEMENT age (#PCDATA) > <!ELEMENT addr (#PCDATA) > ]> <users> <user> <name>zhangsan</name> <age>23</age> <addr>shanghai</addr> </user> <user> <name>lisi</name> <age>24</age> <addr>beijing</addr> </user> </users>
-
外部DTD的引入方式:
外部DTD主要指的一个独立的DTD文件。
首先要书写DTD文件,然后在要被约束的xml文件中引入<!DOCTYPE 文档根结点 SYSTEM "DTD文件的URL">
- 文档根结点 指的是当前xml中的根标签。
- SYSTEM 引入的系统中存在文件
- “DTD文件的URL” DTD存放的位置
-
引入公共的DTD:
<!DOCTYPE 文档根结点 PUBLIC "DTD名称" "DTD文件的URL">
- 文档根结点 指的是当前xml中的根标签。
- PUBLIC 表示当前引入的DTD是公共的DTD
2.1.4 DTD语法
当定义DTD约束xml时候,这时需要在DTD中使用ELEMENT来定义当前xml中可以出现的标签名称。
- 格式:
约束来限定当前标签中可以有的子标签,或者当前标签中可以书写的内容<!ELEMENT 标签名 约束>
在定义标签名的时候,约束中可以使用一些符号标签具体出现次数?
零次或者一次*
零次或者多次+
一次或者多次
users (user+) 表示当前的users标签下可以有一个或者多个user标签,
用来限定当前的子标签出现的顺序
user (name,age,addr) user标签下只能有name age addr 子标签,并且必须按照name age addr的顺序书写|
二选一
user (name|age,addr) user下可以name或者age ,但必须有addr,并且addr必须name或age后面- #PCDATA
表明该元素可包含任何字符数据,但不能在其中包含任何子元素。只有 PCDATA 的元素通过圆括号中的 #PCDATA 进行声明 - EMPTY
表明该元素不能有任何子元素或文本,仅可以使用属性。 - ANY
表明该元素中可以包含任何DTD中定义的元素内容 如:<!ELEMENT note ANY> - <!ELEMENT age EMPTY >
2.2 Schema约束
Schema它也来约束xml文件的,DTD在约束xml的时候一个xml中只能引入一个DTD,同时DTD它无法对属性以及标签中的数据做数据类型的限定。
Schema它是用来代替DTD来约束xml。
Schema文件本身就是使用xml文件书写的,同时它对需要约束的xml中的数据有严格的限定。学习Schema主要来学习W3C组织定义的如何在Schema中去约束xml的标签以及属性,还有属性的数据类型,以及标签中子标签的顺序。
要定义一个Schema文件,这时它的扩展名必须是.xsd。在这个文件中根元素必须是schema。
使用Schema来约束xml,Schema在书写的时候,只需要使用W3C组织提前定义的限定标签的,以及限定的属性的那个标签即可。
2.2.1 书写xml文件
<?xml version="1.0" encoding="UTF-8"?>
<books>
<book>
<name>JavaWEB</name>
<author>老毕</author>
<price>182</price>
</book>
<book>
<name>SSH</name>
<author>老于</author>
<price>152</price>
</book>
</books>
2.2.2 定义schema文件
在定义Schema文件的时候,由于这个Schema文件本身就是xml,它也要受到别的约束。而这个约束是W3C组织提前定义好的,
在Schema文件中需要提前引入进来在根标签中使用属性进行进入:
<schema xmlns=“http://www.w3.org/2001/XMLSchema” 引入W3C定义的schema书写的规范
targetNamespace=“http://www.itcast.org/book”
给当前的Schema文件起名字(命名空间)
作用是当哪个xml要引入这个schema约束的时候,必须通过当前targetNamespace 后面书写的uri地址来引入
<?xml version="1.0" encoding="UTF-8"?>
<schema xmlns="http://www.w3.org/2001/XMLSchema"
targetNamespace="http://www.itcast.org/book"
elementFormDefault="qualified">
<element name="books">
<complexType>
<sequence>
<element name="book">
<complexType>
<sequence>
<element name="name"></element>
<element name="author"></element>
<element name="price"></element>
</sequence>
</complexType>
</element>
</sequence>
</complexType>
</element>
</schema>
2.2.3 在xml中引入schema文件
- 外联
-
编写根标签
<books>
-
引用约束地址
xsi:schemaLocation="默认空间 约束地址.xsd">
-
引用实例名称空间(固定)
在定义Schema文件的时候,由于这个Schema文件本身就是xml,它也要受到别的约束。而这个约束是W3C组织提前定义好的,
在Schema文件中需要提前引入进来在根标签中使用属性进行进入:xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
-
默认名称空间
xmlns="http://www.itcast.org/book"
<books xmlns="http://www.itcast.org/book" xsi:schemaLocation="http://www.itcast.org/book book.xsd" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" >
-