一、什么是 XML
XML 是可扩展标记语言 eXtensible Markup Language
多用来传输和储存数据
- XML 是一种标记语言
- XML 是用来传输数据的语言而不是显示数据
- XML 语言需要自行定义标签并且具有自我描述性
- XML 在意的是数据内容(传输信息)
- HTML 在意的是数据的外观(显示信息
举例说明:XML 文档实例 Jani 写给 Tove 的便签
<?xml version="1.0"?>
<note>
<to>Tove</to>
<from>Jani</from>
<heading>Reminder</heading>
<body>Don't forget me this weekend!</body>
</note>
上面的这条便签具有自我描述性。它包含了发送者和接受者的信息,同时拥有标题以及消息主体。但是,这个 XML 文档仍然没有做任何事情。它仅仅是包装在 XML 标签中的纯粹的信息。我们需要编写软件或者程序,才能传送、接收和显示出这个文档。
通过 XML 可以发明自己的标签
- 上述例子中标签中没有在任何 XML 标准中定义过<to>和<form>XML 中没有预定义的标签相
- 对比 HTML 中的标签全都是通过 HTML 定义过的标签
- XML 允许创业者定义自己的标签和自己的文档结构
二、XML 的用途
XML 把数据从 HTML 分离
首先举一个例子当你需要在 HTML 文档中显示动态数据,那么每当数据改变的时候,都要花费我们大量的时间去编辑 HTML。通过 XML 数据能够给储存在独立的 XML 文件中。这样我们就可以专注于使用 HTML/CSS 进行显示和布局,并且可以在修改底层数据的时候不在需要对 HTML 进行改变。 通过使用几行 JavaScript 代码,我们可以读取一个外部 XML 文件,并更新我们的网页数据内容。
XML 简化数据共享
XML 数据以纯文本格式进行存储,因此提供了一种独立与软件和硬件的数据储存方法。这就可以让创建不懂应用程序可以共享的数据变得更加容易
简化数据传输
互联网上的不兼容的系统之间交换数据对于程序员来说是一件很费时的事情,这时 yogaXML 交换数据就降低了从不兼容的应用程序中读取数据的复杂性
三、XML 的树结构
XML 文档形成了一种树的结构,它从 “根部” 开始,然后扩展到 “枝叶”。
树结构是通常被称为 XML 树,并且可以很容易地描述任何 XML 文档。
通过采用树状结构,你可以知道所有从根开始的后续的分行及支行
一个 XML 文档实例
XML 文档使用简单的具有自我描述性的语法:
<?xml version="1.0" encoding="ISO-8859-1"?>
<note>
<to>Tove</to>
<from>Jani</from>
<heading>Reminder</heading>
<body>Don't forget me this weekend!</body>
</note>
第一行是 XML 的生命。它定义 XML 的版本(1.0)和所使用的编码(ISO-8859-1 = Latin-1 / 西欧字符集)。
实例 XML 中的几本书
<bookstore>
<book category="COOKING">
<title lang="en">Everyday Italian</title>
<author>Giada De Laurentiis</author>
<year>2005</year>
<price>30.00</price>
</book>
<book category="CHILDREN">
<title lang="en">Harry Potter</title>
<author>J K. Rowling</author>
<year>2005</year>
<price>29.99</price>
</book>
<book category="WEB">
<title lang="en">Learning XML</title>
<author>Erik T. Ray</author>
<year>2003</year>
<price>39.95</price>
</book>
</bookstore>
实例中的根元素是<bookstore>。文档中的所有<book>元素都被包含在<bookstore>中。<book>元素中有四个子元素:<title>、<author>、<year>、<price>。
四、XML 的语法
所有 XML 都必须有一个关闭标签
在 HTML 中,有些元素不必须有一个关闭标签:
而在 XML 中,省略关闭标签是非法的
XML 是大小写敏感的语言
XML 必须正确嵌套
XML 文档必须有根元素
XML 属性值必须加引号
实体引用
在 XML 中,一些字符拥有特殊的意义
如果我们把字符”<” 放到 XML 元素中,会发生错误,这是因为解析器会把它当做新元素的开始。
这样会产生 XML 错误:
<message>if salary < 1000 then</message>
为了避免这个错误需要用实体引用来代替”<” 字符
<message>if salary < 1000 then</message>
在 XML 中,有五个预定义的实体引用:
在 XML 中,只有字符 “<” 和“&”确实是非法的,大于号是合法的但是用实体引用来代替它是好的习惯
<=>< ; >=>> ; &=>& ; '=>' "=>"
XML 中的注释
XML 中注释和 HTML 中的注释相同
在 XML 中,空格会被保留
HTML 会把多个连续的空格字符裁减合并为一个
XML中则会完整保留所有的空格,包括空格的数量。
XML 以 LF 储存换行
在 Windows 程序中,换行通常是以一对字符来存储的:回车符(CR)和换行符(LF)。
在 Unix 和 Mac OSX 中,使用 LF 来存储新行。
什么是 XML 元素?
XML 元素指的是从(且包括)开始标签到(且包括)结束标签的部分。
一个元素可以包含:
- 其他元素
- 文本
- 属性
- 或混合以上所有
XML 元素的命名规则
- 名称可以包含字母、数字以及其他字符
- 名称不能以数字或者标点符号开始
- 名称不能以字母 xml(不区分大小写的任何 xml 组合)开始
- 名称不能包含空格
避免 “-” 字符。如果您按照这样的方式进行命名:”first-name”,一些软件会认为您想要从 first 里边减去 name。
避免 “.” 字符。如果您按照这样的方式进行命名:”first.name”,一些软件会认为 “name” 是对象 “first” 的属性。
避免 “:” 字符。冒号会被转换为命名空间来使用(稍后介绍)。
XML 元素是可扩展的
请看下面的XML实例
<note>
<to>Tove</to>
<from>Jani</from>
<body>Don't forget me this weekend!</body>
</note>
这时我们可以在文档中添加一些额外的信息
<note>
<date>2008-01-10</date>
<to>Tove</to>
<from>Jani</from>
<heading>Reminder</heading>
<body>Don't forget me this weekend!</body>
</note>
我们即使加上了这些内容程序不会因此而崩溃或者中断,这个程序仍然可以找到 XML 中的 to、from 以及 body 元素,并且产生同样的输出。XML 的优势之一,就是可以在不中断应用程序的情况下进行扩展。
XML 属性
在 XML 的元素中,一个 XML 元素可以有一个或多个属性。
属性是 XML 元素的一部分,每一个元素可以有多个独特的属性。属性提供了有关 XML 元素的详细信息 XML 属性始终都是一个 名称 / 值 的对
在 HTML 中,属性提供有关元素的额外信息。
<img src="computer.gif">
<a href="demo.html">
属性通常提供不属于数据组成部分的信息。在下面的实例中,文件类型与数据无关,但是对需要处理这个元素的软件来说却很重要:
<file type="gif">computer.gif</file>
XML的属性必须使用双引号,如果属性本身包含双引号,则可以使用单引号,或者可以使用字符实体。
XML 元素 vs 属性
先看一个实例:
<person sex="female">
<firstname>Anna</firstname>
<lastname>Smith</lastname>
</person>
<person>
<sex>female</sex>
<firstname>Anna</firstname>
<lastname>Smith</lastname>
</person>
在第一个实例中,sex 是一个属性。在第二个实例中,sex 是一个元素。这两个实例都是用来提供相同的信息的。什么时候使用属性没有固定的要求。在 HTML 中,属性用起来很方便,但是在 XML 中,尽量避免使用属性,如果信息感觉起来很像数据,尽量使用元素。
属性的缺点
- 属性不能包含多个值(元素可以)
- 属性不能包含树结构(元素可以)
- 属性不容易扩展(为未来的变化
- 属性难以阅读和维护。请尽量使用元素来描述数据。
元数据
元数据(Metadata),又称中介数据、中继数据,为描述数据的数据(data about data),主要是描述数据属性(property)的信息,用来支持如指示存储位置、历史数据、资源查找、文件记录等功能。
<messages>
<note id="501">
<to>Tove</to>
<from>Jani</from>
<heading>Reminder</heading>
<body>Don't forget me this weekend!</body>
</note>
<note id="502">
<to>Jani</to>
<from>Tove</from>
<heading>Re: Reminder</heading>
<body>I will not</body>
</note>
</messages>
上述的 id 属性仅仅只是一个标识符,用于标识不同的标签。他并不是便签数据的组成部分。
在这里笔者想说的是:元数据(有关数据的数据)应当存储为属性,而数据本身应当存储为元素。
XML 错误会终止您的程序
XML 文档中的错误会终止我们的 XML 程序。
W3C 的 XML 规范声明:如果 XML 文档存在错误,那么程序就不应当继续处理这个文件。理由是:XML 软件应当轻巧快速,具有良好的兼容。
如果使用 HTML,创建包含大量错误的文档是有可能的(比如忘记添加结束标签),其中一个主要的原因是 HTML 浏览器相当的臃肿,兼容性也很差,并且他们有自己的方式来确定当发现错误时文档应该显示为什么样子。使用 XML 时,这种情况不应当存在.