XML

|abbreviation=XML|version=1.1 (第二版)|versiondate=|organization = 全球資訊網聯盟 | editors=Tim Bray, Jean Paoli, Michael Sperberg-McQueen, Eve Maler, François Yergeau, John W. Cowan|basestandards=SGML|relatedstandards=XMLSchema|domain = 序列化 | website=}}

可擴充套件標記語言（Extensible Markup Language，簡稱：XML）是一種標記語言和用於儲存、傳輸和重構鬆散資料的檔案格式。它定義了一系列編碼文件的規則以使其在人類可讀的同時機器可讀。全球資訊網聯盟於 1998 年釋出的 XML 1.0 規範和其他相關開源標準共同定義了 XML。

XML 的設計目標是注重簡潔、通用和因特網可用性。它是一種透過 Unicode 編碼實現對多種語言有強大支援的文字資料格式。儘管 XML 的設計重心在於文件，它被廣泛應用於網路服務中鬆散資料結構的表示。

總覽

XML 的主要目的是序列化（如儲存、傳輸和重構鬆散資料）。對於兩個需要傳輸資訊的不同系統，它們也需要在檔案格式上達成一致。XML 規範了這個流程，因此其類似於用於表示資訊的通用語言。

作為一個標記語言，XML 標記，分類和在結構方面組織資料。XML 標籤代表結構且包含元資料，標籤內是照 XML 標準編碼的資料。一個附加的 XML 結構（XSD）定義了用於解釋和驗證 XML 的必要的元資料（這也被稱為結構典範）。一個符合 XML 基本語法的文件是 “結構良好” 的（well-formed），一個符合其附加結構的是 “有效”（valid）的。

網際網路工程任務組的 RFC 7303（取代了舊的 RFC 3023）提供了用於構造 XML 中媒體型別的規則。它定義了三種媒體型別：

application/xml (text/xml 是一個別名)

application/xml-external-parsed-entity (text/xml-external-parsed-entity 是一個別名)

application/xml-dtd

它們被用於在不暴露內容的同時傳輸未經處理的 XML 檔案。RFC 7303 還建議基於 XML 的語言的媒體型別應以 +xml 結尾（如 SVG 的 image/svg+xml）。

對於 XML 在網路中的進一步使用指南於 RFC 3470 （也被稱為 IETF BCP 70，包含設計部署基於 XML 的語言的各個方面）提出。

應用

XML 在網際網路資訊交換中已經被廣泛應用。數以百計使用 XML 語法的文件格式（包括 RSS、Atom、Office Open XML、OpenDocument、SVG、COLLADA 和 XHTML）被開發出來。XML 還為多種通訊協議（如 SOAP 和 XMPP）提供了基礎語言。它還是 AJAX 使用的資訊交換格式之一。

許多工業資料標準，如 Health Level 7、OpenTravel Alliance、FpML、MISMO 和 National Information Exchange Model，基於 XML 和 XML 附加結構豐富的特性。在出版領域，Darwin Information Typing Architecture 是一個 XML 行業資料標準。XML 被廣泛應用與支援各種出版格式。

關鍵術語

該部分內容基於 XML 規範。注意這並不是一個詳盡的列出所有結構的列表，而是提供 XML 中常見組成的介紹。

3.1 字元（ Character ）

XML 1.0 規範允許的（轉義後的最終解碼值）合法字元： #x9（水平製表符）、#xA（回車符）、#xD（換行符）、#x20-#xD7FF、#xE000-#xFFFD、#x10000-#x10FFFF。即任何 Unicode 字元，不包含 surrogate blocks, FFFE, FFFF。

XML 規範定義了 5 個 "預定義實體" 來表示特殊字元. XML 也允許在每個文件定義任意數量的其它命名實體.

下表列出了 5 個 XML 預定義實體。透過名字引用這些實體的格式為 & name;，例如，& 將繪製為 &.

3.2 處理器（ Processor ）與應用（ Application ）

XML 處理器（Processor，也稱作 XML parser）分析標記語言並傳遞結構化資訊給應用（application）。

