XML 入门必读

来源:互联网 发布:淘宝搜索结果不全 编辑:程序博客网 时间:2024/04/28 20:18

 

1.什么是XML?
XML 开发者们会告诉你,事实上XML并不是一种语言,而是一种用来定义其它语言的系统。可能你已经听过,或许甚至自己尝试过一些这样的语言??比如微软为推(push)技术所推出的频道定义格式(Channel Definition Format)。
W3C是互连网上一些公用标准的开发者,他推出了一系列和XML相关的标准和草案。他们把XML描叙成“一种用来表达结构化数据的通用语法”。所谓结构化数据是指被标签(tags)定义了其内容,意义和用法的数据。例如,在HTML的定义中,<H1>标签所定义的文本,将会用一种特定的字体和大小所显示出来。一个XML标签会明确的确定一种信息: <AUTHOR>标签可能表示的是文档的作者,而<PRICE>则可能包含了产品的价格。与HTML中标签所不同的是:XML标签的含义是自定义的,如果你愿意,可以用<PRICE>来表示作者信息,而用<AUTHOR>来表示产品价格。虽然这看起来会很别扭,但绝对是正确的。
通过分离结构和数据,一份XML文档能够一经写出,就能应用在多种不同的用途:在计算机屏幕上显示出来,或者显示在手机屏幕上,又或者被转到为盲人设计的语音设备上,等等,诸多功用,不一而足。它几乎能够工作在任何可能的通讯设备上。这时候,一个XML文档的作用,已经远远超出了当初你所以为的那样,仅仅是用来显示内容的简单文档了。这样,XML就能够在除了互连网的其它地方也能够一展身手。
在一些大型的文档制作商中,SGML是他们用了很多年的语言,但是它实在是太复杂了,仅仅是定义就有400多页。XML的出现也为他们创造了一些契机。事实上XML是SGML的一个精简了的子集,SGML的大部分工作都可以由XML来完成,而XML比起SGML来却是简单了许多。
当然,平台无关的XML最初是为Web所设计的,它也将在在Web上产生最大的影响。
DOM(Domument Object Model)是一个编程接口,他定义了在一个文档中如何进行数据存取的机制。XML能够为Web所做的,很大程度上取决于它是如何同DOM(文档对象模型)进行交互。
使用DOM,程序员可以用一种标准的方法来动态的操作文档的内容和相关的一些属性。换句话说,程序员可以让在一个浏览器的文档对象树中的一段内容进行一些特定的动作。例如:当把鼠标移到一小段文字上面时,它会改变颜色。网景的Navigator和微软 Internet Explorer都定义了个不相容的DOM,但是这两个公司都宣布在他们下一个版本的浏览器中会支持W3C的标准DOM。这会给程序员带来很多的方便。


2.为什么XML很重要?
在Web上一条很重要的原则是:内容是一个网站最为首要的东西。但不幸的是,内容总是同如何将他们显示出来这个方面联系在一起的。你在浏览网页的时候,有多少次看到一个小小的标签,上面写着“最好在800*600解析度下浏览本网站”呢?数不胜数吧!
XML将有助于解决这个问题。因为在XML中,网站建设者不再是指定在网页的什么地方显示什么东西,他们需要做的是定义好一个文档的结构。例如,你需要定义的是文档的标题,作者,一系列相关链接等等。任何装备有XML 浏览器的设备??一个掌上电脑,或这是电视机顶盒,或者是一个高性能的工作站等等??就能够把XML文档的内容根据各个设备的显示特性显示出来。
或许XML最强的特性,在于其内在的可扩展性。任何的公司和组织都能够扩展XML 来实现新的应用。现在在乎联网上几乎每天都有关于XML的应用方案的提出。一些基于XML的语言已经开始被使用,像微软的频道定义格式??还有一些正在被开发之中,包括Resource Definition Format(资源定义格式)和Open Software Description(开放式软件描叙)等等。
XML还很有可能成为数据和文档交换机制的标准。例如,可以用XML来实现在Internet上不同数据库之间的信息交换。
到现在为止,要准确的说明XML的公用似乎还为时过早。但是它所带来的可能性是无限的,或许这就是为什么XML能够在其初期就能够如此引人关注的原因吧。


