第 17 天 XML,DTD,Schema
工欲善其事,必先利其器。
XML,可扩展标记语言(eXtensible Markup Language),是 W3C(万维网联盟)认可的文档标记标准。它定义了利用简单的、人类可读的标签对数据进行标记所采用的语法。提供了计算机文档的一种标准格式。
XML 是用来描述数据的一种格式,这种格式使用简单的,易读的文本进行描述,可以用来描述无穷无尽的类型的数据。
XML 仅仅是一种标记语言,这一点非常重要。首先,XML 不是编程语言,虽然可以使用 XML 的格式来写各种程序,它仅仅是一种描述数据的格式。其次,XML 不是网络传输协议。但是,可以通过 FTP,HTTP 等等协议来传输以 XML 格式描述的数据。最后,XML 不是数据库,由于可以通过 XML 来描述数据,所以这一点常常会造成混淆。我们通常所说的数据库包括数据管理软件和所管理的数据,记住,XML 仅仅是描述数据的格式。 那么,XML 仅仅那么简单么? 水是不是也非常简单?
XML 的简单历程
20世纪70年代,IBM 公司的 Charles Goldfarb、Ed Mosher和Ray Lorie 开发了最终称为 SGML 的语言 ( Standard Generalized Markup Language,标准通用标记语言)。这种语言经过全世界数百人的开发,直到 1986年被 ISO 采用为 8879 标准。
SGML 最重要的成功是 HTML,然而,HTML 仅仅是 SGML 的一种应用,HTML 对于创建网页很成功,但是其作用仅限于此。
SGML 的主要问题是太复杂。一份正式的 SGML 规范长达 150 多页。
1998年2月,通过对于 SGML 的“精简”,诞生了 XML 1.0 ,并且很快取得了成功。
XML 的结构
可以从三个角度看 XML ? 通过文本描述 ? 明确的编码 ? 层次的标记语言
通过文本描述
XML 的内容通过文本表示出来,而不是使用二进制的方式进行描述。这使得 XML 非常便于书写、传递、阅读。
明确的编码
由于在计算机中处理的所有内容都是数字,包括文本,那么,这些数字是如何被解释为文本的呢?答案是通过某种字符编码格式。XML 文件的本文是通过明确的标码格式进行定义的,因此,可以保证被正确的解读出来。
通常情况下,在 XML 文件的第一行,使用 进行定义。其中 version 表示所使用的 XML 的版本,encoding 用来声明本 XML 文件所使用的字符编码格式。由于目前 XML 只有 1.0 版本,所以,默认情况下,版本就是 1.0,encoding 属性默认值为 UTF-8,所以,也有许多 XML 文件没有特别指定 encoding ,表示使用的是 UTF-8 编码。还有一些 XML 文件没有在第一行给出定义,则表示使用默认的定义,即 version 为 1.0,ecnoding 为 UTF-8。
层次的标记语言
XML 使用层次的标记语言来表述数据信息。
层次化的标记语言可以非常方便地描述层次化的数据,标记语言可以对数据进行说明。
XML 文档是一颗树。
XML 文件的一些特点: 区分大小写
属性必须使用引号引起来,在 XML 中使用单引号和使用双引号引起来的内容都是字符内容,没有区别。
下面看一个 XML 文件
共有七种组成元素可以出现在 XML 文件中
1. 第一行出现的称为 XML 的定义,用来说明本 XML 文件的版本和编码信息。当前所
有的 XML 版本都是 1.0 。encoding 用来指定 XML 文档的编码格式。
2. 最重要的是元素,元素是整个XML文件的主要架构。元素是通过标记进行定义的,整
个元素由三部分组成,元素的开始标记,元素的结束标记,其他包含在元素开始标记和结束标记之间的内容。我们通常使用标记的名称来做为元素的名称。没有包含内容的元素称为空元素。空元素可以简写为 <元素名称/>。
例如:张三
author 为元素的标记名,同时也是标记的名称,张三为元素的内容。
没有名字的作者可以如下表示:
3. 属性:写在元素的开始标记中的名值对,称为属性,名值之间通过等号 (=) 进行分隔,
等号前面为属性的名称,等号后面为属性的值。属性的值必须使用引号引起来,在 XML 中不区分单引号和双引号的作用,但必须同时使用单引号或者双引号,不能交叉使用。
如: code 为元素 book 的属性,code 属性的值为 F1234 同一个元素的开始标记中可以有多个属性,多个属性之间通过空白分开,但是,不能有同名的属性。 4. 文本内容,在 XML 中,在元素标记之间的内容称为文本内容,文本内容只有值,没 有名称,用来表示元素的值。 例如:张三 张三为元素 author 元素的文本内容。 在 XML 中可以使用字符引用来通过字符编码表示字符。 字符引用如果使用十进制的数字表示,格式为 十进制数字; 例如 њ。 字符引用如果使用十六进制的数字表示,格式为 十六进制数字;,注意多了一个x 5. 实体参考,由于在 XML 使用了一些特殊的符号,总共有 5 种符号: < ,>,” , ?, &,因此在书写 XML 的时候使用这些符号会导致其含义被误解,为了能够在 XML 的内容中使用这 5 种符号,XML 预定义 5 种实体来代表这 5 种符号。 lt < gt > amp & quot “ apos ? 但是,直接写这些符号也会导致混乱,所以在使用这些符号的时候,必须在实体的前面加上 &,后面加上分号 ( ; ) 来特别表示。因此在使用中出现的形式为: < < > > & & " “ ' ? 6. 注释:XML 的注释和 HTML 的注释一样,使用 例如: 7. CDATA CDATA 就是 Character Data 的意思,也就是不需要用 XML 解析器处理的 内容,例如在 XML 文件中程序代码等,要按照规定格式使用 例如: 具体内容 ]]> 8. PI 处理指令 用来在 XML 文件中包含应用程序命令,格式为 例如: 其中 xml-stylesheet 为处理指令的名称,type=?text/xsl? href=?book.xslt? 为处理指令的值。 在 XML 中,最重要的内容为元素,属性和文本内容。 DTD 虽然根据 XML 的基本规则就可以写出 XML 文档,但是,如果大家都自由随意地书写 XML,那么,这些数据还是很难以进行交流的。 为了规范 XML 的结构,先后制定了两种定义 XML 结构的规范: ? DTD ? XML Schema 在 XML 创建的早期,为了解决 XML 结构定义的问题,直接采用了 SGML 中的定义部分,这个技术称为 DTD( document type definition)。 DTD 用于定义 XML 文件的结构,既可以在 XML 文件内部定义 XML 文件的架构,也可以在一个专用的文件内定义 DTD ,然后用于检查 XML 是否符合定义的架构。 在 XML 文件内定义的形式如下: 在 XML 文件外部的专用文件内定义 DTD时,XML 文档内必须包含 DTD 的引用,此引用在文档的唯一文档类型声明中给出。使用这种方式时,需要在 XML 的定义中进行声明,例如: 不过,即使在不需要的情况下,将 standalone 设置为 no 也没有关系,此设置可选,默认为 no。 文档类型定义有两种写法: 此声明指出文档的根元素为 person ,并且该文档的定义 DTD 可以在 “http://abc.com/xml/person.dtd” 找到。 另外一种写法更常在网页上看到,例如,在网页的开始,常常有如下的定义: 此声明表示文档的根元素为 html,使用 W3C 的名为 -//W3C//DTD XHTML 1.0 Strict//EN 的网页标准,此标准可以在 http://www.w3.org/TR/xhtml/DTD/xhtml1-strict.dtd 找到。 PUBLIC 表示使用公用标准,后面紧跟着的为标准的 ID。这个 ID 唯一的标识了这个公用标准,一般来说,使用这个标准的程序往往备份了这个标准,这样,即使在不能联网的情况下,也可以使用这个标准。 定义不包含内容的元素 不包含内容的元素称为 EMPTY 下面的例子使用包含在 XML 文件内的 定义方式进行定义