发明内容
本发明的目的在于提供一种创建XML节点的属性索引的方法及装置,用以解决现有可扩展标记语言数据库管理系统XMLDBMS中对XML文档中的每个属性节点的属性值都创建属性索引,极大地浪费了XML数据库管理系统存储空间的问题。
为了实现上述目的,本发明提供了一种创建XML节点的属性索引的方法,包括:
获取创建属性索引的创建指令,所述创建指令至少包括:容器名称、属性节点的路径和属性索引的名称;
根据所述创建指令中的容器名称和属性节点的路径,在所述XMLDBMS中获取与所述容器名称相对应的容器,并在所述容器中获取需创建属性索引的第一属性节点;
根据所述创建指令中的属性索引的名称,在所述容器中创建所述第一属性节点的第一属性索引。
其中,所述根据所述属性索引的名称,在所述容器中创建所述第一属性节点的第一属性索引的步骤之后,所述方法还包括:
创建所述第一属性索引的第一属性索引表,并在所述容器中的属性索引元数据表中记录所述第一属性索引的元数据信息,其中,所述元数据信息包括:属性索引的名称,属性节点的路径ID、属性节点的字符串ID以及属性索引表的ID。
其中,所述根据所述属性索引的名称,在所述容器中创建所述第一属性节点的第一属性索引的步骤之后,所述方法还包括:
向所述容器中加载新增XML文档时,获取所述新增XML文档的元素节点中的属性节点;
根据所述属性索引元数据表中第一属性节点的路径ID和字符串ID,验证所述属性节点是否为所述第一属性节点;
若所述属性节点为所述第一属性节点,则创建所述属性节点的属性索引。
其中,上述创建XML节点的属性索引的方法,还包括:
在所述容器加载完所述新增XML后,获取用户创建第二属性节点的第二属性索引的创建指令;
在所述容器保存的节点存储表中,获取包含所述第二属性节点的元素节点;
创建所述元素节点中第二属性节点的第二属性索引,同时创建所述第二属性索引的第二属性索引表并在属性索引元数据表中记录所述第二属性索引的元数据信息。
其中,上述创建XML节点的属性索引的方法,还包括:
根据用户的属性索引删除指令中第三属性索引的名称,在所述属性索引元数据表中获取第三属性索引表的ID,并根据所述第三属性索引表的ID删除所述第三属性索引表。
其中,上述创建XML节点的属性索引的方法,还包括:
若在所述容器的XML文档中插入第四属性节点,且所述第四属性节点为所述容器中已创建属性索引的属性节点,则创建所述第四属性节点的属性索引;
若用第四属性节点替换所述容器的XML文档中的第五属性节点,且所述第四属性节点为所述容器中已创建属性索引的属性节点,则创建所述第四属性节点的属性索引。
本发明的实施例还提供了一种创建XML节点的属性索引的装置,包括:
第一获取模块,用于获取创建属性索引的创建指令,所述创建指令至少包括:容器名称、属性节点的路径和属性索引的名称;
第二获取模块,用于根据所述创建指令中的容器名称和属性节点的路径,在所述XMLDBMS中获取与所述容器名称相对应的容器,并在所述容器中获取需创建属性索引的第一属性节点;
第一创建模块,用于根据所述创建指令中的属性索引的名称,在所述容器中创建所述第一属性节点的第一属性索引。
其中,上述创建XML节点的属性索引的装置,还包括:
第二创建模块,用于在所述容器中创建所述第一属性节点的第一属性索引后,创建所述第一属性索引的第一属性索引表,并在所述容器中的属性索引元数据表中记录所述第一属性索引的元数据信息,其中,所述元数据信息包括:属性索引的名称,属性节点的路径ID、属性节点的字符串ID以及属性索引表的ID。
其中,上述创建XML节点的属性索引的装置,还包括:
第三获取模块,用于向所述容器中加载新增XML文档时,获取所述新增XML文档的元素节点中的属性节点;
验证模块,用于根据所述属性索引元数据表中第一属性节点的路径ID和字符串ID,验证所述属性节点是否为所述第一属性节点;
第三创建模块,用于若所述属性节点为所述第一属性节点,则创建所述属性节点的属性索引。
其中,上述创建XML节点的属性索引的装置,还包括:
第四获取模块,用于在所述容器加载完所述新增XML后,获取用户创建第二属性节点的第二属性索引的创建指令;
第五获取模块,用于在所述容器保存的节点存储表中,获取包含所述第二属性节点的元素节点;
第四创建模块,用于创建所述元素节点中第二属性节点的第二属性索引,同时创建所述第二属性索引的第二属性索引表并在属性索引元数据表中记录所述第二属性索引的元数据信息。
其中,上述创建XML节点的属性索引的装置,还包括:
删除模块,用于根据用户的属性索引删除指令中第三属性索引的名称,在所述属性索引元数据表中获取第三属性索引表的ID,并根据所述第三属性索引表的ID删除所述第三属性索引表。
其中,上述创建XML节点的属性索引的装置,还包括:
第一更新模块,用于若在所述容器的XML文档中插入第四属性节点,且所述第四属性节点为所述容器中已创建属性索引的属性节点,则创建所述第四属性节点的属性索引;
第二更新模块,用于若用第四属性节点替换所述容器的XML文档中的第五属性节点,且所述第四属性节点为所述容器中已创建属性索引的属性节点,则创建所述第四属性节点的属性索引。
本发明实施例具有以下有益效果:
本发明实施例的创建XML节点的属性索引的方法及装置,根据用户的需求动态创建属性节点的属性索引,不仅满足了用户的需求,而且大大节省了XMLDBMS数据库的存储空间,提高了数据库的查询效率。
具体实施方式
为使本发明要解决的技术问题、技术方案和优点更加清楚,下面将结合具体实施例及附图进行详细描述。
本发明实施例提供了一种创建XML节点的属性索引的方法及装置,解决了现有XMLDBMS中对XML文档中的每个属性节点的属性值都创建属性索引,极大地浪费了XML数据库管理系统存储空间的问题。
本发明实施例的创建XML节点的属性索引的方法,如图1所示,包括:
步骤S11:获取创建属性索引的创建指令,所述创建指令至少包括:容器名称、属性节点的路径和属性索引的名称。
步骤S12:根据所述创建指令中的容器名称和属性节点的路径,在所述XMLDBMS中获取与所述容器名称相对应的容器,并在所述容器中获取需创建属性索引的第一属性节点。
步骤S13:根据所述创建指令中的属性索引的名称,在所述容器中创建所述第一属性节点的第一属性索引。
在本发明的上述实施例中,XMLDBMS中把XML文档按照节点的方式进行存储。在节点存储表中存储有两种节点:文档节点和元素节点。一个元素节点内部存储着它的所有的属性节点,名字空间节点,文本子节点,处理指令子节点,注释子节点以及它与其他元素节点的关系(父子,兄弟关系)。每一个XML文档有一个文档节点,存储着这个XML文档的元数据和根元素节点ID等。每一个节点都是存储在节点存储表里。
节点的每一个属性都是由属性名称和属性值配对的。如XML文档book.xml:
<bookstore>
<bookname=“Art”author=“Kevin”price=“50”>shanghai</book>
<bookname=“Myhome”author=“Jack”price=“60”>beijing</book>
<bookname=“Myuniversity”author=“Kobe”price=“70”>shenzhen</book>
</bookstore>
/bookstore/book路径下的第一个book节点中的属性名name和属性值Art是配对的,author和Kevin是配对的。本发明实施例就是基于用户指定的属性如name属性或者author属性,创建相应的属性索引。
下面举例说明上述实施例的实现过程。
假定创建属性索引的创建指令,如下:
createIndexOncontainerNameonattributePathwithindexName
其中,containerName是容器名字,XML文档都存放在容器里;
attributePath是属性节点的路径;
indexName是属性索引的名称。
具体的,createIndexOnteston/bookstore/book/namewithidx创建指令为容器test在book节点下的name属性上建立属性索引,属性索引的名称是idx。加载到test这个容器中的XML文档如果含有/bookstore/book这个节点的name属性节点,则都要在该属性节点上建立属性索引。
容器test创建完name属性节点后,则可以根据xquery语句进行相应的查询,xquery语句具体为:
For$iindoc(“test/books.xml”)/bookstore/bookwhere$i/name=“Art”return$i;
该查询语句可以通过name属性索引来查找,返回结果为:
<bookname=“Art”author=“Kevin”price=“50”>shanghai</book>
本发明实施例的创建XML节点的属性索引的方法,动态创建属性节点的属性索引,不仅满足了用户的需求,而且大大节省了XML数据库管理系统的存储空间,提高了数据库的查询效率。
进一步地,本发明的上述实施例中,所述方法还包括:
创建所述第一属性索引的第一属性索引表,并在所述容器中的属性索引元数据表中记录所述第一属性索引的元数据信息,其中,所述元数据信息包括:属性索引的名称,属性节点的路径编号ID、属性节点的字符串编号ID以及属性索引表的编号ID。
在本发明的具体实施例中,每一个用户自定义的需要建立属性索引的属性,都会创建一张属性索引表。每个容器中都有一张属性索引元数据表,来管理和维护用户动态创建属性索引的元数据信息。
进一步地,本发明的上述实施例中,根据所述属性索引的名称,在所述容器中创建所述第一属性节点的第一属性索引的步骤之后所述方法还包括:
向所述容器中加载新增XML文档时,获取所述新增XML文档的元素节点中的属性节点;
根据所述属性索引元数据表中第一属性节点的路径ID和字符串ID,验证所述属性节点是否为所述第一属性节点;
若所述属性节点为所述第一属性节点,则创建所述属性节点的属性索引。
在本发明的上述实施例中,容器test已经在/bookstore/book/name这个属性上建立了属性索引,再往容器里添加book.xml文档时,每解析出一个元素节点的属性节点时,都要验证这个属性节点是否是name属性节点,具体通过属性索引元数据表中属性索引元数据表中name属性节点的路径ID和字符串ID,来验证属性节点是否为name属性节点。如果是,则要在这个属性节点上建立它的属性索引。
进一步地,本发明的上述实施例中,所述方法还包括:
在所述容器加载完所述新增XML后,获取用户创建第二属性节点的第二属性索引的创建指令;
在所述容器保存的节点存储表中,获取包含所述第二属性节点的元素节点;
创建所述元素节点中第二属性节点的第二属性索引,同时创建所述第二属性索引的第二属性索引表并在属性索引元数据表中记录所述第二属性索引的元数据信息。
在本发明的上述实施例中,添加完上述book.xml文档后,但这时如果用户想在/bookstore/book/price这个属性上建立索引,则可以通过createIndexOnteston/bookstore/book/pricewithidx1创建指令来创建。具体的,通过扫描节点存储表中的每一个元素节点,找到包含/bookstore/book/price这个属性节点的元素节点,然后在price这个属性上建立属性索引。同时,要在属性索引元数据表中,添加一行数据记录这个属性索引的元数据信息。
进一步地,本发明的上述实施例中,所述方法还包括:
根据用户的属性索引删除指令中第三属性索引的名称,在所述属性索引元数据表中获取第三属性索引表的ID,并根据所述第三属性索引表的ID删除所述第三属性索引表。
在本发明的具体实施例中,用户的属性索引删除指令指定了哪个容器里面的哪个属性索引需要删除。根据属性索引删除指令中的属性索引的名称从属性索引元数据表中中找到属性索引表的ID,然后删除该属性索引表。同时,维护节点属性索引的系统表也要做相应的更新操作。
进一步地,本发明的上述实施例中,所述方法还包括:
若在所述容器的XML文档中插入第四属性节点,且所述第四属性节点为所述容器中已创建属性索引的属性节点,则创建所述第四属性节点的属性索引;
若用第四属性节点替换所述容器的XML文档中的第五属性节点,且所述第四属性节点为所述容器中已创建属性索引的属性节点,则创建所述第四属性节点的属性索引。
在本发明的具体实施例中,当用户更新文档中某个节点的属性时,相应的属性属于也要进行更新。当插入一个新节点,而且该节点的属性包含用户自定义的需要建立属性索引的属性时,则在该节点的相应属性上建立属性索引;当替换一个节点属性值时,并当替换后的属性为用户自定义的属性时,则创建该属性的属性索引。
本发明实施例的创建XML节点的属性索引的方法,在XMLDBMS中动态的创建节点上的属性索引,比以前的做法更有效的节省了XMLDBMS的存储空间,更灵活有效地满足了用户的需求,且不会造成XMLDBMS系统空间的浪费。
本发明实施例还提供了一种创建XML节点的属性索引的装置,如图2所示,包括:
第一获取模块21,用于获取创建属性索引的创建指令,所述创建指令至少包括:容器名称、属性节点的路径和属性索引的名称;
第二获取模块22,用于根据所述创建指令中的容器名称和属性节点的路径,在所述XMLDBMS中获取与所述容器名称相对应的容器,并在所述容器中获取需创建属性索引的第一属性节点;
第一创建模块23,用于根据所述创建指令中的属性索引的名称,在所述容器中创建所述第一属性节点的第一属性索引。
本发明实施例的创建XML节点的属性索引的装置,还包括:
第二创建模块,用于在所述容器中创建所述第一属性节点的第一属性索引后,创建所述第一属性索引的第一属性索引表,并在所述容器中的属性索引元数据表中记录所述第一属性索引的元数据信息,其中,所述元数据信息包括:属性索引的名称,属性节点的路径ID、属性节点的字符串ID以及属性索引表的ID。
本发明实施例的创建XML节点的属性索引的装置,还包括:
第三获取模块,用于向所述容器中加载新增XML文档时,获取所述新增XML文档的元素节点中的属性节点;
验证模块,用于根据所述属性索引元数据表中第一属性节点的路径ID和字符串ID,验证所述属性节点是否为所述第一属性节点;
第三创建模块,用于若所述属性节点为所述第一属性节点,则创建所述属性节点的属性索引。
本发明实施例的创建XML节点的属性索引的装置,还包括:
第四获取模块,用于在所述容器加载完所述新增XML后,获取用户创建第二属性节点的第二属性索引的创建指令;
第五获取模块,用于在所述容器保存的节点存储表中,获取包含所述第二属性节点的元素节点;
第四创建模块,用于创建所述元素节点中第二属性节点的第二属性索引,同时创建所述第二属性索引的第二属性索引表并在属性索引元数据表中记录所述第二属性索引的元数据信息。
本发明实施例的创建XML节点的属性索引的装置,还包括:
删除模块,用于根据用户的属性索引删除指令中第三属性索引的名称,在所述属性索引元数据表中获取第三属性索引表的ID,并根据所述第三属性索引表的ID删除所述第三属性索引表。
本发明实施例的创建XML节点的属性索引的装置,还包括:
第一更新模块,用于若在所述容器的XML文档中插入第四属性节点,且所述第四属性节点为所述容器中已创建属性索引的属性节点,则创建所述第四属性节点的属性索引;
第二更新模块,用于若用第四属性节点替换所述容器的XML文档中的第五属性节点,且所述第四属性节点为所述容器中已创建属性索引的属性节点,则创建所述第四属性节点的属性索引。
需要说明的是,该装置是与上述方法实施例对应的装置,上述方法实施例中所有实现方式均适用于该装置的实施例中,也能达到相同的技术效果。
本发明实施例的创建XML节点的属性索引的方法及装置,用户可以对自定义的节点属性创建索引,同时可以对节点属性上的索引进行创建,删除,更新等操作。本发明实施例在现有的节点数据存储方案上,经过灵活有效的改进,以很小的代价在节点属性上添加了可动态创建节点属性索引的功能,保证了系统开发的可实施性。
以上所述仅为本发明的较佳实施例而已,并不用以限制本发明,凡在本发明的精神和原则之内,所作的任何修改、等同替换、改进等,均应包含在本发明的保护范围之内。