3. SGML,HTML和XML的关系是怎样的?
SGML,标准通用标记语言(Standard Generalized Markup Language)最早是用来再字处理程序中描叙数据用的。像RTF(富文本)文件,Word的DOC文件等等,都可以看成是应用SGML的例子。如果你用记事本打开一个RTF文件,就可以看到同HTML相近的一些东西,那就是RTF的源数据描叙,也是通过SGML定义的。SGML从诞生到现在已经有上10年的时间了,可以说已经发展的十分成熟。XML和HTML都可以算的上是SGML的徒子徒孙了,他们都是从SGML发展而来的文档格式描叙语言。因此他们都有一些共通的特性,比如相近的语法,都使用尖括号标签等等。但是准确的说来,HTML是SGML的一个应用,而XML是SGML的一个精简子集。
这其间的差别是本质上的。简单的说来,HTML不能够用来定义(或者说衍生)一个新的应用,而XML却能够做到。例如,资源描叙格式和频道定义格式就是由XML定义出来的新的应用。理论上讲,甚至可以用XML来重新改写HTML。对于它们之间的关系,W3C给出了一个图例(见图),生动的说明了这一点。
XML事实上是与SGML相兼容的??XML文档能够被任何的SGML编辑和浏览器所解析。但是,XML比SGML要简单的多,并且他是特别的为传输带宽有限的Internet所设计的。Tim Bray是XML标准的编制人员之一,根据他的说法,XML就是要继承SGML的优点,但去处SGML的复杂性,并使之能够在网上很好的工作。
HTML,SGML,和XML都将在一定时间内守住自己的岗位,暂时不会有哪一种会被其他的所淘汰。HTML仍然是网上发布信息的最为快捷的方式。如果要发布的数据有长期的应用价值并且需要一些结构化的内容,网站建设者应该考虑转而使用XML。和HTML与XML不同,SGML将不会在网上得到广泛的赞同,因为它并不是为网上传输而特别设计的。但对于高端的应用,那些高度结构化的文档应用,SGML仍将发挥起作用。


4.XML是如何被实现的?
XML能够被应用到许多不同的方面。其中之一是用来在人和机器之间交换信息,比如把信息从一个网站服务器解释了在传递给用户浏览器共用户浏览。在有就是在不同的机器,不同的系统,不同的应用程序之间进行数据交换。
在上面的两种应用中,你可能都需要一种三层模式各构架:一个数据库服务器是一层,用来存贮数据。一个作为中间层的服务器,用来对数据进行适当的解释和表达,然后就是客户端,数据被显示出来,并能够做进一步的应用。数据库服务器能够从多个数据源接收信息,或许它们已经是作为XML格式存在了的。中间层能够把所有的数据整合起来,然后发送到客户端去。
现在,很多的Web网页就是这样被生成的。并且,一个构造的比较好的XML文档,能够允许客户端程序修改文档的外端来显示在不同的媒介中,比如在打印机中打印出来。


5.什么是DTD?
一个文档类型定义(Document Type Definition)是一套标签的语法定义。它告诉你在一个XML文档中你能够使用那些标签,标签出现的顺序以及能够使用那些属性等等。DTD最先是在SGML中工作的,在XML中也引入了DTD,但它不是构成一个XML文档所必需的。而且,它通常也并不与XML一起出现在一个文档中(当然也可以在一起),而是在一个单独的DTD文件中,这样,一个单独的DTD就可以被多个XML文件所引用了。
因为XML本身并不是一个语言,而是用来定义其他语言的标准方法,因此他并没有一个像HTML那用的通用的DTD。因而,每个想用XML的公司和个人,都可以定义其合适的DTD,来满足不同的要求。
关于DTD也有很多的争论。一些人认为它为很重要,是最为实质性的东西。一些人为它限制了创造性,还有一些人认为它很有用,但还不是足够的好。微软试图用他的XML-Data来结束这些争论,但批评家们认为应该从DTD的本质定义上对其进行改进。
微软的schema包括微软在内的一些公司,针对DTD的一些问题提出了一个DTD的代替方案,称为schema,并且已经作为XML-Data提交给W3C。和DTD相似,一个schema提供了关于文档的一些规则,并给出了能够使用的标签,属性以及标签之间的属性,等等。
但与DTD所不同的是,schema能够用来定义数据类型。例如,如果在DTD中定义了一个名为<PRICE>的标签,此时包含在标签中的内容可以是数字或者字符串。但是如果使用schema,就可以强制其中输入的内容只能是数字,而不能够输入其他类型的数据。
这种方法显然是有效的,特别是在不同的应用程序,对象或者数据库之间交换数据的时候。唯一的问题就是:schema能否成为DTD标准的一部分,或着仅仅是一个独立的XML的扩展。


