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

XML高级编程上(129)

时间:2010-08-09 13:05来源:蓝天飞行翻译 作者:admin 点击:
  
这个样式表简单地从< z : r o w >中取出每个属性,并且把它们输出成元素,尽管使用了不同的
名字。转换的结果为下面的简单的X M L文件:
程序清单1 0 - 3 8
在小型系统中可能很少会在这种技术或一种不需要中间介质的X M L记录集的数据而直接编
写为不同目标的不同脚本的技术中间进行选择。然而在一个大一些的系统中,它可能需要为许
多的用户提供很多种格式的信息,这种技术可能更有用。例如,如果我们想输出信息,以这样
一种方式,它能够被一个完全不同的系统所理解,或者我们以单调格式输让目录系统来处理它,
或者我们可能生成另一种样式表用它再次地转换单调格式。
因为这些映射类型不总是一对一的,甚至可能设计出一种文档结构,用来说明如果将记录
和字段映射到要求的模式格式。像上面的样式表可能被自动生成,甚至可能提供信息让低层的
数据库对其进行修改。
3. XML数据:使用脚本
把信息看成一种结构化的X M L的方法是生成一个作者的列表,作为在We b服务器上的X M L
页面。在前面我们已经看到是如何做的,所以在这里我只显示主要的循环部分,并做了一点修
改,允许现有的作者数据库能够使用:
程序清单1 0 - 3 9
4. 结论
从现有系统提取数据带给我们很多问题。尽管最完美的解决方案是以一种普通的格式取回
数据—关系结构的X M L表示—然后转换成希望的格式,这可能很充分地表现出性能问题。
如果对于数据所要完成的目标不多,那么特定的脚本可能就是答案。如果对于数据有很多的目
的格式,那么将数据的中间X M L表示进行缓冲可能是最好的,然后可以按照要求进行转换。
394使用XML 高级编程
下载
10.3.2 图书目录模式
现在已经确定如何使用已经存在的作者数据,但是仍然需要在一个数据库中表示图书目录
的其他部分。在这一部分,我们将研究图书目录模式定义的一些关键部分,并且随着发展,我
们将勾勒出一些创建关系数据库的关键点。在数据库中,将保存数据并且与模式相一致。在做
这个的过程中,我们将建立一些规则,可以在后面使用它们来使从一个模式创建一个关系数据
库的处理自动化。最后,我们将讨论用来进行自动转化代码的主要特点。代码将用来执行自动
转换,关于源代码的全部有效的清单,从h t t p : / / w w w. w r o x . c o m下载。
1. 定义目录数据库
在这个讨论中,我们将经常转换每一个模式定义为一个节点结构。我将通过下面的简单转
换来表示节点结构(参见图1 0 - 1 7)。
图10-17
结构通过节点的位置被指出。例如,在图1 0 - 1 8中指出一个A类型的节点有一个请求的属性
叫做B,一叫C类型的节点和零个或多个D类型的节点:
图10-18
满足这个节点结构的X M L文档的例子包含如下结构:
程序清单1 0 - 4 0
第10章XML和数据库使用395 下载
让我们开始转换模式定义为关系数据库,通过例举出一般的模式的一些关键特性—明显
的X M L文档—它们是:
• 分层。
• 属性。
• 纯文本元素。
• 纯文本元素的多发性。
• 枚举。
• 拥有i d数据类型的属性。
• 作为容器的元素。
• minOccurs属性。
• 拥有指定数据类型的属性。
• 拥有i d r e f数据类型的属性。
• 拥有i d r e f s数据类型的属性。
(1) 分层
第7章的图书目录模式开始部分如下所示:
程序清单1 0 - 4 1
其中描述了一个< C a t a l o g >元素,它只能包含其他元素。这就意味着不允许有其他的文本,
它包括在< C a t a l o g >元素中但是没有包括在< C a t a l o g >所包括的元素中(你可能还记得第7章的这
个意思,< C a t a l o g >不能包含混合的内容)。这个特性极大地简化了数据库的实现。
< C a t a l o g >元素可以包含< P u b l i s h e r >,< T h r e a d >和< B o o k >这类的元素。所以这些元素可以出
396使用XML 高级编程
下载
现任意多次,但是至少有一个< P u b l i s h e r >,并且至少一个< B o o k >。由这种模式定义所表示的
X M L文档的例子包括:
程序清单1 0 - 4 2
节点结构如图1 0 - 1 9所示。
你可能会回忆起对关系数据库的特性的讨论,这个模式可以容易地用四个表来表示。你可
能会问“为什么不是树?”,因为这里只有一个< C a t a l o g >,并且我们
可以隐藏其他的表与< C a t a l o g >之间的关系。然而,因为我们想产生
一个可以被容易生成的解决方案—也可能该数据库在将来会扩展
—我们将创建一个C a t a l o g表。
这些表之间的层次关系可以通过在低层次的表与包含它的表之间
创建连接来建立。例如,为了产生一条P u b l i s h e r表中的P u b l i s h e r记录
与一条C a t a l o g记录(在这种情况下只有一条)的连接,我们将需要
如图1 0 - 2 0所示的结构。
为了找到< C a t a l o g >的所有< B o o k >子节点,我们将简单地查询
B o o k表得到所有f k _Ca t a l o g列被设置成了与我们正在搜索的< C a t a l o g >值一样的值。
现在我们能够定义最初的两个规则(规则1仅用来节省在后面的规则中重复自身使用):
• 规则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—对每一个元素节点类型,创建一个与元素相同名字的表,然后:
第10章XML和数据库使用397 下载
图10-19
• 如果元素节点是一个子节点,创建一
个与父元素节点同名的列,但是使用
f k _的前缀。
• 创建一个在刚创建的列和与其父元素
 
中国航空网 www.aero.cn
民航翻译 www.aviation.cn
本文链接地址:XML高级编程上(129)
 
------分隔线----------------------------