官术网_书友最值得收藏!

3.1 XML概述

在卷Ⅰ第13章中,你已經看見過用屬性文件(property file)來描述程序配置。屬性文件包含了一組名/值對,例如:

你可以用Properties類在單個方法調用中讀入這樣的屬性文件。這是一個很好的特性,但這還不夠。在許多情況下,想要描述的信息的結構比較復雜,屬性文件不能很方便地處理它。例如,對于下面例子中的fontname/fontsize項,使用以下的單一項將更符合面向對象的要求:

但是,這時對字體描述的解析就變得很討厭了,必須確定字體名在何處結束,字體大小在何處開始。

屬性文件采用的是一種單一的平面層次結構。你常常會看到程序員用如下的鍵名來努力解決這種局限性:

屬性文件格式的另一個缺點是要求鍵是唯一的。如果要存放一個值序列,則需要另一個變通方法,例如:

XML格式解決了這些問題,因為它能夠表示層次結構,這比屬性文件的平面表結構更靈活。

描述程序配置的XML文件可能會像這樣:

XML格式能夠表達層次結構,并且重復的元素不會被曲解。

正如上面看到的,XML文件的格式非常直觀,它與HTML文件非常相似。這是有原因的,因為XML和HTML格式是古老的標準通用標記語言(Standard Generalized Markup Language,SGML)的衍生語言。

SGML從20世紀70年代開始就用于描述復雜文件的結構。它的使用在一些要求對海量文獻進行持續維護的產業中取得了成功,特別是在飛機制造業中。但是,SGML相當復雜,所以它從未風行。造成SGML如此復雜的主要原因是SGML有兩個相互矛盾的目標。它既想要確保文檔能夠根據其文檔類型的規則來形成,又想要通過可以減少數據鍵入的快捷方式使數據項變得容易表示。XML設計成了一個用于因特網的SGML的簡化版本。和通常情況一樣,越簡單的東西越好,XML立即得到了長期以來一直在躲避SGML的用戶的熱情追捧。

注意:http://www.xml.com/axml/axml.html處可以找到一個由Tim Bray注釋的XML標準的極佳版本。

盡管HTML和XML同宗同源,但是兩者之間存在著重要的區別:

·與HTML不同,XML是大小寫敏感的。例如,<H1>和<h1>是不同的XML標簽。

·在HTML中,如果從上下文中可以分清哪里是段落或列表項的結尾,那么結束標簽(如</p>或</li>)就可以省略,而在XML中結束標簽絕對不能省略。

·在XML中,只有單個標簽而沒有相對應的結束標簽的元素必須以/結尾,比如<img src="coffeecup.png"/>。這樣,解析器就知道不需要查找</img>標簽了。

·在XML中,屬性值必須用引號括起來。在HTML中,引號是可有可無的。例如,<applet code="MyApplet.class" width=300 height=300>對HTML來說是合法的,但是對XML來說則是不合法的。在XML中,必須使用引號,比如,width= "300"。

·在HTML中,屬性名可以沒有值。例如,<input type="radio" name="language" value="Java" checked>。在XML中,所有屬性必須都有屬性值。比如,checked= "true"或checked="checked"。

主站蜘蛛池模板: 垣曲县| 馆陶县| 利辛县| 启东市| 渝北区| 康乐县| 台北县| 德江县| 肥城市| 林西县| 扎鲁特旗| 博野县| 萍乡市| 南开区| 花垣县| 友谊县| 湾仔区| 方正县| 封丘县| 界首市| 静海县| 屏山县| 双城市| 天台县| 诸暨市| 武义县| 时尚| 古浪县| 仙居县| 大石桥市| 运城市| 二连浩特市| 闻喜县| 虎林市| 竹山县| 宜春市| 阜康市| 定陶县| 图们市| 吉木乃县| 林口县|