Internet改變了世界。在Internet迅速發(fā)展的20年中,人們的生活和工作等各個(gè)方面都不知不覺(jué)地發(fā)生著巨大的變化。如今,Internet已經(jīng)無(wú)處不在了,這其中WWW(World Wide Web)起了決定性的作用。
隨著需求的發(fā)展,Web的功能不再停留在原有的靜態(tài)數(shù)據(jù)獲取上,而是朝著更高級(jí)、更智能的Web服務(wù)發(fā)展。簡(jiǎn)單地說(shuō),Web服務(wù)能夠?qū)?shù)據(jù)進(jìn)行動(dòng)態(tài)搜索、采集和整理,為人們提供真正需要的信息。人們通過(guò)它可以得到個(gè)性化服務(wù),方便地查找資料、購(gòu)買(mǎi)產(chǎn)品,公司也可以通過(guò)它定購(gòu)原材料、獲取訂單、出售商品。
人們漸漸地發(fā)現(xiàn),由于世界上存在著如此多的、完全不同的客戶(hù)平臺(tái),在不同平臺(tái)間交換數(shù)據(jù),同時(shí)還要保證數(shù)據(jù)的完整和服務(wù)的高效,這是件令人頭痛的事情。在大型Web應(yīng)用中,工程師們往往被數(shù)據(jù)格式的轉(zhuǎn)換弄得疲憊不堪,即便是整理完成的數(shù)據(jù),如何讓各種客戶(hù)端都能正確獲取和理解也是不小的麻煩。最終,這一問(wèn)題成為制約Web Service發(fā)展的瓶頸。因此,人們需要一種平臺(tái)無(wú)關(guān)的、能夠同時(shí)被人類(lèi)和機(jī)器所理解和處理的文本數(shù)據(jù)格式。于是,XML誕生了。
關(guān)注XML
XML(eXtansible Markup Language,可擴(kuò)展標(biāo)記語(yǔ)言)是一套用來(lái)標(biāo)記文檔的語(yǔ)法,它和現(xiàn)在的Web標(biāo)記語(yǔ)言HTML相同,都是由SGML發(fā)展而來(lái)(由于SGML過(guò)于求大、求全,未能廣泛應(yīng)用),同樣由W3C(World Wide Web Consortium萬(wàn)維網(wǎng)聯(lián)盟)制定標(biāo)準(zhǔn)。其目標(biāo)是統(tǒng)一未來(lái)跨平臺(tái)數(shù)據(jù)交換的格式,并取代現(xiàn)有的HTML成為下一代Web頁(yè)的標(biāo)準(zhǔn)。
XML和HTML都采用標(biāo)記來(lái)表示數(shù)據(jù),但本質(zhì)上卻完全不同。HTML標(biāo)記由W3C管理,只有W3C能夠定義、擴(kuò)展和管理這些標(biāo)記,因此,如果自定義的標(biāo)記不被W3C承認(rèn),也就沒(méi)有任何價(jià)值。同時(shí),HTML本身不能幫助理解或管理數(shù)據(jù),例如,要從HTML文本中提取有效數(shù)據(jù)完全憑借人類(lèi)的思維,我們無(wú)法編寫(xiě)這樣的程序,讓它從關(guān)于書(shū)本的HTML文本中獲取作者的名稱(chēng)。因?yàn)橛械淖髡呖赡苡?BR> 表示,有的可能被包含,HTML并未對(duì)如何表示一個(gè)作者制定規(guī)范,因而沒(méi)法讓程序理解哪個(gè)標(biāo)記包含作者,哪個(gè)沒(méi)有。
XML正好相反,它的標(biāo)記是可自定義的、可擴(kuò)展的和可識(shí)別的。例如,我們可以在關(guān)于書(shū)籍的XML文本中,定義標(biāo)記為書(shū)本的作者,只要遵循相應(yīng)的DTD(Document Type Define,文檔類(lèi)型定義),那么任何來(lái)源的XML文本,其元素都可以被正確識(shí)別,這在HTML是無(wú)法實(shí)現(xiàn)的。更重要的是,理論上任何應(yīng)用都可以識(shí)別并處理這些數(shù)據(jù),如Web瀏覽器、WAP手機(jī)、數(shù)據(jù)庫(kù)系統(tǒng)或任何其它傳統(tǒng)軟件,只要它們能夠理解并遵守DTD規(guī)范就都可以。最后,依照每個(gè)應(yīng)用的需要,可以根據(jù)實(shí)際情況創(chuàng)建更多標(biāo)記,或賦予標(biāo)記不同的含義。如前面的,在介紹書(shū)本的文檔中可以是作者,在介紹古董的文檔中可以是古玩的名稱(chēng),在學(xué)習(xí)化學(xué)的文檔中可以是化學(xué)元素,完全可以根據(jù)需求來(lái)處理,并且能夠保證不被混淆。
另外,XML比HTML更加嚴(yán)格。它不允許出現(xiàn)不配對(duì)的標(biāo)記,如常用的回車(chē)符
,在XML中,要么是
,要么是
。也不允許標(biāo)記的堆疊,如 ,而且XML區(qū)分大小寫(xiě)。最后,XML文檔有且僅有一個(gè)根元素。
XML可以應(yīng)用到Web,但不限于Web,就像我們看到的那樣,通過(guò)XML最終在前所未有的范圍內(nèi),實(shí)現(xiàn)統(tǒng)一的數(shù)據(jù)格式規(guī)范和完善的處理方法。
由于XML的可擴(kuò)展標(biāo)記非常靈活,能夠正確解析它的瀏覽器非常稀少?,F(xiàn)有的XHTML做出了嘗試,它是一種比XML更加嚴(yán)格的超文本標(biāo)記語(yǔ)言,但它畢竟還是屬于固定標(biāo)記的文檔,在數(shù)據(jù)交換中還不能和XML相提并論。正是由于目前的瀏覽器對(duì)XML的支持不夠,造成XML在Web中的應(yīng)用受到了嚴(yán)重限制,因此,將XML應(yīng)用到Web必須采用其它的手段。目前,被廣泛應(yīng)用的主要包括W3C自己制定的XSL和一些服務(wù)器端腳本,如PHP、JSP等。下面談?wù)勥@些Web中的XML應(yīng)用方法,希望能夠達(dá)到拋磚引玉的目的。
XML與XSLT
首先,我們來(lái)看看由W3C制定的XML轉(zhuǎn)換標(biāo)準(zhǔn)—XSL(eXtansible Style Language,擴(kuò)展樣式表語(yǔ)言)。它的作用就是讓XML看上去像現(xiàn)有的HTML一樣多姿多彩。在此基礎(chǔ)上,發(fā)展了三種XML應(yīng)用:XSLT、Xpath和XSL-SOXSLT(XSL Transformation)負(fù)責(zé)將XML文檔動(dòng)態(tài)地轉(zhuǎn)換為HTML格式,并發(fā)送給瀏覽器。后兩種也具備類(lèi)似功能,由于應(yīng)用不及XSLT廣泛,就不再介紹。
要使用XSLT,必須在XML文檔中指出。例如,要使一篇XML文檔被瀏覽器請(qǐng)求時(shí)呈現(xiàn)類(lèi)似于HTML的效果,必須在XML文檔前面指定相應(yīng)的XSL文件,如下所示:
whoami …… xml 數(shù)據(jù) ……
在相應(yīng)路徑中,應(yīng)當(dāng)有一個(gè)合適的normal.xsl文檔。
XSLT使用模板完成XML到HTML的轉(zhuǎn)換。例如,想要將文檔中的節(jié)點(diǎn)提取出來(lái),并顯示為加粗字符,這樣的XSLT可以滿(mǎn)足要求:
// 文件名:normal.xsl
xmlnsxsl=http://www.w3.org/TR/WD-xsl,注意區(qū)分大小寫(xiě) //-->
隨著需求的發(fā)展,Web的功能不再停留在原有的靜態(tài)數(shù)據(jù)獲取上,而是朝著更高級(jí)、更智能的Web服務(wù)發(fā)展。簡(jiǎn)單地說(shuō),Web服務(wù)能夠?qū)?shù)據(jù)進(jìn)行動(dòng)態(tài)搜索、采集和整理,為人們提供真正需要的信息。人們通過(guò)它可以得到個(gè)性化服務(wù),方便地查找資料、購(gòu)買(mǎi)產(chǎn)品,公司也可以通過(guò)它定購(gòu)原材料、獲取訂單、出售商品。
人們漸漸地發(fā)現(xiàn),由于世界上存在著如此多的、完全不同的客戶(hù)平臺(tái),在不同平臺(tái)間交換數(shù)據(jù),同時(shí)還要保證數(shù)據(jù)的完整和服務(wù)的高效,這是件令人頭痛的事情。在大型Web應(yīng)用中,工程師們往往被數(shù)據(jù)格式的轉(zhuǎn)換弄得疲憊不堪,即便是整理完成的數(shù)據(jù),如何讓各種客戶(hù)端都能正確獲取和理解也是不小的麻煩。最終,這一問(wèn)題成為制約Web Service發(fā)展的瓶頸。因此,人們需要一種平臺(tái)無(wú)關(guān)的、能夠同時(shí)被人類(lèi)和機(jī)器所理解和處理的文本數(shù)據(jù)格式。于是,XML誕生了。
關(guān)注XML
XML(eXtansible Markup Language,可擴(kuò)展標(biāo)記語(yǔ)言)是一套用來(lái)標(biāo)記文檔的語(yǔ)法,它和現(xiàn)在的Web標(biāo)記語(yǔ)言HTML相同,都是由SGML發(fā)展而來(lái)(由于SGML過(guò)于求大、求全,未能廣泛應(yīng)用),同樣由W3C(World Wide Web Consortium萬(wàn)維網(wǎng)聯(lián)盟)制定標(biāo)準(zhǔn)。其目標(biāo)是統(tǒng)一未來(lái)跨平臺(tái)數(shù)據(jù)交換的格式,并取代現(xiàn)有的HTML成為下一代Web頁(yè)的標(biāo)準(zhǔn)。
XML和HTML都采用標(biāo)記來(lái)表示數(shù)據(jù),但本質(zhì)上卻完全不同。HTML標(biāo)記由W3C管理,只有W3C能夠定義、擴(kuò)展和管理這些標(biāo)記,因此,如果自定義的標(biāo)記不被W3C承認(rèn),也就沒(méi)有任何價(jià)值。同時(shí),HTML本身不能幫助理解或管理數(shù)據(jù),例如,要從HTML文本中提取有效數(shù)據(jù)完全憑借人類(lèi)的思維,我們無(wú)法編寫(xiě)這樣的程序,讓它從關(guān)于書(shū)本的HTML文本中獲取作者的名稱(chēng)。因?yàn)橛械淖髡呖赡苡?BR> 表示,有的可能被
XML正好相反,它的標(biāo)記是可自定義的、可擴(kuò)展的和可識(shí)別的。例如,我們可以在關(guān)于書(shū)籍的XML文本中,定義
另外,XML比HTML更加嚴(yán)格。它不允許出現(xiàn)不配對(duì)的標(biāo)記,如常用的回車(chē)符
,在XML中,要么是
,要么是
。也不允許標(biāo)記的堆疊,如
XML可以應(yīng)用到Web,但不限于Web,就像我們看到的那樣,通過(guò)XML最終在前所未有的范圍內(nèi),實(shí)現(xiàn)統(tǒng)一的數(shù)據(jù)格式規(guī)范和完善的處理方法。
由于XML的可擴(kuò)展標(biāo)記非常靈活,能夠正確解析它的瀏覽器非常稀少?,F(xiàn)有的XHTML做出了嘗試,它是一種比XML更加嚴(yán)格的超文本標(biāo)記語(yǔ)言,但它畢竟還是屬于固定標(biāo)記的文檔,在數(shù)據(jù)交換中還不能和XML相提并論。正是由于目前的瀏覽器對(duì)XML的支持不夠,造成XML在Web中的應(yīng)用受到了嚴(yán)重限制,因此,將XML應(yīng)用到Web必須采用其它的手段。目前,被廣泛應(yīng)用的主要包括W3C自己制定的XSL和一些服務(wù)器端腳本,如PHP、JSP等。下面談?wù)勥@些Web中的XML應(yīng)用方法,希望能夠達(dá)到拋磚引玉的目的。
XML與XSLT
首先,我們來(lái)看看由W3C制定的XML轉(zhuǎn)換標(biāo)準(zhǔn)—XSL(eXtansible Style Language,擴(kuò)展樣式表語(yǔ)言)。它的作用就是讓XML看上去像現(xiàn)有的HTML一樣多姿多彩。在此基礎(chǔ)上,發(fā)展了三種XML應(yīng)用:XSLT、Xpath和XSL-SOXSLT(XSL Transformation)負(fù)責(zé)將XML文檔動(dòng)態(tài)地轉(zhuǎn)換為HTML格式,并發(fā)送給瀏覽器。后兩種也具備類(lèi)似功能,由于應(yīng)用不及XSLT廣泛,就不再介紹。
要使用XSLT,必須在XML文檔中指出。例如,要使一篇XML文檔被瀏覽器請(qǐng)求時(shí)呈現(xiàn)類(lèi)似于HTML的效果,必須在XML文檔前面指定相應(yīng)的XSL文件,如下所示:
在相應(yīng)路徑中,應(yīng)當(dāng)有一個(gè)合適的normal.xsl文檔。
XSLT使用模板完成XML到HTML的轉(zhuǎn)換。例如,想要將文檔中的
// 文件名:normal.xsl
xmlnsxsl=http://www.w3.org/TR/WD-xsl,注意區(qū)分大小寫(xiě) //-->