日期:2005-2-17 16:19:44 來(lái)源:網(wǎng)上轉貼 編輯:本站轉 作者:未知
發(fā)送給好友差不多每天都有人問(wèn)“什么是 XML”,“XML 能做什么”,“XML 能不能替我做這個(gè)”,
“XML 會(huì )取代什么” 等等諸如此類(lèi)的問(wèn)題。由于最近一段時(shí)間稍微對 xml 使用了一下,
我來(lái)談?wù)勛约旱母杏X(jué)。這些經(jīng)驗都很淺顯,任何一個(gè)用過(guò) xml 的人都有,并且見(jiàn)仁見(jiàn)智,
只不過(guò)我算剛剛走過(guò)這段路,對自己一開(kāi)始的困惑,誤解還記得清,所以拿出來(lái)和大家
分享一下。
我覺(jué)得初學(xué)者可能會(huì )走近的誤區:
1. XML 是不是 HTML 的取代者?
不是。寫(xiě)得好的 html 應該是一個(gè) well-formed 的 xml 文檔,其他方面最好不要
把他們放在一個(gè)水平線(xiàn)上比較。
2. XML 是不是數據庫的取代者?
不是。
3. XML 是不是...的取代者?
都不是。
這個(gè)結論可能聽(tīng)上去很滑稽:XML 是非常非常重要的東西,但它什么都取代不了。
但這并不奇怪,有人把它比做 ASCII 標準,他們是一切一切的基礎,但并沒(méi)有(也不需要)取代什么。(但是就如同 ASCII 取代了一些沒(méi)有成大器的字符集定義,XML 也會(huì )取代你在應用中自己定義的一些數據傳輸規范,但沒(méi)有什么特別主流的東西。)
剛開(kāi)始學(xué) XML (或者說(shuō)沒(méi)開(kāi)始學(xué)之前)的時(shí)候最?lèi)?ài)問(wèn)的一個(gè)問(wèn)題肯定是:使用 XML 能給我帶來(lái)什么好處?
我覺(jué)得從某種角度上說(shuō),使用 XML 有些象使用 OO 面向對象:
- 你可以用它,你也可以不用它。
- 如果你的應用非常簡(jiǎn)單,用它不一定方便,沒(méi)準兒用了效果還會(huì )更差。
- 和其他實(shí)際東西比如數據庫,MTS,Web Server比起來(lái),它更像是一個(gè)概念,一種方法
- 項目越大,它的發(fā)揮余地越大,作用越大。
- 一旦真正理解后,哪怕不用 xml parser,也不妨礙你使用這個(gè)概念,如同可以?huà)侀_(kāi)特定語(yǔ)言使用 OO。
- ......
好像更抽象,更沒(méi)譜兒了吧。
那就隨便舉個(gè)例子。比如你本來(lái)想在 bbs 應用中的兩個(gè)模塊之間傳一些數據:
- 發(fā)言人
- 密碼
- 標題
- 內容
使用四個(gè)參數是不太現實(shí)的,因為你隨時(shí)可能要擴展功能,比如再加上個(gè)
- 表情符號
等等
不可能每次加個(gè)功能,就重新定義一遍函數。
所以最簡(jiǎn)單的方法是把他們合并起來(lái)作為一個(gè)參數傳遞給函數。
在有 xml 之前,你可能會(huì )使用分隔符:
str = "發(fā)言人=張三;密碼=**;標題=abc;內容=xyz"
到 server 那邊使用 dictionary 或 collection 或 split 等等方法把他們拆開(kāi)。
(當然可以自己定義對象啦,結構啦等等,但多數情況下還得是純字符串--比如另一個(gè)模塊不是自己開(kāi)發(fā)的。)
這種傳遞字符串的方法有幾個(gè)問(wèn)題,總結成兩個(gè)最大的方面就是:
1. 正確的解析它很麻煩。(比如標題正好是“發(fā)言人=張三;”怎么辦)
2. 是平面的,沒(méi)有層次型結構
你可以寫(xiě)些函數來(lái)解決這些問(wèn)題,比如確保里面肯定有“發(fā)言人”,“密碼”等等;
再寫(xiě)些函數做一下字符轉義,再寫(xiě)些函數制造出層次性的效果...
夠了!咱還是用 XML 吧。在我目前淺顯的認識里:
- XML 是用來(lái)傳遞數據的
- XML 讓這些數據有了結構 -- 一個(gè)樹(shù)型結構
- xml 有全套的操作這種結構的方法
- xml 規范(或者說(shuō)的實(shí)際點(diǎn),xml parser)幫你確定你創(chuàng )建的字符串是合法的
- xml 規范(或者說(shuō)的實(shí)際點(diǎn),xml parser)中有辦法驗證這個(gè)合法性
- 對于拿到這個(gè)字符串的 server component 來(lái)說(shuō),可以用 xml 中現成的方法來(lái)操作它,這就是 xpath, pattern,類(lèi)似于 T-SQL 語(yǔ)句。(但記住 xml 是樹(shù)型結構的)
- XSLT 使用 xpath 對 xml 進(jìn)行轉換(類(lèi)似于 DTS),其中一種特例是把 XML 轉換成 HTML 輸出。