XML 規範規定了處理器要做什麼不能做什麼，但是應用並不在其討論範圍內。規範稱之為處理器的東西一般被通俗的稱為 XML 解析器。

3.3 標記（ Markup ）與內容（ Content ）

XML 文件的字元分為標記（Markup）與內容（content）兩類。可由簡單的語法判斷出來：標記通常以開頭，以 > 結尾；或者以字元 & 開頭，以；結尾。不是標記的字元就是內容。但是 CDATA 部分，分解符號與 > 是標記，二者之間的文字為內容。 最外界的空白符是標記。

3.4 標籤（ Tag ）

一個 tag 屬於標記結構，以開頭，以 > 結尾。Tag 名字是大小寫敏感，不能包括任何字元！"#$%&'*+,/;?@\^`

所有有效的 Unicode 字元都可以用數字字元引用表示。 例如漢字 “中”，其在 Unicode 中的數字程式碼是十六進位制 4E2D，即十進位制 20,013。 如果使用者無法輸入該字元，則仍然可以透過 &#20013; 或 &#x4e2d; 代表 “中” 這個字元。 類似地，字串 “I I <3 J&#xF6;rg。

&#0; 是不允許的，因為即使使用數字字元引用，空字元也是 XML 排除的控制字元之一。需要使用 Base64 等替代編碼機制來表示此類字元。

3.5 註釋

3.6 國際化

XML 1.0（第五版）和 XML 1.1 支援在元素名稱、屬性、註釋、字元資料和處理指令中直接使用幾乎任何 Unicode 字元（除了在 XML 中具有特殊符號含義的字元，例如小於符號 “

дані

句法修正和錯誤處理

XML 規範中將符合語法規範的 XML 文件定義為格式良好的文件。規範中的語法規範中的關鍵點包括：

該文件僅包含正確編碼的合法 Unicode 字元
除非執行標記描述的作用，否則不應出現任何特殊語法字元（例如？@\^`
僅存在一個根元素
單個根元素包含所有其他元素。

XML 文件的定義排除了那些違反了良構性規則的文字；這些文字根本不是 XML。遇到這種違反規則的情況時，XML 處理器需要報告這些錯誤並停止正常處理。這種政策，偶爾被稱為 “嚴格錯誤處理”，與處理 HTML 的程式的行為形成了明顯對比，因為這些程式在存在嚴重標記錯誤的情況下，仍然能夠產生合理的結果。這一方面的政策被批評為違反了 Postel 法則（“對傳送的內容要保守，對接受的內容要寬容”）。

XML 規範將一個有效的 XML 文件定義為一個既符合良構性規則，又遵循文件型別定義（DTD）規則的 XML 文件。

例

XML 定義結構、儲存資訊、傳送資訊。下例為小張傳送給大元的便條，儲存為 XML。

大元

小張

問候

早啊，飯吃了沒？

這 XML 文件僅是純粹的資訊標籤，這些標籤意義的展開依賴於應用它的程式。

5.1 結構

每個 XML 文件都由 XML 宣告開始，在上面的程式碼中的第一行就是 XML 宣告，。這一行程式碼會告訴解析器或瀏覽器，這個檔案應該按照 XML 規則進行解析。

但是，根元素到底叫還是，則是由文件型別定義（DTD）或 XML 綱要（XML Schema）定義的。如果 DTD 規定根元素必須叫，那麼若寫作就不符合要求。這種不符合 DTD 或 XML 綱要的要求的 XML 文件，被稱作不合法的 XML，反之則是合法的 XML。

XML 檔案的第二行並不一定要包含文件元素；如果有註釋或者其他內容，文件元素可以遲些出現。

最常見的 PI（processing instruction, 像 XML 序言，卻是不同型別的語法）是用來指定 XML 檔案的樣式表，這個 PI 一般會直接放在 XML 序言之後，通常由 Web 瀏覽器使用，來將 XML 資料以特殊的樣式顯示出來。

XML 的結構有一個缺陷，那就是不支援分幀（framing）。當多條 XML 訊息在 TCP 上傳輸的時候，無法基於 XML 協議來確定一條 XML 訊息是否已經結束。