首页> 中国专利> 在XML文档和关系数据之间的映射中保留层次信息

在XML文档和关系数据之间的映射中保留层次信息

摘要

用于管理在SQL兼容DBMS中的XML数据的方法包括接收SQL语句。SQL语句包括特殊运算符,该运算符对代表第一组XML元素的第一XML型实体生效。在执行SQL语句期间,通过产生XML型实体的有序集合来计算特殊运算符。有序集合中的每个不同的实体是基于来自第一组的不同XML元素;并且对于来自第一组或来自第一组及其子孙的每个XML元素,存在有序集合中的实体。当包括子孙时,有序集合中的每个入口指示在XML树中的等级。在另一方面,SQL语句中的聚集运算符对具有相关等级的实体的集合生效,以产生单一XML型实体。

著录项

法律信息

  • 法律状态公告日

    法律状态信息

    法律状态

  • 2009-09-30

    授权

    授权

  • 2006-07-26

    实质审查的生效

    实质审查的生效

  • 2006-05-31

    公开

    公开

说明书

技术领域

本发明涉及用于在关系数据库(relational database)系统中使用可扩展标记语言(XML)数据的方法。

背景技术

万维网(WWW)包括互联网上的服务器的网络,每个服务器与一个或多个超文本标记语言(HTML)页面相关联。HTML页面在对服务器发出请求的客户机和使用超文本传输协议(HTTP)的服务器之间传递。可从互联网上的服务器中获得的资源是用统一资源定位符(URL)定位的。WWW的标准和协议由万维网联盟(W3C)通过其在www.w3c.org的服务器发布,且除在互联网上使用之外,它们还被用于许多专用网路。

HTML标准是一种更加通用的标记语言标准的一个应用,这种标记语言标准叫做通用标记语言标准(SGML)。最近,SGML的子集已经被定义,该子集比HTML更强大并更灵活,并且已获得普及,用于在互联网及其他网络上传递信息。由W3C开发并且促进的新标准叫做可扩展标记语言(XML)。XML为表示数据中的结构提供了通用语法。结构化数据指的是标记(tag)了其内容、意义、或使用的数据。XML提供HTML中完成的标记(tagging)的扩展,这种扩展集中在格式或表达上。XML标记识别XML元素(element)及XML元素的属性(attribute)。XML元素可以被嵌套,以形成元素的层次(hierarchy)。

假设元素被XML定义和使用,则文档对象模型(DOM)为树形结构,用来定义在XML文档中的信息如何排列。用XPath表达式来导航DOM,该表达式指示在元素的层次中特殊(particular,特定)节点或内容以及XML文档中的属性。XPath是由W3C发布的标准。

关系数据库先于万维网且开发独立于万维网。关系数据库将数据存储于对应于数据内的逻辑关系的不同数据容器内。因此,关系数据库支持强大的查询和更新性能。关系数据库通常将数据存储在行和列构成的表中,在表中一行的所有列之间的值是相关的。例如,雇员表一行中的值描述同一雇员的属性,例如她的姓名、社会保险号、地址、薪水、电话号码及其他信息。将每个属性存储在不同的列中。一些称作集合(collection)的属性可以有多个入口(entry,条目)。例如,雇员可能被允许拥有多个电话号码。特殊结构在一些关系数据库中被定义以存储集合。

关系数据库管理系统(DBMS)是在关系数据库中存储和检索数据的系统。关系DBMS处理执行数据库功能的请求,例如创建和删除表,增加和删除表中的数据,以及从数据库中的表中检索数据。众所周知的用于表示数据库请求的标准语言是结构化查询语言(SQL)。

由于作为支持元素间层次关系的数据交换格式的XML很流行,以及由于关系DBMS的更新和检索数据的能力,需要生成从关系数据库输出的XML数据,以及将XML数据存储到关系数据库中。在一种方法中,数据库管理员可以委托进行(commission)编程工作,以在过程语言中生成代码,该过程语言将特殊XML结构(construct,构造)中的数据映射到特殊关系数据库结构中的数据并且返回。这样的编程工作会非常昂贵。

在另一种方法中,可以采用类似于SQL语句的说明语句,只表示在XML结构和SQL结构之间的关系。根据所说明的关系来转换数据的通用程序由DBMS供应商一次性编写并且提供给数据库管理员。这使得数据库管理员不用开发过程语言程序来转换数据。为了支持这种需求,已经开发了行业标准SQL来对XML文档生效(operate on,对…起作用)。这种标准叫做SQL/XML,并且关于SQL/XML的信息可在其记录在www.sqlx.org上时获得。SQL/XML提供说明语句,该说明语句可用于只表示在层次XML结构中的数据和SQL关系结构中的数据之间的一些转换。例如XMLAgg是SQL/XML函数,其从一组XML元素中产生一个XML文档,该XML元素产生于关系表的选定行。

如这里所用的,XML结构包括XML文档、XML元素、包括多个XML元素的文档片段(fragment)、以及XML元素的XML属性等。一种数据,其在SQL兼容DBMS(SQL compliant DBMS)内被操作,并且由DBMS结构化,以支持产生XML结构来输送该数据,该数据被称作“XML型实体(instance,实例)”,或者简称为“XML数据”。这种XML数据可能或可能不被存储在如表(行及列)这样的SQL结构中。

当SQL/XML语句为在XML结构与SQL结构之间的转换中出现的许多情况提供强大工具时,它们不完全适应所有出现的情况。例如,XML型实体可能包括用于雇员元素的数据,该雇员元素包括几个子元素(child element),这些子元素对应于雇员签名离开(sign out)的各种装置。DBMS的用户可能想生成描述满足某种标准的装置的一系列XML文档。用于提取那些子元素的传统的SQL/XML语句产生关于满足标准的所有装置的单一实体。为了产生用于每个单独装置的单独XML型实体,使用若干传统语句,为每个满足子标准的装置使用一个传统语句。多个语句的生成是冗长的。在一些情况下,不可能预测标准以将每个装置从其他装置中分离。在这样的情况下,能使用单一语句来生成一系列单独XML型实体是优选的。

当在XML结构和SQL结构之间进行转换时,当前的SQL/XML语句也不支持保留(retain)一些层次关系。一些XML元素可嵌套在其固有类型内以形成层次。例如,叫做“雇员”的XML元素可具有一个或多个其它雇员元素作为子元素,子元素代表由第一雇员管理的其他雇员。在一些情况下,如果没有在原始XML文档中指示的嵌套,则对文档中若干雇员元素生效的SQL/XML函数EXTRACT将仅连续地输出所有这些雇员元素。结果是雇员列表没有指示一些雇员是否是被管理员父类雇员(manager parent employee)管理的子雇员(children employee)的层次信息。

一些SQL行可能包含表的行内的层次。例如,“emp”表可能包括用于每个雇员的一行并且包括列“mgr”,该列具有指向用于第二雇员的emp表的另一行的指针,该第二雇员是第一雇员的管理者。对由这个表的行生成的多个XML元素生效的SQL/XML函数XMLAgg将只产生具有一组根等级(1evel)元素的XML文档片段(例如元素名“雇员”的一系列XML元素)。每个雇员元素的mgr属性包含了层次;但是,如果雇员元素被嵌套使得所管理的雇员是管理员雇员元素的子元素,则将更令人满意。

根据上文,很明显需要说明语句来加强在SQL兼容DBMS中的XML数据的操作。特别是,当SQL结构中的数据被转换为XML型实体时,需要说明语句来保留包含在SQL结构内的层次关系。当实体被转换为多个XML型实体时,也特别需要说明语句来保留XML型实体里的层次关系。

可以继续本节中所描述的方法,但不是已被构思和继续的必要的方法。因此,除非在此另有说明,在此部分中描述的方法不能仅因为在此背景技术部分中出现这些方法,就认为是本申请的权利要求中的现有技术。

附图说明

本发明在附图中以举例而不是限制的方式加以阐明,附图中相同的附图标记指示相同的元件,其中:

图1是示出根据实施例的XML文档、XML图解、以及将XML文档内容存储于对象-关系数据库内的对象-关系结构的框图;

图2A是示出树形层次的一个实例的框图;

图2B是示出在对应于图2A的树形层次的XML文档实例的201部分中的XML结构的框图;

图3是示出根据实施例的用于产生XML型SQL结构的集合的方法的概述的流程图;

图4A是示出根据实施例的用于产生具有附加(additional)层次信息的XML型SQL结构的集合的方法的概述的流程图;

图4B是示出图4A的方法的步骤的实施例的流程图;

图5A是示出根据实施例的聚集(aggregate)具有层次信息的XML型SQL结构的集合的方法的概述的流程图;

图5B是示出图5A的方法的步骤的实施例的流程图;以及

图6是示出计算机系统的框图,可在该系统上执行本发明的实施例。

具体实施方式

描述了用于操作在SQL兼容DBMS中的XML数据的技术。在下面的描述中,出于解释的目的,许多具体的细节被阐明以提供对本发明的彻底理解。然而,显而易见,本发明可以在没有这些具体细节的情况下实施。在其它实例中,已知的结构和装置以框图的形式示出,以避免对本发明造成不必要的混淆。

功能概述

提供了新的XML操作用于操作在SQL兼容DBMS中的XML数据。DBMS允许XML型实体代表XML结构,例如XML文档、XML元素、包括若干XML元素的XML文档片段、以及XML元素的XML属性。根据本发明的一个方面,本技术包括在DBMS中接收SQL语句。SQL语句包括对代表第一组零个或多个XML元素的第一XML型实体生效的顺序运算符(operator)。在执行SQL语句期间,通过生成零个或多个XML型实体的有序(ordered)集合来计算(evaluate,求值)顺序运算符。有序集合中的每个不同的XML型实体都基于来自第一组的不同XML元素,并且对于在第一组中的每个XML元素,有序集合中存在XML型实体。这些技术允许说明语句加强对XML型SQL实体的操作。

根据本发明的另一方面,接收包括层次顺序运算符的SQL语句。层次顺序运算符对代表至少第一XML结构的第一XML型实体生效,该至少第一XML结构包括第一组一个或多个XML结构,其中第一XML结构是在XML树形层次中的祖先(ancestor)节点。在执行SQL语句期间,通过生成一个或多个入口的有序集合来计算层次顺序运算符。有序集合中每个入口都包括特殊XML型实体和指示等级的数据。特殊XML型实体代表第一组中的特殊XML结构。数据指示XML树中特殊XML结构的等级。当那些XML结构被作为多个XML型实体进行操作时,本方面的技术允许说明语句保留在XML结构中的层次关系。

根据本发明的另一方面,接收包括层次聚集运算符的SQL语句。层次聚集运算符对特殊XML型实体和指示特殊等级的数据生效。特殊XML型实体是将被包括在代表祖先XML结构的结果实体中的多个XML型实体之一。祖先XML结构具有相关的XML树形层次。特殊等级指示XML树形层次中将放置由特殊XML型实体代表的特殊XML结构的地方的等级。在执行SQL语句期间,通过将特殊XML型实体以由等级指示的深度(depth)插入到结果XML型实体中来计算层次聚集运算符。这些技术允许当那些XML结构的数据被转换成XML型实体或者以XML结构输出时,说明语句保留包含在SQL结构中的层次关系。

下面描述关于商业可扩展标记语言/结构化查询语言(XML/SQL)数据库服务器的实施例,该服务器使用对象-关系结构以存储一个或多个XML文档的内容,并且响应对于该内容的XPath查询,该内容将被当作一个或多个XML文档或者由一个或多个XML结构组成的文档片段来操作或输出。XPath查询包括用于定位在XML文档中的XML文件的XPath表达式,以及零个或多个SQL/XML函数,用于生成、合并或比较被XPath表达式定位的数据。SQL/XML标准函数包括EXTRACT、EXTRACTVALUE、以及EXISTSNODE,这些对于本领域技术人员而言是众所周知的。但是本发明不局限于这个范围,还可能适用于包括关系数据库结构和XML数据的任何范围。

