曝光台 注意防骗
网曝天猫店富美金盛家居专营店坑蒙拐骗欺诈消费者
表8 - 8
B o o k I D Ti t l e P a g e s I S B N P r i c e
1 IE5 XML Programmer's Reference 4 8 0 1 - 8 6 1 0 0 1 - 5 7 - 6 $ 4 9 . 9 9
第二个是R e c S u b j C a t e g o r i e s表。
表8 - 9
R e c S u b j C a t e g o r i e s I D B o o k I D C a t e g o r y
1 1 X M L
2 1 Web Publishing
3 1 I n t e r n e t
关于这些数据结构,下面几问题很重要。
1. SQL行具有单一的标识符
在我们的样本表中第一个元素是该表的主关键字。一个设计完整的S Q L数据库总是为每个表
定义一个主关键字,它唯一地定义了表中的每个记录。通常主关键字是任意的,一般为系统设
定的数字(通过一个序列或其他机制)。相比而言,X M L元素(类似于数据库中的表格)不是用
关键字来定义(不过, X M L提供了一个机制: I D属性,来控制信息)的。例如,下面X M L中的
文档是完全可以被接受的:
程序清单8 - 8 9
值得注意的是三个< B e v e r a g e >元素正好具有相同的内容。在文档被解析的时候, X M L可以
根据它们被遇见的次序区别开这些元素。这就带来数据库和X M L之间的第二个区别。
2. SQL行并不反映顺序
关系型数据库并不反映出表中出现的信息的任何顺序。例如,在我们检验这些样本结构之
前,为B o o k设定了三个“R e c S u b j C a t e g o r i e s”:I n t e r n e t、Web Publishing和X M L。这些类项的主
292使用XML 高级编程
下载
题被用在每本书的背面,用来向书商说明这些书应该摆放在书架的哪个地方,在计划订货时可
以被使用。在X M L文档中,它们被遇见时的顺序可以反映一种顺序—这本书首先和X M L书籍
最相符,然后作为选择的是适用关于网络出版的一些信息,如果前面两种都不适用,则适用于
网络书籍。在数据库中对信息进行排序的时候,这些顺序信息将会丢失。如果这些信息得以保
持,赋予R e c S u b j C a t e g o r i e s记录的一些列排序信息将被用来揭示类别的优先顺序。
我们的查询语言应该了解X M L文档出现的信息的顺序特征,并根据使用这种语言查询的任
何结果来保存信息。而且元素的位置适用于查询引擎,这样可以利用那个信息来对结果进行过
滤—例如,对于给定的< B o o k >元素,查询引擎能够返回第二个< C a t e g o r y >元素。
3. SQL结构并不提供层次封装
从概念上来说,关系型结构并不是层次性的—在前面的例子中,它并没有提供给我们对
< B o o k >元素内部< RecSubjCategories >元素封装的方法。相反, < RecSubjCategories >元素必须
含有指回它们所属元素的指针—在我们的例子中,表< RecSubjCategories >中B o o k I D列就回指
到“含有” R e c S u b j C a t e g o r i e s信息的书记录。X M L这种指针机制可以让我们根据需要定义一对
一或者一对多的引用,甚至超出允许我们选择指向数据库结构中任意其他的元素。
这些关于指针的话题会使你想起X M L中的等价物—利用I D R E F或者I D R E F S属性来回指具
有给定I D的元素。我们可以设想一个< B o o k >和< RecSubjCategories >的D T D程序段看起来如下
所示:
程序清单8 - 9 0
在这种结构形式下,上面的例子将成为如下所示:
程序清单8 - 9 1
第8章链接和查询使用293 下载
为了找出一本书的类别序列, 我们有必要寻找具有回指该书的B o o k I D 的
< R e c S u b j C a t e g o r i e s >元素。相反,为了找出包含特定类别序列的书籍,我们有必要搜索拥有被
正讨论的< R e c S u b j C a t e g o r i e s >元素的B o o k I D s所指向I D(或I D s)的书(或多本书)。关系型数据
库天生就是利用连接( j o i n)来解决这类问题,能够使元素之间连接的界限很清晰,而标准的
X M L工具(如D O M或者S A X)的横向连接需要额外的工作。
如我们所知, X M L允许信息封装为父亲的孩子。这仅典型地用于表达一对一或者一对多的
关系(把同一个孩子嵌入不止一个的父母中,会造成信息的重复,在X M L文档中利用I D -
I D R E F S机制进行描述将会好一些)。我们例子的最初版本利用封装显示了类别信息是书籍信息
的组成部分。X M L技术,如: D O M、S A X、XLi n k、XPo i n t e r、XPa t h和X S LT利用节点树的形
式表达父母-孩子的关系更加能够发挥作用。我们的X M L查询语言能够浏览父母-孩子关系和
I D - I D R E F关系—以任一方向—能够保存查询得到的信息。
4. XML混淆了属性和纯文本内容
在X M L文档中,将属性和带有自己本身的文本内容和纯文本内容的特定元素相关联是可能
的。下面是两种可能的情形:
程序清单8 - 9 2
这两种形式在句法构成上是不同的,但从语义上来说是完全相等的—书籍有标题,无论
它们是作为书籍的属性还是作为书籍的纯文本子元素。每个样本的这个信息可以被存储在以前
定义的B o o k表中:
程序清单8 - 9 3
“文本元素与属性”的辩论仍在继续—有人尝试为X M L内容添加标准的形式(例如
M i c r o s o f t的B i z Ta l k对象的规范形式可以在网址h t t p : / / w w w. b i z t a l k . o rg/resources/canonical.asp 中
查到),但是W 3 C标准并没有把X M L文档限制为一种形式或其他形式。我们的查询引擎应该对
294使用XML 高级编程
下载
两种情形都能够进行操作。
5. XML允许元素混合模型
X M L允许元素被定义成具有混合内容模型—它们可以包含文本信息和子元素。这里有个
例子:
程序清单8 - 9 4
符合上面规范的< B o o k >元素应该是下面这种形式:
程序清单8 - 9 5
如果考虑对段落进行标记,这些需要就变得很明显了:一些单词或短语可能是粗体、斜体,
中国航空网 www.aero.cn
航空翻译 www.aviation.cn
本文链接地址:
XML高级编程上(101)