知道XML已经很久了,最常见到它的地方莫过于web编程时见过的web.xml和struts中的struts-config.xml。但却一直不了解它到底是做什么用地。有一点可以肯定,它的作用远远不止于此。
这两天比较闲,在网上看了一些关于XML的学习资料,第一次有这样一个东西深深的吸引了我。
研究它是因为想研究RSS,而RSS是目前最成功的XML应用。所以,才有的冲动去了解XML。
记录笔记如下:
背景
我对背景这个东西就跟读新闻一样,一廖而过。但了解一种技术或者一种语言的背景,有助于我们理解它的应用。先了解几个概念:
SGML(Standard Generalized Markup Language),标准通用标记语言。
XML(eXtensible Markup Language),扩展标记语言。
HTML(Hyper Text Mark-up Language ),超文本标记语言。
早在Web未发明之前,SGML就已经存在了。但是SGML这种语言相当的庞大,学习起来很复杂(听说的),我想,SGML中也应该是可以任意的定义各种标记,然后也有很多的DTD,对标记做不同的定义。那个年代,对于这种灵活性可能一般人都很难掌握吧(猜的哈哈),于是就诞生了HTML。
我想HTML无非就是用SGML定义好每一种标记,包括DTD也是定义好的(HTML中好像没有DTD,我想是已经定义好一种规范可以被浏览器识别了吧),通通不可以改变。这样,由于HTML都是由一些固定的标记组成的,数量有限,所以学习起来非常的简单,使用起来也非常方便。
但是由于WEB的应用越来越广泛,HTML的缺点也逐渐的显现出来。它固定的标签导致它在解决一些复杂问题的时候,很困难。介于这个弱点,于是就产生了XML,可扩展标记语言。和SGML相比,XML就是一个精简的SGML。可以想象,XML不局限于固定的标签,完全可以由自己来设置标签,再配合DTD文件对标签进行定义规范。XML的功能要比HTML强大得多。这样,随着问题空间的变大,解决问题的空间也变大了嘿。
XML与HTML比较
HTML只是WEB通过浏览器显示数据的通用方法,而XML提供了一个直接处理WEB数据的通用方法。HTML着重描述WEB数据的显示格式,(想想那些标签也基本上都是用于显示格式的),而XML着重描述的是WEB页面的内容。
好像不是很好理解,我是这样想的,HTML的标签目的在于如何把数据用不同的格式显示出来。比如同样的一个字符串,我可以把它显示成一个Label,一个Text,或者一个Link。而XML,目的在于把这个字符串的内容完整的显示出来。
当然,它也能做到把这个字符串显示成各种格式。只需要结合一个XSL来描述。由XSL来定义XML中数据的显示格式。这样,使数据和表现形式完全的分离,这也许就是XML的魅力吧。
XML的应用
这是我最在意的地方。记录下有待研究。
参考网上的资料,有人这样统计过:
1. 应用于客户需要与不同的数据源进行交互时。
2. 应用于将大量运算负荷分布在客户端,即客户可根据自己的需求选择和制作不同的应用程序以处理数据,而服务器只须发出同一个XML文件。
3. 应用于将同一数据以不同的面貌展现给不同的用户。
4. 应用于网络代理对所取得的信息进行编辑、增减以适应个人用户的需要。
另一个网络资源的理解,同样是这四个方面:
1. 当网络客户必须在不同的数据库之间传递信息时;
2. 当需要把大部分从网络服务器下载的数据在用户端处理的时;(好像正是我需要的那个)
3. 当相同的数据对于不同的用户需要有不同的界面时;
4. 当网络情报供应商要把发现的信息精心裁剪并发送给不同的个人用户时。
简单的XML文件
![](http://www.blogjava.net/Images/OutliningIndicators/None.gif)
![](http://www.blogjava.net/Images/OutliningIndicators/None.gif)
![](http://www.blogjava.net/Images/OutliningIndicators/None.gif)
![](http://www.blogjava.net/Images/OutliningIndicators/None.gif)
![](http://www.blogjava.net/Images/OutliningIndicators/None.gif)
![](http://www.blogjava.net/Images/OutliningIndicators/None.gif)
XML文档和HTML文档相比,是结构良好的文档。比如:
1. 标签必须成对。
2. 一份文档必须包含一个根元素。
3. 所有的开始标签和结束标签必须匹配。
4. 空标签必须以“/>”结束。
5. 标签必须嵌套正确。
6. 元素名称大小写敏感。
7. 所有的属性值必须位于单引号或双引号中。
8. 在同一个开始标签或空标签澡属性不允许出现超过一次。
以上这些是XML文档必须遵循的,但是HTML浏览器却可以接收结构不良好的HTML文档。
在HTML浏览器中格式化XML数据
我想我说格式化大概不是很标准,暂时这样理解。就我现在知道的,有两种方法。一种是在HTML文件中调用XML中的数据利用HTML的显示格式来显示,一种是利用XSL文件来设置XML数据的样式。
1. 在HTML文件中调用XML数据
也有两种方法,一种是用脚本(script)调用。
![](http://www.blogjava.net/Images/OutliningIndicators/None.gif)
![](http://www.blogjava.net/Images/OutliningIndicators/None.gif)
![](http://www.blogjava.net/Images/OutliningIndicators/None.gif)
![](http://www.blogjava.net/Images/OutliningIndicators/ExpandedBlockStart.gif)
![](http://www.blogjava.net/Images/OutliningIndicators/InBlock.gif)
![](http://www.blogjava.net/Images/OutliningIndicators/InBlock.gif)
![](http://www.blogjava.net/Images/OutliningIndicators/InBlock.gif)
![](http://www.blogjava.net/Images/OutliningIndicators/InBlock.gif)
![](http://www.blogjava.net/Images/OutliningIndicators/InBlock.gif)
![](http://www.blogjava.net/Images/OutliningIndicators/InBlock.gif)
![](http://www.blogjava.net/Images/OutliningIndicators/ExpandedBlockEnd.gif)
![](http://www.blogjava.net/Images/OutliningIndicators/None.gif)
![](http://www.blogjava.net/Images/OutliningIndicators/None.gif)
![](http://www.blogjava.net/Images/OutliningIndicators/None.gif)
![](http://www.blogjava.net/Images/OutliningIndicators/None.gif)
![](http://www.blogjava.net/Images/OutliningIndicators/None.gif)
![](http://www.blogjava.net/Images/OutliningIndicators/None.gif)
![](http://www.blogjava.net/Images/OutliningIndicators/None.gif)
![](http://www.blogjava.net/Images/OutliningIndicators/None.gif)
![](http://www.blogjava.net/Images/OutliningIndicators/None.gif)
![](http://www.blogjava.net/Images/OutliningIndicators/None.gif)
![](http://www.blogjava.net/Images/OutliningIndicators/None.gif)
![](http://www.blogjava.net/Images/OutliningIndicators/None.gif)
![](http://www.blogjava.net/Images/OutliningIndicators/None.gif)
![](http://www.blogjava.net/Images/OutliningIndicators/None.gif)
![](http://www.blogjava.net/Images/OutliningIndicators/None.gif)
![](http://www.blogjava.net/Images/OutliningIndicators/None.gif)
![](http://www.blogjava.net/Images/OutliningIndicators/None.gif)
![](http://www.blogjava.net/Images/OutliningIndicators/None.gif)
![](http://www.blogjava.net/Images/OutliningIndicators/None.gif)
![](http://www.blogjava.net/Images/OutliningIndicators/None.gif)
![](http://www.blogjava.net/Images/OutliningIndicators/None.gif)
![](http://www.blogjava.net/Images/OutliningIndicators/None.gif)
![](http://www.blogjava.net/Images/OutliningIndicators/None.gif)
![](http://www.blogjava.net/Images/OutliningIndicators/None.gif)
![](http://www.blogjava.net/Images/OutliningIndicators/None.gif)
![](http://www.blogjava.net/Images/OutliningIndicators/None.gif)
![](http://www.blogjava.net/Images/OutliningIndicators/None.gif)
![](http://www.blogjava.net/Images/OutliningIndicators/None.gif)
![](http://www.blogjava.net/Images/OutliningIndicators/None.gif)
![](http://www.blogjava.net/Images/OutliningIndicators/None.gif)
blog.xml文件
![](http://www.blogjava.net/Images/OutliningIndicators/None.gif)
![](http://www.blogjava.net/Images/OutliningIndicators/None.gif)
![](http://www.blogjava.net/Images/OutliningIndicators/None.gif)
![](http://www.blogjava.net/Images/OutliningIndicators/None.gif)
![](http://www.blogjava.net/Images/OutliningIndicators/None.gif)
![](http://www.blogjava.net/Images/OutliningIndicators/None.gif)
2. 利用XSL文件来设置XML的样式
blog.xml文件
![](http://www.blogjava.net/Images/OutliningIndicators/None.gif)
![](http://www.blogjava.net/Images/OutliningIndicators/None.gif)
![](http://www.blogjava.net/Images/OutliningIndicators/None.gif)
![](http://www.blogjava.net/Images/OutliningIndicators/None.gif)
![](http://www.blogjava.net/Images/OutliningIndicators/None.gif)
![](http://www.blogjava.net/Images/OutliningIndicators/None.gif)
![](http://www.blogjava.net/Images/OutliningIndicators/None.gif)
blog.xsl文件
![](http://www.blogjava.net/Images/OutliningIndicators/None.gif)
![](http://www.blogjava.net/Images/OutliningIndicators/None.gif)
![](http://www.blogjava.net/Images/OutliningIndicators/None.gif)
![](http://www.blogjava.net/Images/OutliningIndicators/None.gif)
![](http://www.blogjava.net/Images/OutliningIndicators/None.gif)
![](http://www.blogjava.net/Images/OutliningIndicators/None.gif)
![](http://www.blogjava.net/Images/OutliningIndicators/None.gif)
![](http://www.blogjava.net/Images/OutliningIndicators/None.gif)
![](http://www.blogjava.net/Images/OutliningIndicators/None.gif)
![](http://www.blogjava.net/Images/OutliningIndicators/None.gif)
![](http://www.blogjava.net/Images/OutliningIndicators/None.gif)
这都是最简单的了。
xsl也是一个xml文档。它有自己的语法,有待学习。
关于xml的学习还在进行中。