XML

可扩展标记语言（，简称：）是一种标记语言。XML是从标准通用标记语言（SGML）中简化修改出来的。它主要用到的有可扩展标记语言、可扩展样式语言（XSL）、XBRL和XPath等。

历史 

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

GML的重要概念：
 文件中能夠明確的將標示與內容分開
 所有文件的標示使用方法均一致

1978年，ANSI將GML加以整理規範，發佈成為SGML（）。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技术应用
 标记是用来定义一份资料应该如何呈现
 -{zh-cn:元数据;zh-tw:後設資料;zh-hk:元數據;zh-mo:元數據}-（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 version="1.0"?>
  <小紙條>
    <收件人>大元</收件人>
    <發件人>小張</發件人>
    <主題>問候</主題>
    <具體內容>早啊，飯吃了沒？ </具體內容>
  </小紙條>
这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消息是否已经结束。

参考文献

延伸閱讀 

 Annex A of ISO 8879:1986 (SGML)

外部链接 
 XML及SGML名词英汉翻译表 
 XML格式化工具 (中文) 
 XML验证器  
 XML在线格式化工具

参见 
 XHTML
 DTD
 XML Schema
 XLink
 SVG
 XSLT
 X3D
 HTML
 CSS
 RDF
 RSS
 Unicode
 MXML

 
W3C标准
文件格式
标记语言
数据序列化格式
带有代码示例的条目