XML的应用范围主要体现在以下几个方面。
- 存储数据
&emsp ;内存中数据需要存储到文件中,才能在关闭系统或系统掉电之后,通过文件进行恢复。现如今,用数据库存储数据这种方式使用的最为广泛。因为数据库管理系统不仅能存储数据,而且提供了众多的管理数据的功能,尤其对大数据量的操作,通常都使用数据库。XML 与数据库相比,最大的优势就是简单、通用。
&emsp ;如今,许多系统的配置文件都使用XML文档。使用XML文档进行系统配置,配置修改时不需要重新编译,灵活性强。例如接下来要学习的Servlet,需要在web.xml文件中进行配置。Struts 2.0的配置文件是struts.xml,Hibernate的主配置文件是hibernate.cfg.xml,Spring的默认配置文件是applicationContext.xml。
- 数据交换
&emsp ;在各个分散的应用系统里,因为其平台、系统、数据库、编程语言的差异,保存起来的数据往往只能被本系统调用,形成一个个信息孤岛。如果需要整合各个系统的数据信息,或者在两个或多个系统中进行数据交换,往往让IT人员非常烦躁。现在利用XML交互性好的特点,可以将各个信息孤岛的数据转换成标准的XML文件,通过这个标准的XML文件进行导入和导出,以达到交换数据的目的。
接下来先看一个XML文档,这个文档存放的是“租车系统”车辆信息。
通过这个文档可以看出,XML文档的标签(例如vehicles、trucks、car、name等)可以是自定义的,具有可扩展性,这和之后将要学的HTML的标签是固定的不同。另外,HTML的主要作用是通过标签和属性,更好地显示数据,而XML是用来存储或交换数据用的,不记录数据的表现形式。
XML文档总是以XML声明开始,即告知处理程序,本文档是一个XML文档。在XML声明中,通常包括版本、编码等信息,以\“<?”开始,以“?>”结尾。
标签可以有属性(属性值要加引号),例如car标签和truck标签都有id这个属性。属性是对标签的进一步描述和说明,一个标签可以有多个属性,每个属性都有自己的名字和数值,属性是标签的一部分。
XML文档的优点之一就是它的灵活性,用户可以自定义标签和属性,满足用户存储数据的需求。XML另外一个特点就是交互性好,可以进行数据交换,但如果XML文档的编写人员随心所欲地编写XML文档,那么进行数据交换就无从谈起。为了更好地编写XML文档,保证文档格式的正确性,验证文档是否符合要求,可以使用DTD(Document Type Definition)对XML文档进行约束。
DTD用来定义XML文档中的元素、属性,元素之间的关系以及元素所能包含内容的类型。
通过DTD,每个XML文档均可携带一个有关其自身格式的描述。独立的团体可一致使用某个标准的DTD来规范XML文档,从而实现交换数据,而应用程序也可使用某个标准的DTD来验证从外部接收到的数据是否正确。
DTD可以定义在XML文档中,其作用域仅限于本文档,也可以作为一个外部文件存在,这个DTD文档可以被多个XML共用。例如刚才编写的XML文档,就是引用了外部的DTD文档zcxt.dtd进行的约束。下面是将DTD内容写在XML文档中,具体内容如下:
下面选出部分DTD行进行解释:
<!DOCTYPE vehicles [,根元素是vehicles。
<!ELEMENT cars (car)>,cars包括car子元素,表示car可以出现0-N次。
<!ELEMENT car (name,oil,loss,brand)>,car包括name、oil、loss、brand子元素。
<!ATTLIST car id CDATA #REQUIRED>,car元素有id属性,是CDATA类型,必须出现。
<!ELEMENT truck (name,oil,loss,load?)>,truck包括name、oil、loss、load子元素,?表示可以出现0或1次。
<!ELEMENT name (#PCDATA)>,name元素是PCDATA类型。
如果引用的是外部的DTD文档zcxt.dtd进行的约束,则该zcxt.dtd的内容如下: