【編按】本文作者 Yegor Bugayenko 是 Teamed.io 公司的共同創辦人,在軟體品質和工程管理方法領域有深入的研究。本文中,作者透過比較 JSON ,向大家更詳細地闡述了 XML 的四大特性,幫助大家在搭建專案時選擇適合的資料格式類型。
很多人在心裡糾結,如果 JSON 和 XML 相比,誰更好誰更快?在接下來的新專案中到底選擇哪一個?別傻了!完全沒有可比性。就像自行車和 AMG S65 ,你能說哪個更好嗎?雖然兩者都是交通工具,但有些情況下,自行車反而更方便。所以 JSON 和 XML 也是一樣,它們都各有所長,完全沒有必要比較。
下面舉一個簡單的JSON 資料(140個字元):
{ "id": 123, "title": "Object Thinking", "author": "David West", "published": { "by": "Microsoft Press", "year": 2004 } }
同樣的資料在XML 中會表示如下(167個字元):
<?xml version="1.0"?> <book id="123"> <title>Object Thinking</title> <author>David West</author> <published> <by>Microsoft Press</by> <year>2004</year> </published> </book>
很容易看出其中的差別,前者更簡潔更容易理解,而且能在JavaScript 中能完美解析。所以,我們便可以簡單粗暴地放棄 XML 選擇 JSON 了嗎?誰還會需要已歷時15年的重量級語言呢?
但恰恰相反,本人就非常喜愛 XML ,且聽下文分解。
但千萬別誤會,本文並不是反對 JSON 。 JSON 的確是很好的資料格式,但它只是一種資料格式,經常被暫時用於將資料從 A 點傳到 B 點。它比 XML 更簡短易讀,但僅此而已。
XML 是一種非常強大的語言,而非只是單純的資料格式。相對於 JSON 和其他簡單的資料格式來說,如 YAML ,XML 至少有以下四個重要特性。
#為了從文件中得到上文類似的出版年份,只需要傳送一個簡單的XPath 請求:/book/published/year/text() 。但是,必須得有一個 XPath 處理器來解析請求並回傳2004。好就好在XPath2.0是集functions、predicates、axes 等為一體的強大檢索引擎,在不用Java 程式碼編寫任何遍歷的邏輯的情況下,就可以在XPath 請求中以自然語言形式加入任何邏輯,例如,你可以直接發出請求“How many books were published by David West in 2004?” ,便能透過XPath 得到答案。而這是 JSON 所不能做到的。
Attributes and Namespaces
可以將 metadata 加到 XML 資料中,正如上面的 id 屬性一樣。資料保存在元素中,例如圖書作者的姓名,而 metadata(資料的資料)應該保存為屬性,這會大大有利於組織和結構化資訊。最重要的是,元素和屬性都可以標記為屬於某個 namespaces ,當多個應用程式使用相同 XML 文件時,這種技術的優點會非常明顯。
XML Schema
#試想這樣的情況,當你在一台機器上建立了XML 文檔,在其他電腦上做了幾次修改,然後又傳到別的電腦上使用,所以必須確保文件結構沒有被中間操作破壞。例如可能有人用 4620f01c9fab72e23a9b679732106cc4 儲存出版日期,但別人可能會使用 ISO-8601 格式的 1d78a9a384cca7aba89b0d5f2a964e41 。為了避免這樣的結構混亂,我們可以建立一個說明文件 XML Schema ,和主文檔一起進行儲存。在每次操作主文件之前,都需要透過 schema 檔案檢查其正確性,這是生產過程中的整合測試。 RelaxNG 也是類似的機制,但會簡單很多,如果覺得 XML Schema 太過複雜不妨試試用 RelaxNG。
XSL
#事實上,可以不用任何 Java/Ruby 等程式碼就能完成 XML 文件的修改。簡單的說,你只需要建立一個 XSL transformation 文件並將其應用於原始 XML ,然後得到一個新的 XML 。 XSL 語言(純功能性語言)是專為分層資料操作設計的,它比 Java 或任何其他物件導向/流程的語言都更適合此任務。借助 XSL 可以將 XML 轉換為任何形式,包括純文字和 HTML 。很多人抱怨 XSL 太複雜,但其實沒那麼難, XSL 的核心功能其實很簡單,大家不妨一試。
以上所述並不是 XML 的全部特徵,但這四大特性的確用途非凡。它們不僅可以讓文件的“自給自足”,還能進行自我驗證(XML Schema),進而知道如何修改(XSL),最後還能方便地獲得其中的文件內容(Xpath)。
同時,市面上還有許多以 XML 為基礎發展的語言、標準和應用,包括 Xforms、 SVG、 MathML、 RDF、 OWL、 WSDL 等。但一般的主流項目中都不會用到,因為它們的針對性都太強。
設計JSON 的用途並非是滿足以上特性,儘管JSON 領域現在努力嘗試,包括用於查詢的JSONPath 、一些轉換工具和用於驗證的json-schema ,但和強大的XML 相比這只是微不足道的模仿,筆者不認為會有長遠發展,遲早會消失。
綜上所述, JSON 是一種沒有過多附加功能的簡單資料格式,其最佳的使用情況是在 AJAX 下,除此之外,本人都強烈推薦大家使用 XML。
OneAPM 提供您端對端的 Java 應用效能解決方案,我們支援所有常見的 Java 框架及應用程式伺服器,協助您快速發現系統瓶頸,定位異常根本原因。分鐘級部署,即時體驗,Java 監控從來沒有這麼簡單。想閱讀更多技術文章,請造訪 OneAPM 官方技術部落格。
以上是JSON和XML-不可同日而語的詳解的詳細內容。更多資訊請關注PHP中文網其他相關文章!