XML(一)与HTML对比、用途、语法(根元素、树结构、声明、引号、空格、命名规则)
1. XML简介
XML 被设计用来传输和存储数据。
HTML 被设计用来显示数据。
1.1 什么是 XML?
- XML 指可扩展标记语言(EXtensible Markup Language)。
- XML 是一种很像HTML的标记语言。
- XML 的设计宗旨是传输数据,而不是显示数据。
- XML 标签没有被预定义。您需要自行定义标签。
- XML 被设计为具有自我描述性。
- XML 是 W3C 的推荐标准。
1.2 XML 和 HTML 之间的差异
XML 不是 HTML 的替代。
XML 和 HTML 为不同的目的而设计:
- XML 被设计用来传输和存储数据,其焦点是数据的内容。
- HTML 被设计用来显示数据,其焦点是数据的外观。
HTML 旨在显示信息,而 XML 旨在传输信息。
1.3 XML 不会做任何事情
也许这有点难以理解,但是 XML 不会做任何事情。XML 被设计用来结构化、存储以及传输信息。
下面实例是 Jani 写给 Tove 的便签,存储为 XML:
<note>
<to>Tove</to>
<from>Jani</from>
<heading>Reminder</heading>
<body>Don't forget me this weekend!</body>
</note>
上面的这条便签具有自我描述性。它包含了发送者和接受者的信息,同时拥有标题以及消息主体。
但是,这个 XML 文档仍然没有做任何事情。它仅仅是包装在 XML 标签中的纯粹的信息。我们需要编写软件或者程序,才能传送、接收和显示出这个文档。
1.4 通过 XML 您可以发明自己的标签
上面实例中的标签没有在任何 XML 标准中定义过(比如 和 )。这些标签是由 XML 文档的创作者发明的。
这是因为 XML 语言没有预定义的标签。
HTML 中使用的标签都是预定义的。HTML 文档只能使用在 HTML 标准中定义过的标签(如
、
等等)。
XML 允许创作者定义自己的标签和自己的文档结构。
1.5 XML 不是对 HTML 的替代
XML 是对 HTML 的补充。
XML 不会替代 HTML,理解这一点很重要。在大多数 Web 应用程序中,XML 用于传输数据,而 HTML 用于格式化并显示数据。
对 XML 最好的描述是:
XML 是独立于软件和硬件的信息传输工具。
2. XML 用途
-
XML 把数据从 HTML 分离
如果您需要在 HTML 文档中显示动态数据,那么每当数据改变时将花费大量的时间来编辑 HTML。
通过 XML,数据能够存储在独立的 XML 文件中。这样您就可以专注于使用 HTML/CSS 进行显示和布局,并确保修改底层数据不再需要对 HTML 进行任何的改变。
通过使用几行 JavaScript 代码,您就可以读取一个外部 XML 文件,并更新您的网页的数据内容。
-
XML 简化数据共享
在真实的世界中,计算机系统和数据使用不兼容的格式来存储数据。
XML 数据以纯文本格式进行存储,因此提供了一种独立于软件和硬件的数据存储方法。这让创建不同应用程序可以共享的数据变得更加容易。
-
XML 简化数据传输
对开发人员来说,其中一项最费时的挑战一直是在互联网上的不兼容系统之间交换数据。
由于可以通过各种不兼容的应用程序来读取数据,以 XML 交换数据降低了这种复杂性。
-
XML 简化平台变更
升级到新的系统(硬件或软件平台),总是非常费时的。必须转换大量的数据,不兼容的数据经常会丢失。
XML 数据以文本格式存储。这使得 XML 在不损失数据的情况下,更容易扩展或升级到新的操作系统、新的应用程序或新的浏览器。
-
XML 使您的数据更有用
不同的应用程序都能够访问您的数据,不仅仅在 HTML 页中,也可以从 XML 数据源中进行访问。
通过 XML,您的数据可供各种阅读设备使用(掌上计算机、语音设备、新闻阅读器等),还可以供盲人或其他残障人士使用。
-
XML 用于创建新的互联网语言
很多新的互联网语言是通过 XML 创建的。
这里有一些实例:
-
XHTML
-
用于描述可用的 Web 服务 的 WSDL
-
作为手持设备的标记语言的 WAP 和 WML
-
用于新闻 feed 的 RSS 语言
-
描述资本和本体的 RDF 和 OWL
-
用于描述针针对 Web 的多媒体 的 SMIL
-
3. XML文档规则(语法)
3.1 XML文档必须有根元素
XML必须包含根元素,它是所有其他元素的父元素,比如:
以下实例中“root”就是根元素:
// 1 <root>
// 2 <child>
// 3 <subchild>.....</subchild>
// 4 </child>
// 5 </root>
以下实例中“note”是根元素:
<?xml version="1.0" encoding="UTF-8"?>
<note>
<to>Tove</to>
<from>Jani</from>
<heading>Reminder</heading>
<body>Don't forget me this weekend!</body>
</note>
3.2 XML声明
XML声明是XML文件的可选部分,如果存在必须放在文档的第一行,如下所示:
<?xml version="1.0" encoding="utf-8"?>
以上实例包含XML版本,以及该XML文档所使用的编码;
UTF-8也是HTML5,CSS,JavaScript,PHP和SQL的默认编码。
3.3 所有的XML元素都必须有一个关闭标签
在HTML中,某些元素不必有一个关闭标签;例如:
<p>This is a paragraph.
<br>
在XML中,省略关闭标签是非法的。所有元素都必须有关闭标签:
<p>This is a paragraph.</p>
<br />
中间没有数据可以写成这样
3.4 XML对大小写敏感
ML标签对大小写敏感。标签与标签是不同的。
必须使用相同的大小写来编写开始标签和结束标签:
This is incorrect // 错误的XML标签书写
This is correct // 正确的XML标签书写
3.5 XML必须正确嵌套
在HTML中,常会看到没有正确嵌套的元素:This text is bold and italic
在XML中,所有元素都必须彼此正确地嵌套:This text is bold and italic
3.6 XML属性值必须加引号
与HTML类似,XML元素也可拥有属性(名称/值的对),并且在同一标签中属性不能重复。 在XML中,XML的属性值必须加引号,而且必须有值(就算一个空格也行)。
<!-- 错误的属性书写方式 -->
<note date=12/11/2007>
<to>Tove</to>
<from>Jani</from>
</note>
<!-- 正确的属性书写方式 -->
<note date="12/11/2007">
<to>Tove</to>
<from>Jani</from>
</note>
3.7 PCDATA与CDATA
PCDATA(Parsed Character Data):指可以被xml解析器解析的内容,有些特殊字符需要借助实体来被解析器解析,XML中的正常内容都是属于PCDATA。
CDATA(Character Data):指不会被xml解析器解析的内容,按照字符串原样输出。
语法:<![CDATA[要原样输出的内容]]>
如:<![CDATA["你好啊 &"'abc"]]>
输出结果:“你好啊 &”'abc"
3.8 实体引用
在XML中,一些字符拥有特殊的意义。如果您把字符"<"放在XML元素中,会发生错误,这是因为解析器会把它当作新元素的开始。以下实例会产生XML错误:
if salary < 1000 then
为了避免这个错误,请用实体引用来代替 “<” 字符:
if salary < 1000 then
在XML中,有5个预定义的实体引用:
< < less than(小于号)
> > greater than(大于号)
& & ampersand(与)
' ' apostrophe(单引号)
" " quotation mark(双引号)
自定义实体:
语法:
<!DOCTYPE 根元素名[
<!ENTITY 实体名 实体内容 >
<!ENTITY 实体名 实体内容 >
...
]>
例如:相同的内容重复出现,可以定义一个实体
<!DOCTYPE students[
<!ENTITY address "江西省南昌市南昌县">
]>
实体名:address,使用方法:&address;实体可出现的位置:标签内容,属性值,以及作为其他实体的值。
注:重复定义相同名称的实体时,以写在第一位的为准。
3.9 XML中的注释
在XML中编写注释的语法与HTML的语法很相似。
注释可以出现在任意位置。
注释不可嵌套使用。
3.10 XML的空格问题
HTML会把多个连续的空格字符裁减(合并)为一个。例如:
代码:
这是 两 本书
显示:这是 两 本书
在XML中,不会把多个连续的空格字符裁减(合并)为一个。
代码:
这是 两 本书
显示:这是 两 本书
3.11 XML的树形结构
XML文档形成了一种树型结构,它从“根部”开始,然后扩展到“枝叶”。叶子:文本标签(没有具体体现)的值
XML文档必须包含根元素。该元素是所有其他元素的父元素。
XML文档中的元素形成了一棵文档树。这棵树从根部开始,并扩展到树的最底端。
所有的元素都可以有子元素。
父、子以及同胞等术语用于描述元素之间的关系。父元素拥有子元素。相同层级上的子元素成为同胞(兄弟或姐妹)。
所有的元素都可以有文本内容和属性(类似HTML)。
注:更多关于XML树形结构请参见:http://www.runoob.com/xml/xml-tree.html
3.12 XML命名规则
XML 元素必须遵循以下命名规则:
- 名称可以包含字母、数字以及其他的字符
- 名称不能以数字或者标点符号开始
- 名称不能以字母 xml(或者 XML、Xml 等等)开始
- 名称不能包含空格
可使用任何名称,没有保留的字词。
- 避免 “-” 字符。如果您按照这样的方式进行命名:“first-name”,一些软件会认为您想要从 first 里边减去 name。
- 避免 “.” 字符。如果您按照这样的方式进行命名:“first.name”,一些软件会认为 “name” 是对象 “first” 的属性。
- 避免 “:” 字符。冒号会被转换为命名空间来使用(稍后介绍)。
3.13 XML 以 LF 存储换行
在 Windows 应用程序中,换行通常以一对字符来存储:回车符(CR)和换行符(LF)。
在 Unix 和 Mac OSX 中,使用 LF 来存储新行。
在旧的 Mac 系统中,使用 CR 来存储新行。
XML 以 LF 存储换行。