## XML
可扩展标记语言,标准通用标记语言的子集,是一种用于标记电子文件使其具有结构性的标记语言。
近年来,随着 Web的应用越来越广泛和深入,人们渐渐觉得HTML不够用了,HTML过于简单的语法严重地阻碍了用它来表现复杂的形式。尽管HTML推出了一个又一个新版本,已经有了脚本、表格、帧等表达功能,但始终满足不了不断增长的需求。
有人建议直接使用SGML 作为Web语言,这固然能解决HTML遇到的困难。但是SGML太庞大了,用户学习和使用不方便尚且不说,要全面实现SGML的浏览器就非常困难,于是自然会想到仅使用SGML的子集,使新的语言既方便使用又实现容易。正是在这种形势下,Web标准化组织W3C建议使用一种精简的SGML版本——XML应运而生了。
![](https://box.kancloud.cn/2016-08-19_57b6bd263d25a.jpg)
[图一] XML家族史
### Q1:什么是XML?
- XML 指可扩展标记语言(EXtensible Markup Language)
- XML 是一种标记语言,很类似 HTML
- XML 的设计宗旨是传输数据,而非显示数据,常用于简化数据的存储和共享
- XML 标签没有被预定义。您需要自行定义标签。
- XML 被设计为具有自我描述性。
- XML 的优势之一,就是可以经常在不中断应用程序的情况进行扩展。
### Q2:XML与HTML的区别?
- XML 被设计用来传输和存储数据。
- HTML 被设计用来显示数据。
- XML 不是 HTML 的替代。
- XML 和 HTML 为不同的目的而设计:
- XML 被设计为传输和存储数据,其焦点是数据的内容。
- HTML 被设计用来显示数据,其焦点是数据的外观。
- XML 把数据从 HTML 分离。XML 文档形成了一种树结构,它从“根部”开始,然后扩展到“枝叶”。
![](https://box.kancloud.cn/2016-08-19_57b6bd26aaa72.jpg)
## XML DTD 和XML Schema
二者的作用很容易理解,为了进行正确的数据交换,就要规定文档的数据类型,也就是规定文档的结构。这里打个比方,意大利人说意大利语,日本人说Japanese,两个的商人要进行对外的贸易,就要有个统一的语言,那就是需要贸易通则 Incoterm2010(作为一名国贸生,能把计算机与专业课联系在一起,可见我专业课上总是开小差了~)
想象一下,一个XML的组成就是元素,属性,内容,那么DTD或是它的升级版Schema就是用来规定一个XML文档什么时候什么地点可以出现什么元素,每个元素都可以有什么描述属性。以及它们出现的顺序,重复的次数。在二者中都有详细的规定了。
DTD可以嵌入在XML文档中,也可以单独形成一个文件,引入即可。
~~~
<?xml version="1.0"encoding="UTF-8"? >
<!DOCTYPE note [
<!ELEMENT note (to,from,heading,body)>
<!ELEMENT to (#PCDATA)>
<!ELEMENT from (#PCDATA)>
<!ELEMENT heading (#PCDATA)>
<!ELEMENT body (#PCDATA)>
]>
<to>George</to>
<from>John</from>
<heading>Reminder</heading>
<body>Don't forget the meeting!</body>
</note>
~~~
### Q1:DTD与Schema的关系
- 都是用于描述XML文档的结构。
- Schema是基于XML的DTD的替代品。
- Schema要比DTD更强大。
### Q2:Schema的优点
- XML Schema 支持数据类型
- XML Schema 使用 XML 语法
这样的好处是不必学习新的语言,可以使用XML编辑器来编辑、解析Schema文件。
- XML Schema 可保护数据通信
通过Schema,发送方可以使用一种接收方能够明白的方法来描述数据。
- XML Schema 可扩展
可以根据原有的数据类型自定义出自己需要的数据类型,在相同的文档中可以引用多重的Schema。
## 小结:
通过XML的学习,知道了HTML与XML实际上没有必然的联系,用途不同的两者总是被大家搞混。了解了XML的组成,下一步就是JavaScript脚本语言的学习,看看在JS中如何操作XML文件。