XML Schema用法(1)
类别: XML教程
你现在应该知道XML只说明数据的结构而并不关心数据是如何具体描述的、数据是否正确。XML文档的强制性结构化需求是通过DTD(文档类型说明)来实现的。那就是本系列文章中先前讲述的主题。在本文里,我们概要介绍DTD所存在的缺点,讨论新型的更为强大的标准XML Schema。
--------------------------------------------------------------------------------
其他文章
以下是本系列的另两篇文章:
XML的基本语法
DTD文档格式
--------------------------------------------------------------------------------
DTD的麻烦
使用DTD虽然在指定许可的元素、需要的元素以及给定XML文档中如何组织元素等方面给我们以较大的方便,但是,一旦你想针对特定元素施加数据类型就会遇到麻烦了。DTD规范严格地定义了结构,但只支持相对功能较弱的内容类型规范,而对强制性结构化却无计可施,比如名为Date 的数据如何规定它必须包含有效值呢?
这就要指望XML Schema了,XML Schema目前作为建议已经于2001年提交给了W3C ,这意味着它最终将成为一般用途的建议标准。假如你对此感兴趣,你不妨到W3C网站找些官方文档和内容简介之类的材料来看看。注意,其他schema定义也是有的,包括日本的标准RELAX 和微软公司的XDR。可是,XML Schema是唯一受到W3C成为的建议标准,所以我在这篇文章中只对它进行阐述。
XML Schema不仅可以让你定义XML文档的结构而且还允许你约束文档的内容,这就不同于DTD了。另外,一个 XML Schema自身就是一个XML文档,其基于标签的语法比DTD中的特殊字符要清楚多了。
Schema概述
XML Schema是用一套预先规定的XML元素和属性创建的,这些元素和属性定义了文档的结构和内容模式。相应的一套精巧的规则(这些规则却很有意思的用DTD来表示)指定了每个Schema元素或者属性的合法用途。如果违反这些规则解析器就会拒绝解析你的Schema以及任何同它相联系的文档。
现在让就让我们来看看清单A中显示的XML Schema示例,该例对我们以前在清单B中用到的图书目录进行了说明。清单B有了点小改动:作为根元素的catalog现在有了两个新属性,它们通过清单A中的catalog schema与之关联。
你再看catalog schema,很快你就会注意到它包含了标准的XML头,这表示schema自己就是一个XML文档。而任何schema的根元素都必须是schema,它有一个或者多个说明自己的属性。在这种情况下,schema的namespace定义属性(xmlns)会定义名称空间为xs,它将用作文档中所有元素的根名称空间。
--------------------------------------------------------------------------------
什么是名称空间
XML把名称空间定义为包装XML元素在一起供以后重用的方式。为了使用XML文档的名称空间中定义的元素,你必须通过xmlns属性声明你希望采用名称空间。你还必须为该名称空间定义快捷方式的前缀(例如xs:)作为你文档中的根元素,从而使得名称空间在文档中都可用。前缀是用于文档的任何导入名称空间的元素的标识符。这一过程就如同在Visual Basic中给库加索引或者导入模块;C++、Java或者.NET下的名称空间也具有同样的含义。
--------------------------------------------------------------------------------
我们的schema示例中接下来的元素是annotation,它的作用是代表同其父元素有关的文档。annotation可以包含两个子元素之一,或者是documentation或者是appinfo,或者两者都包含进去。前者用于可读的文档,而后者则用来保存供应用程序处理的指令。
接下来我们定义了两个主要的元素(根元素catalog及其子元素book),它们用在书目文档内,后者采用了两个element元素。这些元素都包含了定义名字的属性和各个元素准许的内容。在这种情况下,catalog元素被定义为catalogtype类型,而book元素则被定义为elementtype类型;这两种类型以后还要在schema文档中被定义。
--------------------------------------------------------------------------------
其他文章
以下是本系列的另两篇文章:
XML的基本语法
DTD文档格式
--------------------------------------------------------------------------------
DTD的麻烦
使用DTD虽然在指定许可的元素、需要的元素以及给定XML文档中如何组织元素等方面给我们以较大的方便,但是,一旦你想针对特定元素施加数据类型就会遇到麻烦了。DTD规范严格地定义了结构,但只支持相对功能较弱的内容类型规范,而对强制性结构化却无计可施,比如名为Date 的数据如何规定它必须包含有效值呢?
这就要指望XML Schema了,XML Schema目前作为建议已经于2001年提交给了W3C ,这意味着它最终将成为一般用途的建议标准。假如你对此感兴趣,你不妨到W3C网站找些官方文档和内容简介之类的材料来看看。注意,其他schema定义也是有的,包括日本的标准RELAX 和微软公司的XDR。可是,XML Schema是唯一受到W3C成为的建议标准,所以我在这篇文章中只对它进行阐述。
XML Schema不仅可以让你定义XML文档的结构而且还允许你约束文档的内容,这就不同于DTD了。另外,一个 XML Schema自身就是一个XML文档,其基于标签的语法比DTD中的特殊字符要清楚多了。
Schema概述
XML Schema是用一套预先规定的XML元素和属性创建的,这些元素和属性定义了文档的结构和内容模式。相应的一套精巧的规则(这些规则却很有意思的用DTD来表示)指定了每个Schema元素或者属性的合法用途。如果违反这些规则解析器就会拒绝解析你的Schema以及任何同它相联系的文档。
现在让就让我们来看看清单A中显示的XML Schema示例,该例对我们以前在清单B中用到的图书目录进行了说明。清单B有了点小改动:作为根元素的catalog现在有了两个新属性,它们通过清单A中的catalog schema与之关联。
你再看catalog schema,很快你就会注意到它包含了标准的XML头,这表示schema自己就是一个XML文档。而任何schema的根元素都必须是schema,它有一个或者多个说明自己的属性。在这种情况下,schema的namespace定义属性(xmlns)会定义名称空间为xs,它将用作文档中所有元素的根名称空间。
--------------------------------------------------------------------------------
什么是名称空间
XML把名称空间定义为包装XML元素在一起供以后重用的方式。为了使用XML文档的名称空间中定义的元素,你必须通过xmlns属性声明你希望采用名称空间。你还必须为该名称空间定义快捷方式的前缀(例如xs:)作为你文档中的根元素,从而使得名称空间在文档中都可用。前缀是用于文档的任何导入名称空间的元素的标识符。这一过程就如同在Visual Basic中给库加索引或者导入模块;C++、Java或者.NET下的名称空间也具有同样的含义。
--------------------------------------------------------------------------------
我们的schema示例中接下来的元素是annotation,它的作用是代表同其父元素有关的文档。annotation可以包含两个子元素之一,或者是documentation或者是appinfo,或者两者都包含进去。前者用于可读的文档,而后者则用来保存供应用程序处理的指令。
接下来我们定义了两个主要的元素(根元素catalog及其子元素book),它们用在书目文档内,后者采用了两个element元素。这些元素都包含了定义名字的属性和各个元素准许的内容。在这种情况下,catalog元素被定义为catalogtype类型,而book元素则被定义为elementtype类型;这两种类型以后还要在schema文档中被定义。
- 上一篇: XML Schema用法(2)
- 下一篇: XML经典问答
-= 资 源 教 程 =-
文 章 搜 索