跳转到内容

XML

本页使用了标题或全文手工转换
维基百科,自由的百科全书

这是本页的一个历史版本,由27.9.32.169留言2012年9月28日 (五) 02:44 (添加字符与转移。)编辑。这可能和当前版本存在着巨大的差异。

RecipeBook的例子,一種基於可扩展标记语言語法上的烹飪技術書刊。此標籤可轉換為:超级文本标记语言, PDF以及Rich Text Format並使用程式語言XSL

可扩展标记语言(英文:英語:eXtensible Markup Language,英文缩写:XML),是一种标记语言。标记指计算机所能理解的信息符号,通过此种标记,计算机之间可以处理包含各种信息的文章等。如何定义这些标记,既可以选择国际通用的标记语言,比如超级文本标记语言,也可以使用像可扩展标记语言这样由相关人士自由决定的标记语言,这就是语言的可扩展性。它主要用到的有可扩展标记语言、可扩展样式语言(XSL)、XBRL可扩展标记语言路径语言等。

歷史

可扩展标记语言是從1995年開始有其雛形,並向全球资讯网联盟提案,而在1998二月發佈為全球资讯网联盟的標準(可扩展标记语言1.0)。可扩展标记语言的前身是标准通用标记语言,是自国际商业机器(IBM)從1960年代就開始發展的GML標準化後的名稱。

通用标记语言的重要概念:

  • 文件中能夠明確的將標示與內容分開。
  • 所有文件的標示使用方法均一致。

1978年,ANSI將通用标记语言加以整理規範,發佈成為标准通用标记语言,1986年起為ISO所採用(国际标准化组织 8879),並且被廣泛地運用在各種大型的文件計劃中,但是标准通用标记语言是一種非常嚴謹的文件描述法,導致過於龐大複雜(標準手冊就有500多頁),難以理解和學習,進而影響其推廣與應用。

同時全球资讯网联盟也發現到超级文本标记语言的問題:

  • 不能解決所有解釋資料的問題 - 像是影音檔或化學公式、音樂符號等其他形態的內容。
  • 效能問題 - 需要下載整份文件,才能開始對文件做搜尋。
  • 擴充性、彈性、易讀性均不佳。

為了解決以上問題,專家們使用标准通用标记语言精簡製作,並依照超级文本标记语言的發展經驗,產生出一套使用上規則嚴謹,但是簡單的描述資料語言:可扩展标记语言。 可扩展标记语言是在一個這樣的背景下誕生的——为了有一個更中立的方式,讓消費端自行決定要如何消化、呈現從服務端所提供的資訊。

可扩展标记语言被廣泛用來作為跨平台之間交互數據的形式,主要針對數據的內容,通過不同的格式化描述手段(扩展样式表语言转换,层叠样式表等)可以完成最終的形式表達(生成對應的超级文本标记语言,便携式文件格式或者其他的文件格式)。

用途

可扩展标记语言的设计用来传送及携带数据信息,不用来表现或展示数据,超级文本标记语言則用来表现数据,所以~的用途的焦点是它说明数据是什么,以及携带数据信息。

  • 丰富文件(英文:Rich Documents)- 自定文件描述并使其更丰富
    • 属于文件为主的可扩展标记语言技术应用
    • 标记是用来定义一份资料应该如何呈现
  • 元数据(英文:Metadata)- 描述其它文件或网络资讯
    • 属于资料为主的可扩展标记语言技术应用
    • 标记是用来说明壹份资料的意义
  • 配置文档(英文:Configuration Files)- 描述软件設定的参数

字符和转义

可扩展标记语言的所有字符均为统一码

有效字符

在下列范围里头是有效的“统一码”代码点在可扩展标记语言壹点零的文档里头:

  • U+0009, U+000A, U+000D:这些是唯一的C0与C1控制码在可扩展标记语言壹点零的里头控制接受:
  • U+0020 至 U+D7FF, U+E000 至 U+FFFD:这不包括壹些基本多文种平面里头的非字符(所有替代物,U+FFFE和U+FFFF都是禁止的);
  • U+10000 至 U+10FFFF:这包括全部代码点在辅助位面里头,包括非字符。

那个代码点U+0000是唯壹的字符当然在任何可扩展标记语言1.0或1.1文档里头这是不允许的。

注释

在一个文档里头以外的其他标记,注释可以出现在任何地方。注释不能出现在可扩展标记语言声明之前。注释开始时必须同“<代码><!--</代码>”和结尾必须同“<代码>--></代码>”。该字符串“<代码>--</代码>”(双连字符)在注释中是不允许的;这就意味着注释不能嵌套。符号在注释中没得特别的意义,所以实体和字符引用是不会承认的,是没得办法用字符集以外的字符来代表文档的编码。

例如壹个有效的注释: "<代码><!-- 不需要转义 <代码> & 例如在注释里头 --></代码>"


架构和验证

最老的可扩展标记语言模式语言是文档类型定义,继承自标准通用标记语言

~有如下所述的好处:

  • 单个的~的支持是普遍存在的,由于其列入可扩展标记语言壹点零标准。
  • 多个的~简洁比较元素为基础的模式语言和因此在壹个单壹屏幕上呈现更多的信息。
  • 多个的~允许标准公共实体集的声明为了发布字符。
  • 多个的~定义壹个文件类型而不是类型使用壹个命名空间,把所有的文件约束在壹个单壹的集合。

