DTD、Schema和RDF
3.1 DTD
文件格式定义(Document Type Definition)[1],顾名思义就是针对文件的格式定义。DTD可以是一个独立的文件,然后再XML文件中再调用它;或是包含在XML文件之中,成为XML文件中的一部分。不管是采用哪一种方式,最重要的是必须在XML文件的前言区(Prolog)中声明!
由于XML中允许用户自行定义所要的标记,所以针对同一个文件内容,不同的人会写出不同的XML文件,要如何才能设计出同一格式的XML文件呢?那只有通过使用文件格式定义!
文件格式定义基本上包含一连串彼此相关的元素,属性,注释或是实体声明,来定义出文件的结构。这些声明包括元素的名称,出现的顺序,元素的数据类型,元素出现的次数,可以选择的元素,元素的属性,注释以及实体声明。DTD将文件的结构和文件的内容完全分开,它的好处有很多:
1. 使XML文件标准化变为可行:同一个公司或是企业团体可以通过DTD定义所需文件的标准格式,如此公司内的员工就可以依循DTD的结构,编写出合乎标准的XML文件。
2. DTD是不同的应用程序或用户可以读取彼此的文件,因为DTD中严谨的定义了元素的出现顺序,次数或属性,不同的软件或用户可以由此正确的解读文件内容。
3. 外部的DTD可以被不同的文件或是网站所分享:不同的文件如果希望采用相同的文件结构,可以调用相同的DTD文件。
4. DTD中只包含结构,设计者可以针对DTD做多种格式的美化,而不会不小心改动到XML中的源数据。
5. 以适当的DTD,可以转换XML文件成为不同的文件格式。
6. DTD中的实体参照用途更多,设计者可以利用它来将外部的数据或视图文件轻松加到XML文件中,它可以使XML文件内容更丰富且更结构化。
3.2 Schema
上面介绍的DTD,的确,DTD对于XML文档的机构起到了很好的描述作用。但是,他也有一些缺点,比如,它采用了非XML的语法规则,不支持数据类型,扩展性较差等等。另外,XML文档处理的自动化要求有一种更为严格,更为全面的解决方案。这方面的需求包括如何使一个应用程序的不同模块将能够互相协调,以及对文档结构,属性,数据类型等的约束等等。XML Schema[7]正好解决了这些问题。从根本上讲,XML Schema实际上也是XML的一种应用,就是将XML DTD重新按照XML语言规范来定义,这充分体现了XML自描述性的特点。
Schema的优点:
1. 一致性。Schema使得对XML的定义不必再利用一种特定的形式化的语言,而是直接借助XML自身的特性,利用XML的基本语法规则来定义XML文档的结构,使得XML达到了从内到外的完美统一,也为了XML的进一步发展奠定了坚实的基础。一方面,不必再为搞懂DTD而去重新学习,从而节省了时间;另一方面,因为Schema本身也是一种XML,因而可以被现有的XML编辑工具或制作工具所编辑,被XML语法分析器所解析,被XML应用系统所利用,从而保护了既有投资。
2. 扩展性。Schema对DTD进行了扩充,从而使其具备较强的可扩展性。比如,引入了数据类型,命名空间,这位程序员开发出功能强大的XML应用程序开创广阔的天空。没有数据类型,无形之中大大增加了程序员的开发难度和工作量。虽然W3C的XML 1.0规范中也定义了一些数据类型,但那都是针对属性类型而定义的,而且类型非常有限。而现在大多数的应用系统都要涉及到一些相对复杂的数据类型,尤其是如今日趋火爆的电子商务应用,其交易过程中不可避免的会出现大量的数据转换,整型,实型,布尔型,日期型的数据层出不穷,类似这样的应用,如果没有相应的数据类型定义,将是难以想象的。XML Schema却很好的解决了这一问题。
3. 互换性。正如每个人都可定义自己的DTD一样,也可根据需要设计适合自己应用的Schema,并且可以同其他人交换彼此的Schema。利用Schema,我们能够书写XML文档,验证文档的合法性。另外,通过映射机制,还可以将不同的Schema进行转换,以实现更高层次的数据交换。
4. 规范性。同DTD一样,Schema也提供了一套完整的机制以约束XML文档中置标的使用,但相比之下,Schema更具规范性。Schema定义了XML文档的整体结构,如那些元素可以出现在文档中,元素间的关系是什么,每个元素又有那些子元素,属性,以及元素出现的顺序和次数等等。
3.3 RDF(Resource Description Framework)
XML所存在的问题是因为XML不具备语义描述能力。为此,W3C推荐以RDF(resource Description Framework)[2]标准来解决XML的语义局限。RDF提出了一个简单的模型用来表示任意类型的数据。这个数据类型由节点和节点之间带有标记的连接弧所组成。节点用来表示Web上的资源,弧用来表示这些资源的属性。因此,这个数据模型可以方便的描述对象(或者资源)以及它们之间关系。RDF的数据模型实质上是一种二元关系的表达,由于任何复杂的关系都可以分解为多个简单的二元关系,因此RDF的数据模型可以作为其它任何复杂关系模型的基础模型。
RDF和XML是互为补充的。首先,RDF希望以一种标准化,互操作的方式来规范XML的语义。XML文档可以通过简单的方式实现对RDF的引用。