XML 1.0 是在 1998 年 12 月由W3C正式批准的,现在仍是个稳定的标准。W3C 有一个活跃的 XML 工作组,致力于XML规范的推广。W3C(World Wide Web Consortium,http://www.w3.org/)创建于 1994年,宗旨是研究Web规范和指导方针,致力于推动Web发展,保证各种Web技术能很好地协同工作。其大约有500名会员组织,它的主任Tim Berners-Lee(http://www.w3.org/People/Berners-Lee/)在1989年发明了Web。W3C推行的主要规范有HTML,CSS,XML,XHTML和DOM(Document Object Model)。
XML用途:
XML 应用于 web 开发的许多方面,常用于简化数据的存储和共享。
(1)XML 把数据从 HTML 分离
如果你需要在 HTML 文档中显示动态数据,那么每当数据改变时将花费大量的时间来编辑 HTML。
通过 XML,数据能够存储在独立的 XML 文件中。这样你就可以专注于使用 HTML 进行布局和显示,并确保修改底层数据不再需要对 HTML 进行任何的改变。
通过使用几行 JavaScript,你就可以读取一个外部 XML 文件,然后更新 HTML 中的数据内容。
提示:您将在稍后的章节学习更多这方面的内容。
(2)XML 简化数据共享
在真实的世界中,计算机系统和数据使用不兼容的格式来存储数据。
XML 数据以纯文本格式进行存储,因此提供了一种独立于软件和硬件的数据存储方法。
这让创建不同应用程序可以共享的数据变得更加容易。
(3)XML 简化数据传输
通过 XML,可以在不兼容的系统之间轻松地交换数据。
对开发人员来说,其中一项最费时的挑战一直是在因特网上的不兼容系统之间交换数据。
由于可以通过各种不兼容的应用程序来读取数据,以 XML 交换数据降低了这种复杂性。
(4)XML 简化平台的变更
升级到新的系统(硬件或软件平台),总是非常费时的。必须转换大量的数据,不兼容的数据经常会丢失。
XML 数据以文本格式存储。这使得 XML 在不损失数据的情况下,更容易扩展或升级到新的操作系统、新应用程序或新的浏览器。
(5)XML 使您的数据更有用
由于 XML 独立于硬件、软件以及应用程序,XML 使您的数据更可用,也更有用。
不同的应用程序都能够访问您的数据,不仅仅在 HTML 页中,也可以从 XML 数据源中进行访问。
通过 XML,您的数据可供各种阅读设备使用(手持的计算机、语音设备、新闻阅读器等),还可以供盲人或其他残障人士使用。
(6)XML 用于创建新的 Internet 语言
很多新的 Internet 语言是通过 XML 创建的:
其中的例子包括:
XHTML - 最新的 HTML 版本
WSDL - 用于描述可用的 web service
WAP 和 WML - 用于手持设备的标记语言
RSS - 用于 RSS feed 的语言
RDF 和 OWL - 用于描述资源和本体
SMIL - 用于描述针针对 web 的多媒体
XML 被设计用来传输和存储数据。
HTML 被设计用来显示数据。
二:XML文档内容与文档结构:
三:XML与HTML的比较:
表面上看,XML文件与HTML文件比较相似,都以一对相互匹配的起始和结束标记符来标记信息,但二者功能不同,HTML的标记符用来显示数据,XML的标记符则是描述数据的性质,后者可以多种方式显示,这和把地址簿的信息放在数据库的字段和记录中而不是放在字处理器产生的清单中的道理一样,数据库可以让你把地址簿中的信息合成到标签、信封、信件或其它任何想要的载体上面。最终,就是把这份XML菜谱文件合成到一种表现语言中,如HTML上显示出来。
XML的标记符也可以由其他应用软件进行深入的处理,你可以告诉其它程序如何使用这些有意义的标记符;也可以通过编码把标记符中的内容放入数据库的某个域中,然后把它输出到一本书的硬拷贝中;还可以用一个支持XML的字处理器使网页的出版轻而易举;等等。这就是XML的本质:使标记对人和机器都可读。
所有基于Web的开发人员都有体会,那就是HTML在高级Web应用中有它固有的一些缺点:
1. 它是一种表示技术,它包含了关于如何显示信息的标签,但是标签和数据是结合在一起的,很难进行分割
2. 它的标记集合是固定的,你不能在自己的应用中扩展HTML标记,而且HTML是"扁平"式的结构,你不能指定数据的层次结构。
3. 它不允许用户对数据进行变换以便进一步进行处理,HTML实际上是由服务器产生的,客户端从某种意义上只是起到显示的作用。
4. 它对数据只提供了一个"视图",如果你想要得到不同的视图的话,你必须重新生成一个HTML网页。
5. 它的格式既不适合机器分析也不适合人阅读它的源码,而且它的格式要求比较松散,HTML解释器采用的是尽量解释的机制。这样造成的一个弊病是同一个页面在不同的浏览器中可能显示的结果大不相同。
XML就是为了弥补这些缺点而出现的,所以说,这些HTML所不具有的功能都是XML所具有的。现在我们再来总结一下XML的优点:
1. XML可以用于本地计算的数据。传递到桌面的数据可以进行本地计算。XML解析器可以读取数据,并将它递交给本地应用程序(例如浏览器)进一步查看或处理。数据也可以由使用XML对象模型的脚本或其他编程语言来处理。
2. 可以为用户提供正确的结构化数据视图。传递到桌面的数据可以以多种方式表示。本地数据集,可以根据用户喜好和配置等因素,以适当的形式在视图中动态表现给用户。
3. 允许集成不同来源的结构化数据。一般情况下,使用代理,在中间层服务器上集成来自后端数据库和其他应用程序的数据,使该数据能够传递给桌面或者其他服务器,做进一步聚合、处理和分布。
4. 描述来自多种应用程序的数据。由于 XML 是可扩展的,因此它可以用于描述来自多种应用程序的数据,从描述 Web 页面集合到数据记录。由于数据是自描述的,因此不需要数据的内置描述,也能够接收和处理数据。
5. 通过粒度更新来提高性能。XML 允许粒度更新。开发人员不必在每次有改动时都发送整个结构化数据集。有了粒度更新后,只有改变的元素才必须从服务器发送到客户机。改变的数据可以在不必刷新整个页面或表的情况下显示。
四:XML与数据库:
更多关于XML与数据库:http://blog.csdn.net/onestab/article/details/1397135。
五:XML文档声明:
XML作为一种通用的数据交换格式,应用越来越广泛。目前许多系统的配置文件都使用XML格式,本书中所涉及到的众多配置文件都是XML格式的,新的JSP规范也推出了采用XML语法的JSP文档,因此,要深入学习和掌握Java Web开发技术,必须有一些基本的XML语言知识。由于XML的通用性和广泛应用,在读者以后实际项目开发和应用中,很多地方都要用到XML方面的知识,所以,对XML知识的了解和掌握,已经是从事电子商务网站和相关系统开发的编程人员所必须掌握的基本知识。
什么是配置文件
配置文件就是记录应用程序的配置信息的文件。例如,某个程序要连接网络上的数据库系统时,需要指定数据库服务器的ip地址、服务器的网络监听端口号、数据库的名称、用户名和密码等信息,这些信息可以作为应用程序的配置信息来对待,即不要将这些信息写死在源程序中,而是写在一个文本文件中。应用程序要连接数据库系统时,从该文本文件中读取所需要的信息,如果连接的数据库系统的信息发生了改变,则只需要修改该文本文件,而不用修改源程序,这个文本文件就是应用程序的配置文件。传统的配置文件通常采用如下格式:
#Db.Properties
DBServer=192.168.0.100
Port=1443
Database=emp
Username=zxx
Password=123
上面这种格式的配置文件只能表述一些简单的信息,而很难表达具有层次结构和数据项目要动态增加的信息。例如,如果要在一个文件中表达出“一个国家中的每个省及省长的名称、每个省下面的每个市及市长的名称、每个市下面的每个镇及镇长名称”,使用上面的格式就很难表达。采用XML格式的配置文件很容易表达出这种层次结构,具体细节请参看本章后面部分的讲解。
在一个完整的XML文档中必须包含一个XML文档声明,该声明必须位于文档的第一行。这个声明表示该文档是一个XML文档,以及遵循的是哪个XML版本的规范。最简单的XML文档声明语法如下:
<?xml version="1.0" ?>
在“<”和“?”之间、“?”和“>”之间以及第一个“?”和xml之间不能有空格,这就是XML语法严格性的一个体现。在第二个“?”之前可以没有、也可以有一个或多个空格。声明语句中的version属性表示XML的版本,因为解析器对不同的版本的解析肯定会有区别,尽管目前只有1.0版本,但在声明中必须指定version属性。
由于人们可以采用不同的字符编码集来书写一个字符内容完全相同的XML文档,所以,XML软件工具(包括分析器)就需要知道该XML文档所使用的字符编码方式。这可以通过在XML文档声明中指定encoding属性来说明,例如,使用下面的语句来指明文档中的字符编码方式为GB2312编码。
<?xml version="1.0" encoding="GB2312" ?>
W3C的XML1.0规范里规定,所有的XML解析器必须接受UTF-8和UTF-16编码的Unicode字符,所以,符合 XML 规范的软件工具一定都支持这两种Unicode编码。如果XML声明中没有设置encoding属性来明确指定文档所用的字符编码方式,则一律以Unicode编码看待。XML解析器通过寻找XML文档开始处的字节顺序标记,能够自动检测出文档中的Unicode编码是UTF8,还是UTF16。也就是说,encoding属性默认的设置是Unicode编码,如果文档中的字符是以UTF-8或者是UTF-16作为编码,则可以不设置这个属性。
在XML文档声明语句中,还可以指定另外一个可选属性:standalone,例如:
<?xml version="1.0" encoding="UTF-8" standalone="yes" ?>
standalone属性用于说明文档是否是独立的,如果将其设置为“yes”,则表示该文档没有依赖外面的任何文件而可以独立存在,即不需要DTD文件来验证其中的标识是否有效,也不需要XSL、CSS文件来控制其显示外观;将standalone属性设置为“no”时,则表示该文档依赖于外面的某个文件,例如,依赖于某个DTD文件或XSL、CSS文件。standalone属性的默认值为“yes”。
注意:如果同时设置了encoding和standalone属性,standalone属性要位于encoding属性之后。
:动手体验:加深对encoding属性的理解【图可以 自己做实验得到】
对于含有中文字符的XML,其中的字符可以采用unicode来编码或GB2312(简体中文字符编码)编码来表示,如果文档中的字符使用的是GB2312编码,则必需设置为encoding属性为GB2312,下面通过一个实验来说明这个问题。
(1)用Windows自带的记事本程序创建一个名为book.xml的文件,文件内容如例程1-1所示。
例程1-1 book.xml
<?xml version="1.0" ?>
<书架>
<书>
<书名>Java就业培训教程</书名>
<作者>张孝祥</作者>
<售价>39.00元</售价>
</书>
<书>
<书名>JavaScript网页开发</书名>
<作者>张孝祥</作者>
<售价>28.00元</售价>
</书>
</书架>
(2)用IE5.0以上的浏览器打开book.xml文件,看到的结果如图1.2所示。
图1.2
错误提示的信息是“文本内容中发现无效字符”,这就是因为在book.xml的XML文档声明语句中没有明确指定文档中的字符编码方式,浏览器就会用默认的Unicode编码来解析该文档,而该文档中的字符实际上使用的是GB2312编码,而非Unicode编码。
(3)单击浏览器的“查看”à“源文件”菜单,将打开的book.xml文件内容中的第一行修改成如下形式:
<?xml version="1.0" encoding="GB2312" ?>
保存修改后,刷新显示book.xml文件的浏览器窗口,看到的结果如图1.3所示。单击某个标签前面的减号(-),嵌套在该标签中的所有内容将被折叠起来,标签前面的减号(-)也将变成加号(+)。单击某个标签前面的加号(+),嵌套在该标签中的所有内容将被展开,标签前面的加号(+)也将变成减号(-)。
图1.3
(4)在上面打开book.xml文件的记事本程序中,单击“文件”à“另存为”菜单,在打开的“另存为”对话框中,选择“保存类型”为“所有文件”,编码为“UTF-8”,如图1.4所示。
图1.4
以UTF-8编码保存book.xml文件后,尽管在记事本程序窗口中显示的效果没有任何变化,但是book.xml文件内部存储的数据已经改变,这通过比较book.xml保存前后的文件大小就可以看出来。刷新显示book.xml文件的浏览器窗口,看到的结果如图1.5所示。
图1.5
因为现在的book.xml文件的字符编码已经转换为UTF-8,而文档的起始声明中指定encoding属性为GB2312,所以,浏览器在解析book.xml文件时会发生错误。
(5)将book.xml的文档起始声明的encoding属性修改为UTF-8,保存后刷新显示book.xml文件的浏览器窗口,就又可以看到类似图1.3所示的正常显示效果了。
六:元素的定义和标记
元素的标记:
七:属性、注释、空格与换行:
注释: