首先,讓我們來回顧一下可擴充置智語言XML(eXtensible Markup Language)的發展簡史。
----XML有兩個先驅--SGML和HTML,這兩個語言都是非常成功的置智語言,但是它們都在某些方面存在着與生俱來的缺陷。SGML(Standard Generalized Markup Language)的全稱是标準通用置智語言,它為文法置标提供了異常強大的工具,同時具有極好的擴充性,是以在分類和索引資料中非常有用。但是,SGML非常複雜,并且價格昂貴,幾個主要的浏覽器廠商都明确拒絕支援SGML,使SGML在網上傳播遇到了很大障礙。
----相反,超文本置智語言HTML(HyperText Markup Language)免費、簡單,在世界範圍内得到了廣泛的應用。它側重于首頁表現形式的描述,大大豐富了首頁的視覺、聽覺效果,為推動WWW的蓬勃發展、推動資訊和知識的網上交流發揮了不可取代的作用。可是,HTML也有如下幾個緻命的弱點,這些弱點逐漸成為HTML繼續發展應用的障礙。
-
- HTML是專門為描述首頁的表現形式而設計的,它疏于對資訊語義及其内部結構的描述,不能适應日益增多的資訊檢索要求和存檔要求。
- HTML對表現形式的描述能力實際上也還非常不夠,它無法描述矢量圖形、科技符号和一些其他的特殊顯示效果。
- HTML的标記集日益臃腫,而其松散的文法要求使得文檔結構混亂而缺乏條理,導緻浏覽器的設計越來越複雜,降低了浏覽的時間效率與空間效率。
----正因為如此,1996年人們開始緻力于描述一個置智語言,它既具有SGML的強大功能和可擴充性,同時又具有HTML的簡單性。XML就是這樣誕生的。
----正象SGML和HTML一樣,可擴充置智語言XML也是一種置智語言,它通過在資料中加入附加資訊的方式來描述結構化資料。不過,XML并非象HTML那樣,隻提供一組事先已經定義好的标記。準确地說,它是一種元置智語言,允許程式開發人員根據它所提供的規則,制定各種各樣的置智語言。在XML中,置标的文法是通過文檔類型定義DTD(Document Type Definition)來描述的,也就是說,通過DTD來描述什麼是有效的标記,并進一步定義置智語言的結構。除了定義置标的文法外,為了明确各個标記的含義,XML還使用與之相連的樣式單(style sheet)來向應用程式,比如浏覽器,提供如何處理顯示的訓示說明。一言以蔽之,XML是通過資料文檔、DTD、樣式單三個分離的部分來描述資料的。
----雖然XML貌似複雜,但它有一些突出的優點:
----1. 良好的可擴充性。XML允許各個不同的行業根據自己獨特的需要制定自己的一套标記,同時,它并不要求所有浏覽器都能處理這成千上萬個标記,同樣也不要求一個置智語言能夠适合各個行業各個領域的應用,這種具體問題具體分析的方法更有助于置智語言的發展。
----2. 内容與形式的分離。正如前面所說,XML中資訊的顯示方式已經從資訊本身中抽取出來,放在了"樣式單"中。這樣做便于資訊表現方式的修改,便于資料的搜尋,也使得XML具有良好的自描述性,能夠描述資訊本身的含義甚至它們之間的關系。
----3. 遵循嚴格的文法要求。XML不但要求标記配對、嵌套,而且還要求嚴格遵守DTD的規定。這增加了網頁文檔的可讀性和可維護性,也大大減輕了浏覽器開發人員的負擔,提高了浏覽器的時間空間效率。
----4. 便于不同系統之間資訊的傳輸。不同企業、不同部門中往往存在着許多不同的系統,XML可以用作各種不同系統之間的交流媒介,是一種非常理想的網際語言。
----5. 具有較好的保值性。XML的保值性來自它的先驅之一--SGML語言,可以為文檔提供50年以上的壽命。
----正是基于這些優點,國際标準化組織--網際網路聯盟W3C(World Wide Web Consortium)推薦XML作為第二代網頁釋出語言。
----最後,讓我們來看一個完整的XML例子,以便對XML的整體機制有一個大緻的了解。在下面的例子中,我們用XML來描述一個學生花名冊的資訊清單。我們先為這些資料定義一個DTD:
----Stuml.dtd <?xml version="1.0" encoding="GB2312"?> <!ELEMENT 學生花名冊 (學生)*> <!ELEMENT 學生 (學号, 姓名, 性别, 籍貫, 出生日期)> <!ELEMENT 出生日期 (年, 月, 日)> <!ELEMENT 學号 (#PCDATA)> <!ELEMENT 姓名 (#PCDATA)> <!ELEMENT 性别 (#PCDATA)> <!ELEMENT 籍貫 (#PCDATA)> <!ELEMENT 年 (#PCDATA)> <!ELEMENT 月 (#PCDATA)> <!ELEMENT 日 (#PCDATA)> |
----關于學生花名冊資訊的标準XML文檔是這樣的:
----Student.xml <?xml version = "1.0" encoding="GB2312" standalone = "no"?> <!DOCTYPE 學生花名冊 SYSTEM "stuml.dtd"> <?xml-stylesheet type="text/xsl" href="mystyle.xsl" target="_blank" rel="external nofollow" ?> <學生花名冊> <學生> <學号>001</學号> <姓名>張三</姓名> <性别>男</性别> <籍貫>北京市</籍貫> <出生日期> <年>1980</年> <月>3</月> <日>1</日> </出生日期> </學生> <學生> <學号>002</學号> <姓名>李四</姓名> <性别>女</性别> <籍貫>河北省</籍貫> <出生日期> <年>1979</年> <月>5</月> <日>12</日> </出生日期> </學生> </學生花名冊> |
----現在我們為它制定一個樣式單,以描述這些資料的顯示:
----Mystyle.xsl <?xml version="1.0" encoding="GB2312"?> <xsl:stylesheet xmlns:xsl="http://www.w3.org/TR/WD-xsl" xmlns="http://www.w3.org/TR/REC-html40" result-ns=""> <xsl:template><xsl:apply-templates/></xsl:template> <xsl:template match = "/"> <HTML> <HEAD> <TITLE>學生花名冊</TITLE> </HEAD> <BODY> <xsl:apply-templates select="學生花名冊"/> </BODY> </HTML> </xsl:template> <xsl:template match = "學生花名冊"> <xsl:for-each select="學生"> <UL> <LI><xsl:value-of select="姓名"/></LI> <UL> <LI>學号: <xsl:value-of select="學号"/></LI> <LI>性别: <xsl:value-of select="性别"/></LI> <LI>籍貫: <xsl:value-of select="籍貫"/></LI> <LI>出生年: <xsl:value-of select="出生日期/年"/></LI> <LI>出生月: <xsl:value-of select="出生日期/月"/></LI> <LI>出生日: <xsl:value-of select="出生日期/日"/></LI> </UL> </UL> </xsl:for-each> </xsl:template> </xsl:stylesheet> |
----在IE5中看到的XML檔案的顯示結果是這樣的:
l 張三 m 學号: 001 m 性别: 男 m 籍貫: 北京市 m 出生年: 1980 m 出生月: 3 m 出生日: 1 l 李四 m 學号: 002 m 性别: 女 m 籍貫: 河北省 m 出生年: 1979 m 出生月: 5 m 出生日: 12 |
----有興趣的讀者可以用"記事本"錄入上面這三個檔案,分别存盤後放在一個目錄中,然後用IE5打開檔案student.xml,看看結果是不是這樣。