JavaWeb(二) - - - XML

1. XML基础

1.1 什么是XML

XML是Extensible Markup Language的缩写,它是一种类似于HTML的标记语言,称为可扩展标记语言。指的是用户可以按照XML规则自定义标记。

<?xml version="1.0" encoding="UTF-8" ?>
<中国>
		<河北>
			<城市>张家口</城市>
			<城市>石家庄</城市>
		</河北>
		<山西>
			<城市>太原</城市>
			<城市>大同</城市>
		</山西>
</中国>

xml实例

1.2 XML与HTML的比较

  1. 设计目标。HTML被设计出是用来显示数据的,XML被设计出是为了传输和存储数据。XML实现了数据的平台无关性。
  2. 是否区分大小写。HTML不区分大小写,而XML是严格区分大小写的。
  3. 根元素。HTML可以有多个根元素,而格式良好的XML有且只能有一个根元素。
  4. 空格处理。HTML中,空格是自动过滤的,而XML中空格则不会自动删除。
  5. 标记的定义。HTML中的标记是预定义的,而XML中的标记可以根据需要自己定义,并且可扩展。

1.3 XML的应用

  1. 不同系统间传输数据(现在主要是使用json);
  2. 表示生活中的一些关系,尤其是一对多的关系;
  3. 作为系统的配置文件存储数据。存储键值对的映射关系。

1.4 XML的语法

1.4.1 文档声明

在一个完整的XML文档中,必须包含一个XML文档的声明,并且该声明位于文档的第一行。这个声明表示该文档是一个XML文档,以及遵循哪个XML版本的规范。

<?xml 版本信息[编码信息][文档独立性信息] ?>

文档声明以符号 “<?" 开头,以符号 “?>” 结束,中间可以声明版本信息,编码信息以及文档独立性信息。需要注意的是,在 “<” 和 “?” 之间, “?” 和 “>” 之间以及第一个 “?” 和 xml 之间不能有空格;另外,中括号 [ ] 括起来的部分是可选的。
实例代码如下所示:

<?xml version="1.0" encoding="UTF-8" ?>

1.4.2 元素定义

在XML文档中,主体内容都是由元素(Element)组成的。元素一般是由开始标记、属性、元素内容和结束标记构成。

	<城市 人口="200万">北京</城市>

在一个元素中可以嵌套若干子元素。如果一个元素没有嵌套在其它元素内,则这个元素称为根元素。根元素是XML文档定义的第一个元素。如果一个元素中没有嵌套子元素,也没有包含文本内容,则这样的元素称为空元素,空元素可以不使用结束标记,但必须在起始标记的 “>” 前增加一个正斜杠 “/” 来说明该元素是个空元素。
例如:

	<img></img> 可以简写成 <img />

1.4.3 属性定义

在XML文档中,可以为元素定义属性。属性是对元素的进一步描述和说明。在一个元素中,可以有多个属性,并且每个属性都有自己的名称和取值。

	<售价 单位="">68</售价>

1.4.4 注释

 	<!--注释信息-->

2. DTD约束

  • 对XML文档进行约束时,需要遵循一定的语法规则,这种语法规则就形成了XML约束语言。目前,最常用的两种约束语言是DTD约束和Schema约束。

2.1 简介