6.什么是well-formed和valid文档?
在本质上存在着两种类型的XML文档:well-formed(结构良好的)和 valid(有效的)。一个结构良好的XML文档遵从XML语法的一般规则。这个规则说起来要比HTML和SGML都要严格的多。HTML的语法规则有很大的随意性,经常可以有一些省略和不规范的写法存在。但XML文档却不能够这样,必须严格的以XML的语法规则来撰写XML文档。下面给出了well-formed的XML应该遵守的几条规则:
1. XML文件的第一列必须是XML的文档申明;
2. XML文件中只能有一个根节点。
3. 开始标签与结束标签必须称对出现。
4. 空的标签必须要有“/”符号。
5. 首有的标签不能够交叉出现,必须满足巢状的结构。
6. 英文的大小写是有区别的。
7. 属性指必须用双引号包围起来。
8. 特殊字符有特殊的表达方法,包括“&”,“<”,“>”,“"”,“'”这五个字符。
一个有效的XML文档要比结构良好的XML文档要求更为严格一些。它除了要满足所有上面列出的八条规则外,还必须遵守一个DTD文档的定义。前面说过,DTD对于一个XML不是必须的,但对于一个有效的XML文档来说,必须有一个对应的DTD定义存在。
确认XML文档的有效性,很大程度上是那些出版和撰写工具所要考虑的问题。对于一般的XML浏览器而言,要显示出XML的内容,只需要是满足well-formed的定义就可以了。


7.浏览器是如何解读XML文档的?
用来解读XML的工具一般的被称为XML分析器(parser),不过它正式的名称应该是XML处理器(processor)。XML为那些用来撰写,出版,搜索,或者显示的应用程序传递数据。XML并没有提供一套API(应用程序接口)来控制其行为,他只是简单的把解析后的XML文档传递给应用程序。当然,前面已经说过,对于不满足well-formed条件的XML文档,XML是不会进行解析的。网景和微软都已经在其最新版本的浏览器中内置了XML解析器。这样,当XML被传递到客户端浏览器时,首先经过解析器的解析,然后才传递给浏览器把内容显示出来。


8,RDF,CDF和XML之间有什么关系?
如果XML有能力说出某种语言,那么XML应用程序就可以看成被说出的那种具体的语言。RDF(Resource Description Format)就是那样的一种XML应用。它也是一种语言,只不过是遵守XML的语法,由XML衍生出来的。
RDF是用来描序和存取数据的一种方法。这意味着RDF是关于数据的数据,或者称为元数据(metadata)。在WEB上,这种元数据可以被用来建立标准的网站地图,得到更为精确的搜索结果,以及网站主体的分级描序。
RDF还能够用来创建智能书签,当书签所引用的网页地址发生改变的时候,书签本身也能够自动的改变。这对于那些内容经常更新的网站来说尤为有用。对于网站的建设者而言,使用metadata是一件很简单但能够收效颇大的事情。
同样的,CDF也是有XML发展而来的。CDF(Channel Definition Format)是由微软提出并大力倡导的。通过它的XML解析器,Internet Explorer 4.0能够读懂CDF文件并更具其内容进行相关的网页提取操作。这也就是所谓的“推”技术。网景也有相应的“推”技术,但在语法构成上与微软的CDF并不相同。


