XML

可擴展標記語言（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 的語言的各個方面）提出。

**應用**
SVG代碼示例
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 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）。
XML 規範規定了處理器要做什麼不能做什麼，但是應用並不在其討論範圍內。規範稱之為處理器的東西一般被通俗的稱為 XML 解析器。

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

**標籤（ Tag ）**
一個tag屬於標記結構，以開頭，以>結尾。Tag名字是大小寫敏感，不能包括任何字符 !"#$%&'()*+,/;?@\^`
所有有效的 Unicode 字符都可以用數字字符引用表示。 例如漢字“中”，其在 Unicode 中的數字代碼是十六進制 4E2D，即十進制 20,013。 如果用戶無法輸入該字符，則仍然可以通過 &#20013; 或&#x4e2d; 代表“中”這個字符。 類似地，字符串“I I &lt;3 J&#xF6;rg。
&#0; 是不允許的，因為即使使用數字字符引用，空字符也是 XML 排除的控制字符之一。需要使用 Base64 等替代編碼機制來表示此類字符。

**註釋**
註釋可以在文檔內標記外的、XML聲明之後的任何地方出現，始於  。為了兼容SGML，註釋內不得出現"--"，這意味著註釋不能嵌套。& 符號在註釋中沒有特殊意義，因此實體和字符引用不會被識別，自然無法表示文檔編碼字符集之外的字符。

**國際化**
XML 1.0（第五版）和 XML 1.1 支持在元素名稱、屬性、註釋、字符數據和處理指令中直接使用幾乎任何 Unicode 字符（除了在 XML 中具有特殊符號含義的字符，例如小於符號“
дані

**句法修正和錯誤處理**
XML 規範中將符合語法規範的 XML 文檔定義為格式良好的文檔。規範中的語法規範中的關鍵點包括：- 該文檔僅包含正確編碼的合法 Unicode 字符- 除非執行標記描述的作用，否則不應出現任何特殊語法字符（例如 ?@\^`- 僅存在一個根元素- 單個根元素包含所有其他元素。
XML 文檔的定義排除了那些違反了良構性規則的文本；這些文本根本不是 XML。遇到這種違反規則的情況時，XML 處理器需要報告這些錯誤並停止正常處理。這種政策，偶爾被稱為“嚴格錯誤處理”，與處理 HTML 的程序的行為形成了明顯對比，因為這些程序在存在嚴重標記錯誤的情況下，仍然能夠產生合理的結果。這一方面的政策被批評為違反了 Postel 法則（“對發送的內容要保守，對接受的內容要寬容”）。
XML 規範將一個有效的 XML 文檔定義為一個既符合良構性規則，又遵循文檔類型定義（DTD）規則的 XML 文檔。

**例**
XML定義結構、存儲信息、傳送信息。下例為小張發送給大元的便條，存儲為XML。

大元
小張
問候
早啊，飯吃了沒？ 

這XML文檔僅是純粹的信息標籤，這些標籤意義的展開依賴於應用它的程序。

**結構**
每個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消息是否已經結束。

**參考文獻**

**延伸閱讀**
 Annex A of ISO 8879:1986 (SGML)- year=2005- dead-url=no - archive-url=https://archive.today/20130102101245/http://www.developer.com/xml/article.php/10929_3583081_1- cite web|url=http://www.oreillynet.com/xml/blog/2003/02/five_years_later_xml.html|title=Five years later, XML..|last=St. Laurent|first=Simon|date=2003-02-12|work=O'Reilly XML Blog|publisher=O'Reilly Media|accessdate=2010-10-26|archive-date=2013-12-03|archive-url=https://web.archive.org/web/20131203032545/http://www.oreillynet.com/xml/blog/2003/02/five_years_later_xml.html- cite web|url=http://www.w3.org/2008/02/xml10-pressrelease|title=W3C XML is Ten!|date=2008-02-12|publisher=World Wide Web Consortium|accessdate=2010-10-26|archive-date=2022-02-12|archive-url=https://web.archive.org/web/20220212215424/https://www.w3.org/2008/02/xml10-pressrelease- cite web |url=http://wam.inrialpes.fr/courses/PG-MoSIG12/xml.pdf |title=Introduction to XML |date=October 2012 |work=Course Slides |publisher=Pierre Geneves |archiveurl=https://web.archive.org/web/20151016053704/http://wam.inrialpes.fr/courses/PG-MoSIG12/xml.pdf |archivedate=2015-10-16 |df= |accessdate=2018-01-19 |dead-url=no 

**外部鏈接**
  XML及SGML名詞英漢翻譯表 

**參見**
 XHTML- DTD- XML Schema- XLink- SVG- XSLT- X3D- HTML- CSS- RDF- RSS- Unicode- MXML