202
技術社區[雲棲]
刨根究底:XML的本質和作用探討
刨根究底:XML的本質和作用探討
要是有人和你說起“XML”而你卻一臉茫然的話,那麼真的就要被人狠狠的鄙視一把了,真是“平生不識XML,就稱高手也枉然”!
XML到底有哪些用途呢?下麵是網上搜索的一篇比較詳細的文章(原文較多,以下僅摘錄,原文地址:https://www.webjx.com/xml/20080104/xml_xslt_2806.html ):
1)XML可以將HTML與數據分離
通過使用XML,您的數據可存儲於HTML之外。
2)XML用於交換數據
通過使用XML,可以在互不兼容的係統間交換數據。
3)XML可被用來共享數據
通過使用XML,純文本文件可用於共享數據。
4)XML可用於存儲數據
通過使用XML,純文本文件可用於存儲數據。
5)XML使您的數據更有用
通過使用XML,您的數據可供更多的用戶使用。
6)XML可被用來創建新的語言
XML是WAP和WML之母。
除了第一條比較容易理解外,其它看起來都很正確,但我細思考了一下,發現事情沒有描述的這麼簡單:這些作用不是XML的用途,而是純文本的用途,隻要是純文本,不管是XML,還是Windows的ini,還是Java的properties文件,都有這些用途。你能說XML能夠來交換數據,難道我隨便寫一個文本文件不能交換數據嗎?說白了,不是XML太牛,而是因為XML是純文本,所以才這麼牛!
啊哈,我一棍子就把XML打死了,難道其他人都是傻瓜嗎?
當然不是,既然這麼流行,自然有它的原因,而且原因一直隱藏在你視而不見的地方,那就是它的名稱所包含的信息:
1)X:可擴展。
熟悉HTML的人應該能夠很容易理解這個“X”的意思,因為HTML中的標簽和結構是不可擴展的,是固定的。
可擴展的好處就是任何人都可以根據自己的需要定義標簽和結構,而且隨便你怎麼定義。比如說“父親”,張三可以定義為“father”,李四可以定義為“dad”,王五可以定義為“爸爸”。。。。。。等等,而如果是HTML,那麼可能就隻能定義為“father”。
當然,也不是說可擴展就完美無缺了,它的缺點在於XML的含義是由定義者決定的,而不是通用的。
2)M:標記
標記就是用來描述“內容”(在此我不用通常所說的“數據”,後麵會進行解釋)的,與普通的文本文件或者二進製文件相比,標記的好處就是“容易書寫、容易理解”。例如,不管“父親”是定義成“father”、“dad”還是“爸爸”,都是很容易理解和書寫的,而如果用二進製表示,無論是“0101010101”還是“1100110101”都是很難書寫和理解的。
不要小看了“容易”這兩個字,曆史已經證明,活下來的不是最優秀的,而是最容易使用的,TCP/IP和ATM、UNIX和Windows都是很好的例子。
請注意這裏隻是容易理解,不是說看到標簽就完全理解了,在上麵的“X”部分已經說了:標簽的含義是由定義者決定的。
3)L:語言
這個才是XML的關鍵特性:XML本質上和C++,Java,甚至英語等一樣,都是語言!
什麼是“語言”?簡單來說就是描述內容:將你想的東西說出來給別人聽,寫出來給別人看。隻要是一門語言,就應該具備“描述內容”這個作用。
既然XML是一門語言,那麼它肯定具備“描述內容”這個作用,這也是我在第2部分“M”部分特別說明的不是指“數據”,因為“數據”很容易迷惑人,一說到數據,大家基本上想到了數據庫表的一條條記錄,或者配置數據(例如“price=100”),如果XML僅僅是用來記錄這些數據,那XML作用也太小了,而如果是“內容”,那範圍就廣了。
既然是描述內容,那麼毫不誇張的說:XML可以做任何事情!但關鍵是你需要讓它做什麼:XML隻是一個語言,具體描述什麼,是由你來決定的;你定義出XML後,怎麼解釋也是你的事情。如果你要使用XML,關鍵不在XML本身,而是你要決定兩件事:如何用XML描述你要的東東、如何解釋你定義的XML。
我們看一些XML應用實例,來說明是“內容”而不是單純的“數據”(當然,如果你硬要說內容也是數據的話,那我就沒有辦法了):
1)Android用XML來定義一個GUI界麵;
2)Ant用XML來定義一個編譯流程;
3)Spring用XML來定義依賴注入;
。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。
有人說,XML不像C++和Java那樣,不能編譯成可執行程序。其實不然,隻要你願意,你完全可以寫一個基於XML的編譯器,將你規定的XML文檔編譯成可執行程序。
再加上XML已經形成了標準,全世界都來遵守和使用XML,理所當然的XML會取代其它各種各樣的非標準的文本格式了。
最後更新:2017-04-02 04:26:02
上一篇:
想考研
下一篇:
magento -- 現有暢銷排行(Bestseller)插件中存在的問題
magento -- 推薦插件 -- 智能版Js和Css合並 --Lesti::Merge(Smart Merging of Js and Css)
Java分支結構
Iptables實現HA雙機進出口ip一致性,保證驗證一致性!
用Google API 提取名片信息
magento -- web services API 初體驗
《軟件工藝師:專業、務實、自豪》一2.6 因轉型不佳而表現出的問題
如果蚊子消失,世界會怎樣?
Linux係統信息查看命令大全
Spring-管理Bean 使用BeanWrapper管理Bean
【雲計算的1024種玩法】為小夥伴搭建一個功能豐富的百度貼吧雲簽到