| 文章首页 |
|---|
| XML学习教程:XML与标准化(上) |
| 1.1 为什么使用XML? |
| 1.2 什么是XML? |
| 1.3 数据的结构表示 |
| 1.4 XML文档 |
| 1.5 数据是从表示和处理中分离出来的 |
| 1.6 使XML数据自描述 |
| 1.7 XML数据处理 |
| 1.8 开放式标准 |
| 1.9 从XML中受益 |
| 10 前景 |
4 XML文档
XML是一种基于文本的格式,在许多方面类似于HTML,后者是专为存储和传输数据而设计的。XML源是由XML元素组成的,每个XML元素包括一个开始标记(<title>),一个结束标记(</title>)以及两个标记之间的信息(称为内容)。就象HTML一样,XML文档保存利用标记注释的文本。然而,与HTML不同的是,XML允许
无限的标记集,各标记集并不表示如何显示,而是表示其含义。例如,可以将XML元素标记为价格、订单编号或名称。由文档的作者确定使用何种数据以及哪种标记名称最合适。
标记是对了文档存储格式和逻辑结构的描述。在形式上,标记有以下各种可能项:注释、引用、字符数据段、起始标记、结束标记、空元素、文档类型声明(DTD)和序言。
很容易创建XML文档。如果您熟悉HTML,那么您可以很快地学会采用XML格式进行编写。在该示例中,利用XML描述天气预报,可以用XML的扩展名保存该文件,如Weather.xml。
<weather-report>
<date>2001年1月1日</date>
<time>08:00</time>
<area>
<city>南京</city>
<state>江苏</state>
<region>东部</region>
<country>中国</country>
</area>
<measurements>
<skies>局部多云</skies>
<temperature>-3</temperature>
<wind>
<direction>西北</direction>
<windspeed>3</windspeed>
</wind>
<h-index>51</h-index>
<humidity>87</humidity>
<visibility>10</visibility>
<uv-index>1</uv-index>
</measurements>
</weather-report>
各标记表示各数据项的含义(是否为<日期>元素、<区域>元素等等),而并不描述显示数据的次序和形式。此数据的所有接收者均可将该文档解码,以便用于自己的特定目的。例如,某人可以利用该信息制定当天的计划,而气象研究员可以将其作为南京的历史记录。
每个XML文档都有一个逻辑结构和物理结构。从物理角度来看,文档由实体单元组成,一个实体也可以在其他文档的实体中被引用。一个文档以一个根元素或文档实体来开始。从逻辑上讲,文档由声明(declaration)、元素(element)、注释(comment)、字符引用(character reference)和处理说明(processing instruction)组成。这些组成部分在文档的标记中必须明确规定。物理结构从另一角度来规范XML文档。文档的起始标记和结束标记对数据进行结构化组织,并确定了元素的范围和相互之间的关系。
在XML文档中,除标记之外就是字符数据。一般的字符用其本身来表示,但这不适用于XML中的保留字符。例如,字复符"&"和"<"只能作为标记定界符,或在注释、处理指令和CDATA字段中直接使用,其他情况下则需要用字符引用或特定的字符串来表示。这类字符是XML的预定义实体。常见的预定义实体见下表:
表1 XML预定义实体
| 字符 | 名称 | 实体引用 |
| & | Ampersand | & |
| > | Greater than | > |
| < | Less than | < |
| ' | Apostrophe | ' |
| " | Quotation mark | " |
例如,如果要表示"a<b",就必须写成:"a"、"'"和""",它们的名称分别为amp、lt、gt、apos和quot。因此,如果要在元素中引用这些实体,就必须写成":&"、"<"、">"、"'"和"""。
字符引用代表了ISO/IEC 10646字符集中的一个特定字符,它是一个十六进制代码。如果XML文档需要引用现有设备不能直接输入的字符(比如回车),则必须用字符引用来代表。
XML文件也可以对一个处理XML数据的应用提供处理信息,即处理说明,其格式为:"<?目标应用名instructions?>"。例如,<?xml version="1.0"?>就是一种处理指令。解析器通过它得知该文档应当遵循XML 1.0标准。XML文件可以对不同应用提供不同处理说明。
引用预定义实体或字符非常方便,而且计算机处理也十分容易,但去读一懂大堆像"&&"、"#xNNNN;"这样枯燥的数据确实是一件烦琐的事;在写文档时也得面临同样的问题,你必须化精力去寻找这些字符实体,然后将特殊字符替换为字符引用。以"<![CDATA"开始并以"]]>"结束的字符数据段(CDATA Section)凌驾于解析器之上,其中的内容将不被解析。字符数据段中除了不能有结束标志"]]>"外,可以包括任意字符序列。例如,标记化的文本可以直接放在字符数据段中而不会被解释为结构化的标记。我们可以在字符数据段中包含一段HTML代码,也可以在字符数据段中添加编程语言代码。
字符数据段为XML的后续处理提供了编程接口。例如,我们可以在XML的样式语言XSL中采用ECMAScript脚本语言编写灵活丰富的应用。
XML文件总有一个"序言(prolog)"声明该文件为XML文档,例如(<?xml version="1.0"?>)。该序言也可以包含附加信息,如:
<?xml version="1.0" encoding="ISO-8859-1" standalone="yes"?>
Prolog的属性包括:版本、编码以及是否独立,后者指明该文档是否引用一个外部实体或外部数据类型。另外还可以直接包含本来在DTD中声明的实体定义和规范。
从上面的介绍,我们可以看出,XML有以下几个特点:
- XML文档是纯文本,因此可用从文本编辑器直到可视化开发环境的任何工具创建和编辑,程序可以更简单,而在需要存储大量数据的场合,一个数据库的XML前端就可以满足需要,因此XML提供了从小配置文件到公司级数据仓库的可扩展性。
- 基于内容的数据标识,因而可被不同程序用于不同用途。
- 可格式化。在显示很重要的时候,XSL可指定如何显示数据。由于数据和显示是分离的,甚至可以为同一数据指定不同的样式表用于不同输出,并很容易在将来使用新的格式。
- 具有很强的链接能力,可以定义双向链接、多目标链接、扩展联结和两个文档间的链接。
- 易于处理。XML对格式的定义更为严格,并具有层次结构,处理起来更加容易。它是与厂商无关的标准,可以任选一个解析器来处理。
您可以在XML中定义无限的标记集。虽然可以使用HTML标记以粗体或斜体的方式显示文字,但XML可提供一个用于标记结构数据的框架。XML元素可以将其关联数据声明为零售价格、营业税、书名、降雨量或其他任何需要的数据元素。随着整个组织以及Internet上的其他用户采用XML标记,将出现搜索和处理数据的相应能力,而不管发现该数据的应用程序如何。一旦定位了数据,就可以在网络上传送并以多种方式在浏览器中显示,或者传送到其他应用程序以供进一步处理和查看。
标记表示一块数据。通常,它对应于某个表中的某个字段。然而,这并不是必要的。标记可以是一个计算列(价格乘以数量)。没有理由认为一个XML文件表示某个表中的所有数据。正像通常看到的那样,XML将表示包括许多表的查询结果。只要接收应用程序能够搞清XML中的数据的意思,数据是从哪里来的以及该数
据如何到达XML文件并不重要。
如果你喜欢这篇文章,请阅读本文相关的下列内容:
