xml的概念与作用?
概念:可扩展标记语言。(用于数据访问层,数据的存储)
扩展:所有的标记都是自定义的,由程序员自己去扩展。
标记语言:整个文件由标记组成。
一、作用:
- 用于数据交换:可以用于不同的语言或不同的系统之间进行数据的交换。
- 配置文件:用于框架或工具的配置文件(主要使用的功能)
二、注意事项
- xml严格区分大小写
- 语法非常严谨,只要有错误,解析器就不能解析。
xml的组成
XML文件一共由7个组成元素构成:
- 文档声明 Document Declare
- 元素 Element
- 属性 Attribute
- 注释 Comment
- 实体字符 Entity Character
- 字符数据区 Character Data
- 处理指令 Process Instruction
主要介绍一下 文档声明,实体字符,字符数据区。
一、文档声明
格式: <?xml 开头 ?>结尾
位置:必须出现在第一行第一列,不然会报错。
version:使用的版本号
encoding:XML使用字符集,如果省略,默认是utf-8
二、实体字符
实体字符的应用:
1.错误写法:
<sql>
select * from employee where id >3
</sql>
2.正确写法:
<sql>
select * from employee where id >;3
</sql>
三、字符数据区
作用:如果出现了大量需要转义的字符,又不想使用实体字符,可以使用字符数据区CDATA,字符数据区中的数据不由解析器来解析,都做为纯文本来使用。
格式:<![CDATA[ 开头 ]]>结尾
字符数据区
<sql>
<![CDATA[
select * from employee where id>3
]]>
</sql>
一个格式良好的XML有以下特点
- 必须以XML声明开头
- 必须拥有唯一的根元素
- 开始标签必须与结束标签相匹配
- 元素对大小写敏感
- 所有的元素必须关闭
- 所有的元素必须正确地嵌套
- 特殊字符必须使用实体字符
四、xml文件的约束
XML文件约束作用:用来约束XML的数据,一个XML文件中能够出现哪些标签。每个标签中能够出现哪些子标签,每个标签能够有哪些属性。每个标签的主体内容可以出现哪些。
两种XML约束
1.DTD约束
2.Schema约束
4.1DTD约束
DTD:文件类型定义
作用: 用来约束XML文档,保证XML文件正确性和数据的有效性。
DTD的使用
book.dtd文件代码如下:
<!ELEMENT 书架 (书+)>
<!ELEMENT 书 (书名,作者,售价)>
<!ELEMENT 书名 (#PCDATA)>
<!ELEMENT 作者 (#PCDATA)>
<!ELEMENT 售价 (#PCDATA)>
books.xml文件代码如下:
<?xml version="1.0" encoding="UTF-8" ?>
<!--引入dtd约束文件-->
<!DOCTYPE 书架 SYSTEM "book.dtd">
<书架>
<书>
<书名>斗破苍穹</书名>
<作者>天蚕土豆</作者>
<售价>30</售价>
</书>
<书>
<书名>斗罗大陆</书名>
<作者>唐家三少</作者>
<售价>38</售价>
</书>
</书架>
4.2 Schema约束
Schema:是一种用来代替DTD约束的新的方式,功能上比DTD更加强大,可以验证数据类型。本身还是一个XML文件。
扩展名:xsd —— XML Schema Document
Schema使用的重要原因:
1.Schema能验证数据类型
2. 因为DTD是一个普通的文本文件,如果DTD本身有错误,也不容易查找出来。
bookshelf.xsd文件代码如下:
<?xml version="1.0" encoding="UTF-8" ?>
<xs:schema xmlns:xs="http://www.w3.org/2001/XMLSchema"
targetNamespace="http://www.baidu.com">
<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>
targetNamespace表示命名空间,我们使用xsd约束的时候,用来引入到XML文件中!!
命名空间的含义与作用:
- 如果有多个约束文件中有相同的标签,使用不同的前缀来区分,引入不同的xsd中约束。
- 类似于Java中包
- 如果没有前缀的约束,称为默认命名空间
schema约束文件bookshelf.xsd的语法
bookshelf.xsd文件代码
<?xml version="1.0" encoding="UTF-8" ?>
<书架 xmlns="http://www.baidu.com"
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xsi:schemaLocation="http://www.baidu.com bookshelf.xsd">
<书>
<书名>斗破苍穹</书名><!--这里就只能输入String类型的数字,因为xsd文件定义了数据类型-->
<作者>天蚕土豆</作者><!--这里就只能输入String类型的字符串,因为xsd文件定义了数据类型-->
<售价>30</售价><!--这里就只能输入double类型的数字,因为xsd文件定义了数据类型-->
</书>
<书>
<书名>斗罗大陆</书名>
<作者>唐家三少</作者>
<售价>30</售价>
</书>
</书架>