结构概述

包括在本发明实施例中的结构包括具有XML结构和关系数据库结构(也称作SQL结构)的XML文档。图1是示出XML文档实例110,以及对象-关系结构实例的框图,该结构将XML文档内容存储于由对象-关系数据库服务器130管理的对象-关系数据库中。

XML文档110是特殊XML文档型实体,在下文中被称作“ORG”XML文档,它描述企业内雇员间的组织关系。为了进行说明,假设ORG文档实例110包括用于公司管理人员的类型EMPLOYEE(名为“EMPLOYEE”)的XML元素112a。每个EMPLOYEE型元素包括雇员编号(名为“ENO”)的属性(未示出),以及类型ENAME、EINFO的两个XML元素,以及类型EMPLOYEE的零个或多个其他元素。类型ENAME的XML元素,例如XML元素114a存有指示雇员名称的内容。类型EINFO的XML元素,例如XML元素114b存有指示其他雇员信息(例如地址和薪水)的内容。所包括的类型EMPLOYEE的XML元素,例如XML元素116a、116b存有指示由通过属性和ENAME及EINFO元素的内容所识别的雇员所管理的雇员。EMPLOYEE型元素,例如XML元素116a、116b和由省略符号115指示的其它元素,在下文中被共同作为子EMPLOYEE元素116。

XML数据库服务器实例130是XML对象-关系数据库服务器,其导入和导出XML文档,该文档作为XML型实体(在这里也称作XML实体)代表一个或多个XML结构,并且将XML结构的内容存储在数据库存储空间140中的一个或多个SQL结构中。数据库存储空间140包括一个或多个其它SQL结构,例如表144和图148。

在所述的实施例中,表并不直接涉及XML ORG文档。例如,不存在每行都对应不同ORG文档或不同EMPLOYEE元素的表。使上述情况可能出现的一种方法是,在ORG型XML文档被定义之前,数据可能已经被存储在EMP表144中,并且用于多个应用。另一种情况是EMP故意被设计为比XML型实体的表更加紧凑。EMP表并不是XML型表;并且EMP表包括具有列名称mgr的列以存储代表雇员的管理人员的数据,该列并不是XML型列。

对于例如非XML型的表144和列MGR的对象关系结构,XML查询没有意义。必须产生XML型对象用于这种XML查询。通过使用在SQL/XML中的一个或多个XML生成函数,XML型对象可在XML对象-关系数据库服务器中从不是XML型实体的SQL结构中产生。例如,XML生成函数XMLElement从一个或多个非XML型的对象或者标量列中产生XML型实体。XML型对象(XML型实体)可被DBMS使用以产生XML结构的数据流。XML生成函数XMLAttributes从标量列中产生XML型对象的属性。也可使用一个或多个SQL/XML函数结合XML型对象。包括XML生成函数的子查询必须包括在指向非XML型的对象-关系结构中的数据的XML查询中。在一些情况下,包括XML生成函数的子查询可能被储存为XML类型图,例如XML类型图148。

新XML函数实例

根据一些实施例,三个用于加强在SQL兼容DBMS中的XML数据的管理的XML函数实例,被称作XMLSequence、HierXMLSequence、以及HierXMLAggregate,它们在下文中会有更详细说明。

XML结构和SQL结构的内容实例

为了说明在说明SQL语句中的用于操作XML数据的这些函数的使用,假设列于表1中的数据存在于EMP表144中。

表1.EMP表144的内容实例

  ENO  ENAME  EINFO  MGR  1  Linda  ...  null  2  Charles  ...  1  3  Terry  ...  1  4  Alice  ...  2  5  Mary  ...  2  6  Ray  ...  4  7  Vishnu  ...  6  8  Cetin  ...  6  9  Steve  ...  3

该EMP表是使用SQL结构的可交换行的平面文件;但是包含雇员的层次。例如,列于表1中的内容指示Linda(ENO=1)为层次的最高层;并且Charles(ENO=2)和Terry(ENO=3)向她汇报。Alice(ENO=4)和Mary(ENO=5)向Charles汇报。Ray(ENO=6)向Alice汇报。Vishnu(ENO=7)和Cetin(ENO=8)都向Ray汇报。Steve(ENO=9)向Terry汇报。这些包含的层次在图2A中作为节点树示出。

图2A是示出树形层次的框图。在图2A中,节点205包括节点210、220、230、240、250、260、270、280、290。根节点210代表雇员Linda。Charles和Terry两个雇员,分别由子节点(childnode)220、230代表,向由节点210代表的Linda汇报。代表Terry的节点230有一个子节点290,代表向Terry汇报的雇员Steve。代表Charles的节点220有两个子节点240、250,分别代表向Charles汇报的雇员Alice、Merry。代表Alice的节点240有一个子节点260,代表向Alice汇报的雇员Ray。代表Ray的节点260有两个子节点270、280,分别代表向Ray汇报的雇员Vishnu、Cetin。

图2B示出用XML结构表示相同信息的XML ORG文档。图2B是示出在XML文档实例的部分201中的XML结构的框图。在图2B中,应用XML结构示出ORG型XML文档的部分201。部分201中的每一行都由列于图2B中行左边的行号202指示。第1行中的省略符号表示先于文档中的根元素ORG的XML结构,例如指示XML版本以及将用于有效元素和属性的名字空间的数据。在节点210,代表Linda的XML结构包括第4行到29行中的那些结构。代表Linda的子孙元素(descendent element)的XML结构由标记220到290的括弧指示,用于图2A中的对应节点。尽管为了更清楚地讨论,将XML结构分开到不同的行上,XML并没有采用换行符来区别XML结构。图2A的树形层次204与图2B中的ORGXML文档的数据对象模型(DOM)相对应。

值得注意的是,mgr列不必与任何XML结构相对应——管理人员-被管理雇员关系由嵌套的XML元素的父-子(parent-child)关系指示。同样值得注意的是,数据的XML表示比在表1中所示的EMP表中相同数据的表示更为冗长。

顺序运算符

