一、XML
XML是什么:
(就是一个文件,以XML为扩展名,用于关系描述或者数据传输,下面主要说XML的7个组成元素)
英文:XML eXtensible Markup Language 可扩展标记语言
用于配置文件,传递数据。
- 可拓展: 标签名可以自定义。
- 标记: 标签,这门语言由标签构成。
XML特点:
- 区分大小写,< abc>或< ABC>是不同的两个标签,
- 语法严谨,标签开头和结尾必须严格配对
- 所有的标签都是人为创造的,可以扩展。
XML有什么用:
- 可以把数据之间的关系描述清楚(所以用于各种组件或框架配置文件 , 比如:c3p0)
- 可以用于不同系统的数据传输.
创建:
XML文件组成:
XML文件一共由7个组成元素构成:
1. 文档声明(<?xml version="1.0" encoding="UTF-8" ?>)
2. 标签元素 Element(< person>)
3. 属性 Attribute(< person id=“110”>)
4. 注释 Comment(<!–注释内容–>)
5. 转义字符(实体字符)( )
6. 字符数据区(用于显示大量的特殊字符的时候)( <![CDATA[ 文本数据 ]]>)
7. 处理指令(不常用)(<?xml-stylesheet type="text/css" href="文件名.css"?>给XML设置CSS样式)
1.文档声明:
声明: | <?xml version="1.0" encoding="UTF-8" ?> |
---|---|
格式: | 以<?xml 开头 以?>结尾 |
位置: | 必须出现在XML文件的第1行,注释放第一行也不行 |
声明的三个属性:
文档声明的三个属性 | 说明 |
---|---|
version | 用于指定XML使用哪个版本,固定的写法1.0 |
enconding | 指定当前XML编码 |
standalone | yes/no 默认是yes,这个XML文件是否是一个单独的文档 |
2.标签元素Element:
如:< person> 又称为标签 |
---|
语法:<开头 >结尾, 中间是标签名 |
主体部分:分为有主体和无主体标签,主体部分可以包含文本或其它的子元素 |
空元素:无主体标签也必须要关闭。如:< br/> |
大小写: 标签名字是区分大小写 |
命名不能有空格,不能有冒号,数字不能开头 |
根元素:每个XML文档必须有一个根元素,而且只能有一个根元素。 |
- 属性Attribute:
如:< person id=“110”> |
---|
属性位置:必须放在开始标签中 |
属性的值必须使用单引号或双引号引起来 |
在同一个标签中不能同时出现多个同名的属性 |
命名中不能出现空格和冒号 |
4.注释Comment
<!–注释内容–> 与HTML的注释格式相同 |
---|
嵌套: 不可以嵌套 |
- 转义字符
- XML中的转义字符与HTML一样。因为很多符号已经被文档结构所使用,所以在元素体或属性值中想使用这些符号就必须使用转义字符(也叫实体字符)
- 所有的转义字符以&开头,以;结尾
说明 | 字符 | 转义字符 |
---|---|---|
小于 | < | < |
大于 | > | > |
双引号 | " | " |
单引号 | ’ | ' |
与符号 | & | & |
空格 | |
转义字符应用示例:
- 需求:有一个标签,中间包含sql语句,查询所有年龄小于20岁的学生。
- 错误的写法:出现无效的标签名
<sql>
select * from student where age < 20
</sql>
- 正确的写法:
<sql>
select * from student where age < 20
</sql>
6.字符数据区CDATA
字符区的内容xml文件的解释器在解释的时候,全部的内容都会当成普通的文本处理,即使遇到了特殊的符号也会只当成普通的文本去处理。
<![CDATA[ 文本数据 ]]> |
---|
不由 XML 解析器进行解析的纯文本数据(Unparsed Character Data) |
格式:<![CDATA[ 开头 字符数据 ]]>结尾 |
嵌套:不可以嵌套 |
7.处理指令
<?xml-stylesheet type="text/css" href="文件名.css"?> |
---|
可以给XML文件设置CSS样式,让它在浏览器上以指定样式来显示,使用比较少。 |
格式: <?xml-stylesheet 开头 ?> 结尾 |
作用:处理指令,简称PI(Processing instruction)用来指挥解析引擎如何解析XML文档内容 |
处理指令示例:
<?xml version="1.0" encoding="utf-8" ?>
<?xml-stylesheet type="text/css" href="person.css" ?>
<person>
<!--年龄-->
<age>20</age>
<!--姓名-->
<name>张三</name>
<sex/>
<!--描述-->
<description>
<![CDATA[我非常喜欢阅读,阅读过<<java编程思想>>、<<大型企业网站架构>>]]>
</description>
</person>
- 有样式文件person.css文件,内容如下:
- 操作person.xml文档应用person.css样式文件
description{
color:blue;
font-size: 30px;
font-family: 楷体;
}
使用浏览器浏览效果如下:
二、XML文件的约束
XML文件的约束是什么:
(就是一个文件以一个规范限制XML文件的元素)
因为XML是可扩展标记语言,可以写任意标记,所以我们需要对XML进行一些约束,让它只能出现哪些元素。限制xml文件出现的元素范围的一种约束文件。某些元素下面只能出现哪些子元素,甚至可以指定某些元素的数据类型。从而保证XML文件数据正确性和有效性。
为什么需要XML约束:
xml文件本身是可以定义任意的元素的,但是有些元素不合适在某个xml文件中,xml文件的约束技术去限制xml文件出现的元素范围。
xml文件的约束技术类别:
DTD约束和Schema约束
1.DTD约束
DTD是什么:
(以dtd为扩展名的文件,XML上面的元素只能按它上面的规定出现)
- DTD:Document Type Definition 文档类型定义
- 作用: 用来约束XML文件的,它本身是一个文本文件,扩展名为dtd
DTD的使用案例:
步骤1:
新建bookshelf.dtd文件,选择项目鼠标右键“NEW->File",文件名 为“bookshelf.dtd”
步骤2:
bookshelf.dtd文件内容如下:
- 关于此DTD文件的解释:
- 根元素是书架,包含1个或多个书子元素
- 书这个子元素包含三个子元素(书名,作者,售价)
- 书名包含文本,作者包含文本,售价包含文本
<!ELEMENT 书架 (书+)>
<!ELEMENT 书 (书名,作者,售价)>
<!ELEMENT 书名 (#PCDATA)>
<!ELEMENT 作者 (#PCDATA)>
<!ELEMENT 售价 (#PCDATA)>
步骤3:
新建books.xml,代码如下:
<?xml version="1.0" encoding="UTF-8" ?>
//导入dtd文件
<!DOCTYPE 书架 SYSTEM "book.dtd">
<书架>
<书>
<书名>三国演义</书名>
<作者>罗贯中</作者>
<售价>12</售价>
</书>
</书架>
导入DTD文件的格式 | 说明 |
---|---|
(<!DOCTYPE 根元素 SYSTEM “DTD文件”> ) | 系统的DTD文件,使用范围比较小,一般用于公司,不对外开放的DTD文件 |
<!DOCTYPE 根元素 PUBLIC “DTD文件”> | 公共的DTD文件,用于互联网上,使用广泛的用途 |
(<!DOCTYPE 根元素 [dtd文件的元素]>) | xml文件与dtd文件混合在一起。 |
IDEA开发工具books.xml的dtd约束验证不通过的效果如下:
2.Schema约束
Schema是什么:
- Schema 即 XSD(XML Schema Definition)比DTD强大,是DTD代替者
- 本身也是XML文档,但Schema文档扩展名为xsd,而不是xml
- Schema 功能更强大,数据类型约束更完善
为什么Schema约束取代DTD:
因为DTD 不能判断XML中数据的类型,功能上比较简单。使用Schema约束慢慢的会代替DTD约束
如下图的售价为abc也不会报错:
Schema的演示案例
步骤1:
新建schema约束文件bookshelf.xsd,对售价约束数据类型,代码如下:
- 关于此xsd文件的解释:
- 根元素是书架
- 书架中的子元素书,可以出现多次
- 书中依次出现三个子元素:书名,作者,售价
- 可以指定每个子元素的数据类型
- 其中targetNamespace表示约束文件的命名空间
<?xml version="1.0" encoding="UTF-8" ?>
<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>
名称空间: 任何schema文件都有一个名称空间,schema名称空间是一个xsd文件的唯一标记。
相当于一个id号,引入的时候必须要使用名称空间进行引入
步骤2:
新建books2.xml使用schema约束文件bookshelf.xsd,代码如下:
- 命名空间:targetNamespace=“http://www.itcast.cn”
xsd约束文件名:book.xsd- 语法: <根元素 xmlns= “命名空间”\xmlns:xsi=“http://www.w3.org/2001/XMLSchema-instance"xsi:schemaLocation="命名空间 xsd约束文件名”></根元素>
代码如下:
<书架 xmlns="http://www.itcast.cn" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="http://www.itcast.cn book.xsd">
<书>
<书名>xx</书名>
<作者>12</作者>
<售价>1</售价>
</书>
</书架>
步骤3:
开发工具提示效果: