CN1825306A - 基于关系数据库的xml数据存储与访问方法 - Google Patents

基于关系数据库的xml数据存储与访问方法 Download PDF

Info

Publication number
CN1825306A
CN1825306A CN200510116858.5A CN200510116858A CN1825306A CN 1825306 A CN1825306 A CN 1825306A CN 200510116858 A CN200510116858 A CN 200510116858A CN 1825306 A CN1825306 A CN 1825306A
Authority
CN
China
Prior art keywords
xml
node
function
attribute
relational database
Prior art date
Legal status (The legal status is an assumption and is not a legal conclusion. Google has not performed a legal analysis and makes no representation as to the accuracy of the status listed.)
Granted
Application number
CN200510116858.5A
Other languages
English (en)
Other versions
CN100397397C (zh
Inventor
汪源
Current Assignee (The listed assignees may be inaccurate. Google has not performed a legal analysis and makes no representation or warranty as to the accuracy of the list.)
Beijing Shenzhou Aerospace Software Technology Co ltd
Original Assignee
Beijing Shenzhou Aerospace Software Technology Co ltd
Priority date (The priority date is an assumption and is not a legal conclusion. Google has not performed a legal analysis and makes no representation as to the accuracy of the date listed.)
Filing date
Publication date
Application filed by Beijing Shenzhou Aerospace Software Technology Co ltd filed Critical Beijing Shenzhou Aerospace Software Technology Co ltd
Priority to CNB2005101168585A priority Critical patent/CN100397397C/zh
Publication of CN1825306A publication Critical patent/CN1825306A/zh
Application granted granted Critical
Publication of CN100397397C publication Critical patent/CN100397397C/zh
Active legal-status Critical Current
Anticipated expiration legal-status Critical

Links

Abstract

本发明公开了一种在关系数据库的基础上,将XML数据映射为关系数据进行存储,并通过DOM操作接口进行访问的方法。本方法通过系统内建函数实现了对文档节点级的操作,提供了DOM接口的持久化实现,从而提供给用户更灵活、细粒度的操作方式。与基于内存的DOM实现方式相比,本发明所提出的方法在进行DOM操作之前不需要对文档内容进行完全解析,可以操作更大规模的XML数据,并为多用户并发操作提供了并发控制功能。

Description

基于关系数据库的XML数据存储与访问方法
技术领域
本发明涉及一种对XML数据进行存储和访问的方法,尤其涉及一种在关系数据库的基础上,将XML数据映射为关系数据进行存储,并通过DOM(Docuement Object Model,文档对象模型)操作接口进行访问的方法。
背景技术
XML是可扩展标记语言(Extensible Markup Language)的简称。它由互联网协会(W3C)在1998年提出后,得到广泛应用,已成为数据交换的事实标准及Web Service等众多新兴技术的基础。
XML数据是结构化的,这一特点对于大型和复杂的文档来说是很理想的。用户不仅可以指定一个定义了文档中的元素的词汇表,而且还可以指定元素之间的关系。XML也提供客户端的包括机制,可以根据多种来源集成数据并将其作为一个文档来显示。数据还可以马上进行重新排列。数据的各个部分可以根据用户的操作显示或隐藏。当处理大型的信息仓库,比如关系型数据库时是极为有用的。因此,XML技术在数据库中得到广泛的应用。在这一背景下,对大量XML数据进行有效的存储及访问成为目前急需解决的一大课题。
XML数据的存储与访问功能的实现技术之一为XML数据库。其可以分为XML原生数据库(XML Native Database)和XML使能数据库(XML EnabledDatabase)两大类。XML原生数据库是指单纯为XML的存储与查询目的而专门设计的数据库管理系统;而XML使能数据库则是在传统的关系数据库基础之上,增加对XML数据的存储与查询功能。目前主流的关系数据库产品与MSSQL Server、DB2、Oracle等都提供了XML使能数据库的实现。但是,现有XML数据库产品提供给用户的操作方式一般只限于文档的导入导出和XPath查询,这在实践中是往往不够的。
XML数据的存储与访问功能的另一实现技术是将XML数据存储为普通文件,而后通过DOM操作接口进行解析与访问。DOM接口方便灵活,但目前的DOM实现技术中,如Xerces XML解析器等在对XML数据进行任何操作之间必须在内存中对该数据进行完全解析,因此能够操作的XML数据的大小很受限制,同时多用户并发操作也无法实现。
另一方面,对象只能存在于内存中,而内存不能永久保存数据。如果要永久保存对象的状态,需要进行对象的持久化,即把对象存储到专门的数据存储库中。目前,关系数据库仍然是使用最广泛的数据存储库。关系数据库中存放的是关系数据,它是非面向对象的。目前,把对象持久化到关系数据库中,需要进行对象-关系的映射(Object/Relation Mapping,简称ORM),这是一项繁琐耗时的工作。在实际应用中,除了需要把内存中的对象持久化到数据库外,还需要把数据库中的关系数据再重新加载到内存中,以满足用户查询业务数据的需求。由此造成频繁地访问数据库,会对应用的性能造成很大影响。
发明内容
本发明的目的在于提供一种在关系数据库的基础上,将XML数据映射为关系数据进行存储,并通过DOM操作接口进行访问的方法。
为实现上述的发明目的,本发明采用下述的技术方案:
一种基于关系数据库的XML数据存储与访问方法,其特征在于包括如下步骤:
(1)使用SAX接口实现解析XML数据;
(2)在SAX事件处理函数中,调用系统内建函数执行DOM操作;
(3)将所有XML文档的基本信息存储在XML文档表中,一个文档对应一行;
(4)将所有XML节点的名称、类型、父子关系存储在XML节点表中,一个节点对应一行;
(5)将所有XML文本类型节点或属性的值存储在XML节点值表中,一个文本类型节点或一个属性的值对应一行;
(6)对所述节点进行Dewey编码。
在通过DOM操作接口访问XML数据时,首先将操作转化为对应的SQL语句,然后执行转化后的SQL语句。
所述SAX事件处理函数包括startElement事件,首先调用实现“插入子节点”功能的函数将元素节点信息插入到XML节点表中,而后对于每个属性,分别调用“插入子节点”函数将属性节点信息插入到XML节点表中和调用“设置属性值”函数将属性节点信息插入到XML节点表,并将属性值插入到XML节点值表。
所述SAX事件处理函数包括charData事件,首先调用“创建子节点”函数将文本节点信息插入到XML节点表中,而后调用“追加文本内容”函数将文本的值插入到XML节点值表中。
本发明所述的基于关系数据库的XML数据存储与访问方法通过系统内建函数实现了对文档节点级的操作,提供了DOM接口的持久化实现,从而提供给用户更灵活、细粒度的操作方式。与基于内存的DOM实现方式相比,本发明所提出的方法在进行DOM操作之前不需要对文档内容进行完全解析,可以操作更大规模的XML数据,并为多用户并发操作提供了并发控制功能。
附图说明
下面结合附图和具体实施方式对本发明作进一步的说明。
图1是本发明中将XML数据持久化为关系数据的流程图;
图2是本发明所提供的实现类DOM访问接口的流程图。
具体实施方式
下面,首先介绍本发明中将XML数据映射为关系数据,并持久化的方法。所谓持久化简单地说就是把二进制数据对象比如Java类等存储在数据库里。使用XML有助于简化对象的持久化过程,使数据的持久化成为一个普通的开发过程。
如图1所示,本方法包括如下步骤:
步骤10)使用SAX接口实现解析XML数据。
实践中,可以使用libxml2库中提供的SAX接口实现解析XML数据。SAX的全称是Simple APIs for XML,也即XML简单应用程序接口。SAX提供了一种对XML文档进行顺序访问的模式。它的基本原理是由接口的使用者提供符合定义的处理器,XML分析时遇到特定的事件,就去调用处理器中特定事件的处理函数。SAX不在内存中显示的构建文档树,它使应用程序能用最有效率的方式存储数据。
关于SAX接口具体的解析过程,可以参见有关技术文档中的说明。这一点作为熟悉XML技术的一般技术人员所公知的内容,在此不详细说明了。
步骤11)在SAX事件处理函数中,调用系统内建函数,执行DOM操作。
对于步骤11中的主要SAX事件处理函数过程举例说明如下:
对于startElement事件(当SAX程序读取到一个元素开始TAG时调用),首先调用实现“插入子节点”功能的函数将元素节点信息插入到“XML节点表”中,而后对于每个属性,分别调用“插入子节点”函数将属性节点信息插入到“XML节点表”中和调用“设置属性值”函数将属性节点信息插入到“XML节点表”并将属性值插入到“XML节点值表”。
对于charData事件(当SAX程序读取到一个文本片断时调用),首先调用“创建子节点”函数将文本节点信息插入到“XML节点表”中,而后调用“追加文本内容”函数将文本的值插入到“XML节点值表”中。
类似的,系统还需处理endElement(当SAX程序读取到一个元素结束TAG时调用)、commentData(当SAX程序读取到一个注释时调用)等其它事件,这些事件的处理流程比较简单,在此不再赘述。
接下来,将所有XML文档的名称等基本信息存储在一个“XML文档表”中,一个文档对应一行;所有XML节点的名称、类型、父子关系等存储在一个“XML节点表”中,一个节点对应一行;所有XML文本类型节点或属性的值存储在一个“XML节点值表”中,一个文本类型节点或一个属性的值对应一行。另外,对节点进行Dewey编码,通过Dewey编码可以判断节点间的父子、祖先—后裔、左右兄弟关系。这里使用Dewey编码是因为Dewey编码记录了元素的路径信息,在XML元素众多的编码方式中是最适合的。
下面,如图2所示,介绍对XML持久化数据通过DOM操作接口进行访问的方法,其包括如下步骤:
步骤20)将操作转化为对应的SQL语句。
对步骤20中的重要DOM操作的实现举例说明如下:
“得到文档根节点”函数:转化为一条对“XML节点表”的SELECT语句,条件为节点类型是根节点且父节点ID是文档的ID。
“得到指定名称的后裔元素”函数:转化为一条对“XML节点表”的SELECT语句,条件为节点类型是元素节点且节点为指定的名称且为当前节点的后裔结点(根据Dewey编码判断)。
“得到第一个子元素”函数:转化为一条对“XML节点表”的SELECT语句,条件为节点类型是元素节点且父节点ID为当前节点ID,只输出结果中Dewey编码最小的一个。
“得到右兄弟元素”函数:转化为一条对“XML节点表”的SELECT语句,条件为节点类型是元素节点且父节点ID与当前节点父节点ID相同且Dewey编码比当前结果的Dewey编码大,只输出结果中Dewey编码最小的一个。
“得到父节点”函数:转化为一条对“XML节点表”的SELECT语句,条件为节点ID为当前节点的父节点ID。
“插入子节点”函数:转化为对“XML节点表”的INSERT语句。
“删除子节点”函数:首先确定以待删除节点为根的子树的Dewey编码规范,然后使用DELETE语句将以待删除节点为根的子树中所有节点信息从“XML节点表”中删除,将对应的节点值信息从“XML节点值表”中删除。
“设置属性值”函数:首先使用对“XML节点表”的SELECT语句判断指定名称的属性是否存在,若存在,则使用对“XML节点值表”的UPDATE语句更新属性值,否则首先使用对“XML节点表”的INSERT语句将属性节点信息插入到“XML节点表”中,而后使用对“XML节点值表”的INSERT语句将属性值信息插入到“XML节点值表”中。
“得到指定名称的属性”函数:转化为一条对“XML节点表”的SELECT语句,条件为节点类型是元素节点且父节点ID是当前节点ID且节点名为指定的名称。
“删除指定名称的属性”函数:首先得到指定的属性节点(使用“得到指定名称的属性”函数),然后删除该属性节点(使用“删除子节点”)。
“追加文本内容”函数:转化为对“XML节点值表”的INSERT语句。
“删除文本内容”函数:转化为对“XML节点值表”的DELETE语句。
“替换文本内容”函数:转化为对“XML节点值表”的UPDATE语句。
以上操作只是本发明所实现的DOM操作的一部分,其它众多的函数,如“替换子节点”、“插入注释”、“插入PI指令”等等也可类似实现,故不再赘述。
步骤21)执行转化后的SQL语句。
SQL语句的执行是数据库领域的一般技术常识,在此不予赘述。
通过上面介绍的方法,所有的DOM接口都可以使用嵌入在SQL语句中的系统内建函数提供。系统内建函数通过将特定操作转化为对关系数据库进行操作的SQL语句来实现。这些系统内建函数提供的功能可以满足DOM核心功能接口需求,包括:
创建和删除各类节点,包括文档、元素、属性等。
插入、删除子节点。
在DOM树中进行各种导航操作,如得到父节点、指定名称的子节点、指定名称的后裔节点、指定名称的属性、左右兄弟节点等。
对节点或属性的值进行插入、删除、修改、替换等操作。
以上对本发明的具体实施方式进行了详细的解说。对于本技术领域的一般技术人员来说,在不背离本发明所述方法的精神和权利要求范围的情况下对它进行的各种显而易见的改变都在本发明的保护范围之内。

Claims (4)

1.一种基于关系数据库的XML数据存储与访问方法,其特征在于包括如下步骤:
(1)使用SAX接口实现解析XML数据;
(2)在SAX事件处理函数中,调用系统内建函数执行DOM操作;
(3)将所有XML文档的基本信息存储在XML文档表中,一个文档对应一行;
(4)将所有XML节点的名称、类型、父子关系存储在XML节点表中,一个节点对应一行;
(5)将所有XML文本类型节点或属性的值存储在XML节点值表中,一个文本类型节点或一个属性的值对应一行;
(6)对所述节点进行Dewey编码。
2.如权利要求1所述的基于关系数据库的XML数据存储与访问方法,其特征在于:
在通过DOM操作接口访问XML数据时,首先将操作转化为对应的SQL语句,然后执行转化后的SQL语句。
3.如权利要求1所述的基于关系数据库的XML数据存储与访问方法,其特征在于:
所述SAX事件处理函数包括startElement事件,首先调用实现“插入子节点”功能的函数将元素节点信息插入到XML节点表中,而后对于每个属性,分别调用“插入子节点”函数将属性节点信息插入到XML节点表中和调用“设置属性值”函数将属性节点信息插入到XML节点表,并将属性值插入到XML节点值表。
4.如权利要求1所述的基于关系数据库的XML数据存储与访问方法,其特征在于:
所述SAX事件处理函数包括charData事件,首先调用“创建子节点”函数将文本节点信息插入到XML节点表中,而后调用“追加文本内容”函数将文本的值插入到XML节点值表中。
CNB2005101168585A 2005-10-31 2005-10-31 基于关系数据库的xml数据存储与访问方法 Active CN100397397C (zh)

Priority Applications (1)

Application Number Priority Date Filing Date Title
CNB2005101168585A CN100397397C (zh) 2005-10-31 2005-10-31 基于关系数据库的xml数据存储与访问方法

Applications Claiming Priority (1)

Application Number Priority Date Filing Date Title
CNB2005101168585A CN100397397C (zh) 2005-10-31 2005-10-31 基于关系数据库的xml数据存储与访问方法

Publications (2)

Publication Number Publication Date
CN1825306A true CN1825306A (zh) 2006-08-30
CN100397397C CN100397397C (zh) 2008-06-25

Family

ID=36935985

Family Applications (1)

Application Number Title Priority Date Filing Date
CNB2005101168585A Active CN100397397C (zh) 2005-10-31 2005-10-31 基于关系数据库的xml数据存储与访问方法

Country Status (1)

Country Link
CN (1) CN100397397C (zh)

Cited By (8)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
CN100458793C (zh) * 2007-05-10 2009-02-04 浪潮集团山东通用软件有限公司 数据访问层Xml格式数据与关系数据间的映射转换方法
CN100462973C (zh) * 2006-11-23 2009-02-18 金蝶软件(中国)有限公司 Xml文件预处理方法、装置、读取方法和装置
CN102004631A (zh) * 2010-10-19 2011-04-06 北京红旗中文贰仟软件技术有限公司 信息文档的处理方法及装置
CN102760164A (zh) * 2012-06-12 2012-10-31 上海方正数字出版技术有限公司 一种关系数据库管理系统与xml数据库管理系统之间数据交换的方法
CN102768674A (zh) * 2012-06-12 2012-11-07 上海方正数字出版技术有限公司 一种基于路径结构的xml数据存储方法
CN103793435A (zh) * 2012-11-02 2014-05-14 镇江华扬信息科技有限公司 一种将对象模型向数据库结构进行转化的方法
WO2015074290A1 (zh) * 2013-11-22 2015-05-28 盛杰 数据库实现方法
CN110110151A (zh) * 2018-01-05 2019-08-09 北大方正集团有限公司 资源包解析入库的方法、系统、计算机设备和存储介质