顺序运算符用于从XML文档或片段中产生XML型子实体(child instance)的集合。为了说明的目的,假设将ELIST文档存储在文件ELIST.xml中,并且包括雇员列表,以及如表2a所示,被表示为XML型实体。进一步假设期望它作为单独XML型实体操作EMPLOYEE XML元素。

表2a.ELIST元素

  行             ELIST元素  1  2  3  4  <ELIST>    <EMPLOYEE ENO=″1″>       <ENAME>Linda</ENAME><EINFO>...</EINFO>    </EMPLOYEE>

  5  6  7  8  9  10  11  12  13  14  15  16  17  18  19  20  21  22  23  24  25  26  27  28  29  <EMPLOYEE  ENO=″2″>     <ENAME>Charles</ENAME><EINFO>...</EINFO>  </EMPLOYEE>  <EMPLOYEE  ENO=″4″>     <ENAME>Alice</ENAME><EINFO>...</EINFO>  </EMPLOYEE>  <EMPLOYEE  ENO=″6″>      <ENAME>Ray</ENAME><EINFO>...</EINFO>  </EMPLOYEE>  <EMPLOYEE  ENO=″7″>      <ENAME>Vishnu</ENAME><EINFO>...</EINFO>  </EMPLOYEE>  <EMPLOYEE  ENO=″8″>       <ENAME>Cetin</ENAME><EINFO>...</EINFO>  </EMPLOYEE>  <EMPLOYEE  ENO=″5″>       <ENAME>Mary</ENAME><EINFO>...</EINFO>  </EMPLOYEE>  <EMPLOYEE  ENO=″3″>      <ENAME>Terry</ENAME><EINFO>...</EINFO>  </EMPLOYEE>  <EMPLOYEE  ENO=″9″>      <ENAME>Steve</ENAME><EINFO>...</EINFO>   </EMPLOYEE>  </ELIST>

标准SQL/XML函数EXTRACT可以产生列出EMPLOYEEXML元素的XML型实体。例如,命令

EXTRACT(‘ELIST.xml’,‘ELIST/EMPLOYEE’)从ELIST.xml文档中提取XML元素EMPLOYEE,并且生成表2b所示的代表XML结构的结果XML型实体。在这个实体中,所有雇员都是第一代(generation)子XML元素。例如,雇员Linda由第1-3行的元素表示,雇员Charles由第4-6行的元素表示。由于不存在单一根元素,但是在根等级上存在多个XML元素,因此该实体代表片段而不是XML文档。

表2b.用EXTRACT命令实例生成的XML型实体实例

  行        来自EXTRACT函数的XML实体  1  2  3  4  <EMPLOYEE         ENO=″1″>     <ENAME>Linda</ENAME><EINFO>...</EINFO>  </EMPLOYEE>  <EMPLOYEE         ENO=″2″>

  5  6  7  8  9  10  11  12  13  14  15  16  17  18  19  20  21  22  23  24  25  26  27    <ENAME>Charles</ENAME><EINFO>...</EINFO>  </EMPLOYEE>  <EMPLOYEE  ENO=″4″>    <ENAME>Alice</ENAME><EINFO>...</EINFO>  </EMPLOYEE>  <EMPLOYEE  ENO=″6″>    <ENAME>Ray</ENAME><EINFO>...</EINFO>  </EMPLOYEE>  <EMPLOYEE  ENO=″7″>    <ENAME>Vishnu</ENAME><EINFO>...</EINFO>  </EMPLOYEE>  <EMPLOYEE  ENO=″8″>    <ENAME>Cetin</ENAME><EINFO>...</EINFO>  </EMPLOYEE>  <EMPLOYEE  ENO=″5″>    <ENAME>Mary</ENAME><EINFO>...</EINFO>  </EMPLOYEE>  <EMPLOYEE  ENO=″3″>    <ENAME>Terry</ENAME><EINFO>...</EINFO>  </EMPLOYEE>  <EMPLOYEE  ENO=″9″>    <ENAME>Steve</ENAME><EINFO>...</EINFO>  </EMPLOYEE>

为了对于每个雇员生成单独XML型实体,期望可以从表2b中所示的输出文档中产生XML型实体的序列。XML型实体的序列可以当做XML型实体的源,用于在表中存储或在FROM子句中临时使用。需要顺序函数以产生XML型实体的集合。例如,在表3a中描述了从表2b的输出文档中产生的XML型实体的集合。这些实例按与输出的XML文档中的那些元素的顺序相对应的顺序出现。

表3a.来自XMLSequence的XML型的序列实例

  实体  #             XML实体  1  <EMPLOYEE  ENO=″1″>    <ENAME>Linda</ENAME><EINFO>...</EINFO>  </EMPLOYEE>  2  <EMPLOYEE  ENO=″2″>    <ENAME>Charles</ENAME><EINFO>...</EINFO>  </EMPLOYEE>  3  <EMPLOYEE  ENO=″4″>     <ENAME>Alice</ENAME><EINFO>...</EINFO>  </EMPLOYEE>  4  <EMPLOYEE  ENO=″6″>

      <ENAME>Ray</ENAME><EINFO>...</EINFO>  </EMPLOYEE>  5  <EMPLOYEE  ENO=″7″>      <ENAME>Vishnu</ENAME><EINFO>...</EINFO>  </EMPLOYEE>  6  <EMPLOYEE  ENO=″8″>      <ENAME>Cetin</ENAME><EINFO>...</EINFO>  </EMPLOYEE>  7  <EMPLOYEE  ENO=″5″>      <ENAME>Mary</ENAME><EINFO>...</EINFO>  </EMPLOYEE>  8  <EMPLOYEE  ENO=″3″>      <ENAME>Terry</ENAME><EINFO>...</EINFO>  </EMPLOYEE>  9  <EMPLOYEE  ENO=″9″>      <ENAME>Steve</ENAME><EINFO>...</EINFO>  </EMPLOYEE>

根据本发明该方面的实施例,设置了XMLSequence运算符,该运算符对代表XML结构的XML型实体生效,如表2b所示,并且产生XML型实体的文档有序集合,如表3a所示。

