XML
XML 是独立于软件和硬件的信息传输工具。
什么是XML?
- XML 指可扩展标记语言(EXtensible Markup Language)
- XML 是一种标记语言,很类似 HTML
- XML 的设计宗旨是传输数据,而非显示数据
- XML 标签没有被预定义。您需要自行定义标签。
- XML 被设计为具有自我描述性。
- XML 是 W3C 的推荐标准
XML与HTML的差别
XML 不是 HTML 的替代。
XML 和 HTML 为不同的目的而设计:
XML 被设计为传输和存储数据,其焦点是数据的内容。
HTML 被设计用来显示数据,其焦点是数据的外观。
HTML 旨在显示信息,而 XML 旨在传输信息。
XML的用途
XML 应用于 web 开发的许多方面,常用于简化数据的存储和共享。
XML 数据以纯文本格式进行存储,因此提供了一种独立于软件和硬件的数据存储方法。
通过 XML,可以在不兼容的系统之间轻松地交换数据。
XML的声明
一个XML实例:
1 |
|
第一行是XML声明,它定义XML版本为1.0,所使用的编码为ISO-8859-1
以下是XML的处理指令,以<?
开头,以?>
结尾
1 | <? ?> |
XML 树结构
XML 文档形成了一种树结构,它从“根部”开始,然后扩展到“枝叶”。
XML 文档必须包含根元素。该元素是所有其他元素的父元素。
XML 文档中的元素形成了一棵文档树。这棵树从根部开始,并扩展到树的最底端。
所有元素均可拥有子元素:
1 | <root> |
XML语法规则
XML的语法规则很简单,容易学习
所有XML元素都要有关闭标签
在HTML中,下面代码是没有关闭标签的元素:
1 | <p> Hello, XML |
在XML中,如果省略了关闭标签是违反语法规则的。
1 | <p> Hello, XML </p> |
**注意:**XML的声明没有关闭标签,是因为声明不属于XML的元素,不需要关闭标签
XML标签对大小写敏感
XML必须正确嵌套
在HTML中,没有正确嵌套的元素有时是可以使用的:
1 | <b><i> Hello, XML </b></b>i> |
在XML中,所有元素都必须正确嵌套:
1 | <b><i> Hello, XML </i></b> |
XML文档必须有根元素
上文提到过XML 文档形成了一种树结构,它从“根部”开始,然后扩展到“枝叶”。
因此XML文档必须有一个元素是其他所有元素的父元素。
XML的属性值加引号
例如给下面的date属性赋值,其属性值必须加引号:
1 | <note date="09/15/2023"> |
单引号和双引号都可以。
实体引用
在XML中,一些字符拥有特殊的意义,如<
、>
。
如果把字符<
放在XML元素中,会发生错误,这是因为解析器遇到<
会把它当作新元素的开始。
因此需要使用实体引用来代替这些特殊字符。
在XML中,有5个预定义的实体引用:
实体引用 | 字符 | 含义 | 英语单词 |
---|---|---|---|
< | < | 小于 | less than |
> | > | 大于 | greater than |
& | & | 和号 | ampersand |
' | ’ | 单引号 | apostrophe [计]撇号; |
" | " | 引号 | quotes |
这和在Markdown中的用法一样。
**注意:**在 XML 中,只有字符 “<” 和 “&” 确实是非法的。大于号是合法的,但是用实体引用来代替它是一个好习惯。
XML中的注释
与HTML类似
1 | <!-- This is a comment --> |
在XML中,空格会被保留
HTML 会把多个连续的空格字符裁减(合并)为一个,在 XML 中,文档中的空格不会被删节。
XML元素
什么是XML元素?
XML 元素指的是从(且包括)开始标签直到(且包括)结束标签的部分。
元素可以包含其他元素或文本,元素可以拥有属性(属性值用引号。
XML元素命名规则
- 名称可以含字母、数字以及其他的字符
- 名称不能以数字或者标点符号开始
- 名称不能以字符 “xml”(或者 XML、Xml)开始
- 名称不能包含空格
可使用任何名称,因为XML没有保留的关键字。
最佳命名习惯是使名称具有描述性。名称应当比较简短,避免使用-
、.
、:
这些字符。
XML元素是可扩展的
XML 的优势之一,就是可以经常在不中断应用程序的情况进行扩展。
XML属性
元素的属性必须有属性值,且属性值必须用引号括起来。
请尽量使用元素来描述数据。而仅仅使用属性来提供与数据无关的信息。
有时候会向元素分配 ID 引用。这些 ID 索引可用于标识 XML 元素,它起作用的方式与 HTML 中 ID 属性是一样的。
例如:
1 | <root> |
XML验证
拥有正确语法的 XML 被称为“形式良好”的 XML。
通过 DTD 验证的 XML 是“合法”的 XML。
形式良好的XML文档
XML文档拥有正确的语法
- XML 文档必须有根元素
- XML 文档必须有关闭标签
- XML 标签对大小写敏感
- XML 元素必须被正确的嵌套
- XML 属性必须加引号
验证XML文档
合法的XML文档是“形式良好”的XML文档,同样遵守了文档类型定义(DTD)的语法规则。
文档类型定义(DTD)
文档类型定义(DTD)可定义合法的XML文档构建模块。
它使用一系列合法的元素来定义文档的结构。
DTD 可被成行地声明于 XML 文档中,也可作为一个外部引用。
内部DTD的引用
XML和DTD在同一个XML文本中存在
它应当通过下面的语法包装在一个 DOCTYPE 声明中:
1 |
注意:关键字DOCTYPE必须大写。
外部DTD的引用
将DTD作为一个单独的文件独立保存,该DTD是一个文本文件,扩展名为
.dtd
。
引入外部DTD文档,需要在XML文本中的DOCTYPE指令中使用关键字SYSTEM或者PUBLIC进行引用,以达到对XML文本数据的规范。
1 |
外部DTD作为一个外部文件可以被多个XML文档引用。
对于外部DTD,根据其性质分为两种:
- 公有文件,指国际上标准组织制定或者行业内部得到广泛支持认可的DTD文件,使用关键字
PUBLIC
。 - 私有文件,指未公开的、属于个人或某些组织的DTD文件,使用关键字
SYSTEM
。
内部DTD和外部DTD可以混合使用。
为什么使用DTD?
通过 DTD,每一个 XML 文件均可携带一个有关其自身格式的描述。
通过 DTD,独立的团体可一致地使用某个标准的 DTD 来交换数据。
可以使用 DTD 来验证自身的数据。
DTD建构模块
所有的 XML 文档(以及 HTML 文档)均由以下简单的构建模块构成:
- 元素
- 属性
- 实体
- PCDATA
- CDATA
元素
元素是 XML 以及 HTML 文档的主要构建模块。
XML元素的例子是"note"和"message"。
属性
属性提供有关元素的额外信息。
属性总是被置于某元素的开始标签中。属性总是以名称/值的形式成对出现的。
实体
实体是用来定义普通文本的变量。实体引用是对实体的引用。
PCDATA
PCDATA 的意思是被解析的字符数据(parsed character data)。
可把字符数据想象为 XML 元素的开始标签与结束标签之间的文本。
CDATA
CDATA 的意思是字符数据(character data)。
**CDATA 是不会被解析器解析的文本。**在这些文本中的标签不会被当作标记来对待,其中的实体也不会被展开。
DTD元素
ELEMENT
声明一个元素
在 DTD 中,XML 元素通过元素声明来进行声明。
1 | <!ELEMENT 元素名称 类别> |
或
1 | <!ELEMENT 元素名称 (元素内容)> |
空元素
1 | <!ELEMENT 元素名称 EMPTY> |
只有 PCDATA 的元素
只有 PCDATA 的元素通过圆括号中的 #PCDATA 进行声明:
1 | <!ELEMENT 元素名称 (#PCDATA)> |
带有任何内容的元素
通过类别关键词 ANY 声明的元素,可包含任何可解析数据的组合:
1 | <!ELEMENT 元素名称 ANY> |
带有子元素(序列)的元素
带有一个或多个子元素的元素通过圆括号中的子元素名进行声明:
1 | <!ELEMENT 元素名称 (子元素名称 1)> |
或
1 | <!ELEMENT 元素名称 (子元素名称 1,子元素名称 2,.....)> |
声明只出现一次的元素
1 | <!ELEMENT 元素名称 (子元素名称)> |
声明最少出现一次的元素
1 | <!ELEMENT 元素名称 (子元素名称+)> |
声明出现零次或多次的元素
1 | <!ELEMENT 元素名称 (子元素名称*)> |
DTD属性
ATTLIST
声明属性
1 | <!ATTLIST 元素名称 属性名称 属性类型 默认值> |
规定一个默认的属性值
DTD:
1 | <!ELEMENT square EMPTY> |
“square” 被定义为带有 CDATA 类型的 “width” 属性的空元素。如果宽度没有被设定,其默认值为0 。
DTD实体
实体是用于定义引用普通文本或特殊字符的快捷方式的变量。
实体引用是对实体的引用。
实体可在内部或外部进行声明。
一个内部实体声明
1 | <!ENTITY 实体名称 "实体的值"> |
一个外部实体声明
1 | <!ENTITY 实体名称 SYSTEM "URI/URL"> |
XML关联CSS的方式
通过使用CSS(Cascading Style Sheets 层叠样式表),可以将显示信息添加到XML文档中。
通过以下代码将XML文件链接到CSS文件:
1 |
通过 工具-在浏览器预览 或 F6 显示
CSS语法
由三部分构成:选择器(selector)、属性(property)、属性值(value)
1 | selector { |
注意:虽然在CSS中不区分大小写,但是在XML中区分大小写,因此需要注意与XML中一致。