黑马生活2

           今天开始正式上课了,一天下来,感觉就一个字——快,是的,黑马老师讲课的速度太快了,但是讲的很好,课程质量很高。下面是今天的学习内容,自己总结了一下,与大家分享。

                                                XML概述

一、一些概念

1、什么是XML?

        首先从XML开始,XML是一个激动人心的新技术。那么什么是XML呢?XML是指可扩展标记语言(eXtensible Markup Language),它是一种标记语言,与HTML很相似。但是它的作用是传输数据,而HTML的作用是显示数据。XML的标签没有被预定义,需要用户自定义。而HTML的标签是预定义好的。

2、XML能干什么?

●在现实生活中存在大量有关系的层次数据,如下图所示,这样的数据该如何表示并交给计算机处理呢?

         

XML语言出现的根本目的在于描述像上图那种有关系的数据。上图用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 元素概述

(1)XML元素指XML文件中出现的标签。一个标签分为起始和结束标签,并且结束标签不能省略。一个标签有如下几种书写形式:
   •包含标签主体:<mytag>somecontent</mytag>
   •不含标签主体:<mytag/>
(2)一个标签中可以嵌套若干子标签,但所有标签必须合理的嵌套,不允许有交叉嵌套。
(3)一个XML文档必须有且仅有一个根标签,其他标签都是这个根标签的子标签或孙标签。
(4)XML中不会忽略主体内容中出现的空格和换行。
1.2.2 元素的命名规范
元素(标签)的名称可以包含字母、数字、减号、下划线和英文句点,但必须遵守下面的一些规范:
   •严格区分大小写,如<P>和<p>是两个不同的标签;
   •只能以字母或下划线开头,如abc   _abc;
   •不能以xml(或XML、Xml等)开头----W3C保留日后使用;
   •名称字符之间不能有空格或制表符;
   •名称字符之间不能使用冒号;
1.2.3 元素的属性
   •一个元素可以有多个属性,每个属性都有它自己的名称和取值,例如:<mytag name=“value” …/>
   •属性值一定要用引号(单引号或双引号)引起来
   •属性名称的命名规范与元素的命名规范相同
   •元素中的属性是不允许重复的
1.3 注释
XML中的注释语法为:<!--这是注释-->
!注意:XML声明之前不能有注释,注释不能嵌套。
1.4 CDATA区
CDATA是Character Data的缩写,作用是把标签当做普通文本内容。
语法:<![CDATA[内容]]>,例如:

<![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的更多语法,感兴趣的可以上网搜索。
    好了,第一天就讲这么多,大部分都是概念性的东西,其实说实话,本人最讨厌概念性的东西了,但是概念
性的东西又非常重要,所以还是要认真学一下。

                                  

  • 1
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值