• 热门标签

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

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

开始三个子元素,但是已经为作者详细信息创建了一个独立的模式,于是需要去参阅那个命名
空间并借用它(参见图7 - 4)。
图7-4
正如提到的,我们能够利用< d e s c r i p t i o n >元素去生成有关对于处理应用程序可利用的D T D信
息,这就是我们要做的,这里我们正使用它来指定< P u b l i s h e r >元素可用于出版商信息。
程序清单7 - 4 3
深入研究模式, < C o r p o r a t e N a m e >元素,它非常简单,包含D T D里的P C D ATA,于是我们指
定它的内容只是文本:
第7章命名空间和模式使用233 下载
出版商
公司名称
地址
出版印记
作者
下面我们具有地址信息,你可以想起包含一个y e s / n o的h e a d q u a r t e r s属性枚举,首先定义:
程序清单7 - 4 4
注意X M L - D R里的e n u m e r a t i o n数据类型表单。接下来,我们声明用在地址元素里的元素:
程序清单7 - 4 5
< P u b l i s h e r >元素的第三个子元素打算留下出版商的特征:
程序清单7 - 4 6
< P u b l i s h e r >元素的第四个子元素具有D T D里的作者信息细节,但是鉴于我们已经将它删除,
接下来转向讨论< T h r e a d >。
(2) 线索
< T h r e a d >用来指明书的分类区域。通过书封底上的代码,你能够看到三个不同的线索,它
们用来给书籍分类,例如在书店,当决定将书放到哪部分时它们将被使用。
程序清单7 - 4 7
234使用XML 高级编程
下载
我们再一次使用< d e s c r i p t i o n >元素去解释什么样的线索被使用。
(3) 书
最后一部分来处理书自身的内容。就像我们在D T D章节里说明的,书一定包含标题、摘要、
介绍的主题种类和价格(参见图7 - 5)。
图7-5
在我们定义这些元素之前,必须定义几个属性:
下面看看p a g e C o u n t属性。这里我们将真正使用强大的数据类型功能。我们将给这个属性一
个整数类型:
然后我们继续各种引用:
程序清单7 - 4 8
既然设置了将要使用的属性,声明< B o o k >的内容,它使用了刚刚声明的属性和几个子元素:
程序清单7 - 4 9
第7章命名空间和模式使用235 下载
图书
书名
摘要
推荐主题分类
价格(可选)
然后,描述这些子元素的内容:
程序清单7 - 5 0
< P r i c e >元素声明又将我们带到数据类型支持。货币属性需要一个枚举,同时元素的文本值
本身应该是一个数值类型以适于描述货币:
程序清单7 - 5 1
这就是说,通过一些从D T D语法到X M L - D R的转换,以及一些附加的强大数据类型,我们
创建了一个新的目录模式,它通过命名空间的支持,重用了作者模式。这给了我们与D T D所提
供的相同种类的验证支持,即我们改变里子c a t a l o g . x m l文件的根元素以反映使用了模式:
注意命名空间声明排除了对D O C T Y P E的声明。
7.8.3 模式协调
拥有模式里的所有元素和它们的内容的简单列表将是一件非常好的事情。这就是说,对于
每一个元素声明,我们将有一个许可的子元素和用于它属性的列表。这样,我们应该能够测量
改变任何特别的元素和属性带来的影响。因为XML-DR 模式使用X M L语法,所以能够使用
M S X M L和一些J a v a S c r i p t去产生这种效果。图7 - 6就是当它完成并在PubCatalog.xml 模式文件里
指出来时看起来的样子:
S c h e m a C o n c o r d a n c e . h t m l源代码可从我们的站点h t t p : / / w w w.wrox.com 得到。不同于提
供一个恰当的U R L用于你需要的参考索引文件,这里没有配置需求。
236使用XML 高级编程
下载
图7-6
1. 搜索元素
我们知道,一个模式文档以< S c h e m a >根元素开始。它的子元素将是< E l e m e n t Ty p e >和
< A t t r i b u t e Ty p e >元素。每个用< E l e m e n t Ty p e >元素声明的元素包含一系列元素和属性。这在某种
程度上简化了我们的工作。所有我们要做的是遍历这个< S c h e m a >元素的子结点列表,并处理每
一个搜索的< E l e m e n t Ty p e >元素。这里是所需要的代码的核心部分:
程序清单7 - 5 2
我们知道子元素的序号,于是通过一个简单的循环遍历整个文档。元素结点的N o d e N a m e属
性可以让我们通过查找< E l e m e n t Ty p e >名称搜索元素声明。
第7章命名空间和模式使用237 下载
2. 处理一个元素声明
函数C r o s s R e f E l e m e n t ( )接收一个< E l e m e n t Ty p e >元素结点并列出它的内容。这就是一个比较
困难的地方。这里并不担保< e l e m e n t >和< a t t r i b u t e >元素将被筛选。模式能以E l e m e n t Ty p e为序在
元素前列出属性,然后以另外的顺序反转它们,或者甚至混合这两者。我们需要一个连续的顺
序,这样能够在输出里加入适当的标题。我们将必须建立两个数组,一个用作元素名称,一个
用作属性名称,然后在结束元素声明时显示结果。这里是函数C r o s s R e f E l e m e n t ( )的一部分,用
来提取元素声明信息:
程序清单7 - 5 3
当遇到一个< e l e m e n t >和< a t t r i b u t e >模式元素时,得到t y p e属性的值,我们知道它是相关的
< E l e m e n t Ty p e >和< A t t r i b u t e Ty p e >元素的名称。通过使用g e t N a m e I t e m ( )函数做到这一点,
M i c r o s o f t在M S X M L里使用的D O M扩展很明确地通过名称得到属性。如果模式不包含组,我们
的工作就已经完成。因为组涉及我们需要的特定的元素和属性信息,所以必须调用另一个函数
S q u e e z e G r o u p ( )。这个函数看起来几乎同在上面看到的一样:
程序清单7 - 5 4
238使用XML 高级编程
 
中国航空网 www.aero.cn
航空翻译 www.aviation.cn
本文链接地址:XML高级编程上(85)