- 1、本文档共30页,可阅读全部内容。
- 2、原创力文档(book118)网站文档一经付费(服务费),不意味着购买了该文档的版权,仅供个人/单位学习、研究之用,不得用于商业用途,未经授权,严禁复制、发行、汇编、翻译或者网络传播等,侵权必究。
- 3、本站所有内容均由合作方或网友上传,本站不对文档的完整性、权威性及其观点立场正确性做任何保证或承诺!文档内容仅供研究参考,付费前请自行鉴别。如您付费,意味着您自己接受本站规则且自行承担风险,本站不退款、不进行额外附加服务;查看《如何避免下载的几个坑》。如果您已付费下载过本站文档,您可以点击 这里二次下载。
- 4、如文档侵犯商业秘密、侵犯著作权、侵犯人身权等,请点击“版权申诉”(推荐),也可以打举报电话:400-050-0827(电话支持时间:9:00-18:30)。
查看更多
XQuery/Update处理模块概要设计说明书
负责人:张新
编写人:张新
系统版本号:OrientX Version 3.0
完成时间:
开发单位:中国人民大学IDKE实验室XML工作组
1. 引言
本说明书主要介绍OrientX系统3.0版中XQuery/Update模块的概要设计。
以下各章节安排:第2节概述,介绍相关的背景知识,模块的主要功能及子模块构成;第3~5节分别介绍各子模块的详细设计。
2. 概述
2.1 XQuery/Update处理概述
OrientX3.0的update 处理是基于XQuery代理处理的引擎之上的. 主要是对XQuery/update提出的操作符 Insert, Delete, Rename, Replace增加相应的代数操作符.为此,update处理模块的设计跟原来代数引擎是接合在一起的.通过Parser分析出这是update处理语句还是一般的XQuery语句. 再生成相应的查询计划. Update处理计划,跟代数计划非常相似,只是增加几个处理更新的操作符.
2.2 XQuery代数处理
XQuery代数处理指的是:设计一套类似于关系代数的XQuery查询代数,在查询处理时首先将原有的XQuery查询语句转换成代数形式,在此基础上实现一次一集合的处理。与此相对的导航式处理是一次一结点的,因此代数处理在效率上具有很大优势。
为了实现一次一集合的处理方式,需要采用统一的形式表达那些相似的,可同时处理的数据片断。现有的XQuery代数处理工作多使用PatternTree表达要从源XML文档中抽取什么样的数据片断,符合同一PatternTree的数据实例构成InstanceTree的集合,查询执行就是基于这样的实例树集合进行操作。
由此整个查询处理过程可以分成抽取数据和结果构造两个主要阶段。抽取数据阶段首先用PatternTree表达感兴趣的数据片断形式,然后通过PatternTree-Matching操作,从源文档中找到匹配PatternTree的InstanceTree集合;这些InstanceTree包括了查询涉及到的所有数据项,后续的结果构造操作基于这些数据进行即可,而不需要再访问源文档。XQuery具有对查询结果进行重构的功能,输出的结果中可能有新建结点和源文档中的数据结点。在我们采用的XQuery查询代数中,查询输出的形式也使用PatternTree进行表达,当然数据抽取和结果构造的PatternTree是有所区别的。结果构造阶段根据用PatternTree表达的输出形式,从抽取阶段得到的InstanceTree集合中进一步抽取相关数据项,进行结果构造输出。
2.3 OrientXA简介
XQuery代数式处理需要相应的XQuery查询代数作为基础。在OrientX中的XQuery代数处理基于罗道锋设计的XQuery查询代数OrientXA,这里只对其设计进行简要介绍,详细内容见文档《OrientXA:一种有效的XQuery查询代数》。
2.3.1 OrientXA 之PatternTree
OrientXA采用PatternTree表达查询要抽取的数据片断及查询结果的构造形式。相应的有两种PatternTree:Source Pattern Tree,简称SPT,做抽取之用;Constructor Pattern Tree,简称CPT,表达输出形式。
Source Pattern Tree:
一个Source Pattern Tree是一棵树(N, E, R),其中,N是结点集合,E是边的集合,R是树的根。
每个结点有结点名,结点名可以为空,表示可以取任意结点名。结点名在Pattern Tree上不唯一。为了唯一地标识一个结点,每个结点分配一个PID。每一个结点还有若干个修饰符,主要包括:
是否序列绑定:用双圆圈表示序列绑定的结点,单圆圈表示结点绑定的结点;
是否强绑定:用实线圆圈表示强绑定,虚线圆圈表示弱绑定;
是否连带绑定所有子孙结点:用p表示需要连带绑定所有子孙结点。
边用来表达结点间的关系。Pattern Tree上有三种边:
父子边,用单实线表示;
祖先后代边,用双实线表示;
元素属性边,用单虚线表示。
Constructor Pattern Tree:
结点定义如下:
N := n(TagName) [= val]
| c (PID)
val := atom | PID
其中,n(TagName) = val表示新建一个结点,结点名为TagName,结点值为val;c(PID)表示拷贝 input pattern tree上特定PID结点,包括结点名,结点值,以及所有子孙结点;
val可以取原子值atom,也可以取某个PID结点的文
文档评论(0)