Family Cites Families (3)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
KR100472458B1 (ko) * 2002-06-26 2005-03-10 삼성전자주식회사 외부 xml유효성 검증 장치를 이용하는 xml파싱 장치및 방법
CN1314208C (zh) * 2003-11-28 2007-05-02 北京大学 可扩展标记语言数据流压缩器及其压缩方法
US7228312B2 (en) * 2004-03-09 2007-06-05 Microsoft Corporation Transformation tool for mapping XML to relational database

Cited By (11)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
CN100462973C (zh) * 2006-11-23 2009-02-18 金蝶软件(中国)有限公司 Xml文件预处理方法、装置、读取方法和装置
CN100458793C (zh) * 2007-05-10 2009-02-04 浪潮集团山东通用软件有限公司 数据访问层Xml格式数据与关系数据间的映射转换方法
CN102004631A (zh) * 2010-10-19 2011-04-06 北京红旗中文贰仟软件技术有限公司 信息文档的处理方法及装置
CN102760164A (zh) * 2012-06-12 2012-10-31 上海方正数字出版技术有限公司 一种关系数据库管理系统与xml数据库管理系统之间数据交换的方法
CN102768674A (zh) * 2012-06-12 2012-11-07 上海方正数字出版技术有限公司 一种基于路径结构的xml数据存储方法
CN102760164B (zh) * 2012-06-12 2016-01-20 北大方正集团有限公司 一种关系数据库管理系统与xml数据库管理系统之间数据交换的方法
CN102768674B (zh) * 2012-06-12 2016-08-24 北大方正集团有限公司 一种基于路径结构的xml数据存储方法
CN103793435A (zh) * 2012-11-02 2014-05-14 镇江华扬信息科技有限公司 一种将对象模型向数据库结构进行转化的方法
WO2015074290A1 (zh) * 2013-11-22 2015-05-28 盛杰 数据库实现方法
US9665600B2 (en) 2013-11-22 2017-05-30 Jie Sheng Method for implementing database
CN110110151A (zh) * 2018-01-05 2019-08-09 北大方正集团有限公司 资源包解析入库的方法、系统、计算机设备和存储介质

