什么是 XML?
了解一下 XML 吧,它是一種嚴格但靈活的標記語言,無論是在文檔還是圖像方面應用都十分廣泛。
XML 是一種分層的標記語言。它使用打開和關(guān)閉標簽來定義數(shù)據(jù),它常用來存儲和交換數(shù)據(jù),而且由于它極大的靈活性,不論是在 文檔 還是 圖像 中都用的非常多。
這里是一個 XML 文檔的例子:
<xml>
<os>
<linux>
<distribution>
<name>Fedora</name>
<release>8</release>
<codename>Werewolf</codename>
</distribution>
<distribution>
<name>Slackware</name>
<release>12.1</release>
<mascot>
<official>Tux</official>
<unofficial>Bob Dobbs</unofficial>
</mascot>
</distribution>
</linux>
</os>
</xml>
閱讀這個示例 XML,你可能會發(fā)現(xiàn)這個 XML 的格式具有直觀的特性。 無論你是否熟悉這個文檔的主題,你都可能理解本文檔中的數(shù)據(jù)。 這部分原因是因為 XML 被認為是冗長的。 它使用了很多標簽,標簽可以有很長的描述性名稱,并且數(shù)據(jù)以分層的方式排序,這有助于解釋數(shù)據(jù)之間的關(guān)系。 你可能從這個示例中了解到 Fedora 發(fā)行版和 Slackware 發(fā)行版是兩個不同且不相關(guān)的 Linux 發(fā)行版,因為每個實例都“包含”在自己獨立的 <distribution>
標簽中。
XML 也非常靈活。 與 HTML 不同,它沒有預定義的標簽列表。 你可以自由創(chuàng)建你需要表示任何數(shù)據(jù)結(jié)構(gòu)的標簽。
XML 的組成
數(shù)據(jù)的存在為了讀取,當計算機“讀取”數(shù)據(jù)時,該過程稱為 解析。 再次使用示例 XML 數(shù)據(jù),以下是大多數(shù) XML 解析器認為重要的術(shù)語。
- 文檔:
<xml>
標簽標記文檔的開始,</xml>
標簽標記文檔的結(jié)束。 - 節(jié)點:
<os>
、<distribution>
、<mascot>
這些都是節(jié)點,在解析術(shù)語中,節(jié)點是包含其他標簽的標簽。 - 元素:像
<name>Fedora</name>
和<official>Tux</official>
這些都是元素。從第一個<
開始,到最后一個>
結(jié)束是一個元素。 - 內(nèi)容:在兩個元素標簽之間的數(shù)據(jù)被稱之為內(nèi)容,在第一個
<name>
標簽中,Fedora
字符串就是一個內(nèi)容。
XML 模式
XML 文檔中的標簽和標簽繼承性稱為 模式。
一些模式是隨意組成的(例如,本文中的示例 XML 代碼純粹是即興創(chuàng)作的),而其他模式則由標準組織嚴格定義。 例如,可縮放矢量圖形(SVG)模式 由 W3C 定義,而 DocBook 模式 由 Norman Walsh 定義。
模式強制執(zhí)行一致性。 最基本的模式通常也是最嚴格的。 在我的示例 XML 代碼中,將發(fā)行版名稱放在 <mascot>
節(jié)點中是沒有意義的,因為文檔的隱含模式清楚地表明 mascot
必須是發(fā)行版的“子”元素。
數(shù)據(jù)對象模型(DOM)
如果你必須不斷地描述標簽和位置(例如,“系統(tǒng)部分中的 Linux 部分中第二個發(fā)行版標簽的名稱標簽”),那么談論 XML 會讓人感到困惑,因此解析器使用文檔對象模型(DOM)的概念來表示 XML 數(shù)據(jù)。 DOM 將 XML 數(shù)據(jù)放入一種“家譜”結(jié)構(gòu)中,從根元素(在我的示例 XML 中,即 os
標記)開始并包括路徑上的每個標記。
Document Object Model
這種相同的 XML 數(shù)據(jù)結(jié)構(gòu)可以表示為路徑,就像 Linux 系統(tǒng)中的文件或互聯(lián)網(wǎng)上網(wǎng)頁的位置一樣。 例如,<mascot>
標簽的路徑可以表示為 //os/linux/distribution/slackware/mascot
。
兩個 <distribution>
標簽可以被表示為 //os/linux/distribution
,因為這里有兩個發(fā)行版的節(jié)點,因此一個解析器可以直接將兩個節(jié)點的內(nèi)容載入到一個數(shù)組中,可以進行查詢。
嚴格的 XML
XML 也以嚴格而著稱。 這意味著大多數(shù)應用程序被設計為在遇到 XML 錯誤時就會故意失敗。 這聽起來可能有問題,但這是開發(fā)人員最欣賞 XML 的事情之一,因為當應用程序試圖猜測如何解決錯誤時,可能會發(fā)生不可預測的事情。 例如,在 HTML 定義明確之前,大多數(shù) Web 瀏覽器都包含“怪癖模式”,因此當人們試圖查看糟糕的 HTML 代碼時,Web 瀏覽器卻可以加載作者可能想要的內(nèi)容。 結(jié)果非常難以預測,尤其是當一個瀏覽器的猜測與另一個瀏覽器不同時。
XML 通過在出現(xiàn)故意錯誤時失敗而不允許這樣做。 這讓作者可以修復錯誤,直到它們生成有效的 XML。 因為 XML 是良好定義的,所以有許多應用程序的驗證器插件以及像 xmllint
和 xmlstarlet
這樣的獨立命令來幫助你及早定位錯誤。
轉(zhuǎn)換 XML
因為 XML 通常用作數(shù)據(jù)交換,所以將 XML 轉(zhuǎn)換為其他數(shù)據(jù)格式或其他 XML 模式是很常見的。 經(jīng)典示例包括 XSLTProc、xmlto 和 pandoc,但從技術(shù)上講,還有許多其他應用程序或者至少程序的一部分就是在轉(zhuǎn)換 XML。
事實上,LibreOffice 使用 XML 來布局其文字處理器和電子表格文檔,因此無論何時你導出或 從 LibreOffice 轉(zhuǎn)換文件,你都在轉(zhuǎn)換 XML。
開源 EPUB 格式的電子書 使用 XML,因此無論何時你 將文檔轉(zhuǎn)換為 EPUB 或從 EPUB 轉(zhuǎn)換,你都在轉(zhuǎn)換 XML。
Inkscape 是基于矢量的插圖應用程序,它將其文件保存在 SVG 中,這是一種專為圖形設計的 XML 模式。 任何時候你將 Inkscape 中的圖像導出為 PNG 文件時,你都在轉(zhuǎn)換 XML。
名單還可以一直繼續(xù)下去。 XML 是一種數(shù)據(jù)存儲格式,旨在確保你的數(shù)據(jù),無論是畫布上的點和線、圖表上的節(jié)點,還是文檔中的文字,都可以輕松準確地提取、更新和轉(zhuǎn)換。
學習 XML
編寫 XML 很像編寫 HTML。 感謝 Jay Nick 的辛勤工作,在線提供免費且有趣的 XML 課程 可以教你如何使用 XML 創(chuàng)建圖形。
通常,探索 XML 所需的特殊工具很少。 由于 HTML 和 XML 之間的密切關(guān)系,你可以 使用 Web 瀏覽器查看 XML。 此外,QXmlEdit、NetBeans 和 Kate 等開源文本編輯器通過有用的提示、自動完成、語法驗證等,使鍵入和閱讀 XML 變得容易。
選擇 XML
XML 起初可能看起來有很多數(shù)據(jù),但它與 HTML 并沒有太大的不同(實際上,HTML 已經(jīng) 以 XHTML 的形式重新實現(xiàn)為 XML)。 XML 有一個獨特的好處,即構(gòu)成其結(jié)構(gòu)的標簽也恰好是元數(shù)據(jù),提供有關(guān)其存儲內(nèi)容的信息。 精心設計的 XML 模式包含并描述你的數(shù)據(jù),使用戶能夠一目了然并快速解析它,并使開發(fā)人員能夠使用一些庫 快速解析。