XML到底是幹什麼的?
XML到底是定義數據格式然後把真正數據包進去用於數據的交互傳輸,還是單純的定義了數據的格式的標記語言。好多地方都出現XML,我就有點蒙,比如在框架里XML定義了框架的各種屬性,又定義了數據的格式,但數據傳起來又可以是JSON。大牛們能否直白地解答一下XML的用途,別copy各種網上的講解,我看了,和沒說一樣還是不清晰。
看到各答主都沒認真回答,忍不住出來小秀一把。
簡單概括(可能概括的不是很準確,但是我的語言功底也就到這了,見諒)的話就是,xml本身是一種格式規範,是一種包含了數據以及數據說明的文本格式規範。
接下來煮幾個栗子說明一下。
比如,我們要給對方傳輸一段數據,數據內容是「too young,too simple,sometimes naive」,要將這段話按照屬性拆分為三個數據的話,就是,年齡too young,閱歷too simple,結果sometimes naive。
我們都知道程序不像人,可以體會字面意思,並自動拆分出數據,因此,我們需要幫助程序做拆分,因此出現了各種各樣的數據格式以及拆分方式。
比如,可以是這樣的
數據為「too young,too simple,sometimes naive」然後按照逗號拆分,第一部分為年齡,第二部分為閱歷,第三部分為結果。也可以是這樣的
數據為「too_young**too_simple*sometimes_naive」從數據開頭開始截取前面十一個字元,去掉*號並把下劃線替換為空格作為第一部分,再截取接下來的十一個字元同樣去掉*並替換下劃線為空格作為第二部分,最後把剩下的字元同樣去*號體會空格作為第三部分。這兩種方式都可以用來容納數據並能夠被解析,但是不直觀,通用性也不好,而且如果出現超過限定字數的字元串就容納不了,也可能出現數據本身就下劃線字元導致需要做轉義。
基於這種情況,出現了xml這種數據格式, 上面的數據用XML表示的話可以是這樣 age="too young" experience="too simple" result="sometimes naive" /&>&
&
&
&
&
&
兩種方式都是xml,都很直觀,附帶了對數據的說明,並且具備通用的格式規範可以讓程序做解析。
如果用json格式來表示的話,就是下面這樣{
"age":"too young",
"experience":"too simple",
"result":"sometimes naive"
}
看出來沒,其實數據都是一樣的,不同的只是數據的格式而已,同樣的數據,我用xml格式傳給你,你用xml格式解析出三個數據,用json格式傳給你,你就用json格式解析出三個數據,還可以我本地保存的是xml格式的數據,我自己先解析出三個數據,然後構造成json格式傳給你,你解析json格式,獲得三個數據,再自己構造成xml格式保存起來,說白了,不管是xml還是json,都只是包裝數據的不同格式而已,重要的是其中含有的數據,而不是包裝的格式。
估計沒多少人知道XML其實是微軟做的或者說是主要推動者,而且現在管XML的人就坐在離我10米遠,正在苦逼地調bug。
簡單回答下題主的問題。XML就是種定義數據的標機語言,並沒有定義如何傳輸,你可以把他放在http get的response裡面,也可以直接拷貝一個xml文件到u盤裡。其擴展xsd定義了xml的schema,而xslt又定義了xml的轉換方式,這些使得xml更加強大。比如我見過用xslt來自動生成測試代碼的。
從應用來講,各種config文件是xml的一個重要應用。數據文件也能用xml來保存,比如office文件。另外,SOAP協議的載體也是基於XML;ATOM也是基於XML用來表達要傳輸的數據,雖然現在json用得更多點。xml的精髓在於幾乎圖靈完備的xsd,這是所有其它類似的結構都不具備的一個強大的功能。
以一種約定的字元串來表示某些常用數據類型,例如Map或者Array、Two-Dimensional Array。
因為雙方都有約定,不同的應用就可以通過這些字元串進行數據的交換。例如作為配置文件,那麼應用本身可以讀取這些配置,而文本編輯軟體也可以按照約定的格式來編輯這些字元串,那麼就實現了人肉和應用的數據的交換。
又例如作為網路應用,服務端發出這些字元串,客戶端接收到後parse,就可以實現服務端傳輸一個Map的數據(舉例)到客戶端。另外XML帶有大量信息冗餘,這樣也方便人的閱讀。XML 就是個有一堆冗餘信息的 S-Exp 嘛(逃
你可以理解為一輛沒有發動機的車。xml把所有部件按照一定規則集合在一起,就等編譯器這個發動機去啟動這個車。現在用的比較多的是配置和數據結構定義,其實用途很多。早在十年前我就看到一個js寫的解釋器直接讀xml做一個動態網頁。
記得好像據說,最早是在萬維網剛出現的時候,為了在萬維網上傳輸數據,接收方能理解,人們創造了這種自帶格式說明的文件格式。當時人們期待著xml能一統天下,結果後來html和瀏覽器出現了,html成了標準的網路協議,就沒xml什麼事了。現在xml就是個工具,幹啥都行。可以存儲並檢索數據,可以做傳輸約定格式,可以做配置文件。但似乎什麼都有替代的解決方案
XML是一種數據存儲、交換、表達的標準:
- 存儲:優勢在於半結構化,可以自定義schema,相比關係型二維表,不用遵循第一範式(可以有嵌套關係);- 交換:可以通過schema實現異構數據集成;- 表達:本身就可以作為閱讀文檔,當然還可以使用XSLT之類的進行解析和再顯示。缺點是schema驗證複雜,相比後來的json等格式,相對冗餘。
但是作為半結構化文檔的代表性標準,早期代表的是一種數據思想。應該從他名稱來理解: 可擴展標記語言.從兩個角度理解:
- 可擴展。你可以把他用作任何用途:配置文件、UI描述文件等等
- 標記語言。對,HTML(超文本標記語言)也是標記語言,你可以把HTML看做是XML的子語言。
從以上兩點來看,XML就是一個文檔結構的規範。文檔的內容根據你的需要是什麼都可以。描述配置文件,比如Spring的很多配置文件;UI描述,比如HTML和Android布局文件。
XML他只定義了文檔的結構:成對的標記(),屬性的位置(http://xxx")等等。至於這些標記和屬性你解析成什麼你自己決定。
------------------------------------ 補充
既然有了XML那為什麼還用JSON呢?因為XML有時候描述東西太費勁,而且有大量的冗餘,尤其是結束標記(&