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

XML高级编程上(102)

时间:2010-08-09 13:05来源:蓝天飞行翻译 作者:admin 点击:
  
但是段落中大多数文本并没有额外的标注。如果你过去习惯于利用数据对象工作,这多少会造
成错觉—为了在关系型数据库中描述上述信息,一些语义构造有必要添加进关系型数据库中
(如B o o k表中v a l u e 1、v a l u e 2、v a l u e 3列)。如果X M L有更加灵活的结构,问题就更深入了:
程序清单8 - 9 6
在这种情形下,我们在< B o o k >元素中可以有任何数量的文本块。
我们用于访问XML 的任意一种查询语言必须能够处理像这样的内容规范。因此,了解了
什么是基本的查询语言所必须解决的问题之后,让我们看一下X M L查询能力进展到什么程
度。
8.6.3 XML查询语言的发展历史
早期的X M L使用者很快就认识到查询语言的必要性。为了达到这个目的,两个研究小组在
1 9 9 8年开始研究并对X M L文档查询机制,并向W 3 C提出方案。在我们讨论查询语言目前的状况
之前,让我们看一下X M L查询语言的发展历史。
1. XML-QL
W 3 C提交了一种称为X M L - Q L的查询语言。这个方案的作者按照数据库的思路来解决问题,
采用了用于访问层次型数据库和关系型数据库的相同技术。X M L - Q L指定了一个X M L文档的样
本程序段,提供了构建机制允许输出同类信息,而不用考虑开发者的愿望。在继续讨论之前,
让我们先看一个例子。
设想要创建一个文档,在样本X M L目录中列出所有书籍的标题,输出结果按如下形式:
第8章链接和查询使用295 下载
程序清单8 - 9 7
在X M L - Q L,我们将使用下面的查询:
程序清单8 - 9 8
这里你可以看到和S Q L的相似之处。利用W H E R E子句我们可以对正在操作的信息进行限制,
C O N S T R U C T子句可以用来创建产生的输出。这些子句是可以嵌套的,为我们的信息提取和信
息描述提供很大的灵活性。
尽管X M L - Q L是灵活的,但它有两个缺点:
• X M L没有规定保持次序—在X M L - Q L处理器中结果输出并不保证和原始文档具有相同的
顺序。这对于X M L数据文档来说可能不是一个大问题,然而对于X M L文本标识文档来说
就相当严重了(我们可以想象阅读一本段落顺序混乱的书!)
• X M L没有规定保持结构—你可以注意在前面的例子中,必须通过指定使用的标识来产生
结果文档的整体结构—实际上,在查询中重新产生结构。如果我们尝试将大的文档减至
为我们所感兴趣的那一部分(例如,一个给定作者的所有著作),将结构信息保持下来就非
常好了—我们就不用建造书籍的整体子结构,仅仅把原始文档的结构镜像下来就可以了。
在X M L - Q L方案提交到W 3 C的同时,另外一种建议也被提出来了,这是一种采用更多方向
标识的办法:X Q L。
2. XQL
X Q L从结构化文档的前景考虑来解决问题。它在设计时考虑尽可能在提供方法减少内容的
同时保持原始文档的结构和顺序。让我们回顾一下前面一部分的例子。(若熟悉M i c r o s o f t的X S L
的安装使用,请记住该讨论仅针对原始X Q L版本—我们会逐渐过渡到流行状态。)
利用X Q L,通过查询从目录中生成一列标题将是下面这种形式:
输出结果如下:
程序清单8 - 9 9
296使用XML 高级编程
下载
注意,利用X Q L原始文档的顺序能够保证得以维持。上面所示的文本文档由包容器
< x q l : r e s u l t >包起来。用于返回节点集的X Q L处理器简单地返回一列有序的< Ti t l e >元素节点。
X Q L同时保持了层次信息。例如,如果我们选择抽取称为“ IE5 XML Programmer's
R e f e r e n c e”的书,我们可通过如下查询实现:
查询输出如下:
程序清单8 - 1 0 0
注意所有被选B o o k元素的嵌套内容得以保持下来,然而如果利用X M L - Q L我们必须在子句
中指定所有的子元素。
X Q L能够解决利用X M L - Q L所产生的一些问题,不过它在下面两个方面存在缺陷。
• X Q L不能提供信息区分—X Q L的设计是以节点操作,而不是依靠信息,当两个元素具有
相同的内容时,它就没有自身解决办法进行鉴别。例如,利用X Q L不能在X M L目录中产生
作者的不同列—X Q L会对原始文档中的每个< A u t h o r >节点产生一个< A u t h o r >节点,而不
理会节点的内容。
• X M L不能关系—处理关系型信息一个普通的技术就是p i v o t关系。例如,我们有一列书
籍和它们各自的作者,但是我们希望产生一列由所有作者和他们出版的书的列表。由于
X Q L能够对层次保持,利用X Q L进行查询是不可能的,它最初设计时就是这样。
虽然对于访问层次型信息, X M L是最自然的方法,它不能像X M L - Q L一样灵活地处理数据。
综合的灵活性和结构化访问机制将是较理想的查询语言。
3. XSLT 和XPa t h
尽管缺少查询标准,利用W 3 C现有的两种推荐方案: X S LT和X P a t h,来产生解决问题的办
法还是可能的。你无疑认识了X Q L的查询模式—X Q L是XPa t h的最直接的祖先。XPa t h维持了
原始文档的层次性和结构,适用于访问X M L文档的独立节点。X S LT(下一章我们将会详细学习)
第8章链接和查询使用297 下载
适用于对查询结果进行处理,构建新的元素,在有必要的时候(采用和X M L - Q L很类似的方法)
从新组织结果元素。我们将会明白,综合X S LT- XPa t h将允许开发者随意而方便地对源文档的信
息进行操作和重组。
8.6.4 使用XPath和XSLT查询XML文档
目前可以使用的用于查询X M L文档最好的技术是X S LT,X S LT使用XPa t h从文档中滤除结点,
不过X S LT用来以任何数目的形式来描述数据。如果你熟悉利用X S LT进行X M L到H T M L的转换
(将会在第9章学到更多关于X S LT和转换的知识)的话, X S LT也可以用来对任何结构进行转换
—包括X M L。这一部分我们将看一下如何利用X S LT将一个X M L文档转换成另一个,表达了
 
中国航空网 www.aero.cn
民航翻译 www.aviation.cn
本文链接地址:XML高级编程上(102)
 
------分隔线----------------------------