XML Schema

 

Schema的由来

----DTD作为XML 1.0规范的重要组成部分,对于XML文档的结构起到很好的描述作用。但是,它也具有一些缺点,比如,它采用了非XML的语法规则、不支持数据类型、扩展性较差等等。Schema正好解决了这些问题。从总体上讲,Schema具有以下优点:

一致性:Schema使得对XML的定义不必再利用一种特定的形式化的语言,而是直接借助XML自身的特性,利用XML的基本语法规则来定义XML文档的结构,使得XML达到了从内到外的完美统一,也为XML的进一步发展奠定了坚实的基础。

扩展性:Schema对DTD进行了扩充,引入了数据类型、命名空间,从而使其具备较强的可扩展性。

互换性:利用Schema,我们能够书写XML文档以及验证文档的合法性。另外,通过特定的映射机制,还可以将不同的Schema进行转换,以实现更高层次的数据交换。

规范性:同DTD一样,Schema也提供了一套完整的机制以约束XML文档中置标的使用,但相比之下,后者基于XML,更具有规范性。Schema利用元素的内容和属性来定义XML文档的整体结构,如哪些元素可以出现在文档中、元素间的关系是什么、每个元素有哪些内容和属性、以及元素出现的顺序和次数等等,都可一目了然。

Schema的发展

----Schema是伴随着XML1.0规范的制订而推出的,从Schema的第一个方案到现在为止,W3C成员共提交了五个Schema规范,分别是XML-Data、DCD(Document Content Description for XML)、SOX(Schema for Object-Oriented XML)、DDML(Document Definition Markup Language)和XML Schema。直到现在,关于Schema还没有一个正式推荐标准,它仍处于不断修改完善的过程当中。

初识Schema

----下面以一个简单的示例对Schema进行介绍(注:本例以及后面的Schema语法均以微软Internet Explorer 5.0的Schema实现为蓝本):

 

1. <?xml version="1.0" encoding="GB2312" ?>

2. <Schema xmlns="urn:schemas-microsoft-com:xml-data"

   xmlns:dt="urn:schemas-microsoft-com:datatypes">

3. <AttributeType name="序号"/>

4. <AttributeType name="性别"/>

5. <ElementType name= "姓名"/>

6. <ElementType name= "年龄"/>

7. <ElementType name= "电话" dt:type="fixed.14.4"/>

8. <ElementType name= "地址" />

9. <ElementType name= "联系人" content="eltOnly">

10. <element type= "姓名" />

11. <element type= "年龄" />

12. <element type= "电话" />

13. <element type= "地址" />

14. </ElementType>

15. <ElementType name= "通讯录" content="eltOnly">

16. <element type= "联系人" />

17. <attribute type="序号"/>

18. <attribute type="性别"/>

19. </ElementType>

20.</Schema> 

 

 

----1行是XML类型声明语句指明该文档是一个XML文档并且符合版本1.0规范该文档采用GB2312编码。

----第2行是Schema声明语句,它包含了Schema命名空间的声明。本例中用到了两个命名空间:一是xmlns="urn:schemas-microsoft-com:xml-data",它指定本文档是一个XML Schema文档;另一个是xmlns:dt="urn:schemas-microsoft-com:datatypes",它定义了在本文档中可以使用的数据类型。

----第3、4行是属性定义语句,它定义了两个属性:序号和性别。

----第5、6、7、8行是元素定义语句,它定义了四个元素:姓名、年龄、电话、地址。其中为"电话"元素定义了数据类型:fixed.14.4。

----第9-14行定义了本XML Schema的二级元素:联系人,指明该元素包含四个子元素:姓名、年龄、电话、地址。

----第15-19行定义了本XML Schema的顶级元素:通讯录,指明该元素包含一个子元素:联系人,以及两个属性:序号、性别。

----第20行是结束标记语句,它表明该XML Schema的描述到此为止。

Schema语法

 

----Schema有着自己的一套完整的语法,涉及到的关键元素包括:Schema、ElementType、element、AttributeType、attribute、group、datatype、description。

----Schema元素是XML Schema中第一个出现的元素,用于声明该XML文档是一个Schema文档。Schema具有两个属性:name指定该Schema的名称,而xmlns则指定该Schema包含的命名空间。

----ElementType元素是XML Schema中重要元素之一,用于定义该XML Schema文档中出现的元素。通过属性content来表明ElementType所声明的元素是否为空、是否包含文本、是否包含子元素、还是既包含文本又包含子元素,通过dt:type指定该元素的数据类型,通过order指定该元素的子元素的排列规则,相应取值有:one、seq、many。element元素是用于声明在ElementType中出现的元素,它需要同ElementType配合使用。

----AttributeType元素用于定义在Schema文档中出现的属性类型。其属性dt:type指定所声明属性类型的数据类型,可支持的数据类型包括:entity, entities, enumeration, id, idref, idrefs, nmtoken, nmtokens, notation, 和 string。default属性可用于指定该属性类型的缺省取值。required属性指定该属性对于引用它的元素是否是必须的。 attribute元素实际上是对AttributeType声明的属性的引用,它也需要同AttributeType配合使用。

----group元素是用于将XML 文档中的元素分组。通过属性order可指定该分组中的元素或子分组的顺序,通过minOccurs和maxOccurs分别指定该分组在XML实例文档中出现的最少和最多次数。

----datatype是XML Schema中一个重要元素,也是XML Schema的一大特色,它用于为ElementType和AttributeType指定数据类型。XML Schema支持两种数据类型,一种是XML 1.0标准中定义的十种基本数据类型:entity, entities, enumeration, id, idref, idrefs, nmtoken, nmtokens, notation, 和 string;另外,还支持一些扩展数据类型,包括:bin.base64, bin.hex, boolean, char, date, dateTime, dateTime.tz, fixed.14.4, float, int, number, time, time.tz, i1, i2, i4, r4, r8, ui1, ui2, ui4, uri, uuid。

----description只能算是XML Schema中一个配角,它的主要作用是为ElementType和AttributeType元素提供描述信息。

Schema的应用

 

----由于XML Schema的种种优点,现在Schema取代DTD已成大势所趋。在这种情况下,国际上一些知名企业和组织审时度势纷纷在战略上向XML Schema倾斜,提供对XML Schema的支持。其中最为典型的当然要数微软的BizTalk和xml.org组织的注册/资源库。更加值得一提的是,微软在其浏览器软件Internet Explorer 5.0中率先提供对Schema的支持,当然,因为最终的XML Schema标准尚未正式推出,因此微软支持的Schema也只是过渡性"标准",今后还会不断修改。

posted on 2005-10-24 22:51  帅死活该  阅读(1014)  评论(0编辑  收藏  举报