图3是示出根据实施例的产生XML型实体的集合的方法300的概述的流程图。尽管在图3和随后的流程图中,以特殊的顺序示出步骤,但在其他实施例中,步骤可能以不同顺序执行或者时间上有重叠。

在步骤302中,接收具有XMLSequence运算符的SQL语句,该运算符对代表XML结构的XML型运算对象生效。例如,接收如下所示SQL语句S 1a:

SELECT*FROM

     TABLE(

         XMLSequence(EXTRACT(‘ELIST.xml’,’ELIST/EMPLOYEE’))

)                                                            S1a.

在步骤310中,通过生成包括XML型实体的有序集合来计算XMLSequence运算符,该XML型实体与运算对象的子节点相对应。例如,XMLSequence对运算对象EXTRACT(‘ELIST.xml’,‘ELIST/EMPLOYEE’)生效,其生成表2b中的XML结构。通过生成具有表3a中所示的XML型实体的有序集合来计算XMLSequence,表3a中所示的XML型实体与表2b所示的运算对象的子节点相对应。语句S1中的运算对象是从EXTRACT函数输出的XML型实体。其他实施例中,运算对象可能是XML文件或者存有XML数据的其他数据结构。

可以看到,这种方法提供了用于说明语句中的XMLSequence运算符,其加强了在SQL兼容DBMS中的XML数据的操作。

不需要使运算对象的所有子节点成为与上述实例中相同类型的XML元素。例如,对XML元素EMPLOYEE生效的XMLSequence将生成两个XML型实体,一个代表XML元素ENAME,第二个代表XML元素EINFO。

使用XMLSequence,只有满足一定标准的子元素才可被当作单独实体轻易地输出。例如,语句S1a中XPath表达式可以修改为语句S1b,以包括指示ENO小于4的判定“[ENO<4]”。

SELECT*FROM

  TABLE(

     XMLSequence(

         EXTRACT(‘ELIST.xml’,’ELIST/EMPLOYEE[ENO<4]’)

))                                                      Slb.

此修改生成列于表3b中的XML型实体的集合。

表3b.来自XMLSequence的XML型实体的序列实例

  实体  #             XML实体  1  <EMPLOYEE  ENO=″1″>     <ENAME>Linda</ENAME><EINFO>...</EINFO>  </EMPLOYEE>  2  <EMPLOYEE  ENO=″2″>     <ENAME>Charles</ENAME><EINFO>...</EINFO>

  </EMPLOYEE>  3  <EMPLOYEE  ENO=″3″>      <ENAME>Terry</ENAME><EINF O>...</EINFO>  </EMPLOYEE>

在另一应用实例中,根据语句S1c,EXTRACTVALUE函数可用于提取具有雇员编号的给定范围的雇员的姓名。

SELECT EXTRACTVALUE(yalue(t),’/EMPLOYEE[ENO<4]/ENAME’)

     FROM TABLE (

          XMLSequence(EXTRACT(‘ELIST.xml’,’ELIST/EMPLOYEE’))

 )t                                             Slc.

此修改生成列于表3c总的文本值的集合。

表3c.来自关于XMLSequence输出的EXTRACTVALUE的文本值

  文本#  文本值  1  Linda  2  Charles  3  Terry

层次顺序运算符

在一些情况下,可能期望序列不丢弃XML结构中的层次信息。XMLSequence不适用于在所有情况下的这个目的。为了说明的目的,假设ORG文档被存储在文件ORG.xml中,并且假设期望在ORG文档内产生雇员列表以及期望操作作为单独XML型实体的雇员。例如,如果XMLSequence直接对ORG.xml中存储的XML文档生效,则只产生对应于根节点Linda的具有所有其子孙(descendent)的一行。

图4A是示出根据实施例的用于产生具有附加层次信息的XML型SQL结构集合的方法400的概述的流程图。

在步骤402中,接收具有HierXMLSequence运算符的SQL语句,该运算符对XML运算对象生效。例如,接收如下所示SQL语句S2:

SELECT*FROM

     TABLE(HierXMLSequence(‘ORG.xml’))                      S2.

在步骤410中,通过生成有序集合来计算HierXMLSequence运算符,该有序集合包括对应于运算对象的所有子孙节点(descendent node)的XML型实体以及包括树形层次中每个子孙节点的等级。例如,HierXMLSequence对图2B所示的运算对象‘ORG.xml’生效。通过生成表4所示的有序集合来计算HierXMLSequence,该有序集合具有层次中的等级和对应于图2B所示的运算对象的子孙节点的XML型实体。在一些实施例中,包括另一个运算对象以指示对应于包括在集合中的XML型实体的元素类型,如EMPLOYEE。

表4.来自HierXMLSequence的SQL对象类型的序列实例

 对象#  等级  编号             XML实体  1  1  <EMPLOYEE  ENO=″1″>     <ENAME>Linda</ENAME><EINFO>...</EINFO>  </EMPLOYEE>  2  2  <EMPLOYEE  ENO=″2″>     <ENAME>Charles</ENAME><EINFO>...</EINFO>  </EMPLOYEE>  3  3  <EMPLOYEE  ENO=″4″>     <ENAME>Alice</ENAME><EINFO>...</EINFO>  </EMPLOYEE>  4  4  <EMPLOYEE  ENO=″6″>     <ENAME>Ray</ENAME><EINFO>...</EINFO>  </EMPLOYEE>  5  5  <EMPLOYEE  ENO=″7″>     <ENAME>Vishnu</ENAME><EINFO>...</EINFO>  </EMPLOYEE>  6  5  <EMPLOYEE  ENO=″8″>     <ENAME>Cetin</ENAME><EINFO>...</EINFO>  </EMPLOYEE>  7  3  <EMPLOYEE  ENO=″5″>      <ENAME>Mary</ENAME><EINFO>...</EINFO>

  </EMPLOYEE>  8  2  <EMPLOYEE  ENO=″3″>      <ENAME>Terry</ENAME><EINFO>...</EINFO>  </EMPLOYEE>  9  3  <EMPLOYEE  ENO=″9″>      <ENAME>Steve</ENAME><EINFO>...</EINFO>  </EMPLOYEE>