9,风格页和XML的关系是什么?
因为XML把内容和表现形式分开来了,所以网站设计者们需要一种新的方法来控制版面的和外观的显示。风格页这时候挺身而出了。到现在,共有三种不同的风格页能够和XML一起工作,它们是:
1. Cascading Style Sheets (CSS)。
2. Extensible Style Language (XSL)。
3.Document Style Semantics and Specification Language (DSSSL)。
XML对于现在的CSS标准支持的很好,CSS也能够完成大部分基本的风格和外形的设定。但是CSS并不能够满足一些高端的应用。这时候或许更多的要求助于DSSSL,这项ISO标准。它曾经和XML的先辈SGML合作得很好,现在对付XML当然不会有什么问题??唯一的问题是:她太复杂了,而且大多数是为了出版业而设计的,并没有太多地考虑网上传输的特殊性。
于是,剩下的就是XSL了,它基本上就是专为XML所设计的。现在XSL正作为W3C的一项议案有待于通过讨论,所以现在只有在IE5中得到了支持,其他浏览器都还不认识XSL。XSL给网页设计者和用户以更大的弹性,它很多的特性在HTML中根本是无法想象的。例如:HTML的<H2> 标签在所有的浏览器中显示都是一成不变的,但在XSL中,社记者能够指定任意的页面元素按他们的想法显示出来。而用户也可以通过个人的设定来决定<H2>到底该如何显示。 XSL是被设计成可以和一些脚本语言比如JavaScript协同工作的。你甚至可以写这样的脚本:“if 某个XML元素的某个属性值=10 then 让它显示成绿色,else 让它显示成蓝色”,等等。和XSL在一起,XML显得无所不能。


10.XML对于超链接有那些改进?
XML对HTML的超链接做了一些改进,增加了一些特性,包括能够建立“智能”链接,可以省去不少手工编写JavsScript的麻烦。在XML中,链接是作为一个对象出现的,可以向操作任何的其它对象那样,对超链接进行方便的操作。
原来的关于链接的的标准??XLL,XML链接语言(XML Linking Language)现在被分为两种新的标准:Xpointer和XLink.
Xpointer:在HTML中,可以通过书签链接到一个页面的任何地方。通过Xpointer你将能够“寻址到(address to)”(而不是“链接到(link to)”)其他页面的任何一部分的内容。显然的,这对于在文档引用方面是非常有用的。
Xlink:当用户点击了HTML中的一个超链接后,当前的网页被一个新的网页所替代。Xlink能够让Web开发者为链接这个对象添加一些动作(behaviors)。例如:在现在你必须用JavaScript来实现把链接的网页在一个新的窗口中显示出来,但Xlink通过给链接对象添加了一些行为,实现弹出窗口容易到只是简单的调用对象的方法而已。其他的一些有用的应用,像弹出的警告对话框,需要用户做出确认的对话框等等,通过Xlink的对象机制都可以很容易地实现。但现在,我们还都必须求助于脚本编程采能够解决。
对于一系列相关的链接,XML能够让Web开发者创建扩展链接(Extended Links)来方便的实现像www.webring.com这样的网站或网页,把一些相同主题的网页自动的链接在一起。现在实现这个功能需要使用到CGI脚本,但是扩展链接将提供标准的方法来建立资源之间的关联。
现在还有一些问题需要得到进一步的讨论,特别是在“行为”机制方面还有一些工作要作。但这并不妨碍在不久的将来,Xpinter和Xlink作为新的标准被广泛使用。


11.XML的国际化问题
XML的出现,使得网站的国际化变得空前的容易。和Java一样,XML也是使用的Unicode(ISO 10646)作为其编码标准,这是的网站建设者们能够很容易的写出各国的文字和符号,而不必过多的担心乱码的问题。Unicode 包括了所有的ASCII字符,以及简体中文,繁体中文,日文,韩文,希腊文等等。在XML中甚至可以允许有混合的编码出现,例如,一个显示中文的网页可以引用一个德文的单词,而不必担心出现乱码。
开发者不需要专门为了Unicode而在去学习什么新的东西,网页一经写好后,在客户端的浏览器中显示时,浏览器会自动的使用合适的字符集把网页显示出来。