可延伸標記式語言（英語：Extensible Markup Language，簡稱：XML）是一種標記式語言。XML 是從標準通用標記式語言（SGML）中簡化修改出來的。它主要用到的有可延伸標記式語言、可延伸樣式語言（XSL）、XBRL 和 XPath 等。



歷史

1960 年代，IBM 開始發展的 GML（Generalized Markup Language）。

GML 的重要概念：


* 檔案中能夠明確的將標示與內容分開

* 所有檔案的標示使用方法均一致

1978 年，ANSI 將 GML 加以整理規範，發佈成為 SGML（The Standard Generalized Markup Language）。1986 年，XML 的前身起為 ISO 8879，當時被廣泛地運用在各種大型的檔案計劃中，但是 SGML 是一種非常嚴謹的檔案描述法，導致過於龐大複雜，其標準手冊就有 500 多頁，這使它難以理解和學習，進而影響了推廣與應用。

同時 W3C 也發現到 HTML 的問題：


* 不能解決所有解釋資料的問題 - 像是影音檔或化學公式、音樂符號等其他形態的內容。

* 效能問題 - 需要下載整份檔案，才能開始搜尋檔案中的內容。

* 擴充性、彈性、易讀性均不佳。

為了解決以上問題，專家們使用 SGML 精簡製作，並依照 HTML 的發展經驗，產生出一套使用上規則嚴謹，但是簡單的描述資料語言：XML。XML 從 1995 年開始有其雛形，並向 W3C（全球資訊網聯盟）提案，而在 1998 年二月發佈為 W3C 的標準（XML1.0）XML 是在一個這樣的背景下誕生的 —— 為了有一個更中立的方式，讓客戶端自行決定要如何消化、呈現從伺服器端所提供的資訊。

XML 被廣泛用來作為跨平台之間互動數據的形式，主要針對數據的內容，通過不同的格式化描述手段（XSLT，CSS 等）可以完成最終的形式表達（生成對應的 HTML，PDF 或者其他的檔案格式）。



用途

XML 設計是用來傳送和攜帶資料資訊，不用於表現和展示資料，HTML 則用來表現資料，所以 XML 用途的焦點是在於說明資料是什麼以及攜帶資料資訊。


* 富文件（Rich Documents）- 自訂檔案描述並使其更豐富
  
* 屬於檔案為主的 XML 技術應用
  
* 標記是用來定義一份資料應該如何呈現

* 元資料（Metadata）- 描述其它檔案或網路資訊
  
* 屬於資料為主的 XML 技術應用
  
* 標記是用來說明一份資料的意義

* 組態文件（Configuration Files）- 描述軟體設定的參數



重要術語

字元（characters）

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

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

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

處理器（Processor）與應用（application）

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

標記（Markup）與內容（content）

XML 文件的字元分為標記（Markup）與內容（content）兩類。標記通常以 `<` 開頭，以 `>` 結尾；或者以字元 `&` 開頭，以 `;` 結尾。不是標記的字元就是內容。但是 CDATA 部分，分解符號 `<![CDATA[` 與 `]]>` 是標記，二者之間的文字為內容。 最外界的空白符是標記。

標籤（Tag）

一個 _tag_ 屬於標記結構，以 `<` 開頭，以 `>` 結尾。Tag 名字是大小寫敏感，不能包括任何字元 !"#$%&'()\*+,/;<=>?@[\]^`{|}~， 也不能有空格符， 不能以 "-" 或 "." 或數字開始。可分為三類：

　
: 
* _start-tag_，如 `<section>`;

* _end-tag_，如 `</section>`;

* _empty-element tag_，如 `<line-break />`.

元素（Element）

元素是文件邏輯組成，或者在 start-tag 與匹配的 end-tag 之間，或者僅作為一個 empty-element tag。例如：`<greeting>Hello, world!</greeting>`. 另一個例子是： `<line-break />`.

單個根（root）元素包含所有的其他元素。

屬性（Attribute）

屬性是一種標記結構，在 start-tag 或 empty-element tag 內部的「名字 - 值對」。例如：`<img src="madonna.jpg" alt="Madonna" />`。每個元素中，一個屬性最多出現一次，一個屬性只能有一個值。

如果屬性有多個值，這需要採取 XML 協定以外的方式來表示，如採用逗號或分號間隔，對於 CSS 類或識別碼的名字可用空格來分隔。

XML 聲明（declaration）

XML 文件如果以 _XML declaration_ 開始，則表述了文件的一些資訊。如 `<?xml version="1.0" encoding="UTF-8"?>`.



例

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

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

結構

每個 XML 文件都由 XML 聲明開始，在上面的代碼中的第一行就是 XML 聲明，<?xml version="1.0"?>。這一行代碼會告訴解析器或瀏覽器，這個檔案應該按照 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 訊息是否已經結束。



參考文獻



延伸閱讀



外部連結


* XML 及 SGML 名詞英漢翻譯表 （繁體中文）

* XML 格式化工具 (中文) （頁面存檔備份，存於網際網路檔案館）

* XML 驗證器 （頁面存檔備份，存於網際網路檔案館） （英文）

* XML 線上格式化工具 （中文）



參見


* XHTML

* DTD

* XML Schema

* XLink

* SVG

* XSLT

* X3D

* HTML

* CSS

* RDF

* RSS
  
* Unicode

* MXML