可擴充套件標記語言（，簡稱：）是一種標記語言和用於儲存、傳輸和重構鬆散資料的檔案格式。它定義了一系列編碼文件的規則以使其在人類可讀的同時機器可讀。全球資訊網聯盟於 1998 年釋出的 XML 10 規範和其他相關開源標準共同定義了 XML。 XML 的設計目標是注重簡潔、通用和因特網可用性。它是一種透過 Unicode 編碼實現對多種語言有強大支援的文字資料格式。儘管 XML 的設計重心在於文件，它被廣泛應用於網路服務中鬆散資料結構的表示。 總覽 XML 的主要目的是序列化（如儲存、傳輸和重構鬆散資料）。對於兩個需要傳輸資訊的不同系統，它們也需要在檔案格式上達成一致。XML 規範了這個流程，因此其類似於用於表示資訊的通用語言。 作為一個標記語言，XML 標記，分類和在結構方面組織資料。XML 標籤代表結構且包含元資料，標籤內是照 XML 標準編碼的資料。一個附加的 XML 結構（XSD）定義了用於解釋和驗證 XML 的必要的元資料（這也被稱為結構典範）。一個符合 XML 基本語法的文件是 結構良好 的（wellformed），一個符合其附加結構的是 有效（valid）的。 網際網路工程任務組的 RFC 7303（取代了舊的 RFC 3023）提供了用於構造 XML 中媒體型別的規則。它定義了三種媒體型別： applicationxml textxml 是一個別名 applicationxmlexternalparsedentity textxmlexternalparsedentity 是一個別名 applicationxmldtd 它們被用於在不暴露內容的同時傳輸未經處理的 XML 檔案。RFC 7303 還建議基於 XML 的語言的媒體型別應以 xml 結尾（如 SVG 的 imagesvgxml）。 對於 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 中常見組成的介紹。 字元（ Character ） XML 10 規範允許的（轉義後的最終解碼值）合法字元： x9（水平製表符）、xA（回車符）、xD（換行符）、x20xD7FF、xE000xFFFD、x10000x10FFFF。即任何 Unicode 字元，不包含 surrogate blocks FFFE FFFF。 XML 規範定義了 5 個 預定義實體 來表示特殊字元 XML 也允許在每個文件定義任意數量的其它命名實體 下表列出了 5 個 XML 預定義實體。透過名字引用這些實體的格式為 name，例如，amp 將繪製為 名字 字元 Unicode 碼位 十進位制 標準 描述 quot U0022 34 XML 10 雙引號 amp U0026 38 XML 10 apos U0027 39 XML 10 撇號 lt U003C 60 XML 10 小於號 gt U003E 62 XML 10 大於號 處理器（ Processor ）與應用（ Application ） XML 處理器（Processor，也稱作 XML parser）分析標記語言並傳遞結構化資訊給應用（application）。 XML 規範規定了處理器要做什麼不能做什麼，但是應用並不在其討論範圍內。規範稱之為處理器的東西一般被通俗的稱為 XML 解析器。 標記（ Markup ）與內容（ Content ） XML 文件的字元分為標記（Markup）與內容（content）兩類。可由簡單的語法判斷出來：標記通常以 開頭，以 結尾；或者以字元 開頭，以；結尾。不是標記的字元就是內容。但是 CDATA 部分，分解符號 CDATA 與 是標記，二者之間的文字為內容。 最外界的空白符是標記。 標籤（ Tag ） 一個 tag 屬於標記結構，以 開頭，以 結尾。Tag 名字是大小寫敏感，不能包括任何字元！， 也不能有空格符， 不能以 或 或數字開始。可分為三 起始標籤 starttag，如 section 結束標籤 endtag，如 section 空白標籤 emptyelement tag，如 linebreak 元素（ Element ） 元素是文件邏輯元件，它在起始標籤與匹配的結束標籤之間，或者僅由一個空白標籤組成。例如：greetingHello worldgreeting 另一個例子是： linebreak 在標籤間的內容可以包含其他元素（稱為子元素） 屬性（ Attribute ） 屬性是由名稱 值對組成的標記結構，存在於開始標籤或空元素標籤內。例如，img srcmadonnajpg altMadonna 中，屬性的名稱是 src 和 alt，它們的值分別是 madonnajpg 和 Madonna。另一個例子是 step number3Connect A to Bstep，其中屬性的名稱是 number，其值是 3。XML 屬性只能有一個值，每個屬性在每個元素上最多隻能出現一次。在常見情況下，如果需要包含多個值的列表，則必須透過將列表編碼為符合良構性的 XML 屬性，其格式超出了 XML 本身的定義。通常，這可以是以逗號或分號分隔的列表，或者如果已知各個值不包含空格 ii，則可以使用以空格分隔的列表。例如，Welcome 中，屬性 class 的值是 inner greetingbox，同時表示兩個 CSS 類名 inner 和 greetingbox。 XML 宣告（ Declaration ） XML 文件如果以 XML declaration 開始，則表述了文件的一些資訊。如 xml version10 encodingUTF8 字元與轉義 XML 文件完全由 Unicode 字元庫中的字元組成。 除了少數特殊排除的控制字元外，Unicode 定義的任何字元都可以出現在 XML 文件的內容中。 XML 包含用於識別構成文件的 Unicode 字元編碼的工具，以及用於表達由於某種原因不能直接使用的字元的工具。 有效字元 以下範圍內的 Unicode 字碼在 XML 10 文件中是有效的： U0009 水平製表符 U000A 換行 U000D 回車 這些是在 XML 10 中唯一接受的控制字元 U0020 UD7FF UE000 UFFFD 這些排除了 BMP 中的一些非字元（所有代理項，UFFFE 和 UFFFF 是不被允許的） U10000 U10FFFF 這些包含所有在增補計劃中的字碼，包含非字元 XML 11 擴充了允許的字元集以包含上述內容和 U0001 U001F，但同時，它限制使用 U0009（ 水平製表符 ）、U000A（ 換行 ）、U000D（ 回車 ）和 U0085（下一行）以外的 C0 和 C1 控制字元 ），要求它們以轉義形式編寫（例如 U0001 必須寫為 或其等效形式）。 對於 C1 字元，此限制是向後不相容； 引入它是為了檢測常見的編碼錯誤。 U0000 （ 空 ）是唯一在任何 XML 11 文件中都不被允許的字碼。 編碼檢測 Unicode 字元集可被編碼為二進位制位元組以儲存或透過多種方式傳輸，這個過程被稱為編碼。Unicode 本身定義了一個覆蓋全字元集的編碼格式，其中知名的包含 UTF8（不包含位順序記號，是 XML 標準文件推薦使用的格式）和 UTF16。還有許多早於 Unicode 的文字編碼，如 ASCII 和多種 ISOIEC 8859 字元集，但是它們的字元集都是 Unicode 字元集的子集。 XML 允許使用任何 Unicode 定義的編碼以及其他字元集是 Unicode 子集的編碼。 XML 還提供了一種機制，使 XML 處理器可以在沒有任何先驗知識的情況下可靠地確定正在使用哪種編碼。除 UTF8 和 UTF16 之外的編碼不一定能被每個 XML 解析器識別（有些時候甚至不能識別 UTF16，儘管標準要求它也被識別）。 轉義 XML 提供了轉義工具以包含哪些不能直接引入的字元，例如： 字元 和 是關鍵的語法標記，因此不能出現在 CDATA 部分之外的內容中。 雖然被允許但是不建議在 XML 實體值中使用 某些字元編碼僅支援 Unicode 字元集中的部分字元（子集）。 例如，用 ASCII 編碼 XML 文件是合法的，但 ASCII 缺少 Unicode 字元（例如 é）的字碼 在作者的機器上可能無法輸入這個字元 某些字元的字形無法在視覺上與其他字元區分開來，例如不間斷空格 xa0 和空格 x20 ，以及西里爾大寫字母 A x410 А 和拉丁文大寫字母 A x41A 五個預定義實體 轉義前 轉義後 lt gt amp apos quot 所有有效的 Unicode 字元都可以用數字字元引用表示。 例如漢字 中，其在 Unicode 中的數字程式碼是十六進位制 4E2D，即十進位制 20013。 如果使用者無法輸入該字元，則仍然可以透過 20013 或 x4e2d 代表 中 這個字元。 類似地，字串 I 3 Jörg 可以被編碼為包含在 XML 文件中，如 I lt3 JxF6rg。 是不允許的，因為即使使用數字字元引用，空字元也是 XML 排除的控制字元之一。需要使用 Base64 等替代編碼機制來表示此類字元。 註釋 註釋可以在文件內標記外的、XML 宣告之後的任何地方出現，始於 。為了相容 SGML，註釋內不得出現 ，這意味著註釋不能巢狀。 符號在註釋中沒有特殊意義，因此實體和字元引用不會被識別，自然無法表示文件編碼字元集之外的字元。 國際化 XML 10（第五版）和 XML 11 支援在元素名稱、屬性、註釋、字元資料和處理指令中直接使用幾乎任何 Unicode 字元（除了在 XML 中具有特殊符號含義的字元，例如小於符號 ）。 以下是一個格式良好的 XML 文件，包括中文、亞美尼亞語和西里爾語字元： xml version10 encodingUTF8 俄語 լեզուռուսերենдані 俄語 句法修正和錯誤處理 XML 規範中將符合語法規範的 XML 文件定義為格式良好的文件。規範中的語法規範中的關鍵點包括： 該文件僅包含正確編碼的合法 Unicode 字元 除非執行標記描述的作用，否則不應出現任何特殊語法字元（例如 和 ） 分隔元素的開始標記、結束標記和空白標記正確巢狀，無丟失、無重疊 標籤名稱區分大小寫； 開始標記和結束標記必須完全匹配 標籤名稱不能包含任何非法字元： ，也不能包含空格，並且不能以 、 或數字開頭 僅存在一個根元素 單個根元素包含所有其他元素。 XML 文件的定義排除了那些違反了良構性規則的文字；這些文字根本不是 XML。遇到這種違反規則的情況時，XML 處理器需要報告這些錯誤並停止正常處理。這種政策，偶爾被稱為 嚴格錯誤處理，與處理 HTML 的程式的行為形成了明顯對比，因為這些程式在存在嚴重標記錯誤的情況下，仍然能夠產生合理的結果。這一方面的政策被批評為違反了 Postel 法則（對傳送的內容要保守，對接受的內容要寬容）。 XML 規範將一個有效的 XML 文件定義為一個既符合良構性規則，又遵循文件型別定義（DTD）規則的 XML 文件。 例 XML 定義結構、儲存資訊、傳送資訊。下例為小張傳送給大元的便條，儲存為 XML。 xml version10 小紙條 收件人 大元 收件人 發件人 小張 發件人 主題 問候 主題 具體內容 早啊，飯吃了沒？ 具體內容 小紙條 這 XML 文件僅是純粹的資訊標籤，這些標籤意義的展開依賴於應用它的程式。 結構 每個 XML 文件都由 XML 宣告開始，在上面的程式碼中的第一行就是 XML 宣告，xml version10。這一行程式碼會告訴解析器或瀏覽器，這個檔案應該按照 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 訊息是否已經結束。 參考文獻 延伸閱讀 Annex A of ISO 88791986 SGML 外部連結 XML 及 SGML 名詞英漢翻譯表 參見 XHTML DTD XML Schema XLink SVG XSLT X3D HTML CSS RDF RSS Unicode MXML CategoryW3C 標準 Category 檔案格式 Category 標記語言 Category 資料序列化格式 Category 帶有程式碼示例的條目