可以看到,这种方法提供了用于说明语句的HierXMLSequence运算符,当XML结构被转换为XML型实体的集合时,该运算符保留在XML结构中的层次关系。

图4B是示出图4A方法的步骤410的实施例的流程图。在步骤412中,对一些变量进行初始化。指示当前等级的变量用值0进行初始化。在所示的实施例中,指示等级的数据在根等级上具有值1,并且每沿树向下一代其值加1。在其他实施例中,等级可以用其他数据表示,例如比1大的增量、质数、字母表的字母、或者存储的预定数字的序列。指示前一节点的变量被设置为空值,以指示没有树节点已被处理。

在步骤414中,树中的下一节点的下一XML结构按照文档顺序被接收。例如,用于开始代表Linda的元素的XML结构被接受,包括来自图2B中第3行的具有属性“ENO=1”的标记“<EMPLOYEE...>”。在所描述的实施例中,还接收来自图2B的第4行的子元素ENAME和EINFO。

在步骤420中,确定下一XML结构是否是前一节点的子节点或者前一节点是否为空。例如,如果在用于对应于前一节点的元素的结束标记之前遇到用于下一EMPLOYEE元素的起始标记,则下一元素是一个子节点。如果是,那么控制转到步骤422。如果不是,那么控制转到步骤430。

在步骤422中,增加当前等级,并且产生有序集合的行。例如,当前等级从0变为1,并且生成表4中代表实体的集合的第一元素的第一行,其具有子元素ENAME和EINFO的内容。然后,控制转到步骤450。

在步骤450中,重置指示前一节点的变量,以指示当前的下一节点。然后,控制转到步骤414来接收新的下一节点(如果有的话)。例如,在步骤422期间处理起始标记和节点210的元素之后,在步骤450期间节点210成为前一节点。

在所述实施例中,ORG.xml文档中的下四个XML元素全部为前一节点的子元素,因此,对于每个元素都重复步骤420、422、450。每次将等级增加到2、然后是3、4和5。

在步骤430中,确定下一节点是否是前一节点的兄弟(sibling)。例如,如果在用于对应于前一节点的元素的结束标记之后并且在任何其他结束标记之前遇到用于下一EMPLOYEE元素的起始标记,则下一元素是兄弟节点。如果下一元素是兄弟节点,则控制转到步骤432。如果不是,则控制转到步骤440。

在步骤432中,当前等级没有发生变化,并且产生有序集合的另一元素。例如,当在代表Vishnu的节点270之后遇到代表Cetin的兄弟节点280时,当前等级为5。等级值没有变化,并且生成表4的第6行用于代表Cetin的节点,其具有子元素ENAME和EINFO的内容。然后控制转到步骤450,如上所述,重置指示前一节点的变量并且回到步骤414,以接收任意附加的XML结构。

在所示的实施例中,起始于第19行并且代表用于Mary的节点250的文档ORG.xml中的下一XML元素,既不是用于Cetin的前一节点280的子女(child)也不是它的兄弟,因此控制转到步骤440。

在步骤440中,确定下一节点是否是前一节点的祖先或是前一节点的祖先的兄弟。例如,如果在用于对应于前一节点元素的结束标记之后并且在任何附加的结束标记之后遇到用于下一EMPLOYEE元素的起始标记,则下一元素是祖先或祖先的兄弟。如果下一元素是祖先或祖先的兄弟,则控制转到步骤442。如果不是,则指示错误,并且控制转到步骤490以处理该错误。

在步骤442中,当前等级减少与附加结束标记的数量相关的数值,在用于下一节点的XML结构的起始标记之前遇到该附加结束标记。产生有序集合的另一元素,具有适当减少的等级和XML型实体。例如,当在代表Cetin的节点280之后遇到代表Mary的祖先兄弟节点250时,两个附加的雇员结束标记相遇(在图2B中的第17行和18行),因此将当前等级减2,从旧值5减到新值3。产生表4的第7行用于代表Mary的节点,具有子元素ENAME和EINFO的内容。然后控制转到步骤450,如上所述,重置指示前一节点的变量并且返回到步骤414以接收任意附加的XML结构。

以该方式继续,从XML运算对象ORG.xml中产生表4的XML型实体和相关等级。

层次聚集运算符

在一些情况下,将XML型实体的集合合并成代表祖先XML结构的单一实体。标准XMLAgg函数用于产生XML实体,该实体合并多个XML类型的XML输出。在聚集XML实体中,所有从集合中产生的XML实体在聚集XML实体中表现为兄弟。例如,可以用XMLAgg来聚集表3a的集合中的XML类型,以产生表2b中所述的XML实体。

在一些情况下,可期望聚集XML实体合并与将被聚集的XML型实体相关的层次信息。例如,表4中的等级信息应该被用于生成图2B中所示的XML ORG文档中的嵌套的XML元素。

图5A是示出根据实施例的用于聚集具有层次信息的XML型实体的集合的方法500的概述的流程图。

在步骤502中,接收具有HierXMLAggregate运算符的SQL语句,该运算符对集合中的XML型运算对象和等级生效。为了说明的目的,假设表4的行可从叫做VEMP的XML型图中得到。在后面的部分中,将对从EMP表中生成VEMP的查询进行更详细地描述。例如,接收如下所示SQL语句S3:

SELECT HierXMLAggregate(LEVEL,EMPLOYEE)FROM VEMP        S3.

在步骤510中,通过将下一XML型运算对象在用于XML结构的层次的等级处插入到代表祖先XML结构的XML型实体中,来计算HierXMLAggregate运算符,该等级取决于等级运算对象。例如,通过将下一EMPLOYEE在基于LEVEL值的层次的等级处插入到临时输出XML文档中,HierXMLAggregate对来自VEMP的XML型运算对象EMPLOYEE和来自VEMP的运算对象LEVEL生效。输出的XML文档或片段对应于图2B的第3行到29行。

可以看到,本方法提供了用于说明语句的HierXMLAggregate运算符,当XML型实体被合并成代表XML结构的单一实体时,该运算符保留与那些实体有关的层次信息。

