什么是XML
XML全称:eXtensible Markup Language 可扩展标记语言
可扩展:XML所有标记(标签)都是自定义的,都是通过扩展得来的。
标记语言:整个文件由各种标签(元素)组成。
XML作用
- 数据交换:不同的,计算机语言之间,不同的操作系统之间,不同的数据库之间进行数据交换
- 配置文件:用于各种框架的配置文件
XML由七种组成元素构成
- 文档的声明
- 元素Element
- 属性Attribute
- 注释Comment
- 实体字符,例如:<;>;相当于<号 和 >号
- 字符数据区
- 处理指令
文档声明的三个属性
- version:指定XML文档使用的版本号,取值是"1.0"
- encoding:文档使用的字符集,默认是"uft-8"
- standalone:很少使用,是否是一个单独的XML文件,取值是true或false。默认是true
tips:
- 一个XML只能有1个根元素
- XML标签命名不能有空格和冒号
格式良好的XML有以下特点
- 必须以XML声明开头
- 必须拥有唯一的根元素
- 开始标签必须与结束标签相匹配
- 元素对大小写敏感
- 所有的元素必须关闭
- 所有的元素必须正确地嵌套
- 特殊字符必须使用实体字符或使用字符数据区
xml文件:
<?xml version="1.0" encoding="UTF-8"?>
<contactList>
<contact id="1">
<name>潘金莲</name>
<gender>女</gender>
<email>panpan@itcast.cn</email>
</contact>
<contact>
<name>武松</name>
<gender>男</gender>
<email>wusong@itcast.cn</email>
</contact>
<contact id="3">
<name>武大狼</name>
<gender>男</gender>
<email>wuda@itcast.cn</email>
</contact>
</contactList>
XML的两种约束
- DTD约束文件
DTD:Document Type Definition 文档类型定义,DTD文件是一个纯文本文件 - Schema约束文件
为什么要有约束
因为XML文件的标签和属性可以随意扩展,有时我们必须要限制每个文档有哪些元素,每个元素有哪些子元素,每个元素有哪些属性,属性的值是什么类型等。从而保证XML文档格式和数据的正确性。
导入DTD文件的两种格式
<!DOCTYPE 根元素 SYSTEM “DTD文件”>用于本地,公司内部,小范围使用DTD文件
<!DOCTYPE 根元素 PUBLIC “文件描述” “DTD文件”>广泛使用的,在互联网上通常的DTD文件
bookshelf.dtd文件内容如下:
<!ELEMENT 书架 (书+)>
<!ELEMENT 书 (书名,作者,售价)>
<!ELEMENT 书名 (#PCDATA)>
<!ELEMENT 作者 (#PCDATA)>
<!ELEMENT 售价 (#PCDATA)>
books.xml代码如下:
<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE 书架 SYSTEM "bookshelf.dtd"><!--导入dtd约束文件-->
<书架>
<书>
<书名>人鬼情喂鸟</书名>
<作者>小柳</作者>
<售价>25</售价>
</书>
<书>
<书名>Java神书</书名>
<作者>小李</作者>
<售价>45</售价>
</书>
</书架>
为什么要有Schema约束
DTD的不足:
- 不能检查元素的数据类型
- 因为本身是一个纯文本,如果本身有错误,也不容易找出问题所在。
约束文件扩展名(XML Schema Definition)XML模式定义:xsd
约束文件本身也是XML文件,所以也有根元素,根元素的名字叫:schema
备注:一个xml文件可以有多个xsd约束文件
xsd文件内容解析
<?xml version="1.0" encoding="UTF-8" ?>
<!--xs:前缀,因为一个xml文件可以引入多个约束文件约束自己,为了区分到底是使用的哪个约束文件的标签-->
<!--http://www.w3.org/2001/XMLSchema:固定写法,引用命名空间,官方制作xsd约束-->
<!--targetNamespace="http://www.itcast.cn":命名空间,给被约束文件使用的-->
<xs:schema xmlns:xs="http://www.w3.org/2001/XMLSchema"
targetNamespace="http://www.itcast.cn"
elementFormDefault="qualified">
<xs:element name='书架'>
<xs:complexType>
<xs:sequence maxOccurs='unbounded'>
<xs:element name='书'>
<xs:complexType>
<xs:sequence>
<xs:element name='书名' type='xs:string'/>
<xs:element name='作者' type='xs:string'/>
<xs:element name='售价' type='xs:double'/>
</xs:sequence>
</xs:complexType>
</xs:element>
</xs:sequence>
</xs:complexType>
</xs:element>
</xs:schema>
books2.xml使用schema约束文件:
<?xml version="1.0" encoding="UTF-8" ?>
<!--xmlns:xsi固定写法,表示这是一个实例文档-->
<书架 xmlns="http://www.itcast.cn" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xsi:schemaLocation="http://www.itcast.cn bookshelf.xsd">
<书>
<书名>Java</书名>
<作者>张三</作者>
<售价>38.6</售价>
</书>
<书>
<书名>朗读的技巧</书名>
<作者>李四</作者>
<售价>50</售价>
</书>
</书架>
Schema约束相比DTD的优点?
- 可以检查数据类型
- 本身也是XML文件,可以被官方约束
- 功能上更强大,以后会淘汰DTD约束