返回首页
当前位置: 主页 > 航空资料 > 计算机 >

XML高级编程上(132)

时间:2010-08-09 13:05来源:蓝天飞行翻译 作者:admin 点击:
  
(8) minOccurs属性
在< A u t h o r >元素中的M I元素可以为N U L L。这是因为m i n O c c u r s在模式中被设成了0,意味
着如果需要可以完全忽略那个元素。不能被忽略的元素有一个给定的空串作为缺省值,它与
N U L L不同。在输出数据的时候,我们可以检查是否它为N U L L,如果是就不会输元素。否则,
尽管字段为空,它也得输出。为此我们增加一条规则:
• 规则6—如果一个元素有一个为0的m i n O c c u r s值,设置允许列为空。
(9) 拥有指定数据类型的属性
< C a t a l o g >中的最后的项级元素是< B o o k >元素。定义的开始使用属性类型,我们在以前已经
404使用XML 高级编程
下载
看过,除了一点:
属性类型被指明了,要好于把它当作一般的文本。另一个例子是在< P r i c e >元素中:
因此我们需要创建一个元素的正确类型的列。这就要求修改规则3:
• 规则3—对于每个属性节点:
• 创建一个与属性节点同名的列:
- 如果属性是一个正常的属性使用前缀a t t r _。
- 如果属性是一个枚举类型使用前缀a t t r _ e n u m _。
- 如果属性是i d类型使用前缀a t t r _ i d _。
• 数据类型应该是一个长度为2 5 5的v a r i a b l e - l e n g t h字符串,除非用d t : t y p e属性指出数据类型。
• 如果要求属性,那么列不应该允许为N U L L值。
(10) 拥有i d r e f s数据类型的属性
下面这个属性集也是我们以前没有遇到的,但是这些不能被简单地模拟为数据库存储类型:
这两个属性的目的是指供一个用空白进行分隔引用了< A u t h o r >和< T h r e a d >元素的列表。没
有什么可以简单地在用数据库的列对它进行维护,所以我们将通过创建与属性同名的表来模拟
这种关系,使用外键来指向A u t h o r和T h r e a d表。我们将以创建元素表的方法来创建这个表,所以
A u t h o r将如图1 0 - 3 3所示。
图10-33
并且t h r e a d s将同图1 0 - 3 4所示。
图10-34
第10章XML和数据库使用405 下载
我们需要定义的规则如下所示:
• 规则7—如果一个属性是i d r e f s类型那么:
• 创建一个与属性同名的表。
• 在其中创建一个列,名字与元素名字首字母大写的单数形式一样,加上前缀a t t r _ i d r e f _。
• 创建一个与首字母大写的单数形式同名的表的外键,对于要处理的表使用a t t r _ i d _列。
因为它有一点复杂,让我们用a u t h o r s属性来进行一步步地检查。首先,创建一个名为
a u t h o r s的表,拥有一般的特性。然后,在表中增加一列,名字为a u t h o r s的单数形式,且第一个
字母为大写—A u t h o r—并且加上一个前缀a t t r _ i d r e f _。最后,创建一个外键,将这个列与在
目标表中的a t t r _ i d _列连接(在这个例子中是A u t h o r表的a t t r _ i d _ a u t h o r C i t e I D)。注意这个规则假
设i d r e f s属性拥有一个元素名字的复数形式,它的I D被引用—在设计X M L模式时一个普通的习
惯。
一个迄今为止我们已经看到的允许的模式设计数据可能是:
程序清单1 0 - 4 9
你可以看到a u t h o r s和t h r e a d s属性是在文档中任何地方出现的i d s的简单列表。
注意如果我们创建的表结构对你来说是很熟悉,那么你走对路了;我们将正确地建立同样
的表和关系,用来生成下面的X M L:
程序清单1 0 - 5 0
406使用XML 高级编程
下载
然而,请注意这种方法,因为每一本书都包含它的作者,所以会重复很多次—如果一个
作者写了两本书,那么就会重复两次。这个i d r e f s技术允许元素包含其他的元素,而没有不必要
的重复。
( 11) 拥有i d r e f数据类型的属性
另一个我们还没有给它定义规则的属性是i d r e f。一个使用这个类型的例子是当引用一本书
的地址名称时:
不像i d r e f s,在这个属性中只能有一个引用可以出现,所以我们不需要使用一个额外的表。
所需要做的是用一个合适的名字创建一个列,然后创建一个与I m p r i n t表的这个列相连的外键。
我们的规则将是:
• 规则8—如果一个属性是i d r e f类型,那么:
• 创建一个与属性同名的列,加上前缀a t t r _ i d r e f _。
• 创建一个在这个列与对应的属性同名表的a t t r _ i d _ c o l u m n间的外键关系。
在这个例子中, 我们在B o o k 表的a t t r _ i d r e f _ i m p r i n t 列与表I m p r i n t 表的
a t t r _ i d _ s h o r t I m p r i n t N a m e间的外键关系。注意这个规则假设i d r e f属性有着与i d所指的元素相同的
名字—再一次指出,这是一个在设计X M L模式时的普通的习惯。
(12) 结构
图1 0 - 3 5是将使用我们的规则创建P u b l i s h e r分层信息的表和关系的表示。
图1 0 - 3 6是将使用我们的规则创建B o o k分层信息的表和关系的表示。
(13) 小结
使用X M L通过X M L模式来定义我们的X M L文档的好处表明我们能够自动地完成许多任务。
在这个例子中,我们已经创建了一系列的规则,这些规则将允许从模式中创建一个关系数据
库。
在查看代码之前,将总结一下迄今为止所创建的规则。注意我已经增加了一些子句用来明
确地显示规则的优先级(后面的规则在某种情况下要更先一些):
• 规则1—无论何时创建一个新表,创建一个与表名相同的主键,但是使用一个前缀p k _。
这一列将是一个a u t o m a t i c a l l y - i n c r e m e n t e d(自动增加)的整数。
• 规则2—对每一个与规则4不匹配的元素节点类型,创建一个与元素相同名字的表,然后:
第10章XML和数据库使用407 下载
图10-35
图10-36
• 如果元素节点是一个子节点,创建一个与父元素节点同名的列,但是使用前缀f k _。
 
中国航空网 www.aero.cn
民航翻译 www.aviation.cn
本文链接地址:XML高级编程上(132)
 
------分隔线----------------------------