图5B是示出图5A方法的步骤510的实施例的流程图。在步骤512中,将一些变量初始化。指示前一等级的变量用值0初始化。指示前一节点的变量被设置为空值,以指示没有树节点已被处理。

在步骤514中,按照文档顺序接受下一XML型实体和树中的相关等级。例如,代表Linda的XML型EMPLOYEE实体,包括用于ENO、ENAME和EINFO的值,从表4的第1行接收该实体和相关等级1。相关等级的值储存在代表当前等级的变量中。

在步骤520中,确定当前等级是否等于增加了一个等级的前一等级。具有满足此条件的等级的下一XML型实体代表前一节点的子节点。如果是,则控制转到步骤522。如果不是,则控制转到步骤530。例如,当前等级1等于前一等级0加1,因此控制转到步骤522。

在步骤522中,下一XML型实体作为前一结构的子女被插入。例如,在插入用于前一节点的前一XML结构的结束标记之前插入用于下一XML结构的起始标记。在所述的实施例中,对应于XML型EMPLOYEE(包括属性ENO的值)的XML结构EMPLOYEE的起始标记被增加到代表XML文档或片段的XML型输出中。在所述的实施例中,起始和结束标记以及ENAME和EINFO元素的值也被插入到该输出中。因此,对应于图2B的第3和第4行的行被插入到输出中。然后控制转到步骤550。

在步骤550中,指示前一节点的变量被重置,用于指示当前的下一节点。然后控制转到步骤552。

在步骤552中,确定将被聚集的最后一XML型实体是否已被接收。如果不是,则控制转回到步骤514以接受新的下一XML型实体。如果用于聚集的最后一XML型实体已经被接收,则控制转到步骤554,以终止输出的产生,这将在随后的部分中进行更详细描述。

在所述的实施例中,表4中的下四个XML型实体都将它们的等级增加1,达到值2,然后是3、4和5,指示所有都代表前一节点的子节点,因此为每个实体重复步骤520、522、550、552。因此,将对应于图2B中的第5-12行的行插入到输出中。

在步骤530中,确定当前等级是否等于前一等级。具有满足该条件的等级的下一XML型实体代表前一节点的兄弟节点。如果是,则控制转到步骤532。如果不是,则控制转到步骤540。例如,当对表4中用于雇员Cetin的第6行生效时,当前等级5等于前一等级5,因此控制转到步骤532。

在步骤532中,下一XML型实体作为前一结构的兄弟被插入。例如,在插入用于下一XML结构的起始标记之前,插入用于前一节点的前一XML结构的结束标记。在所述的实施例中,在用于雇员Cetin的XML结构EMPLOYEE的起始标记增加给输出之前,插入用于XML结构EMPLOYEE的结束标记。在所述的实施例中,用于EMPLOYEE的起始标记包括属性ENO的值;并且起始和结束标记以及ENAME和EINFO元素的值也被插入到输出的XML文档中。因此,对应于图2B的第13-15行的行被插入到输出中。然后控制转到步骤550。

在步骤540中,确定当前等级是否小于前一等级。具有满足该条件的等级的下一XML型实体代表前一节点的祖先或祖先节点的兄弟。如果当前等级较小,则控制转到步骤542。如果不是,则控制转到步骤590。例如,当对表4中用于雇员Mary的第7行生效时,当前等级3小于前一等级5,因此控制转到步骤542。

在步骤542中,插入用于一个或多个前一XML结构的结束标记。在所述的实施例中,只要当前等级小于前一等级,就插入用于XML结构EMPLOYEE的结束标记并且降低前一等级。例如,当对表4用于雇员Mary的第7行生效时,当前等级为3时,插入两个结束标记,且降低前一等级两次,从5到4再到3。因此,将对应于图2B中的第16-17行的行插入到输出中,且前一等级被设置为3。在所述的实施例中,在当前等级不小于前一等级时,则控制转到步骤514。在其它的实施例中,在当前等级不小于前一等级时,控制可转到步骤520或530或532。因此,将对应于图2B的第18-20行的行插入到输出中。

当试图产生低于当前等级的两代或更多代的子孙时,控制转到步骤590。这种在等级上的变化在XML文档中无效。在步骤590中,处理错误。例如,终止产生XML结构,并且将警告信息发给数据库的用户。

以该方法继续,第3到26行的XML结构从来自表4的XML型运算对象中产生。在插入第26行之后,在步骤552中确定表4中不再有XML型实体。控制转到步骤554。

在步骤554中,插入用于一个或多个前一XML结构的结束标记。在所述的实施例中,只要当前等级小于0,就插入用于XML结构EMPLOYEE的结束标记并且降低前一等级。例如,在对表4用于雇员Steve的第9行生效之后,当前等级为3。因此插入三个结束标记并且降低前一等级三次,从3到0。将对应于图2B的第27-29行的行插入到输出的XML文件中。

产生用于聚集运算对象的等级

使用HierXMLAggregate运算符需要等级运算对象。可以用SQL“CONNECT BY”子句从类似表1的具有包含的层次的SQL表中产生等级运算对象的值。例如,具有表4所示的等级的SQL图VEMP可以从表1所示的EMP表中产生,使用下列SQL语句S4:

CREATEVIEW VEMP AS

SELECT  level,

   XMLElement(“EMPLOYEE”,XMLAttribute(eno),e.ename,e.einfo)

   AS EMPLOYEE

   FROM EMP e

   CONNECT BY prior e.eno=e.mgr

   START WITH e.mgr=null                             S4.

在上述语句中,CONNECT BY子句产生伪列“等级”,以指示所产生的层次中的等级。

层次从EMP的行开始,EMP中MGR列中的值为空。下一行是表中的下一行,表中MGR列中的值等于前一行的ENO列中的值。该过程按预订深度第一顺序产生一组行,该顺序等于XML文档顺序。例如,用于父代的行在其任何子女的行产生之前产生,并且用于一个兄弟的所有叶节点的行在产生用于下一兄弟和其任何子孙的行之前产生。按照一定的顺序产生用于兄弟的行,其中,兄弟出现在下面的行组中。

