1、XML 的产生XML 的全称是 eXtensible Markup Language,意思是可扩展的标记语言,它是标准通用标记语言(Standard Generalized Markup Language,SGML)的一个子集。在 80 年代早期,IBM 提出在各文档之间共享一些相似的属性,例如字体大小和版面。IBM设计了一种文档系统,通过在文档中添加标记,来标识文档中的各种元素,IBM 把这种标识语言称作通用标记语言(Standard Generalized Markup Language,SGML) ,即 GML。经过若干年的发展,1984 年国际标准化阻止(ISO)开始对此提案进行讨论,
2、并于 1986 年正式发布了为生成标准化文档而定义的标记语言标准(ISO 8879) ,称为新的语言 SGML,即标准通用标记语言。SGML 功能非常强大,是可以定义标记语言的元语言。1998 年 2 月,W3C 发布了 XML1.0 标准,其目的是为了在 WEB 上能以现有的超文本标记语言(HTML)的使用方式提供、接收和处理通用的 SGML。XML 是 SGML 的一个简化子集,它以一种开放的、自我描述的方式定义了数据结构。在描述数据内容的同时能突出对结构的描述,从而体现出数据与数据间的关系。W3C 组织于 2004 年 2 月 4 日,发布了 XML1.1 的推荐标准,这是最新的 XML
3、 版本,不过目前大多数的应用还是基于 XML1.0 的推荐标准,因此我们也将遵照 XML1.0 规范来讲述。如果大家想要了解 XML1.1 规范的内容,可以参看下面的网址:http:/www.w3c.org/TR/2004/REC-xml11-2004204/W3C 介绍W3C 是万维网联盟(World Wide Web Consortium)英文的缩写,它成立于 1994 年 10 月,以开放论坛的方式来促进开发互通技术(包括规格、指南、软件和工具) ,开发网络的全部潜能。万维网联盟(W3C)从 1994 年成立以来,已经发布了 90 多份 WEB 技术规范,领导着 WEB 技术向前发展。W
4、3C 认为自身不是官方组织,因此将它正式发布的规范称为推荐(建议)标准,意思是进一步标准化的建议,但是由于该组织自身的权威性往往成为事实上的标准关于 XML 的 2 个问题XML 是 HTML 的扩展吗?HTML 的全称是 Hypertext Markup Language(超文本标记语言),而 XML 得全称是(eXtensble Markup Language)可扩展的标记语言,这很容易让人联想到 XML 是通过增加新标记来扩展 HTML 的一种标记语言。实际上 HTML 和 XML 在标记语言中处于不同的层次。SGML、HTML 和 XML 之间是什么关系?SGML 是一种在 WEB 发
5、明之前早已存在的使用标记来描述文档资料的通用语言,它是一种定义标记语言的元语言。HTML 和 XML 都是从 SGML 发展而来的标记语言,因此,它们有一些共同点,如相似的语法和标记的使用。不过 HTML 是在 SGML 定义下的一个描述性的语言,是 SGML 的一个应用,其 DTD 作为标准被固定下来,而 XML 是 SGML 的一个简化版本,是 SGML 的一个子集,严格意义上来说,XML 仍然是 SGML。HTML 不能来定义新的应用,而 XML 可以。XML 和 SGML 是兼容的,但又没有 SGML那么复杂,XML 的设计出发点是取 SGML 的优点,去除复杂的部分,使其保持轻巧,可
6、以再 WEB 上工作。HTML、SGML 和 XML 都有其适合的地方,它们中的任何一个都不会使其他的一个废弃。对于像新闻、网络日记、论坛留言等大部分短期的数据,HTML 仍是 WEB 上快速出版数据最简单的方法。如果数据要长期使用,并且需要更多的一些结构,推荐使用 XML。不同于 HTML 和 XML,SGML 可能永远不会再 Internet 桑被广泛接受,因为它不是为某个网络协议而设计,也从没有为某个网络协议的需求而优化过,对于高端的、复杂结构的出版应用,SGML 将继续应用。XML 文档的组成文档的组成部分包括:声明,元素,注释,字符引用和处理命令。这些都是通过显示的标记(markup
7、)来指明的 标记不同于标签,它包括开始标签、结束标签、空元素标签、实体引用、字符引用、注释、CDATA 段定界符、文档类型声明,处理指令、XML 指令、文本声明以及在任何文档实体顶层的空白等。XML 文件声明:版本信息 文件编码格式 是否是独立的文件,yes 为是XML 文档类型声明:指出 XML 文件所使用的 DTD(Document Type Definition)文档类型声明分 2 种形式,一种是声明 DTD 在一个外部的文件中,如根元素名 外部 DTD 文件XML 元素元素由开始标签、结束标签和元素内容构成,对于空元素由空元素标签构成在给 XML 元素命名时注意,以 ”xml”或任何匹
8、配(X,x)(M,m)(L,l)的字符串开头的名字,被保留用于 XML 规范当前或后继版本的标准化。此外还要遵循以下规范1. 名称只能以字母,下划线或者冒号开头;2. 名称中可以包含字母、数字、下划线或其他 XML 标准中允许的字符;3. 名称中不能包含空格;4. 名称中尽可能不要使用:号,因为冒号在命名空间中被用于分割名称空间前缀和本地部分示例:空元素带属性的元素带内容的元素这是一个学生的信息李四18带内容和属性的元素18提示:元素和标签的这两个词具有不同的含义。元素是指开始标签、结束标签及两者之间的一切内容,包括属性、文本、注释、子元素。标签是一对尖括号(accp”处理指令:处理非 XML
9、 格式的数据,以 结束常用的使用样式表处理指令非 W3C 定义的处理指令不能使用 xml 开头,后面的 href 及 type 属性是传递给应用程序的数据xml-stylesheet 处理指令总是放在 xml 声明后,第一个元素之前。注意 xml 声明虽然和 xml 处理指令很相似,但是 xml 声明不是 xml 处理指令额外XML 规范中空白的处理:空白包括空格、制表符和换行,xml 处理器会将不是标记的所有字符都传递给应用程序,一个进行有效性验证的处理器会通知应用程序这些字符中出现了那些空白。在 XML 文档中,可以使用元素中使用一个特殊的属性 xml:space,来通知应用程序保留此元素
10、中的空白在有效的文档中,xml:space 属性和其他属性一样,在使用时必须声明。xml:space 属性必须声明为 Enumerated(枚举)类型,它的值为“default ”和“preserve”两只之一,也可以两个都取,例如:Default 表示对此元素使用应用程序的缺省空白处理,preserve 表示保留所有的空白格式良好的 XML如果一个 XML 文档有且只有一个根元素,符合 XML 的嵌套规则,满足 XML 规范中定义的所有格式正确性的约束,并且在文档中直接或间接引用每一个已分析的实体都是格式正确的,我们称这个文档是一个格式良好(well-formed)的 XML 文档DTD(D
11、ocument Type Definition)DTD 为 XML 文档的编写者和处理者提供了共同遵循的原则,使得与文档相关的各种工作有了一个统一的标准。XML 文档中引用 DTD通过在 XML 文档中使用文档类型声明来创建当前的 XML 文件与 DTD 文件的关联。当进行文档有效性验证的 XML 处理器读到该指令时,它获取 DTD,并根据其定义的规则对文档进行检验。文档类型声明必须位于 XML 声明之后,且在根元素声明之前。我们可以在 XML 文档中定义 DTD 如:也可以通过 URL 引用外部的 DTD,如:或者同时采用这两种方式。内部 DTD文档声明由号结束。DTD 中,所有关键字都是大
12、写的,但是 DTD 中定义的元素和属性的大小写是可以任意指定的,注意 DTD 是对大小写敏感的。内部 DTD 直观,修改方便,不用担心 XML 处理器找不到 DTD,但是它也是有缺点的:1. 在文档中定义 DTD 会导致 XMl 文件长度增加,即使不需要 DTD 验证,DTD 的声明也会跟随着文档一起传输2. 如果多个 XML 文档需要共享一个 DTD,我们就需要在每个文档中都加入 DTD,这是相当繁琐的。解决方法就是将 DTD 写入到外部 DTD 文件,通过 URI 加载它。外部 DTD在文档声明时,使用使用 SYSTEM 或 PUBLIC 来指出外部 DTD 的位置。SYSTEM 关键字表
13、示文档使用的是私有的 DTD 文件,SYSTEM 引入外部 DTD。PUBLIC 关键字表示声明公共的 DTD,并且这个 DTD 还有一个名称,PUBLIC 导入外部DTD这个 DTD 一般存放于某个公共的地方,XML 处理器会先根据 DTD 的名称查找外部DTD,如果找不到就会使用外部 DTD 的 URI 来寻找。公共的 DTD 名称要遵守一些约定,如果一项 DTD 是 ISO 标准,它的名字要以字符串“ISO”开始,如果是一个非 ISO 的标准组织批准的 DTD,它的名称以(+)号开始,如果不是标准组织批准的 DTD,它的名字以“- ”开始,或者“-”号后接双/和 DTD 所有者的名字。如
14、URI 的指定是相对于应用 DTD 文件的 XML 文件位置而言,可以使相对路径,也可以使绝对路径。DTD 编写元素类型声明元素内容说明有以下 5 种可能的元素内容形成1.#PCDATA 包含字符数据2.子元素3.混合内容4.EMPTY5.ANY子元素可以利用括号(包含哪些内容 )、逗号(指定顺序) 、竖线(或者关系) 、星号(0 个或多个) 、加号(1 个或多个) 、问号(0 个或 1 个)的组合,可以说明很复杂的内容模型混合模型时,#PCDATA 必须是模型中的第一选项,不能在(#PCDATA|name)模型中使用逗号、问好、和加号EMPTY 表明该元素不包含字符数据也不包含子元素,是个空
15、元素,如:ANY 表明该元素可以包含任何的字符数据和子元素,只要他们不违反 XML 格式良好的约束就可以了,如:提示:实际使用时,尽量不要使用 ANY实体声明实体分为一般实体和参数实体一般实体:是在文档内容中使用的实体,而参数实体是在 DTD 中使用已分析的实体,都用ENTITY 关键字声明,如:引用实体:“&实体名;”参数实体:只能在外部 DTD 中使用,声明如下:引用实体:%实体名外部 DTD 示例外部实体读取普通的文件内容属性表说明属性用于将名字-值对与元素进行关联,属性说明只能在开始标签和空元素标签中出现。属性表声明详细说明了与给定元素类型相关联的每一个属性的名字,数据类型和缺省值(如
16、果有的话)声明语法:缺省声明的 4 种值:1.#REQUIRED:必须为元素提供该属性2.#IMPLIED :元素可以包含属性也可以不包含属性3.#FIXED+缺省值: 一个固定的缺省值,不能修改缺省值4.只有缺省值:与 FIXED+缺省值一样,但是可以修改缺省值属性类型:总共有 10 中属性类型1. CDATA字符数据,特殊符号需要预定义字符或预定义实体引用2. Enumerated属性值从枚举列表中使用,如:9. NMTOKENSNMTOKENS 类型与 IDREFS 和 ENTITYS 类似,它的值由多个名称标记组成,每个名称必须是有效的名称标记,他们之间以空格分隔10. NOTATIONNOTATION 类型属性的值就是在记号声明中的名称记号就是为非 XML 数据描述一种可能的格式,或者指定一个外部的处理程序。两种记号声明的方式MIME 类型(设定某种扩展名的文件用一种应用程序来打开的方式类型)另一种使用 URI 路径,指出外部处理程序的位置XML 名称空间名称空间通过使用一系列保留属性来声明,这种属性的名字必须是以 xmlns 或 xmlns:作为前缀。与其他任何 XML 属性一样,这些属性可以直接或以缺省的方式给出。第一种形式:元素名是指你在哪一个元素上声明名称空间,在这个元素上声明的名称空间适用于声明它的元素和属性