~有如下所述的限制:

  • ~没支持更新的可扩展标记语言特性以及最重要的命名空间.
  • ~缺乏表现力,仅仅支持基本的数据类型。
  • ~缺乏可读性。文档类型定义设计师通常大量使用参数实体, 这使得它更容易定义复杂的语法,但牺牲了清晰的可读性。
  • ~使用的语法基于正则表达式语法,继承自标准通用标记语言的描述模式。典型的可扩展标记语言应用程序编程接口,比如可扩展标记语言简单编程接口不要试图提供应用程序的结构化表示语法,所以它是对程序员较少访问比壹个基于元素的语法可能。

壹个新的模式语言,由万维网联盟,作为文档类型定义的后继者,是壹种可扩展标记语言架构。在描述可扩展标记语言里头,可扩展标记语言架构定义可扩展标记语言架构定义是比文档类型定义更强大的。他们用丰富的数据类型定义系统,并允许更详细的约束可扩展标记语言文档的逻辑结构之上。“可扩展标记语言模式”还可以使用基于可扩展标记语言的格式,这使得它可以使用普通的可扩展标记语言工具,以帮助它们进行处理。

正规语言于下一代的可扩展标记语言

~(英文缩写:RELAX NG),作为文件模式定义语言的壹部分。模式可以写在一个基于可扩展标记语言的语法或则是更紧凑的非可扩展标记语言语法;这两种语法是同构的,和James Clark的庄转换工具能使用它们之间的转换,而不会丢失信息。 “正规语言于下一代的可扩展标记语言”跟可扩展标记语言模式比中有一个简单的定义和验证框架,使其更易于使用和实施。它也有能力使用数据类型的框架插件一个~作者的话,例如,可能在可扩展标记语言文件里头需要一个值以符合“正规语言于下一代的可扩展标记语言”定义的数据类型。

模式跟踪

模式跟踪(英文缩写:Schematron)是一个语言用于使断言存在或在一个可扩展标记语言文件里头不存在的模式。它通常使用可扩展标记语言路径语言(英文缩写:XPath)表达式。

实例

可扩展标记语言定义结构、存储信息、传送信息。下例存储为可扩展标记语言

<?xml-stylesheet
	type="text/xsl"
	href="simple.xsl" ?>
<根部标签
	验证="通道壹">
	<元素 定位 方向="0.0.0.8">
		<名>系统标识符</名>
		<说明>~必须是壹段统壹资源标识符!</说明>
		<编号>壹_壹_壹_壹</编号>
	</元素>
</根部标签>

这可扩展标记语言文档仅是纯粹的信息标签,这些标签意义的展开依赖于应用它的程序。

结构

每个可扩展标记语言文档都由可扩展标记语言序言开始,在前面的代码中的第壹行就是可扩展标记语言序言,<?xml version="1.0"?>。这壹行代码会告诉解析器或浏览器这个文件应该按照可扩展标记语言规则进行解析。

之后就是可扩展标记语言的根元素[1]。 在上面的例子中,此元素就是<根部标签>,而</根部标签>是根元素的结尾标记(即结束标签)。任何可扩展标记语言文档都只能有壹个根元素。根元素里面,可以有子元素,子元素里面可以有子子元素,以此类推。这样就已经合乎语法了,这称为形式良好的可扩展标记语言[2]

但是,根元素到底叫<根部标签>还是<BQ>,则是由文档类型定义XML纲要定义的。如果文档类型定义规定根元素必须叫<BQ>,那你写作<根部标签>就不符合要求。这种不符合文档类型定义或可扩展标记语言纲要的要求的可扩展标记语言文档,被称作不合法的可扩展标记语言,反之则是合法的可扩展标记语言

可扩展标记语言文件的第贰行并不壹定要包含文档元素;如果有注释或者其他内容,文档元素可以迟些出现。

范例文件中的第三行代码是注释,你会发现它与超级文本标记语言中使用的注释风格是一样的。这是可扩展标记语言从标准通用标记语言中继承的语法元素之一。

页面再往下的一些地方,可以发现<desc>标签裡有一些特殊的语法。<![CDATA[ ]]>代码用于表示无需进行解析的文本,允许诸如大于号和小于号之类的特殊字符包含在文本中,而无需担心破坏可扩展标记语言的语法。文本必须出现在<![CDATA[和]]>之间才能合适地避免被解析。这样的文本称为“字符数据部分”(英文:Character Data Section,英文缩写:CData Section)。

下面的一行就是在第二本书的定义之前的:

<?page render multiple authors ?>

虽然它看上去很像可扩展标记语言序言,但实际上是一种称为处理指令(英文:processing instruction 英文缩写:PI)的不同类型的语法。处理指令的目的是为了给处理页面的程序(例如可扩展标记语言解析器)提供额外的信息。处理指令通常情况下是没有固定格式的,唯一的要求是紧随第一个问号必须至少有一个字母。在此之后,处理指令可以包含除了小于号和大于号之外的任何字符串序列。

最常见的处理指令是用来指定可扩展标记语言文件的样式表:

这个处理指令一般会直接放在可扩展标记语言序言之后,通常由万维网浏览器使用,来将可扩展标记语言数据以特殊的样式显示出来。

可扩展标记语言的结构有一个缺陷,那就是不支持分帧(framing)。当多条可扩展标记语言消息在传输控制协议上传输的时候,无法基于可扩展标记语言协议来确定一条可扩展标记语言消息是否已经结束。

参见

外部链接

参考

  1. ^ 可扩展标记语言树结构. [2012-7-8] (中文(中国大陆)). 
  2. ^ 可扩展标记语言验证. [2012-7-8] (中文(中国大陆)).