因此,语句S4产生表4所示的VEMP图。VEMP可用于获得HierXMLAggregate运算符中的等级运算对象的值。此外,语句S4在“CREATEVIEW VEMP AS”行之后的部分可被用于子查询中,以生成HierXMLAggregate运算符中的等级运算对象的值。

硬件概述

图6是描述可应用本发明的实施例的计算机系统600的框图。计算机系统600包括用于传递信息的总线602或其它通信装置、用于处理信息的与总线602连接的处理器604。计算机系统600还包括主存储器606,例如随机存取存储器(RAM)或者其它动态存储装置,与总线602连接,用于储存信息及处理器604要执行的指令。主存储器606还可用于储存处理器604执行指令过程中的临时变量或其他中间信息。计算机系统600还包括只读存储器(ROM)608或者其他静态存储装置,与总线602连接,用于储存静态信息和处理器604的要执行的指令。存储装置610,如磁盘或光盘,和总线602连接以储存信息和指令。

计算机系统600可以经由总线602连接到显示器612,如阴极射线管(CRT),用于向计算机用户显示信息。包括字母数字键和其他键的输入装置614与总线602相连,用于传递通信信息和命令选择到处理器604。另一种用户输入装置是光标控制616,如鼠标、跟踪球、或光标方向键,用于传递方向信息和命令选择到处理器604及用于控制显示器612上的光标移动。这个输入装置通常在两个轴上(第一个轴(例如X轴)和第二个轴(例如Y轴))具有两个自由度,使装置能指定平面上的位置。

本发明涉及用于实现在此描述的技术的计算机系统600的使用。根据本发明的实施例,响应于处理器604执行在主存储器606中包括的一个或多个指令的一个或多个序列,这些技术通过计算机系统600执行。这样的指令可从诸如存储设备610的另一计算机可读介质读入主存储器606。通过执行包含在主存储器606中的指令序列,使处理器604执行此处所述的处理步骤。在可选实施例中,硬连线电路(hard-wired circuitry)可取代软件指令或者与软件指令结合来实施该发明。因此,本发明中的实施例将不限于硬件电路和软件的任何特定组合。

这里使用的术语“计算机可读介质”是指参与提供指令给用于执行的处理器604的任何介质。这种介质可以采取很多形式,包括但不限于非易失性介质、易失性介质和传递介质。非易失性介质举例来说包括光盘或磁盘,如存储装置610。易失性介质包括动态存储器,如主存储器606。传输介质包括同轴电缆、铜线、和光纤,包括由总线602组成的导线。传输介质还可采取声波或光波的形式,例如那些在无线电波和红外线数据通信过程中产生的声波和光波。

通常的计算机可读介质举例来说包括软盘、柔性盘、硬盘、磁带,或者任何其它磁性介质、CD-ROM、任何其它光介质、打孔纸、纸带、或者任何带孔的物理介质、RAM、PROM、EPROM、FLASH-EPROM、或者其他任何存储芯片或者磁带,或者以下提到的载波、或者计算机可读的任何其他介质。

各种形式的计算机可读介质可参与传送一个或者多个指令的一个或多个序列到用于执行的处理器604。例如,指令开始可承载远程计算机的磁盘中。远程计算机能将该指令加载到其动态存储器中,然后使用调制解调器基于电话线发送信息。计算机系统600本地的调制解调器可接收电话线上的数据,然后使用红外转换器将数据转换成红外信号。红外探测器可以接收红外信号携带的数据,合适的电路可以把信息放到总线602上。总线602把数据传递到主存储器606中,处理器604从主存储器606取回并执行这些指令。在处理器604执行这些指令之前或之后,主存储器606接收的指令可随意地储存于存储装置610中。

计算机系统600还包括连接到总线602的通信接口618。通信接口618提供双向数据通信,连接到与局域网622相连的网络链路620。例如,通信接口618可以是综合业务数字网(Integrated ServicesDigital Network,ISDN)卡或者调制解调器,用于提供到相应类型电话线的数据通信连接。又如,通信接口618可以是局域网(LocalArea Network,LAN)卡,用于提供至兼容局域网(LAN)的数据通信连接。也可以使用无线链路。无论采用何种连接,通信接口618均发送和接受承载各种信息的数字数据流的电信号、电磁信号和光学信号。

网络链路620通常可通过一个或者多个网络提供数据通信给其它数据装置。例如,网络链路620可通过局域网622与主机624连接,或者与互联网服务提供商(Internet Service Provider,ISP)626操作的数据设备连接。ISP 626又通过目前通称为“互联网”628的全球分组数据通信网络(World Wide Packet Data CommunicationNetwork)提供数据通信服务。局域网622和互联网628都使用承载数字数据流的电信号、电磁信号或光学信号。如通过各种网络的信号,网络链路620上的信号,通过通信接口618的信号是传输信息的载波的示范形式,这些信号都传送数字数据给计算机系统600或者传送来自计算机系统的数字数据。

计算机系统600能通过网络、网络链路620和通信接口618发送消息和接收数据(包括程序代码)。例如,在互联网的例子中,服务器630可通过互联网628、ISP 626、局域网622、和通信接口618,传送所请求的用于应用程序的代码。

当代码被接收和/或储存在存储装置610上或者其它非易失性存储器上用于随后执行时,处理器604可执行所接收到的代码。按照这种方式,计算机系统600可以获得载波形式的应用程序代码。

以上所述仅为本发明的优选实施例而已,并不用于限制本发明,对于本领域的技术人员来说,本发明可以有各种更改和变化。凡在本发明的精神和原则之内,所作的任何修改、等同替换、改进等,均应包含在本发明的保护范围之内。

去获取专利,查看全文>

相似文献

  • 专利
  • 中文文献
  • 外文文献
获取专利

客服邮箱:kefu@zhangqiaokeyan.com

京公网安备:11010802029741号 ICP备案号:京ICP备15016152号-6 六维联合信息科技 (北京) 有限公司©版权所有
  • 客服微信

  • 服务号