DTD约束是早期出现的一种XML约束模式语言,根据它的语法创建的文件称为DTD文件。在一个DTD文件中,可以包含元素的定义、元素之间关系的定义、元素属性的定义以及实体和符号的定义。

	<!ELEMENT 书架 (书+)> <!--根元素 子元素出现一次或多次-->
	<!ELEMENT  (书名,作者,售价)> <!--子元素有三个-->
	<!ELEMENT 书名 (#PCDATA)> <!--普通的字符串-->
	<!ELEMENT 作者 (#PCDATA)>
	<!ELEMENT 售价 (#PCDATA)>
	<!ATTLIST 
		 编号 ID #REQUIRED> <!--书加了编号属性,并必须有编号-->
  • 定义元素的属性时,有四种设置说明:
    #REQUIRED:表示该属性必须出现;
    #IMPLIED:属性可有可无;
    #FIXED:表示属性的取值为一个固定值, 语法:#FIXED “固定值”;
    直接值:表示属性的取值为该默认值。

2.2 DTD的引入

2.2.1 引入外部DTD文件

  • 文档定义放在XML文件的第一行,引入语句放在XML文件的第二行。
2.2.1.1 引入本地DTD文件
<!DOCTYPE 根元素名称 SYSTEM "外部DTD文件的URI">

此处的URI是相对于XML文档的相对路径,也可以是一个绝对路径。
实例:

<!DOCTYPE 书架 SYSTEM "book.dtd">
2.2.1.2 引入公共的DTD文件
<!DOCTYPE 根元素名称 PUBLIC "DTD名称" "外部DTD文件的URI">

此处的URI是Internet上的一个绝对URL地址。
DTD名称:它用于说明DTD符合的标准、所有者的名称以及对DTD描述的文件进行说明。
实例:

<!DOCTYPE web-appp PUBLIC 
 "-//Sun Microsystems, Inc.//DTD Web Application 2.3//EN" 
  "http://java.sun.com/dtd/web-app_2_3.dtd">

2.2.2 DTD文档的内嵌式引入

在XML中直接嵌入DTD定义语句的完整语法格式如下所示:

<?xml version="1.0" encoding="UTF-8" standalone="yes"?> <!--XML文档独立-->
<!DOCTYPE 根元素名 [
 DTD定义语句
 ……
 ]>

实例:

<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE 书架 [
<!ELEMENT 书架 (书+)>
<!ELEMENT  (书名,作者,售价)>
<!ELEMENT 书名 (#PCDATA)>
<!ELEMENT 作者 (#PCDATA)>
<!ELEMENT 售价 (#PCDATA)>]>
<书架>
	<>
		<书名>Java</书名>
		<作者>XXX</作者>
		<售价>30.00</售价>
	</>
	<>
		<书名>Java2</书名>
		<作者>XXX2</作者>
		<售价>31.00</售价>
	</>
</书架>

3. Schema约束

3.1 什么是Schema约束

  • 同DTD一样,XML Schema也是一种用于定义和描述XML文档结构与内容的模式语言,它的出现克服了DTD的局限性。
  1. DTD采用的是非XML语法格式,缺乏对文档结构、元素、数据类型等全面的描述。而XML Schema采用的是XML语法格式,而且它本身也是一种XML文档,因此,XML Schema语法格式比DTD更好理解。
  2. XML有非常高的合法性要求,DTD本身合法性的验证必须采用另外一套机制,而XML Schema则采用与XML文档相同的合法性验证机制。
  3. XML Schema对名称空间支持得非常好,而DTD几乎不支持名称空间。
  4. DTD支持的数据类型非常有限。而XML Schema比XML DTD支持更多的数据类型,包括用户自定义的数据类型。
  5. DTD定义约束的能力非常有限,无法对XML实例文档作出更细致的语义限制;而XML Schema定义约束的能力非常强大,可以对XML实例文档作出细致的语义限制。
  • XML Schema的功能比DTD强大很多,但相应的语法也比DTD复杂很多。
    实例:
<?xml version="1.0"?>
<xs:schema xmlns:xs=http://www.w3.org/2001/XMLSchema> <!--定义命名空间-->
<xs:element name="root" type="xs:string"/>
</xs:schema>

3.2 命名空间

  • XML命名空间提供避免元素命名冲突的方法。
    在XML中,元素名称是由开发者定义的,当两个不同的文档使用相同的元素名师,就会发生命名冲突。
    例如:有如下两个XML文档
    table.xml : 这个XML文档携带着某个表格中的信息
    furniture.xml : 这个XML文档携带有关桌子的信息
    table.xml
<table>
	<tr>
		<td>A</td>
		<td>B</td>
	</tr>
</table>

furniture.xml

<table>
	<name>African Coffee Table</name>
	<width>80</width>
	<height>120</height>
</table>

假如这两个XML文档被一起使用,由于两个文档都包含带有不同内容和定义的

元素,就会发生命名冲突。

3.2.1 使用命名空间

  • 默认的命名空间
    table.xml
<table xmlns="http://www.w3.org/TR/html4/">
	<tr>
		<td>A</td>
		<td>B</td>
	</tr>
</table>

furniture.xml

<table xmlns="http://www.w3school.com.cn/furniture">
	<name>African Coffee Table</name>
	<width>80</width>
	<height>120</height>
</table>

3.3 引入Schema文档

<?xml version="1.0"?>
<note xmlns="http://www.w3school.com.cn"
 xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
	xsi:schemaLocation="http://www.w3school.com.cn note.xsd">
	<to>George</to>
	<from>John</form>
	<heading>Reminder</heading>
	<body>XXX</body>
</note>
  • xmlns="http://www.w3school.com.cn"规定了默认命名空间的声明。此声明会告知Schema验证器,在此XML文档中使用的所有元素都被声明于这个命名空间。
  • 拥有了可用的XML Schema实例命名空间:xmlns:xsi=“http://www.w3.org/2001/XMLSchema-instance” ,就可以使用schemaLocation属性了。此属性有两个值。第一个值是需要使用的命名空间:“http://www.w3school.com.cn”。第二个值是供命名空间使用的XMLSchema的位置:“note.xsd”

3.4 Schema语法

  • 任何语言都有一定的语法,Schema也不例外。
  1. 元素定义
    Schema和DTD一样,都可以定义XML文档中的元素。
<xs:element name="xxx" type="yyy"/> <!--元素的名称 元素的类型-->
  1. 数据类型
  • 常用的:
    xs:string : 表示字符串类型
    xs:decimal : 表示小数类型
    xs:integer : 表示整数类型
    xs:boolean : 表示布尔类型
    xs:date : 表示日期类型
    xs:time : 表示时间类型
  1. 示例代码
  • XML代码
<lastname>Mike</lastname>
<age>20</age>
<dateborn>1999-01-01</dateborn>
  • XML对应的Schema代码
<xs:element name="lastname" type="xs:string"/>
<xs:element name="age" type="xs:integer"/>
<xs:element name="dateborn" type="xs:date"/>
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值