• 热门标签

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

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

三个C a t e g o r y元素的实例。
X M L模式能够提供更精确的控制,我们将在第7章介绍有关内容。我们将使用模式语法说
明Category至少出现三次,且至多出现三次。
P r i c e元素有属性c u r r e n c y,它用于说明图书价格的货币单位。在该D T D中,我们规定只能选
择美元、加元或英镑。
我们很容易增加货币单位的种类。这就是为何我们将P r i c e设计为元素,而不是属性。通常
情况下,我们可以将一个简单的原子特性设计为属性。由于我们要处理国际贸易,因此必须指
定P r i c e内容的货币单位,以便满足应用程序的需求。我希望说明货币单位是应用于P r i c e的。所
以,我没有将价格和货币单位都作为B o o k的属性。通过将P r i c e说明为有# P C D ATA内容的元素,
我可以将c u r r e n c y作为属性,并显式指定它的内容。
下面的程序清单显示了B o o k元素的属性:
程序清单3 - 1 9
第3章文档类型定义使用75 下载
这是目前为止我们见到的最复杂的属性列表。I S B N当然是图书唯一的I S B N号,我们将它作
为I D类型以便于引用。L e v e l属性代表出版社给图书设置的难度级别。你正在阅读的这本书设置
为P r o f e s s i o n a l。该属性的值是由各个出版社自行定义的。虽然大多数出版社都有类似的概念,
但它并不是通用的,因此我将它指定为可选的属性。然而,如果元素包含该属性,它可以作为
排序或过滤的关键字。p u b D a t e和p a g e C o u n t属性分别代表图书的出版日期和页数。
D T D语法不允许定义日期和数字类型,虽然我们在此非常需要这两种类型。应用程序可
以通过简单的算法计算图书面世的时间,以及一套书的总页数。D T D不允许传递用于这
类计算的信息。它们必须隐含在对词汇表的认识中。XML模式将解决这类问题。
我们已经在D T D中定义了几个I D类型的属性。现在终于到使用它们的时候了。属性a u t h o r s
的值是指向代表特定作者的I D的a u t h o r C i t e I D值的一个或多个引用。例如:
以上代码表示书的作者是a u t h o r C i t e I D值分别为s m o h r、m k a y和m b i r b e c k的作者。属性
t h r e a d s与属性a u t h o r s类似,它将一本图书与一个或多个知识线索相关联:
由于线索可以引用多个I D,因此能够从多条途径分析目录。用户可以查阅一个目录文档,
并根据他所感兴趣的一条或多条线索进行过滤。出版社能够以目录文档为基础,根据线索和级
别选取图书,产生适当的阅读列表。
最后, i m p r i n t属性是对出版社印记的引用。一本书只能有一个印记,因此该属性是I D R E F
类型的。B o o k元素中为什么没有关于图书的出版社的属性?书的I S B N包含出版社的编号。这个
编号位于I S B N中的固定位置,所以我们能够从I S B N中提取出版社编号,并搜索具有相同i s b n属
性值的P u b l i s h e r元素。为了进一步简化,我们也可以根据i m p r i n t的值进行搜索。它能够直接得
到P u b l i s h e r元素,而不必象I S B N那样需要从属性值中提取子串。实际上,上述两种方法都不是
直截了当的,但是它们都很实用。
任何设计工作都会产生各种不同的结果。你完全可以根据自己的经验或需求考虑类似的图
书出版或目录信息问题。看看你会设计出什么样的D T D;我是否忽略了你所需的某些概念。你
也可以尝试着通过不同的方式表达同样的想法,或许对于你来说,它更加有效。到底应该将某
个项目模型划为元素还是属性,人们常常会在这方面产生争论。你不妨修改一下我的设计方案,
看看会产生怎样的后果。优秀的D T D设计来自于经验和试验。
(5) 完整的D T D
下面是P u b C a t a l o g . d t d的完整清单。本书的其他章节将用到它:
程序清单3 - 2 0
76使用XML 高级编程
下载
3.5.2 对象关系问题
请特别注意我们如何利用I D、I D R E F和I D R E F S类型的属性说明模型中对象之间的关系。这
第3章文档类型定义使用77 下载
些类型虽然结构简单,但是能够解决复杂的问题。XML 1.0在这方面涉及的内容非常有限,它仅
仅指出I D在文档中必须是唯一的。规范中并未强制定义任何编程语法。如果应用程序需要使用
该特征,我们必须自己提供编程支持。我们不能期望符合XML 1.0规范的解析器提供链接功能。
目前,某些解析器准备支持X S L,它使我们能够在不进行过多编程的情况下简便地实现链
接功能。然而,这是X S L的特性,而不是X M L的特征,如今市场上的大多数解析器都不
提供该功能。
尽管如此, I D和I D R E F仍然是X M L中的重要结构。它使我们能够在一个纯文本的文档中实
现类似于关系数据库中的关系模型。如果你所设计的词汇表要被一些未知的应用程序使用,就
会发现这两种结构非常重要。只要知道存在关系,就可以利用适当的属性列表声明捕获信息。
应用程序能够充分利用该信息。
3.5.3 进一步讨论
D T D语法还存在着一些局限性。它主要体现在以下三个方面:
• 所有内容必须写入同一D T D:没有分段,除非利用适当的声明和参数实体机制将一个D T D
从逻辑上分为若干子D T D。然而在解析时,验证有效性所需的声明不能从逻辑分隔的模式
实体中提取出来。
• DTD与X M L文档采用不同的语法(因此需要两种不同的解析机制)。
• 某些事物的表述存在缺陷,例如:类型和元组。
我们的图书目录D T D不太长,也不十分复杂。即使如此,我们涉及的两个概念—出版社
和作者—也可以应用于其他领域。有些D T D声明能够跨领域重用,在新的D T D中,必须包含
这些D T D组件。然而,如果问题空间比较复杂,可能会产生一些麻烦。如果你需要验证文档的
有效性,就必须从逻辑上将X M L词汇表涉及的所有内容都包含在同一D T D中,这使得我们很难
动态构建跨领域的内容, X M L模式在这方面有所增强。
D T D的语法与X M L文档使用的语法截然不同。验证有效性的X M L解析器能够处理D T D,但
 
中国航空网 www.aero.cn
航空翻译 www.aviation.cn
本文链接地址:XML高级编程上(32)