可扩展标记语言(英文:Extensible Markup Language,简称:XML),是一种简单灵活的文本形式标记语言 ,为W3C的推荐标准 。它具备了简单性、 可扩展性 、 互操作性 、开放性等特点,支持跨平台、跨网络、跨程序语言的数据描述方式 ,主要用来存储和发送数据信息,使各种基于Web的应用之间可以更方便地交换数据 。
XML是在SGML和 HTML 的基础上形成的 ,设计目的是用来传输数据 。1998年2月,正式发布XML 1.0版本 。在受到广泛使用后 ,各种各样的XML行业标准和规范也纷纷出台 。2006年8月,W3C正式发布XML 1.1(第二版) 。而截至2007年8月,XML已发展成为一个技术大家族,涵盖了XLink 、 层叠样式表 、SVG 等各种各样的XML行业标准和规范 。2023年3月,XML Entity Definitions for Characters(3rd Edition)公开推出 。
XML的语言结构分为多个部分,以布局语言、格式表语言及可扩展链接语言为主 。它的标签没有被预定义,用户需要在使用时自行定义。相对于数据库表格的二维表示,其使用的树形结构更能表现出数据的包含关系 。XML的应用领域包括 电子商务 、出版、CAD/CAM、保险机构、厂商和中介组织信息交换等 ,它的常见扩展有可拓展商业报告语言XBRL、 地理标记语言 GML、查询语言 XPath 、模式语言XML Schema、转换语言 XSLT 等 。
发展历程
开发背景
20世纪80年代初,世人开始使用标准通用标记语言(英文:Standard Generalized Markup Language,简称:SGML)。SGML可用于创建标记语言,它为语法标记提供了异常强大的工具,同时具有极好的扩展性,因此在分类和 索引 数据中非常有用。但是,SGML非常复杂,且实现SGML标准的软件较为昂贵,当时几个主要的浏览器厂商都明确拒绝支持SGML,使它在网上传播遇到了很大障碍 。
20世纪90年代初,Web的诞生推动了Internet及其应用的发展 。1990年,CERN开始设计 HTML (英文:Hyper Text Markup Language,简称:HTML)。因免费、简单,HTML在世界范围内得到了广泛的应用。它侧重于主页表现形式的描述,大大丰富了主页的视觉、 听觉 效果,在推动WWW的蓬勃发展、推动信息和知识的网上交流方面发挥出重要作用 。
在1995年Java出现后,Web技术及其应用进一步加速发展。与此同时,因HTML并不具备大规模Web应用所需的可拓展性、结构化和数据验证等特性,所以Web应用开发者开始体验到当时HTML的局限性。为此 ,1996年,由Sun Microsystems的Jon Bosak所领导的一个专家小组开始研究制定一个新的标准,该小组由全球信息网协会(W3C)支持。专家小组所研发的新标准要求必须简单,并具有可延伸性,同时是人类及 计算机 皆可阅读的 。
版本迭代
1998年2月,W3C批准发布XML 1.0 ,其确定了标签(tags)及属性的定义 。同年,商业领域开始使用XML。Zona Research的报告显示,从1998年的第二季度到第三季度,网页使用XML的 美国 IT商店比率从1%跃升到16%。业界领导者如 微软 、 网景 、IBM、 奥多比 等,也采用了此项新标准 。后随着技术的更新迭代,互联网、医药、在线新闻出版等各种各样的XML行业标准和规范也纷纷出台 。
2006年8月,W3C正式发布XML 1.1(第二版) 。这一版本做出了规范性的更正,使Web的功能和 互操作性 得到进一步加强 。截至2007年8月,XML已发展成为一个技术大家族,包括有XML链接语言XLink、定义 样式表 语言 层叠样式表 、网络矢量图形标准SVG等 。2023年3月,以Unicode 15为基础,W3C推出了XML Entity Definitions for Characters(3rd Edition),新定义了多组名称,进一步合理运用了Unicode 字符 及字符序列 。
主要特点
命名空间
XML中的命名空间
命名空间是一组名称,其中所有名称都是唯一的。命名空间必须确保其成员的唯一性,并必须提供空间名称才能发挥作用。但XML文档中使用的所有名称都属于一个全局命名空间,因此很难想出唯一的名称。在基于XML的大型分布式系统中,这最终会造成许多歧义。对此,W3C针对XML 1.0命名问题提出了解决方案,即XML建议中的命名空间。此规范定义了如何扩展XML 1.0具体语法,以支持命名空间;并定义了用于命名XML命名空间的语法,以及引用XML命名空间中某些对象的语法;却不会解决用于定义XML命名空间中内容的语法问题 。
空间标识符的命名
XML命名空间 标识符 必须符合特定的语法,即统一资源标识符(URI)引用的语法,这也意味着XML命名空间标识符必须遵循RFC2396定义的URI通用语法。根据URI规范,URI有两种常规形式,分别为统一资源定位符(URL)和 统一资源名称 (URN),任一类型的URI都可用作命名空间标识符。URI定义为用于标识抽象或物理资源的压缩字符串,具备唯一性,因此无需在XML命名空间标识符之上分层其他命名空间。在XML命名空间中,URI引用标识抽象资源,特别是命名空间 。
定义命名空间
通过XML中的命名空间,可以赋予元素和属性唯一的名称。XML建议中的命名空间不提供用于定义命名空间中内容的语法,在许多情况下甚至不需要这种类型的语法定义。大多数XML命名空间都在正式规范文档中进行定义,这些文档描述了元素的名称以及属性及其语义,这正是正式定义所有W3C命名空间的方式。使用语法命名空间定义,如XML架构提供的语法命名空间定义,可以构建更复杂的软件,以便在运行时利用名称和类型信息 。
使用命名空间
在XML文档中,使用命名空间是指给定命名空间中的一个或多个元素或属性的使用过程。这需要了解XML建议中命名空间概述的语法,以便使用命名空间 标识符 限定元素和属性名称。其中,元素和属性名称都可以使用命名空间前缀进行限定。前缀实际上只是命名空间标识符(URI)的缩写,通常相当长,通过命名空间声明 映射 到命名空间标识符。而当文档使用来自多个命名空间的元素或属性时,在给定元素上往往有多个命名空间声明存在。命名空间前缀也可以通过在嵌套范围重新声明前缀来重写,但它无法取消声明 。
默认命名空间
用于将命名空间标识符与元素名称相关联的命名空间声明,即默认命名空间声明。默认命名空间声明较为特殊,并没有前缀。当对元素使用默认命名空间声明时,其范围内的所有未限定元素名称将自动与指定的命名空间 标识符 相关联。但是,默认命名空间声明对属性没有影响。默认命名空间的语法设计是为了方便,但它们往往会导致比价值更大的混淆。这种混淆通常源于一个事实——元素和属性的处理方式不同,并且嵌套元素并没有立即被分配为默认命名空间标识符 。
抽象命名空间
命名空间的处理,在XML文档的抽象 视图 中展开。XML信息集(Infoset)定义XML文档的抽象结构,使开发人员免受基础序列化格式的复杂性的困扰。根据Infoset,每个元素或属性都有两个名称属性,即命名空间 标识符 和本地名称。 XPath 则是另一个XML规范,用于定义如何标识抽象文档结构中的节点。通过XPath表达式,可以按命名空间限定的名称来标识元素和属性 。
语言结构
XML有许多部分,其中主要的三个部分是:文档类型定义(Document Type Definition,DTD),即XML的布局语言;可扩展的格式语言(eXtensible Style Language,XSL),即XML的格式表语言;可扩展链接语言(eXtensible LinkLanguage,XLL) 。
文档类型定义
DTD文件能使XML页面包含更多内容,表现出更为复杂的形式。一个DTD需要呈现出与之关联的XML文档的根元素,以及文档的内容和结构、文档结构中的每一个细节。XML页面信息是结构化的,有些与数据库结构类似,因而更具访问性,其检索结果也更有针对性、更为准确。此外,也可以将URL地址定义在DTD文件中,当Web主页地址发生变化时,程序员只需改动DTD文件中的定义即可,而不必在 HTML 文档中一一改变URL地址,从而使Web的维护更方便,用户也不会遇到URL地址找不到的信息,Web的应用也更稳定 。
简单的DTD文档如下 :
可扩展的格式语言
XSL用于将XML数据翻译为 HTML 或其他格式的语言。XML文档用XSL格式转换为HTML文档,通常的步骤微三步:首先,用XML分析器将XML文档分析成DOM对象,即建立了原文档的一个节点树;其次,用XML分析器分析XSL文档,用模板匹配的方法遍历XML节点树,将树中的节点按模板的设定转换为模板指示的显示语言;最后,把 HTML 的结尾部分添在根节点模板的后面,即成为一份完整的 HTML 文档。XML文档的格式信息都包含在称为格式表的格式文件中,XSL就是它的两种格表的其中一种。另一种是层叠式页面( CSS ),它是一种静态的格式描述模式,使开发者构造出具有表达层结构的Web页面来,以有别于XML的 数据结构 。XSL也能和 HTML 一起构造层叠式页面。它可以解释数量不限的标记,使Web的版面变得更丰富多彩 。
XSL文件的代码如下 :
可扩展链接语言
XLL是XML的链接语言,它与 HTML 的链接相似,但功能更为强大。XLL支持可扩展的链接和多方向的链接,它打破了 HTML 只支持超级文本概念下最简单的链接限制,可以在多个资源之间建立链接,还可以建立多向的链接。此外,XLL还能支持独立于地址的 域名 、双向链路、 环路 、多个源的集合链接等。XLL链接可不受文档制约,完全按用户要求来指定和管理 。
简单的XLL文档如下 :
格式规范
XML由XML元素组成,XML文件格式是纯文本格式。XML文件书写的具体规则可分为7条,包括标签的使用、属性的定义、XML文档版本和 字符编码 的声明等 。
声明语句必须存在且位于XML文档的最开始 :其格式为<?xml version="1.0" encoding="UTF-8"?>,包含XML版本、编码格式等信息 。
元素标签大小写敏感 :在XML文档中,大小写是有区别的,“A”和“a”是不同的标记。前后标记的大小写一致,可以减少因大小写不匹配而产生的文档错误 。
必须有单一的根元素: 根元素即紧接着声明后面建立的第一个元素,文档的其他元素都是这个根元素的子元素。根元素的起始标记要放在所有其他元素的起始标记之前,其结束标记则要放在所有其他元素的结束标记之后 。
所有属性值必须用引号包围 :所添加的引号可以是单引号,也可以是双引号,否则将被视为错误 。
元素需匹配开始和结束标签: 和 HTML 类似,开始标签加上属性、标签内数据和结束标签才构成一个完整的XML元素。如以<cars>、<car>、< name >和<price>为开始标签,对应的结束标签则为</cars>、</car>、</name>和</price> 。
空元素必须关闭: 空标记是指标记对之间没有内容的标记。在XML中,规定所有的标记必须有结束标记。标记对之间没有内容,仅包含一个属性,但是也要有结束标记 。
元素可以嵌套: 在XML中,一个元素可以包含一个或多个子元素。其中,有些元素本身可以作为自己的子元素,这种情况被称为递归 。
XML与其他标记语言的对比
功能
XML是用来定义文档标记语言的框架,主要用来存储和发送数据信息,使各种基于Web的应用之间可以更方便地交换数据。此种语言使用方便、特性优良,功能用途也较多,主要分为六种 。
表述底层数据
在 配置文件 方面,Servlet配置、 映射 注入配置等配置信息都可以用XML来配置,如web.xml和Struts的struts.xml、Spring的application.xml等。XML也可代替.ini文件,方便直观,并且有不少不错的解析器可以选用。另外,SOAP协议的载体同样基于XML,ATOM亦是基于XML用来表达要传输的数据 。
分离数据
在不使用XML的情况下,数据必须存储在 HTML文件 内。当开发者使用XML后,数据则可以存放在分离的XML文档中, HTML 只需要实现数据的显示和布局。这样一来,若数据发生变动,将不会导致HTML文件也随之变动 。
交换数据
XML是一种网络规范,可在用户应用程序之间实现多个数据传送,方便网络数据存取。不同语言之间,均可以用XML来交换数据 。把数据转换为XML格式存储不仅可以大大减少交换数据时的复杂性,还可以使这些数据被不同的程序读取 。
充分利用数据
于实际开发中,可利用XML为文档添加元数据 。此外,XML是与软、硬件和应用程序无关的,所以可以使数据被更多的用户和设备所利用,而不仅基于 HTML 标准的浏览器。别的客户端和应用程序也可以把XML文档作为数据源来处理,就像它们对待数据库一样,设计者的数据可以被各种各样的“阅读器”处理 。
存储和共享数据
XML提供了一种与软件和硬件无关的存储和共享数据的方法,可使大量的数据存储到XML文件或者数据库中。应用程序可以读写和存储数据,一般的程序也可以显示数据 。 数据文件 也能使用XML来保存,如常用的Office文件 。
创建新的语言
利用XML可以创建与特定领域有关的标记语言,如MusicML、MathML、 化学标记语言 、SVG等,从而使得特定领域的人们可以交换笔记、数据和信息。XML在数学领域中的应用称为数学标记语言(Mathematical Markup Language,MathML),用于描述数学方程式。化学标记语言CML(Chemical Markup Language)则可能是第一个XML应用,可以描述分子等信息 。
标准
XML标准体系框架
XML标准的体系与SGML标准的体系非常相似,可分为元语言标准、基础标准、应用标准三个层次 。
XML基础标准及其关系
XML基础标准根据其功能可分为五组:外围标准、核心标准、操作标准、样式与链接标准、内容描述标准。它们分别从不同的方面为XML的应用作了更为详细明确的规定 。
编程接口
常见的XML编程接口有DOM和SAX,这两种接口处理XML文件的方式不同,使用场合也不同 。此外,还有 LINQ to XML、 SQL XML等 。
DOM
DOM,全称Document Object Model,是W3C组织推荐的处理可扩展置标语言的标准编程接口。DOM把整个页面 映射 为一个多层的节点结构, HTML 或XML页面中的每个组成部分都是某种类型的节点,这些节点又包含着不同类型的数据。DOM由核心DOM、XML DOM及HTML DOM三部分组成,XML DOM为针对XML文档的标准模型 。
SAX
SAX,全称Simple API for XML,是Java中第一个广泛采用的用于XML的API ,也是一种用于访问XML文档的事件驱动的串行访问机制。SAX处理XML文档的速度最快、占用 内存 最少,经常被需要传输和接收XML文档的servlet和面向网络的程序使用。SAX面向状态无关的处理,其中元素的处理不依赖于之前的元素 。
StAX
StAX(Streaming API for XML)为XML流式处理API,是一个基于Java的流式处理、事件驱动的拉取分析API,也是一个能够创建快速、相对容易编程且内存占用量小的双向XML解析器,用于读取和写入XML文档。StAX API的主要目标是通过公开的、基于迭代器的简单API来为程序员提供解析控制,它可以过滤XML文档,以便可以忽略客户端不需要的元素,并且可以支持非XML数据的XML 视图 。许多情况下,StAX的性能优于基于DOM的API,启用StAX的客户端也通常比SAX客户端更容易编码 。
LINQ to XML
LINQ to XML是最新的XML编程方法,支持在.NET 编程语言 中处理XML,提供使用.NET语言集成查询(LINQ)Framework的 内存 中XML编程接口,相当于更新的和重新设计的文档对象模型(DOM)XML编程接口。在很多环境中,XML已广泛采用为格式化数据的方式。LINQ to XML利用 C# 和Visual Basic中的语言,面向各种开发人员,提供文档对象模型(DOM)的内存中文档修改功能,并支持对多个数据域使用LINQ查询表达式,可以编写出更少的代码,表达能力更强、更为紧凑、功能更强,同时可以查询表达式,使XML变得更加简单 。
SQL XML
SQL XML接口提供用于以 String、Reader、Writer或者Stream形式访问XML值的方法。XML是一种内置类型,用于将XML值作为列值存储在数据库表的一行中。XML值可以通过源访问,也可以将其设置为结果。这些值与XML分析器API(如DOM、SAX和StAX)以及 XSLT 转换和 XPath 评估一起使用。默认情况下,驱动程序将SQL XML对象实现为指向XML数据的逻辑指针,而不是数据本身。 SQL XML对象在创建它的事务期间有效 。
应用领域
XML的应用领域包括 电子商务 、出版、CAD/CAM、保险机构、厂商和中介组织信息交换等 。
XML在Web数据挖掘中的应用
XML为基于Web的 数据挖掘 技术赋予了强大的功能和灵活性,这在数据的集成、发送、处理和显示的各环节中都有所体现。在Web 数据挖掘 过程中,XML解决了搜索多样的不兼容的数据库的问题,它使得不同来源的非结构化数据可以很容易地结合在一起,实现了异构数据的集成。同时,XML的自定义性及可扩展性足以标示各种类型的数据,解决了数据的统一接口问题,易于作 数据交换 。此外,XML自带解释执行系统,还将计算负载从Web服务器转移,使得 分布式计算 成为可能,并根据需要过滤显示信息,使本地的数据更加合理地以客户配置,适应了不同用户的需求 。
XML语言在新一代电力自动化系统中的应用
对于新一代电力自动化系统,XML语言的应用分为在新一代面向对象的 电力系统 自动化标准中的应用和在新一代电力系统异构数据交换中的应用。在新一代面向对象的电力系统自动化标准中的应用中,XML用于 变电站 配置语言SCL(Substation Configuration Language),并用于新一代EMS系统。在新一代电力系统异构 数据交换 中的应用中,XML语言为异构系统数据交换的工具,既可单独处理数据,也可以在不同的数据库之间交换数据 。
XML在网页设计中的应用
XML语言的拓展性体现在多个方面,是 HTML 的一种补充应用,可以极大的丰富HTML语言网页设计。当程序编写者使用XML语言来对网页进行设计时,可对网页文字表现的数据内容进行设置,使网页的整体简洁程度得到提升。XML语言网页对数据的处理是独立的,这样的设计可以大大的提高处理的速度,并且XML编写的数据流通性会非常广泛,可以很方便的在全世界内得到传递,不需要特定的编写程序或者重新对数据库信息进行整合或者更新 。
常见扩展
XML的可扩展性机制设计良好,它的内容随着时间的推移而演进,常见扩展有XBRL、 地理标记语言 、 XPath 、 XSLT 、ebXML等 。
可拓展商业报告语言
可拓展商业报告语言(eXtensible Business ReportingLanguage,XBRL),一种基于XML的开发性业务报告技术标准。XBRL的构想最早由美国 华盛顿州 的注册会计师查尔斯·霍夫曼于1998年4月提出,这一语言的主要作用在于将财务和商业数据电子化,促进了财务和商业信息的显示、分析和传递。它通过定义统一的数据格式标准,规定了企业报告信息的表达方法 。
地理标记语言
地理标记语言 (Geography 标记 Language,GML)是一种基于XML的规范,由开放地理信息系统协会(Open GIS Consortium, 开放地理空间信息联盟 )在1999年提出,是一种用于描述现实世界中地理对象的标记语言,用于存储、转换、传输地理要素以及与地理要素相关的信息。它可对地理要素空间几何信息进行编码,可在互联网上共享地理信息,便于传输和存储,主要应用于地理空间信息领域 。
XML路径语言
XML路径语言(XML Path Language, XPath ),为 表达式语言 ,是一种用于对XML文档的各个部分进行寻址的语言,旨在供 XSLT 和XPointer使用。在XQuery 1.0和XPath 2.0 数据模型 (XDM)的基础上,XML Path引入了架构感知和数据类型。XML Path还允许处理符合XQuery和XPath数据模型中定义的数据模型的值,支持强制转换和函数参数中的联合类型 。
可扩展样式表转换语言
可扩展样式表转换语言(Extensible Stylesheet Language Transformation, XSLT ) ,是一个用于将XML文档转换为其他XML文档的语言。XSLT是作为XSL的一部分而设计的,XSL通过使用XSLT来描述如何将文档转换为另一个使用格式化词汇表的XML文档,从而指定XML文档的样式。此外,XSLT还设计为独立于XSL使用。但是,XSLT并不是为完全通用的XML转换语言 。
电子商务可拓展标记语言
2001年5月10日, 联合国 促进贸易和 电子商务 中心(UN/CEFACT)与结构化信息标准发展组织(OASIS)正式批准了电子商务可拓展标记语言(Electronic Business Extensile Markup Language,ebXML) 。ebXML与其他 电子商务 标准的最大不同之处在于,它不针对某一具体的行业。ebXML标准技术规范和W3C XML技术规范保持一致,为ebXML贸易伙伴应用内部及相互之间提供 互操作性 ,为已认可的 电子数据交换 标准和正制定的XML商务标准提供转换的方法,使互操作性和效益最大化 。