1、XML 基础XML 简介XML 代表 Extensible Markup Language(eXtensible Markup Language 的缩写,意为可扩展的标记语言)。XML 被设计用来传输和存储数据。XML 是一套定义语义标记的规则,这些标记将文档分成许多部件并对这些部件加以标识。它也是元标记语言,即定义了用于定义其他与特定领域有关的、语义的、结构化的标记语言的句法语言。 XML 特点 标记需要自己去创建!一个最大的特殊处(与 HTML 不同处),它可以创建标签,包括使用中文标签 语法更严格!标签必需成对嵌套,并且属性必须有属性值,属性值也必须包含在引号中 XML 仅仅用来存储数据
2、,不包含与数据显示相关的样式信息(这部分信息可以通过 CSS 等语言来传递),XML 是具有语义的 书写 XML一个完整的 XML 必须包含 XML 声明与一个文档根元素!XML 声明必须包含版本信息,文档根元素可以是空元素,但一个 XML 文档只能有一个根元素!注意:XML 目前存在 1.0 与 1.1 两个版本,但浏览器只支持 1.0 版. XML 声明的version 属性是必须的. XML 声明之前不能有任何东西,比如空格及注释(XML注释和 HTML 注释是一样的).XML 文档只能且必须包含一个根元素,当元素是空元素时需要闭合 XML 声明还有其它两个属性:standalone 与
3、 encoding.encoding 属性用来指明 XML 文档所使用的字符编码,如指定为 gbk 或 gb2312 则可以使用中文本,standalone 属性指明 XML 文档是否独立不依赖于外部文档,默认值是 yes,当使用外部 XML DTD 时需要将这个属性设为 no格式良好的 XML 与有效的 XML格式良好的 XML(Well-formed XML)是指文档格式符合 XML 语法规范的 XML,解释器在解释一个 Not Well-formed XML 的时会出现错误而停止!一个遵守 XML 语法规则,并遵守相应 DTD 文件规范的 XML 文档称为有效的XML 文档(Valid
4、XML)。注意我们比较“Well-formed XML“和“Valid XML“,它们最大的差别在于一个完全遵守 XML 规范,一个则有自己的“文件类型定义(DTD)“。 将 XML 文档和它的 DTD 文件进行比较分析,看是否符合 DTD 规则的过程叫validation(确认)。这样的过程通常我们是通过一个名为 parser 的软件来处理的。 DTD文档类型定义(Document Type Definition)由于 XML 可以自定义标签,那么自然各人编写的标签不一样,这样同步数据便成了问题,因为其它人不知道某个标签应该怎么用,表示什么意思.DTD 就是为了解决此问题的!DTD 是一种保
5、证 XML 文档格式正确的有效方法,可以比较 XML 文档和 DTD文件来看文档是否符合规范,元素和标签使用是否正确。一个 DTD 文档包含:元素的定义规则,元素间关系的定义规则,元素可使用的属性,可使用的实体或符号规则。DTD 分为内部 DTD 与外部 DTD,内部 DTD 包含在 XML 文档中,外部 DTD 则通过URL 引用.一个 DTD 文件是以.dtd 结尾的文本文件在 XML 中引入 DTD DOCTYPE 文档类型声明内部 DTD,可以将 standalone 设置成 yes.外部 DTD,需要将 standalone 设成 noDOCTYPE 分析DTD 声明始终以!DOCT
6、YPE 开头,空一格后跟着文档根元素的名称,如果是内部 DTD,则再空一格出现,在中括号中是文档类型定义的内容. 而对于外部 DTD,则又分为私有 DTD 与公共 DTD,私有 DTD 使用 SYSTEM 表示,接着是外部 DTD 的 URL. 而公共 DTD 则使用 PUBLIC,接着是 DTD 公共名称,接着是 DTD 的 URL.下面是一些示例 公共 DTD,DTD 名称格式为“注册/组织/类型 标签/语言“,“注册“指示组织是否由国际标准化组织(ISO)注册,+表示是,-表示不是.“组织“即组织名称,如:W3C; “类型“一般是 DTD,“标签“是指定公开文本描述,即对所引用的公开文本
7、的唯一描述性名称,后面可附带版本号。最后“语言“是 DTD 语言的 ISO 639 语言标识符,如:EN 表示英文,ZH 表示中文,在下面的地址有完整的 ISO 639 语言标识符列表 http:/ftp.ics.uci.edu/pub/ietf/http/related/iso639.txt 下面是 XHTML 1.0 Transitional 的 DTD.以!DOCTYPE 开始,html 是文档根元素名称,PUBLIC 表示是公共 DTD,后面是 DTD 名称,以-开头表示是非 ISO 组织 组织名称是 W3C,EN 表示 DTD 语言是英语,最后是 DTD 的 URL 注意:虽然 DT
8、D 的文件 URL 可以使用相对 URL 也可以使用绝对 URL,但推荐标准是使用绝对 URL.另一方面,对于公共 DTD,如果解释器能够识别其名称,则不去查看 URL 上的 DTD 文件 开始编写 DTDXML 文档构建模块所有的 XML 文档(以及 HTML 文档)均由以下简单的构建模块构成: 元素 , 元素即所说的自定义标签,它是 XML 以及 HTML 文档的主要构建模块。 属性 , 属性可提供有关元素的额外信息。属性总是被置于某元素的开始标签中。属性总是以名称/值的形式成对出现的。 实体 , 实体是用来定义普通文本的变量。实体引用是对实体的引用。如HTML 文档中的即是一个实体引用当
9、文档被 XML 解析器解析时,实体就会被展开。 PCDATA , PCDATA 的意思是被解析的字符数据(parsed character data)。可把字符数据想象为 XML 元素的开始标签与结束标签之间的文本。PDATA 是会被解析器解析的文本。这些文本将被解析器检查实体以及标记。文本中的标签会被当作标记来处理,而实体会被展开。不过,被解析的字符数据不应当包含任何、 以及 实体来分别替换它们。 CDATA , CDATA 的意思是字符数据(character data)。CDATA 是不会被解析器解析的文本。在这些文本中的标签不会被当作标记来对待,其中的实体也不会被展开。 CDATAPC
10、DATA 是指会被解析的字符串,这解析是指将其中的实体引用换成对应的实体内容.也就是说,一般的 XML 中的文本节点都是 PCDATA,当这些文本中要包含一些 XML 特殊字符时,需要使用实体引用,当这些字符很少时,使用实体引用还不是很麻烦,而当特殊字符很多时,则需要使用 CDATA,即不解析字符串. CDATA 区段开始于 “,CDATA 段中可以包含除 CDATA 限定符之外的任何字符 元素声明元素声明使用或的语法/EMPTY 关键字表示元素是个空元素/ANY 关键字表示元素中可以出现任何内容,也可以为空/下面这个声明表示 root 中可以有文本,也可以是空/()表示一个分组, 其中是放的
11、允许在元素出现的内容,#PCDATA 表示文本/child 是子元素的名称 ,这个声明表示 root 中必须且只能有一个 child 元素/以逗号分隔,表示子元素依次出现/竖线与“OR“的意思相近,表示 root 元素中只能出现 child1 或 child2/root 中 child 子元素可以出现一次,也可以不出现/root 中 child 子元素至少出现一次/root 中 child 子元素可以出现任意次数或不出现/()还可以嵌套,这里表示 root元素中第一次子元素必须是 child/紧接着是 a 或 b/*,?,+这些量词可作用于分组,这里表示 root 元素中第一次子元素必须是 c
12、hild/紧接着是 a 或 b 出现一次或多次属性声明属性声明使用的语法.示例如下:上面的属性声明表示:元素 input 的 type 属性值是文本,默认值是 text;以下是属性类型表类型 描述CDATA 值为字符数据 (character data)(en1|en2|.) 此值是枚举列表中的一个值ID 值为唯一的 idIDREF 值为另外一个元素的 idIDREFS 值为其他 id 的列表NMTOKEN 值为合法的 XML 名称NMTOKENS 值为合法的 XML 名称的列表ENTITY 值是一个实体ENTITIES 值是一个实体列表NOTATION 此值是符号的名称xml: 值是一个预定
13、义的 XML 值默认值参数可以使用下列值值 解释值 属性的默认值.该属性可以出现,也可以不出现,当没有明确指定该 属性时,属性值使用默认值#REQUIRED 属性值是必需的#IMPLIED 属性不是必需的,可以出现,可以不出现#FIXED value 属性值是固定的.属性可有可无,但有的时候,其值必须是 value/img 元素的 src 属性是必须的,值为字符串/script 元素的 type 属性默认值是 text/javascript/div 元素的 id 属性是唯一的ID 标识,可有可无/input 元素的 type 属性是三个值中的一个,默认值是 text/label 元素的 for
14、 属性是页面中另一个元素的 ID实体声明一般实体实体是用于定义用于定义引用普通文本或特殊字符的快捷方式的变量。实体引用是对实体的引用。实体可在内部或外部进行声明。一个内部实体是以的形式声明的,一个外部私有实体是以格式声明 ,一个外部公共实体是以 ,其中公共实体名称和 DOCTYPE 中的公共 DTD 名称格式是一样的. 一个实体引用是格式/实体定义/内部实体/外部私有实体/外部公共实体/实体引用参数实体参数实体是只在 DTD 中使用的实体(并且参数实体只能在外部 DTD 中声明),它的声明语法与一般实体不同处在于其要在实体名称前加个百分号,而引用时则使用%实体名称;的形式/这句将声明元素 ro
15、ot,具有一个子元素 childXML 命名空间XML 命名空间可提供避免元素命名冲突的方法。由于 XML 中的元素名是预定义的,当两个不同的文档使用相同的元素名时,就会发生命名冲突。命名空间其实就是给这些标签名加个前缀!现在,root 下仍然是两个 template 元素,它们的节点名称仍然是 template,但是它们的意义不一样了,因为它们使用了不同的前缀!但是 XML 命名空间前缀需要声明才可以使用,如果不声明,则被视为元素名称的一部分! XML 命名空间属性被放置于某个元素的开始标签之中,并使用以下的语法:xmlns:namespace-prefix=“namespaceURI“ . 当一个命名空间被定义在某个元素的开始标签中时,所有带有相同前缀的子元素都会与同一个命名空间相关联。注意,用于标示命名空间的地址不会被解析器用于查找信息。其惟一的作用是赋予命名空间一个惟一的名称。不过,很多公司常常会作为指针来使用命名空间指向某个实存的网页,这个网页包含着有关命名空间的信息。 这样,为了区分那些名称相同而含义不同的元素,必须在每个元素名前面加前缀.其实还可以在父级元素上声明默认命名空间,让所有没有前缀子元素的默认使用此命名空间.HTML 的命名空间便是一个例子.