今天开始正式上课了,一天下来,感觉就一个字——快,是的,黑马老师讲课的速度太快了,但是讲的很好,课程质量很高。下面是今天的学习内容,自己总结了一下,与大家分享。
XML概述
一、一些概念
1、什么是XML?
首先从XML开始,XML是一个激动人心的新技术。那么什么是XML呢?XML是指可扩展标记语言(eXtensible Markup Language),它是一种标记语言,与HTML很相似。但是它的作用是传输数据,而HTML的作用是显示数据。XML的标签没有被预定义,需要用户自定义。而HTML的标签是预定义好的。
2、XML能干什么?
●在现实生活中存在大量有关系的层次数据,如下图所示,这样的数据该如何表示并交给计算机处理呢?
<?xmlversion="1.0" encoding="UTF-8"?>
<中国>
<北京>
<海淀></海淀>
<丰台></丰台>
</北京>
<山东>
<济南></济南>
<青岛></青岛>
</山东>
<湖北>
<武汉></武汉>
<荆州></荆州>
</湖北>
</中国>●XML技术除用于描述有关系的数据外,还经常用作软件配置文件,以描述程序模块之间的关系。如Struts、Spring和Hibernate都是基于XML作为配置文件的。在一个软件系统中,通过XML配置文件可以提高系统的灵活性。即程序的行为是通过XML文件来配置的,而不是硬编码。
二、XML语法
1、一个XML文件一般由以下几部分组成:文档声明、元素、注释、CDATA区、特殊字符、处理指令(PI:Processing Instruction)。
1.1 文档声明
在编写XML文档时,首先要对文档进行声明,并且文档声明必须位于XML文档的第一行。
<?xml version="1.0" encoding="UTF-8"?>这是一个简单的文档声明。version定义XML文档的版本号;encoding定义了文档所使用的编码是UTF-8,encoding属性可以省略,省略时默认编码是UTF-8。
1.2 元素
1.2.1 元素概述
<![CDATA[
<website>www.heima.cn</website>
]]>
以上<website>www.heima.cn</website>部分被当做普通文本而不是标签。
1.4 特殊字符
对于一些特殊字符,若要在元素主体内容中显示,必须进行转义。如:
1.5 处理指令
处理指令,简称PI(Processing Instruction)。它的作用:用来指挥软件如何解析XML文档。
语法:必须以“<?”作为开头,以“?>”作为结尾。
常用处理指令:
-XML声明:<?xml version=“1.0” encoding=“GB2312”?>
-xml-stylesheet指令,作用是指示XML文档所使用的CSS样式XSL。例如:<?xml-stylesheet type="text/css" href="some.css"?>
XML约束
一、DTD约束从前面的介绍中我们知道XML都是用户自定义的标签,而XML主要功能是作为软件的配置文件存在的,
如果用户在自定义标签的时候出现小小的错误,软件程序将不能正确地获取XML文件中的内容而报错。如
Tomcat的server.xml,Spring的配置文件(我们习惯称它为beans.xml,在后面将会详细介绍)Struts的
struts.xml等。
1、DTD概述
在XML技术中,可以编写一个文档来约束一个XML的书写规范,这个文档称之为约束。XML约束主要有
两种:DTD约束和Schema约束。我们先来了解一下DTD约束。
DTD(Document Type Definition)是文档类型定义的简称,它的作用是约束XML的书写规范。我们先
来看一个例子,下面是一个简单的XML文档:
<?xml version="1.0" ?>
<!DOCTYPE 书架 SYSTEM "book.dtd">
<书架>
<书>
<书名>Java编程思想</书名>
<作者>Bruce Eckel</作者>
<售价>60.00元</售价>
</书>
<书>
<书名>android基础教程</书名>
<作者>Ed_Burnette</作者>
<售价>59.00元</售价>
</书>
</书架>
在文档的<!DOCTYPE 书架 SYSTEM "book.dtd">这一行,我们看到了一个以dtd为后缀的book.dtd文件,以下
是这个dtd文档的内容:
<!ELEMENT 书架 (书+)>
<!ELEMENT 书 (书名,作者,售价)>
<!ELEMENT 书名 (#PCDATA)>
<!ELEMENT 作者 (#PCDATA)>
<!ELEMENT 售价 (#PCDATA)>
2、编写DTD的方式
DTD约束文档可以在XML文档中直接定义,也可以作为单独的文档进行编写(单独的文档必须以UTF-8编码
进行保存) 。在XML文档中编写DTD示例:
<?xml version="1.0" encoding="UTF-8" standalone="yes"?>
<!DOCTYPE 书架 [
<!ELEMENT 书架 (书+)>
<!ELEMENT 书 (书名,作者,售价)>
<!ELEMENT 书名 (#PCDATA)>
<!ELEMENT 作者 (#PCDATA)>
<!ELEMENT 售价 (#PCDATA)>
]>
<书架>
<书>
<书名>Java编程思想</书名>
<作者>Bruce Eckel</作者>
<售价>60.00元</售价>
</书>
<书>
<书名>android基础教程</书名>
<作者>Ed_Burnette</作者>
<售价>59.00元</售价>
</书>
</书架>
XML使用DOCTYPE声明语句来指明它所遵循的DTD文档,声明方式有两种:当引用的DTD文档在本地时,采用如
下方式:
<!DOCTYPE 根元素 SYSTEM “DTD文档路径”>
如:<!DOCTYPE 书架 SYSTEM “book.dtd”>
当引用的DTD文档在公共网络上时,采用如下方式:
<!DOCTYPE 根元素 PUBLIC “DTD名称” “DTD文档的URL”>
如:<!DOCTYPE web-app PUBLIC
"-//Sun Microsystems, Inc.//DTD Web Application 2.3//EN"
"http://java.sun.com/dtd/web-app_2_3.dtd">
3、DTD语法
3.1 定义元素
在DTD文档中使用ELEMENT关键字来声明一个XML元素。语法:<!ELEMENT 元素名称 使用规则>
●使用规则:
(#PCDATA):指示元素的主体内容只能是普通的文本。
EMPTY:用于指示元素的主体为空。比如<br/>
ANY:用于指示元素的主体内容为任意类型。
(子元素):指示元素中包含的子元素
●定义子元素及描述它们的关系:
-如果子元素用逗号分开,说明必须按照声明顺序去编写XML文档。
如: <!ELEMENT FILE (TITLE,AUTHOR,EMAIL)
-如果子元素用“|”分开,说明任选其一。
如:<!ELEMENT FILE (TITLE|AUTHOR|EMAIL)
-用+、*、?来表示元素出现的次数
如果元素后面没有+*?:表示必须且只能出现一次
+:表示至少出现一次,一次或多次
*:表示可有可无,零次、一次或多次
?:表示可以有也可以无,有的话只能有一次。零次或一次
如: <!ELEMENT MYFILE ((TITLE*, AUTHOR?, EMAIL)* | COMMENT)>
3.2 定义属性
在DTD文档中使用ATTLIST关键字来为一个元素声明属性。
语法:<!ATTLIST 元素名
属性名1 属性值类型 设置说明
属性名2 属性值类型 设置说明
…
>
●属性值类型:
CDATA:表示属性的取值为普通的文本字符串
ENUMERATED (DTD没有此关键字):表示枚举,只能从枚举列表中任选其一,如(鸡肉|牛肉|猪肉|鱼肉)
ID:表示属性的取值不能重复
●设置说明
#REQUIRED:表示该属性必须出现
#IMPLIED:表示该属性可有可无
#FIXED:表示属性的取值为一个固定值。语法:#FIXED "固定值"
直接值:表示属性的取值为该默认值
示例:
<?xml version = "1.0" encoding="GB2312" standalone="yes"?>
<!DOCTYPE 购物篮 [
<!ELEMENT 肉 EMPTY>
<!ATTLIST 肉 品种 ( 鸡肉 | 牛肉 | 猪肉 | 鱼肉 ) "鸡肉">
]>
<购物篮>
<肉 品种="鱼肉"/>
<肉 品种="牛肉"/>
<肉/>
</购物篮>
二、XML Schema约束
1、Schema概述
XML Schema也是一种用于定义和描述XML文档结构与内容的模式语言,其出现是为了克服DTD的局限性
XML Schema的优点:
-XML Schema符合XML语法结构。
-DOM、SAX等XML API很容易解析出XML Schema文档中的内容。(XMl解析在下一节会讲到)
-XML Schema对名称空间(名称空间马上会讲到)支持得非常好。
-XML Schema比XML DTD支持更多的数据类型,并支持用户自定义新的数据类型。
-XML Schema定义约束的能力非常强大,可以对XML实例文档作出细致的语义限制。
-XML Schema不能像DTD一样定义实体,比DTD更复杂,但Xml Schema现在已是w3c组织的标准,它正逐步取代DTD。
XML Schema 文件自身就是一个XML文件,但它的扩展名为.xsd。一个XML Schema文档通常称之为模式文档
(约束文档),遵循这个文档书写的xml文件称之为实例文档。和XML文件一样,一个XML Schema文档也必须有一
个根结点,但这个根结点的名称为schema。编写了一个XML Schema约束文档后,通常需要把这个文件中声明的
元素绑定到一个URI地址上,在XML Schema技术中有一个专业术语来描述这个过程,即把XML Schema文档声
明的元素绑定到一个名称空间上,以后XML文件就可以通过这个URI(即名称空间)来告诉解析引擎,xml文档中
编写的元素来自哪里,被谁约束。
2、Schema语法
先来看一个例子,以下是一个book.xsd的示例:
<?xml version="1.0" encoding="UTF-8" ?>
<xs:schema xmlns:xs="http://www.w3.org/2001/XMLSchema"//标准的名称空间
targetNamespace=“http://www.book.cn” //将该schema文档
//绑定到http://www.book.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:string' />
</xs:sequence>
</xs:complexType>
</xs:element>
</xs:sequence>
</xs:complexType>
</xs:element>
</xs:schema>
以下是对应的XML文档:
<?xml version="1.0" encoding="UTF-8"?>
<xs:书架 xmlns:xs="http://www.book.cn"
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xsi:schemaLocation=“http://www.book.cn book.xsd">
<xs:书>
<xs:书名>Java编程思想</xs:书名>
<xs:作者>Bruce Eckel</xs:作者>
<xs:售价>60.00元</xs:售价>
</xs:书>
</xs:书架>
在XML Schema中,每个约束模式文档都可以被赋以一个唯一的名称空间,名称空间用一个唯一的
URI(Uniform Resource Identifier,统一资源标识符)表示。在编写Schema文档时,首先要声明一个默认
的标准名称空间。如上面的xs:schema xmlns:xs="http://www.w3.org/2001/XMLSchema"。
targetNamespace=“URI”,表示将该Schema文档绑定到一个名称空间上,如上面的book.xsd中,book.xsd就绑
定在www.book.cn这个名称空间上。elementFormDefault元素用于指定该schema文档中声明的根元素及其所有
子元素都属于targetNamespace所指定的名称空间。
在XML文档中书写标签时,可以通过名称空间声明(xmlns),来声明当前编写的标签来自哪个Schema约束
文档。如上面的xs:书架 xmlns:xs="http://www.book.cn",声明当前的标签来自于名称空间为
http://www.book.cnSchema的约束文档。xs是为这个名称空间起了一个别名。 为了在一个XML文档中声明它所
遵循的Schema文件的具体位置,通常需要在Xml文档中的根结点中使用schemaLocation属性来指定。
schemaLocation此属性有两个值:第一个值是需要使用的命名空间;第二个值是供命名空间使用的 XML schema
文档的位置,两者之间用空格分隔。对于Schema的更多语法,感兴趣的可以上网搜索。
好了,第一天就讲这么多,大部分都是概念性的东西,其实说实话,本人最讨厌概念性的东西了,但是概念
性的东西又非常重要,所以还是要认真学一下。