Also Published As

Publication number Publication date
CN100397397C (zh) 2008-06-25

Similar Documents

Publication Publication Date Title
CN1146820C (zh) 数据库管理系统的动态修改
US6449620B1 (en) Method and apparatus for generating information pages using semi-structured data stored in a structured manner
US6581062B1 (en) Method and apparatus for storing semi-structured data in a structured manner
CN1825306A (zh) 基于关系数据库的xml数据存储与访问方法
US10318511B2 (en) Expression tree interning
CN1297936C (zh) 用来比较两个计算机文件的方法及系统
Stadler et al. Making interoperability persistent: A 3D geo database based on CityGML
US7844632B2 (en) Scalable DOM implementation
US8156494B2 (en) Pluggable DOM implementation using an abstract API when receiving API calls for accessing different formats of XML data
US20080120322A1 (en) Techniques of efficient query over text, image, audio, video and other domain specific data in XML using XML table index with integration of text index and other domain specific indexes
CN1711766A (zh) 电子文档版本化方法和使用基于可扩展标识语言的版本号的更新文档提供方法
CN1713179A (zh) 在对象模型中的影响分析
US20140344218A1 (en) Paging hierarchical data
CN1755677A (zh) 使用索引关键词的范围搜索系统和方法
CN1159665C (zh) 创建定制数据库的方法和设备
CN1567301A (zh) 访问数据库的方法及装置
CN107066551B (zh) 一种树状数据的行式和列式存储方法及系统
WO2010085523A1 (en) Graph store
CN1766876A (zh) 用于管理结构化文件的系统和方法
US7409386B2 (en) Method and apparatus for executing a query on dynamic properties of objects in a database
CN113901280A (zh) 一种集成电路展平式设计的字符串存储与查询系统及方法
US8495055B2 (en) Method and computer program for evaluating database queries involving relational and hierarchical data
CN1652109A (zh) 二进制大对象数据的复制方法和设备
CN1472660A (zh) 用于映射文件句柄的方法和装置
CN1877573A (zh) 多层次数据库系统结构

Legal Events

Date Code Title Description
C06 Publication
PB01 Publication
C10 Entry into substantive examination
SE01 Entry into force of request for substantive examination
C14 Grant of patent or utility model
GR01 Patent grant
CP01 Change in the name or title of a patent holder
CP01 Change in the name or title of a patent holder

Address after: 100036, 17 floor, Yu Hui building, 73 Fu Cheng Road, Beijing, Haidian District

Patentee after: Beijing Shenzhou Aerospace Software Technology Co.,Ltd.

Address before: 100036, 17 floor, Yu Hui building, 73 Fu Cheng Road, Beijing, Haidian District

Patentee before: BEIJING SHENZHOU AEROSPACE SOFTWARE TECHNOLOGY Co.,Ltd.