• 热门标签

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

时间:2010-08-09 13:05来源:蓝天飞行翻译 作者:admin
曝光台 注意防骗 网曝天猫店富美金盛家居专营店坑蒙拐骗欺诈消费者

• 创建一个在刚创建的列和与其父元素节点同名的表中的列的外键关系,列的名字是父元素
的名字加一个前缀p k _。
• 如果元素节点的内容只是本文,那么创建一个名字为p c d a t a的列。
• 规则3—对于每个与规则5、7或8不匹配的属性节点:
• 创建一个与属性节点同名的列:
- 如果属性是一个正常的属性使用前缀a t t r _。
- 如果属性是一个枚举类型使用前缀a t t r _ e n u m _。
- 如果属性是i d类型使用前缀a t t r _ i d _。
408使用XML 高级编程
下载
• 数据类型应该是一个长度为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值。
• 规则4—如果一个元素的节点只包含文本,并且最大发生次数为1次,那么在它的父元素
表中创建一列,列的名字与节点一样,使用前缀e l e m _。
• 规则5—对于每一个具有枚举类型的属性,用与属性节点值相同的名字创建一个表,使
用前缀e n u m _。包含一个与属性节点同名的可变长度字符串列,使用前缀p k _ e n u m _和
variable-length string数据类型。把枚举的值填在表中。
• 规则6——如果一个元素有一个为0的m i n O c c u r s值,设置允许列为空。
• 规则7—如果一个属性是i d r e f s类型那么:
• 创建一个与属性同名的表。
• 在其中,创建一个列,名字与元素名字首字母大写的单数形式一样,加上前缀a t t r _ i d r e f _。
• 创建一个与首字母大写的单数形式同名的表的外键,对于要处理的表使用a t t r _ i d _列。
• 规则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间的外键关系。
2. 自动创建数据库
下面的脚本出了我们前面章节设计和创建树的一系列指令的规则。我们已经讲过了,因为
同等的X S LT样式表转换成X M L - D R模式是非常复杂的,所以,如果转换过程太复杂,就应该使
用脚本来实现。在关系型数据库的两个表之间创建关系,主要的问题是不仅需要这些表存在,
而且在目标表上的主键要存在。为了做到这一点,我们总是在创建表和键值之后创建关系。这
样做的最安全的办法是,在我们能够写入的任何层次点,进程的任何阶段构造表示这些结构的
节点树。
使用节点结构构造命令的另外一个优点是,可以有机会优化命令。例如,为每一个元素建
立一个命令创建表之后,我们能够删除这些命令,这些元素能够容易地以列的形式存储。
脚本(s c h e m a t o r d b . a s p)首先创建表单定义模式,然后,两个D I V拥有处理结果。第一步提
供查看将被创建的表和列的快捷方式,第二步给出了将被产生的活动S Q L命令:
程序清单1 0 - 5 1
第10章XML和数据库使用409 下载
脚本开始时创建XML DOM,处理X M L计划输入,产生SQL DDL输出,产生样式表的输出。
在这个过程中包括两个样式表。第一个把创建的命令列表转换成每一个列的属性摘要,按照将
要显示的列的次序排序。主键和外键将能够看到。
第二个样式表把相同的创建节点转换成正确的S Q L语句,创建反映模式的数据库。
首先,我们创建一些变量存储输出的各个部分:
程序清单1 0 - 5 2
当按下按钮时,函数被执行:
程序清单1 0 - 5 3
首先装入模式文档,然后检验它是否真正包含模式节点:
程序清单1 0 - 5 4
410使用XML 高级编程
下载
下一步,创建所有存储计划表的分析结果的元素:
程序清单1 0 - 5 5
我们实现模式的第一种途径是创建需要的所有的表。这是一个包含每一种元素类型的表,
拥有i d r e f s类型的任何属性类型的表和拥有枚举类型的每一种类型的表。这两种情况的表在元素
和属性类型信息存储之后被命名:
程序清单1 0 - 5 6
列举的表被加以前缀e n u m _ t o确保不和别的名字冲突。我们不得不创建必要的结构,把列举
的值加入到列举的表中:
程序清单1 0 - 5 7
虽然我们为每一个元素类型创建了表,但对元素之间存在的层次关系一无所知。因此,下
第10章XML和数据库使用411 下载
一阶段通过每一个元素和在匹配元素类型中定位它的定义的方式进行:
程序清单1 0 - 5 8
如果元素不仅仅是纯文本,或者不仅仅是元素的一个事件,或者是一些属性,我们将把它
留在表中,并创建连接。然而,如果元素是纯文本,或者是一个事件,或者它没有属性,它能
在父表中安全地当作一个列:
程序清单1 0 - 5 9
介绍了所有的元素后,我们现在了解所有的属性:
程序清单1 0 - 6 0
412使用XML 高级编程
下载
对每一种属性,取得它们的定义:
程序清单1 0 - 6 1
不论是什么属性类型,需要对父表做一些事情,现在取得它的名称:
严格上来说,对属性做的任何事情依赖于它的类型:
枚举是依靠创建在属性元素表上的列实现的。枚举表在初期就已经被创建了。
I D R E F也是加到父节点的一列:
I D R E F S需要建立一个连接:
I D意味着加入一列到父节点中:
指定数据类型意味着创建指定数据类型的列:
程序清单1 0 - 6 2
第10章XML和数据库使用413 下载
现在我们在对列表的循环中创建或者删除某一个表,来达到优化的目的。注意,如果删除
命令创建表,则不得不删除相应的结构创建在表中的主键:
程序清单1 0 - 6 3
我们已经创建了列表,因此把它加入到包含节点中。
把所有的限制、主键、外键和其他的内容,放进另一个容器,把它们放入包含节点中:
程序清单1 0 - 6 4
加入指令列表,用数据组装一些表:
最后,为转换存储完整的文档,装入需要的样式表( D B C r e a t e Vi e w. x s l,带有这本书的可下
 
中国航空网 www.aero.cn
航空翻译 www.aviation.cn
本文链接地址:XML高级编程上(133)