结构化文档管理装置、方法以及程序的制作方法
【专利摘要】本发明实施方式的结构化文档管理装置对所输入的查询中所含的层次条件和与以层次条件指定的结构化文档的要素相对的谓语条件进行解析,提取保存各要素的变量中的制约条件和变量间的依存关系。通过本方法提取制约条件时,以缓和为不仅包含原来成为对象的要素也包含成为对象的要素以外的要素的形式,取得与结构有关的制约条件。以能够尽可能早期地应用缓和了的制约条件的方式移动了谓语后,插入对缓和了的条件进行补充的谓语条件。
【专利说明】结构化文档管理装置、方法以及程序
【技术领域】
[0001 ] 本发明的实施方式涉及结构化文档管理装置、方法以及程序。
【背景技术】
[0002]以往,已知用于对以XML(Extensible Markup Language:可扩展标记语言)等记述的结构化文档数据进行存储、检索的结构化文档管理装置。为了进行结构化文档管理装置中的结构化文档数据的检索,制定了如RDBMS(Relational Database Management System:关系型数据库管理系统)中的查询语言SQL那样的、与XML数据相对的查询语言X Query(XML Query Language),并且在多数结构化文档管理装置受到支持。
[0003]X Query是用于如数据库那样处理XML数据集合的语言,提供用于进行符合条件的数据集合的取出、汇总、分析的手段。XML数据具有亲子、兄弟等的要素组合后的层次化的逻辑结构(层次结构),因此能够在条件中指定与该层次结构有关的条件(结构条件)。
[0004]对XML是否满足指定的结构条件进行检索的技术由代表性的XML数据的parse处理即SAX (Simple API for XML)等来提供。但是,在SAX中,对于成为检索对象的结构化文档(在此,为XML),仅能从上位层次向下位层次访问。为此,有在下位层次指定的筛选条件时,只要未搜索到下位层次就不能应用筛选条件。为此,需要从最上位向下位层次对整个结构化文档进行搜索,直到有筛选条件为止。
[0005]为了使结构化文档管理装置中的检索处理变得高速,希望尽可能早期地应用筛选条件,并希望削减在检索中生成的中间数据。为此,也存在仅对于用索引处理筛选出的结构化文档集合检索结构条件的技术。但是,该技术对于查询由多个子查询构成的嵌套查询并不应对。
[0006]此外,在嵌套查询中,如跨过子查询来早期应用筛选条件那样地进行了各种各样的尝试。例如,存在以下技术:在关系数据库模型中,以图形的形式定义构成查询的子查询间的关系,定义能够在图形间移动谓语的条件,如果是可能的情况,则将谓语移动到其他子查询从而谋求最优化。
[0007]现有技术文献
[0008]专利文献
[0009]专利文献1:日本特开2007-226452号公报
[0010]专利文献2:日本特开2010-79646号公报
[0011]非专利文献
[0012]非专利文献I:Query Optimization by Predicate Move-Around (1994)
[0013]非专利文献2:Shifting Predicates to Inner Sub-expressions for X QueryOptimization (2006)
【发明内容】
[0014]发明要解决的课题[0015]但是,关系数据库模型与结构化文档的数据模型不同,没有层次结构、要素间的顺序关系这一问题,不支持与要素相对应的识别符(ID)。为此,存在关系数据库中的查询改写的探讨对于结构化文档无法应用的情况。
[0016]另外,在结构化文档即XML的查询中,将与称为视图的虚拟的XML文档相对应的条件在制作视图之前及之后复制并应用,从而也能够避免徒劳的对结构化文档的视图的要素进行检索的情况。但是,除了对象限定于视图以外,简单地在制作视图的阶段将成为对象的条件全部地复制到能够应用的地方并应用,因此在多个地方评价同一条件。并且,在存在能够复制的多个条件时,无条件地对谓语条件的逻辑和进行复制,因此存在谓语条件的筛选的效果不充分的问题。本发明要解决的课题是,以提供能够高速地进行检索的结构化文档管理装置、方法及程序为目的。
[0017]用于解决课题的手段
[0018]实施方式的结构化文档管理装置包括:结构化文档数据受理部,受理具有层次化后的逻辑结构的结构化文档数据的输入;结构化文档数据存储部,存储所输入的所述结构化文档数据;查询数据受理部,受理查询数据的输入;句子结构解析部,解析所输入的查询数据的句子结构,取得句子结构解析树,该句子结构解析树是指,以成为定义成各变量仅被代入一次的静态单赋值的方式所分解的句子结构解析树;制约条件取得部,从由所述句子结构解析部获得的句子结构解析树,取得制约条件,该制约条件包含各句子结构解析树的变量需要满足的层次条件及变量的值的条件;句子结构解析树改写部,基于由所述制约条件取得部获得的制约条件,将所述查询数据改写为通过所述制约条件能够对作为对象的所述结构化文档进行筛选的形态;以及查询执行部,将由所述句子结构解析树改写部改写过的所述查询数据作为输入,输出检索结果。
【专利附图】
【附图说明】
[0019]图1是表示实施方式中的结构化文档管理系统的系统构筑例的模式图。
[0020]图2是实施方式中的服务器以及客户终端的模块构成图。
[0021]图3是表示实施方式中的服务器以及客户终端的概略构成的框图。
[0022]图4是表示实施方式中的结构化文档DB中登记的结构化文档数据的一例的说明图。
[0023]图5是表示实施方式中的结构化文档DB中登记的结构化文档数据的一例的说明图。
[0024]图6是表示实施方式中的结构化文档DB中登记的结构化文档数据的一例的说明图。
[0025]图7是表示实施方式中的查询数据的一例的说明图。
[0026]图8是表示实施方式中的检索处理的流程的流程图。
[0027]图9是表示对于实施方式中的查询数据进行了句子结构解析处理的结果的说明图。
[0028]图10是表示实施方式中的制约条件取得处理的流程的流程图。
[0029]图11是表示实施方式中的从输入向输出的制约条件取得处理的流程的流程图。
[0030]图12是表示实施方式中的从输出向输入的制约条件取得处理的流程的流程图。[0031]图13是表示对于实施方式中的查询数据进行从输入向输出的制约条件取得处理所获得的制约条件的列表的说明图。
[0032]图14是表示对于实施方式中的查询数据进行从输入向输出的制约条件取得处理所获得的路径信息列表的说明图。
[0033]图15是表示对于实施方式中的查询数据进行从输入向输出的制约条件取得处理所获得的制约条件取得对象变量列表的说明图。
[0034]图16是表示对于实施方式中的查询数据进行从输出向输入的制约条件取得处理所获得的制约条件的列表的说明图。
[0035]图17是表示实施方式中的改写时所利用的改写模板的一例的说明图。
[0036]图18是表示实施方式中的结构解析树改写处理的流程的流程图。
[0037]图19是表示对于实施方式中的查询数据进行结构解析树改写处理所获得的句子结构解析树的说明图。
[0038]图20是表示对于实施方式中的查询数据进行了检索的结果的说明图。
【具体实施方式】
[0039]以下,参照附图,说明实施方式的结构化文档管理装置、方法以及程序。
[0040]图1是表示实施方式涉及的结构化文档管理系统的系统构筑例的模式图。在此,作为实施方式的结构化文档管理系统,设想如图1所示那样、通过LAN (Local AreaNetwork:局域网)等网络2在结构化文档管理装置即服务器计算机(以下,称为服务器。)I上连接有多台客户计算机(以下,称为客户终端。)3的服务器客户系统。
[0041]图2是服务器I以及客户终端3的模块构成图。服务器I及客户终端3例如具有利用了通常的计算机的硬件构成。即,服务器I以及客户终端3包括:进行信息处理的CPU(Central Processing Unit:中央处理单元)101、存储了 BIOS等的读出专用存储器即ROM(Read Only Memory:只读存储器)102、将各种数据能够改写地存储的RAM (RAm AccessMemory:随机存取存储器)103、作为各种数据库发挥功能并且保存各种程序的HDD (HardDisk Drive:硬盘驱动器)104、使用存储介质110保管信息或向外部发布信息或从外部获取信息所用的⑶-ROM驱动器等介质驱动装置105、经由网络2与外部的其他计算机通信从而传达信息所用的通信控制装置106、对操作者显示处理经过、结果等的CRT (Cathode RayTube:阴极射线管)、LCD (Liquid Cristal Display:液晶显示器)等显示部107、以及操作者对CPU101输入命令、信息等所用的键盘、鼠标等输入部108等,总线控制器109对在这些各部间收发的数据进行协调并工作。
[0042]在这种服务器I及客户终端3中,用户接通电源时,CPU101使R0M102内的装载这一程序起动,从HDD104中将OS (Operating System:操作系统)这一管理计算机的硬件和软件的程序读入到RAM103中,使该OS起动。这种OS根据用户的操作起动程序、或读入信息、或进行保存。作为OS中的代表的OS,已知有Windows (注册商标)、UNIX (注册商标)等。将在这些OS上工作的程序叫做应用程序。此外,应用程序不限于在规定的OS上工作的应用程序,也可以是使OS承担后述的各种处理的一部分的执行的应用程序,也可以作为构成规定的应用软件、OS等的一组程序文件的一部分而被包含的应用程序。
[0043]在此,服务器I将结构化文档管理程序作为应用程序存储在HDD104中。在该意义上,HDD104作为存储结构化文档管理程序的存储介质发挥功能。另外,一般而言,在服务器I的HDD104中安装的应用程序记录于CD-ROM、DVD等各种光盘、各种光磁盘、软盘等各种磁盘、半导体存储器等各种方式的介质等的储介质110中而提供。为此,CD-ROM等光信息记录介质、FD等磁性介质等具有可搬性的存储介质110也能够成为存储结构化文档管理程序的存储介质。并且,结构化文档管理程序也可以经由例如通信控制装置106从外部取入并安装于HDD104。
[0044]当在OS上工作的结构化文档管理程序起动后,按照该结构化文档管理程序,服务器I的CPUlOl执行各种运算处理并集中控制各部。另一方面,当在OS上工作的应用程序起动后,按照该应用程序,客户终端3的CPUlOl执行各种运算处理并集中控制各部。以下对服务器I及客户终端3的CPUlOl执行的各种运算处理中的、实施方式的结构化文档管理系统中的特征性的处理进行说明。
[0045]图3是表示本实施方式中的服务器I及客户终端3的概略构成的框图。如图3所示,客户终端3作为通过应用程序实现的功能构成,包括结构化文档登记部11和检索部12。
[0046]结构化文档登记部11用于将从输入部108输入的结构化文档数据、预先在客户终端3的HDD104中存储的结构化文档数据登记在后述的服务器I的结构化文档数据库(结构化文档DB) 21。该结构化文档登记部11将保存请求与应当登记的结构化文档数据一起发送至服务器I。
[0047]图4?图6表示结构化文档DB中登记的结构化文档数据的一例。作为用于记述结构化文档数据的代表性的语言,举出XML (Extensible Markup Language)。图4?图6所示的三个结构化文档数据以XML记述。在XML中,将构成文档结构的各个部分称为“要素”(元素:Element),要素使用标志(tag)来记述。具体而言,以表示要素的开始的标志(开始标志)、表示结束的标志(结束标志)这两个标志夹着数据,来表现一个要素。此外,以开始标志和结束标志夹入的文本数据是以该开始标志和结束标志表示的一个要素所包含的文本要素。但是,在结构化文档的最上位存在未作为标志来记述的文档要素,文档要素之下一定只存在一个要素。
[0048]在图4所示的例子中,结构化文档Dl在文档要素之下存在以< book >这一标志包围的要素。该< book >要素包含year属性和以< title >、< author >、< section>的各标志包围的多个子要素。< title >要素具有“Data On The Web”等文本要素。
<author >要素包含以< last >、< first >的顺序表示的两个子要素。< section >要素包含以多个< P >的标志包围的子要素。
[0049]图5、图6所示的例子也以与图4同样的形式具有要素,仅仅< author >要素、
<section >要素的数目及要素具有的值不同。
[0050]返回到图3,检索部12按照由用户从输入部108输入的指示,作成记述用于从结构化文档DB21检索所期望的数据的检索条件等的查询数据,并将包含该查询数据的检索请求发送至服务器I。另外,检索部12接受由服务器I发送来的与该检索请求对应的结果数据,并将其显示在显示部107上。
[0051]另一方面,服务器I作为通过结构化文档管理程序实现的功能构成,包括保存处理部22和检索处理部23。另外,服务器I包括利用了 HDD104等存储装置的结构化文档DB21。[0052]保存处理部22包括:保存接口部24,接受来自客户终端3的保存请求,将从客户终端3发送来的结构化文档数据保存于结构化文档DB21。
[0053]保存接口部24 (结构化文档受理部)受理结构化文档数据的输入,将结构化文档数据保存于结构化文档DB21 (结构化文档存储部)。
[0054]检索处理部23进行如下处理:接受来自客户终端3的检索请求,从结构化文档DB21找出符合由查询数据所指定的条件的数据,并将该找出的数据作为结果数据返回。该检索处理部23包括检索接口部26、句子结构解析部27、制约条件取得部28、句子结构解析树改写部29以及查询执行部30。
[0055]检索接口部26受理查询数据的输入(查询数据受理部),并调出对受理到的查询数据的句子结构进行解析并制作句子结构解析树31的句子结构解析部27。
[0056]句子结构解析部27对从客户终端3发送并经由检索接口部26输入的查询数据(以下,称为输入查询数据。)进行句子结构解析,以必须将一个运算的单位代入到X Query中的for语句或let语句的变量中的方式对输入查询数据进行分解并生成改写过句子结构解析树31。即,所谓句子结构解析树31,是以为了变量仅被代入一次而定义的静态单赋值的方式所分解的句子结构。
[0057]制约条件取得部28作为制约条件取得部发挥功能,在由句子结构解析部27所输出的句子结构解析树31内,将保存对结构化文档装置内的全部的结构化文档的文档要素的集合进行指定的“ / ”的变量为起点,对关联的全部的运算进行搜索,缓和结构化文档中的层次条件,并且提取并输出各变量中的制约条件32。
[0058]句子结构解析树改写部29作为句子结构解析树改写部发挥功能,基于由制约条件取得部28所输出的制约条件32,对由句子结构解析部27输出的句子结构解析树31进行改写。改写过的句子结构解析树31与输入查询数据同样的、按照X Query的语法的形式输出。
[0059]查询执行部30作为查询执行部发挥功能,对于结构化文档数据的数据集合执行从句子结构解析树改写部29输出的改写查询数据,并输出获得的结果数据33。
[0060]检索接口部26将从查询执行部30输出的结果数据作为检索的结果数据返送给客户终端3。
[0061]此外,在本实施方式中,以由X Query记述的查询数据进行说明。在XML中,有由W3C提出的X Query这一查询语言,X Query基本上能够以Prolog部和其以外的FLWOR(for-let-where-order by-return)这一句子结构模式来说明。以下,说明X Query的语言规格。Prolog部由在一个X Query的开头仅存在一个并在X Query间通用来使用的声明变量和声明函数构成。声明变量的句子结构为“declare variable变量:=式子”。除了无论从X Query内的何处起都能够参照这一点以外,变量声明与后述的let语句相同。
[0062]声明函数的句子结构是“declare function函数名(参数声明){式子}”,参数声明部中记述任意数的变量和类型。声明函数无论从XQuery内的何处都能够调用。for的句子结构是“for变量in式子”。for语句具有将满足式子的序列的要素代入到变量来循环这一意思。在此,所谓序列,是平面列表。let的句子结构是“let变量:=式子”。每当一次循环,let语句对满足式子的序列进行保存。where的句子结构是“where式”。where语句限制以for语句重复的循环,在不满足式子的情况下,跳出循环。[0063]order by的句子结构是“order by式子”。order by语句通过由式子指定的关键字将通过for-let-where获得的结果分类。return的句子结构是“return式子”。return语句能够记述包含变量的任意的XML数据。式子中能够记述FLWOR语句。
[0064]另外,当for语句、let语句等式子中再次记述有FLWOR语句时,称为嵌套查询。变量的句子结构是“$字符串”。除了通过嵌套查询等二重声明的情况以外,具有相同字符串的变量看作相同。
[0065]作为对XML数据的要素间的层次条件进行指定的运算,X Query中有如下运算。
[0066]?表示“ / ”要素间是亲子关系的运算符
[0067]?表示“ / / ”要素间是祖先子孙关系的运算符
[0068]此外,“ / ”、“ / / ”的左边什么都没有时,DB、程序侧以默认表示的XML或XML集合的文档要素成为对象。在本实施方式中,指的是结构化文档DB的结构化文档集合。
[0069]图7是表示X Query的查询数据的一例的说明图。为了易于理解,图7的各行中分配以[]包围的行编号。图7的意思是“列出姓为‘Suciu’并且名为‘Dan’的作者,在1999年以前出版的书中的、书的标题、作者名、在书的内容中包含有‘XML’的节”,示出如下所述的查询数据Ql。
[0070]Ql: [LI]表示,通过for语句对于结构化文档DB21的各结构化文档数据,取得位于文档要素下面的层次的“book”这一要素,并代入到变量$1!进行循环。[L2]的let语句成为嵌套查询,表示将[L3]~[L7]的FLWOR语句的结果保存到变量$1中。[L3]表示对于在通过[LI]的循环所代入的变量$h中所保存的要素,取得其子要素即“author”这一要素,代入到变量$x进行循`环。[L4]、[L5]表示对于在通过[L3]的循环所代入的变量$x中所保存的要素,取得其子要素即“last”、“first”这一要素,代入到变量$u、$v。[L6]对于与循环变量$x对应的变量$u、$v,仅让变量$u具有的值与“Suciu”相等并且$v具有的值与“Dan”相等的部分循环。[L7]表示仅返送满足[L6]的$x。
[0071][L8]表示与[L2]同样的let语句成为嵌套查询,将[L9]~[L11]的FLWOR语句的结果保存到变量中。[L9]对于通过[LI]的循环代入的变量$1!中所保存的要素,取得其子要素即“section”这一要素的子要素即“p”这一要素,代入到变量$a进行循环。[L10]表不对于循环变量$a,仅使变量$a具有的值包含“XML”这一值的部分循环。[L11]表不仅返送满足[L10]的$a。
[0072][L12]和[L13]是let语句,表示,对于保存于变量$h的要素,取得作为属性的“year”和作为子要素的“title”这一要素,并作为序列代入到各个变量$1 $1中。[L14]表示,对于与循环变量$h对应的变量$1、$k,在变量$i的序列中存在要素并且仅使$k具有的数值与1999相等或比1999小的部分循环。[L15]表示将至此求出的$1、$1、$j这三个变量所指的值填入到以< item >开始的XML的指定位置,生成新的XML,并作为结果返送。
[0073]图8是表示服务器I的检索处理部23的检索处理的流程的流程图。首先,检索接口部26受理从客户终端3经由网络2中转所发送的查询数据的输入(步骤SI)。
[0074]接着,句子结构解析部27对与输入查询数据有关的句子结构进行解析,生成句子结构解析树(步骤S2)。句子结构解析中,构成查询数据的各要素被分解为以一个运算单位将构成X Query的全部的运算保存于for语句或let语句。另外,where、order by、return语句以仅将一个变量作为输入的方式被改写。[0075]但是,式子的开头以“ / ”或“ / / ”开始的结构条件的情况下,分解为仅将开头的“ / ”或“ / / ”作为式子而保存的let语句(以下,称为起点语句)和将该let语句的输出变量作为输入变量的式子。另外,通过开头是“变量”并且后续为“/”或“/ /”所指定的层次条件连续排列的情况下,归纳为一个运算,保存于for语句或let语句。并且,嵌套查询存在的情况下,嵌套查询的FLWOR语句所记述的声明函数以X Query的Prolog部记述,并被改写为以交付到嵌套查询的母查询的变量作为参数的形式将所记述的声明函数的函数记述于原位置的函数调用的形式。
[0076]图9是通过句子结构解析部27对图7的查询数据实施了句子结构解析的结果。以[LI]到[L27]的27行来记述。图9的[LI]?[L10]将图7中的[L3]?[L7]的嵌套查询分割作为声明函数udf I。图7中的[L3]的变量$h是以嵌套查询的母查询中的for语句[LI]代入的变量,因此在声明函数中作为参数输入变量$hl。
[0077]在句子结构解析中,以一个运算单位进行分割并保存在let语句中,以在where语句中仅输入变量的方式进行改写,因此图7中的[L6]在图9中被改写为[L5]?[L8]。
[0078]另外,图9的[L11]?[L16]分割出图7中的[L9]?[L11]的嵌套查询作为声明函数udf2。句子结构解析中,以在where语句中仅输入变量的方式进行改写,因此图7中的[L10]在图9中被改写为[L13]?[L14]。
[0079]图9的[L17]?[L18]将使开头的“/ ”单独作为let语句来对图7中的[LI]进行分割并代入到变量$g的起点语句和后续的式子的剩余的部分分解成将变量$g作为输入的for语句。图9中的[L19]及[L20]与图7中的[L2]及[L8]相应,成为作为将各个嵌套查询分割为声明函数后的udfl、udf2而调用的形式。
[0080]图9中的[L23]、[L24]及[L26]是将图7中的[L14]改写后的语句,按一个运算单位分解成let语句,where语句仅成为输入变量。图9中的[L25]及[L27]与图7中的[L15]相应,return语句仅成为变量,生成XML的式子被改写为let语句。
[0081]句子结构解析部27的句子结构解析处理结束时,接着,制约条件取得部28对句子结构解析部27的处理结果进行解析,缓和结构化文档中的层次条件,并且取得各变量中的制约条件(步骤S4)。
[0082]在此,所谓的制约条件,是将该变量需要满足的条件的全部或一部分排列的条件。在本实施方式中,关于某变量,将包含保存于该变量的要素的文档集合应当满足的条件作为制约条件记述。例如,变量中保存有Bool型的值的情况下,记述为了其值变为TRUE所需的条件。
[0083]此时排列有多个条件时,制约条件取得部28将条件缓和为对各条件间中的结构化文档内的层次条件的依存关系予以无视的形式。例如,以构成制约条件的两个条件出现的结构条件/ A/B/C、/A/B / D是与以/ A / B指定的要素集合内的同一的B相对的子要素C及D时,以虽然缓和该条件而具有相同的要素名但与不同的B的要素相对的子要素C及D也成立的方式来缓和条件。由此,成为仅在制约条件中也包含本来为对象外的文档,但对于此,通过对XML的要素ID进行利用的运算来消除。
[0084]图10是表示制约条件取得的流程的流程图。制约条件取得部28首先从作为输入被赋予的句子结构解析树取得全部的起点语句(let的语句),提取起点语句的输出变量,保存于列表R。接着,制约条件取得部28准备成为最终输出的制约条件的列表CA、改写对象列表FA、路径信息的列表P。在此,所谓的路径信息,是仅以从“/”或“/ /”开始的一个或多个结构条件表示该变量表示的要素的信息(步骤S21)。
[0085]接着,制约条件取得部28对步骤S21取得的要素进行检查,判断输出变量的列表R是否为空(步骤S22)。
[0086]输出变量的列表R不为空时(步骤S22:否),制约条件取得部28从输出变量的列表R取得开头的要素即变量紅并将其从列表删除后,将$r插入到列表L。并且,将$r的路径信息插入到路径信息列表P。(步骤S23)。
[0087]接着,制约条件取得部28将列表L及路径信息列表P作为输入实施从运算的输入向输出的制约条件取得处理,并输出保存制约条件的列表C、制约条件取得对象变量列表T、对列表T的变量中的、成为where语句的输入的变量进行保存的列表W、对列表T的变量的路径信息进行保存的列表P (步骤S24)。
[0088]关于步骤24的处理,以图11的流程图记述详细。接着,将在步骤S24的处理中取得的四个列表C、T、W、P作为输入,制约条件取得部28实施从输出向输入的制约条件取得处理,并输出改写对象变量列表F、制约信息列表C、路径信息列表P (步骤S25)。
[0089]关于步骤25的处理,以图12的流程图记述详细。接着,制约条件取得部28将在步骤S25获得的制约信息列表C和路径信息列表P内的各要素分别插入到制约条件的列表CA、FA (步骤S26)。接着,再次返回到步骤22,重复处理。
[0090]另一方面,在步骤S22的判断中输出变量的列表R为空时(步骤S22为是),制约条件取得部28将通过至此的处理所取得的制约条件的列表CA、PA、输出路径信息列表P,结束制约条件取得处理。
[0091]图11是表示通过`图10的步骤24实施的从输入向输出的制约条件取得处理的流程的流程图。从输入向输出的制约条件取得处理中,首先,制约条件取得部28接受在图10的步骤23取得的列表L、路径信息列表P作为输入,准备在步骤S24中说明的三个制约条件的列表C、制约条件取得对象变量列表T、对列表T的变量中的成为where语句的输入的变量进行保存的列表W、保存FLWOR语句的列表N作为输出用的空的列表(步骤S31)。接着,制约条件取得部28判断L是否为空(步骤S32)。
[0092]在所输入的列表L为空时(步骤S32:否),制约条件取得部28取得L最后尾的要素即变量$1并将其从列表中删除(步骤S33)。接着,制约条件取得部28判断$1是否存在于制约条件取得对象变量列表T中(步骤S34)。
[0093]$ I不存在于制约条件取得对象变量列表T中时(步骤S32:否),制约条件取得部28取得将数$作为输入的for、let、where、order by、return语句列表N (步骤S35)。接着,制约条件取得部28判断文列表N是否为空(步骤S36)。
[0094]N不为空时(步骤S36:是),制约条件取得部28取得N的开头的要素即语句η并将其从列表删除,取得语句η的输出变量$ρ (步骤S37)。接着,制约条件取得部28判断语句η是否为结构条件K (步骤S38)。
[0095]语句η为结构条件时(步骤S38:是),制约条件取得部28对$ρ的制约条件C ($ρ)追加$1的制约条件C ($1)作为条件。接着,制约条件取得部28根据结构条件K和列表P,将$?的路径信息追加至列表P。并且,将$Ρ追加至L和T (步骤S44)。接着,制约条件取得部28返回到步骤S36,继续进行接下来的处理。[0096]另一方面,语句η不为结构条件时(步骤S38:否),制约条件取得部28判断语句η是否为声明函数的调用(步骤S39)。
[0097]语句η为声明函数的调用时(步骤S39:是),制约条件取得部28取得与$1的参数的位置相同的声明函数的参数$1,对$1的制约条件C ($i)追加$1的制约条件C ($1)作为条件。接着,制约条件取得部28将$i追加至L和T (步骤S45)。接着,制约条件取得部28返回到步骤S36,继续进行接下来的处理。
[0098]另一方面,步骤S39的判断中语句η不为声明函数的调用时(步骤S39:否),制约条件取得部28判断语句η是否为常量和$1的比较函数(步骤S40)。
[0099]语句η为比较函数时(步骤S40:是),制约条件取得部28对$ρ的制约条件C ($ρ)追加$1的制约条件C ($1)和比较式的制约条件C (比较式)来作为条件。接着,制约条件取得部28将$ρ追加至L和T (步骤S46)。接着,制约条件取得部28返回到步骤S36,继续进行接下来的处理。
[0100]另一方面,步骤S40的判断中语句η不为比较函数时(步骤S40:否),制约条件取得部28判断语句η是否为and运算(步骤S41)。
[0101]语句η为and运算时(步骤S41:是),制约条件取得部28将$p追加至L和T (步骤S47)。接着,制约条件取得部28返回到步骤S36,继续进行接下来的处理。
[0102]另一方面,步骤S41的判断中语句η不为and运算时(步骤S41:否),制约条件取得部28判断语句η是否为声明函数内的return语句(步骤S42)。
[0103]语句η为声明函数内的return语句时(步骤S42:是),制约条件取得部28取得声明函数的调用源(calling source)的语句的输出变量$u,对$u的制约条件C ($u)追加C($1)。接着,将$u追加至L和T(步骤S48)。接着,制约条件取得部28返回到步骤S36,继续进行接下来的处理。
[0104]另一方面,步骤S42的判断中语句η不为声明函数内的return语句时(步骤S42:否),制约条件取得部28判断语句η是否为where语句(步骤S43)。
[0105]语句η为where语句时(步骤S43:是),制约条件取得部28将$1追加至W (步骤S49 )。接着,返回到步骤S36,继续进行接下来的处理。
[0106]另一方面,步骤S43的判断中语句η不为where语句时(步骤S43:否),制约条件取得部28返回到步骤S36,继续进行接下来的处理。
[0107]另一方面,步骤S36的判断中N为空时(步骤S36:是),制约条件取得部28返回到步骤S32,继续进行接下来的处理。
[0108]另一方面,步骤S34的判断中$1存在于T时(步骤S34:是),制约条件取得部28返回到步骤S32,继续进行接下来的处理。
[0109]另一方面,步骤S32的判断中L为空时(步骤S32为是),制约条件取得部28输出通过至此的处理所取得的C、T、W、P,使从上位向下位的制约条件取得处理结束。
[0110]图12是表示通过图10的步骤S25实施的从输出向输入的制约条件取得处理的流程的流程图。从输出向输入的制约条件取得处理中,首先,制约条件取得部28接受作为输入在图10的步骤S24中所取得的列表C、T、W、P作为输入,准备步骤S25中说明了的列表F和仅在内部使用的式子的输入变量列表V作为输出用的空的列表(步骤S71 )。接着,制约条件取得部28判断W是否为空(步骤S72)。[0111]W不为空时(步骤S72:否),制约条件取得部28取得W的最后尾的要素即变量$w并将其从列表删除,取得将$w作为输出的FLWOR语句η和语句η的输入变量的列表V。(步骤S73)。接着,制约条件取得部28判断V是否为空或语句η是否不存在(步骤S74)。
[0112]V也不为空并且语句η存在时(步骤S74:否),制约条件取得部28判断语句η是否为and运算(步骤S75)。
[0113]语句η为and运算时(步骤S75:是),制约条件取得部28取得and运算的两个输入变量$vl、$v2 (步骤S81)。接着,制约条件取得部28判断$vl是否存在于T (步骤S82)。
[0114]$v存在于T时(步骤S82:是),制约条件取得部28将$¥1追加至W(步骤S83)。接着,判断$v2是否存在于T (步骤S84)。
[0115]$v2存在于T时(步骤S84:是),制约条件取得部28将$¥2追加至W (步骤S85)。接着,制约条件取得部28从V删除$vl、$v2 (步骤S86)。接着,制约条件取得部28返回到步骤S72,继续进行接下来的处理。
[0116]另一方面,$v2不存在于T时(步骤S84:否),制约条件取得部28返回到步骤S72,继续进行接下来的处理。
[0117]另一方面,$vl不存在于T时(步骤S82:No),制约条件取得部28返回到步骤S72,继续进行接下来的处理。
[0118]另一方面,步骤S75的语句η不为and运算时(步骤S75:否),制约条件取得部28取得V的开头的变量$i并将其从V中删除(步骤S76)。接着,制约条件取得部28判断$i是否存在于T (步骤S77)。
[0119]$i存在于T时(步骤S77:是),制约条件取得部28将$?的制约条件C ($w)的内容展开并追加至$1的制约条件 C ($i)o接着,制约条件取得部28将$1追加至W (步骤S78)。接着,制约条件取得部28判断$i是否为起点语句的输出变量或声明函数的输入变量(步骤S79)。
[0120]$i为起点语句的输出变量或声明函数的输入变量时(步骤S79:是),制约条件取得部28将$w追加至F(步骤S80)。接着,制约条件取得部28返回至步骤S74,继续进行接下来的处理。
[0121]另一方面,步骤S79的判断中$1不为起点语句的输出变量并且也不是声明函数的输入变量时(步骤S79:否),制约条件取得部28返回至步骤S74,继续进行接下来的处理。
[0122]另一方面,步骤S77的判断中$1不存在于T时(步骤S77:否),制约条件取得部28返回至步骤S74,继续进行接下来的处理。
[0123]另一方面,步骤S74的判断中V为空或语句η不存在时(步骤S74:是),制约条件取得部28返回到步骤S72,继续进行接下来的处理。
[0124]另一方面,步骤S72的判断中W为空时(步骤S72:是),制约条件取得部28对于F内的各变量$f有关的制约条件C ($f),从条件起到没有比较条件以外为止,将制约条件展开(步骤S87)。接着,制约条件取得部28输出通过至此的处理所取得的C、F、P,使从下位向上位的制约条件取得处理结束。
[0125]在此,参照图10~图15对利用图9中例示的句子结构解析结果进行了制约条件取得处理时的处理的概要进行说明。
[0126]制约条件取得部28首先接受图9的句子结构解析结果作为输入,搜索全部的语句并取得图9的[L17]作为起点语句,将输出变量$g保存于列表R。接着,制约条件取得部28准备空的列表CA、FA、P (步骤S21)。接着,制约条件取得部28从列表R取出开头的要素即$g (=变量$r)并将其从R删除,将$8保存于检查列表L。并且,制约条件取得部28将$g的路径信息P (Sg) = /保存于列表P (步骤S22、S23)。接着,将检查列表L和路径信息P作为输入,进行从输入向输出的制约条件取得处理(步骤S24)。
[0127]在此,关于步骤S24用图11详细地进行叙述。首先,制约条件取得部28接受作为输入而保存有$g的列表L和保存有P (Sg)的信息的路径信息P作为输入,准备C、T、W、N作为空列表(步骤S31)。
[0128]接着,制约条件取得部28从检查列表L取出变量$g并将其删除,Sg不存在于T,因此将$g作为输入的语句[L18]被保存于N (步骤S32~S35)。
[0129]接着,制约条件取得部28从N取得语句[L18]并将其删除,取得输出变量$1!(步骤S36,S37)。接着,制约条件取得部28由于[L18]是对层次结构进行指定的结构条件,因此对C ($h)追加C ($g),根据[L18]的结构条件$g / book和P ($g) = /,作为$h的路径信息P ($h)= / book保存于P。并且,制约条件取得部28将$h保存于L和T (步骤S38,S44)。
[0130]接着,制约条件取得部28由于N为空,因此从检查列表L中取出$h并将其删除,取得将$h作为输入的语句即L19~L22并保存于N (步骤S36,S32~S35)。接着,制约条件取得部28由于N的开头的L19是声明函数的调用,因此取得与$h相应的声明函数的参数变量$hlji$hl的制约条件C ($hl)追加$h的制约条件C ($h)0并且,制约条件取得部28将$hl追加至L和T (步骤S36~S39,S45)。
[0131]接着,制约条件取得部28由于N的开头的L20是声明函数的调用,因此取得与$h相应的声明函数的参数变量`$h2ji$h2的制约条件C ($h2)追加$h的制约条件C ($h)0并且,制约条件取得部28将$h2追加至L和T (步骤S36~S39,S45)。
[0132]接着,制约条件取得部28由于N的开头的L21是结构条件,因此对C ($k)追加C ($h),根据[L21]的结构条件$h / @ year和P ($h),将路径信息P ($k) = / book /@ year保存于P。并且,制约条件取得部28将$k保存于L和T (步骤S36~S38,S44)。
[0133]接着,制约条件取得部28由于N的开头的L22是结构条件,因此对C ($1)追加C($h),将路径信息P ($1) = / book / title保存于P。并且,制约条件取得部28将$1保存于L和T (步骤S36~S38, S44)。
[0134]接着,制约条件取得部28由于N为空因此从L中取得变量$1,取得将$1作为输入的语句L25并保存于N (步骤S36,S32~S35)。接着,制约条件取得部28由于N的开头的L25不满足步骤S37~S43的任一条件,因此再次从L取得变量$k并将$k删除,取得将$k作为输入的语句L23并保存于N (步骤S36~S43,S36,S32~S35)。
[0135]接着,制约条件取得部28由于N的开头的L23是比较式,因此对L23的输出变量Sm的制约条件追加变量$k的制约条件C ($k) A($k <= 1999)。并且,制约条件取得部28将$m追加至L和T (步骤S36~S40, S46)。
[0136]接着,制约条件取得部28由于N为空,因此从L取得$m,取得将$m作为输入的语句L24并保存于N (步骤S36,S32~S35)。
[0137]接着,制约条件取得部28由于N的开头的L24是and运算,因此将输出变量$n追加至L和T (步骤S36?S41,S47)。
[0138]接着,制约条件取得部28由于N为空,因此从L取得$n,取得将$n作为输入的语句L26并保存于N (步骤S36,S32?S35)。接着,由于L26为where语句,因此将$n追加至 W (步骤 S36 ?S43,S49)。
[0139]接着,制约条件取得部28由于N为空,因此从L取得$h2,取得将$h2作为输入的语句L12并保存于N (步骤S36,S32?S35)。接着,制约条件取得部28由于N的开头的L12是结构条件,因此对输出变量$a的制约条件C ($a)追加C ($h2),将路径信息P ($a)=/ book / section / p保存于P。并且,制约条件取得部28将$a保存于L和T (步骤S36 ?S38,S44)。
[0140]接着,制约条件取得部28由于N为空,因此从L取得变量$a,取得将$a作为输入的语句L13、L15(步骤S36,S32?S35)。制约条件取得部28由于N的开头的要素L13是比较式,因此对L13的输出变量$b的制约条件追加变量$a的制约条件C ($a) Λ (Contains($a,“XML”))。并且,制约条件取得部28将$b追加至L和T (步骤S36?S40, S46)。
[0141]接着,制约条件取得部28由于N的开头要素L15是声明函数的return语句,因此取得调用源的语句L20的输出变量$」,对$」的制约条件C ($j)追加C ($a)。接着,制约条件取得部28对L和T追加$ j (步骤S36?S42,S48)。
[0142]接着,制约条件取得部28由于N为空,因此从L取得变量$j,取得将$j作为输入的语句L25 (步骤S36,S32?S35)。接着,制约条件取得部28由于N的开头的L25不满足步骤S37?S43中的任一条件,因此再次从L取得变量$b并删除,取得将$b作为输入的语句L14 (步骤S36?S43,S36,S32?S35)。接着,制约条件取得部28由于L14为where语句,因此将$b追加至W (步骤S36?S43,S49)。
[0143]接着,制约条件取得部28由于N为空,因此从L取得变量$hl,取得将$hl作为输入的语句L2并保存于N (步骤S36,S32?S35)。接着,制约条件取得部28由于N的开头的L2是结构条件,因此对输出变量$x的制约条件C ($x)追加C ($hl),将路径信息P ($x)=/ book / author保存于P。并且制约条件取得部28将$x保存于L和T (步骤S36?S38, S44)。
[0144]接着,制约条件取得部28由于N为空,因此从L取得变量$x并删除,取得将$x作为输入的语句L3、L4、L9 (步骤S36,S32?S35)。
[0145]接着,制约条件取得部28由于N的开头的L3为结构条件,因此对输出变量$u的制约条件C ($u)追加C ($x),将路径信息P ($u) = / book / author / last保存于P。并且,制约条件取得部28将$u保存于L和T (步骤S36?S38,S44)。
[0146]接着,制约条件取得部28由于N的开头的L4是结构条件,因此对输出变量$v的制约条件C ($v)追加C ($x),将路径信息P ($v) = / book / author / first保存于P。并且,制约条件取得部28将$v保存于L和T (步骤S36?S38,S44)。
[0147]接着,制约条件取得部28由于N的开头的L9是声明函数的return语句,因此取得调用源的语句L19的输出变量$1,对$1的制约条件C ($i)追加C (Sx)0接着,制约条件取得部28对L和T追加$i (步骤S36?S42,S48)。
[0148]接着,制约条件取得部28由于N为空,因此从L取得变量$i,取得将$i作为输入的语句L24 (步骤S36,S32?S35)。接着,制约条件取得部28由于L24是and运算,因此将输出变量Sn追加至L和T (步骤S36~S41,S47)。
[0149]接着,制约条件取得部28由于N为空,因此从L取得$n并删除。制约条件取得部28由于$n存在于T,因此再次返回到L,从L取得$v并删除,取得将$v作为输入的语句L6并保存于N (步骤S36,S32~S34,S32~S35)。
[0150]接着,制约条件取得部28由于N的开头的要素L6是比较式,因此对L6的输出变量$2的制约条件追加变量$V的制约条件C ($v)A($v=“Dan”)。并且,制约条件取得部28将$z追加至L和T (步骤S36~S40, S46)。
[0151]接着,制约条件取得部28由于N为空,因此从L取得变量$z,取得将$z作为输入的语句L7 (步骤S36,S32~S35)。接着,制约条件取得部28由于L7为and运算,因此将输出变量$w追加至L和T (步骤S36~S41,S47)。
[0152]接着,制约条件取得部28由于N为空,因此从L取得变量$?,取得将$w作为输入的语句L8 (步骤S36,S32~S35)。接着,制约条件取得部28由于L8为where语句,因此将$z追加至W (步骤S36~S43,S49)。
[0153]接着,制约条件取得部28由于N为空,因此从L取得变量$u,取得将$u作为输入的语句L5 (步骤S36,S32~S35)。接着,制约条件取得部28由于N的开头的要素L5是比较式,因此对L5的输出变量$y的制约条件追加变量$u的制约条件C($uM ($u =“Suciu”)。并且,制约条件取得部28将$y追加至L和T (步骤S36~S40,S46)。
[0154]接着,制约条件取得部28由于N为空,因此从L取得变量$y并删除,取得将$y作为输入的语句L7 (步骤S36,S32~S35)。接着,制约条件取得部28由于L7为and运算,因此将输出变量$w追加至L和T (步骤S36~S41,S47)。
[0155]接着,制约条件取得部28由于N为空,因此从L取得$?并删除。由于$w存在于T,因此再次返回到L (步骤S3 6,S32~S34)。接着,制约条件取得部28由于L为空,因此使从输入向输出的制约条件取得处理结束。制约条件取得部28输出包含变量$n、$b、$w的列表W、图13所示制约信息列表C、图14所示路径信息列表P、图15所示制约条件取得对象变量列表T,并返回至图10的步骤S24。
[0156]接着,制约条件取得部28将W、C、P、T作为输入,进行从输出向输入的制约条件取得处理(步骤S25)。
[0157]在此,关于步骤S25,用图12详细地叙述。制约条件取得部28首先接受W、C、P、T作为输入,准备空的列表F、V (步骤S71)。
[0158]接着,制约条件取得部28从W的最后尾取出$w并从W删除,取得将$w作为输出的语句[L7]和保存了变量$y、$z的列表V (步骤S72~S73)。接着,制约条件取得部28由于语句[L7]是具有参数的and运算并且两个输入变量$y、$z都存在于T,因此在W中保存 $y、$z (步骤 S74, S75, S81 ~S86)。
[0159]接着,制约条件取得部28从W取出$z并从W删除,取得将$2作为输出的语句[L6]和保存了变量的列表V (步骤S72~S73)。接着,制约条件取得部28由于语句[L6]不是and运算,因此取得输入变量$v,从V删除变量$v。制约条件取得部28由于$v存在于T,因此对制约条件C ($v)追加C ($z)0此时,C ($z)展开成图13的[13]的“=”右侧的形式并被追加,因此展开为C ($v) = C ($v) Λ($ν = “Dan”),并且展开为C ($v) =($v= “Dan”)。接着,制约条件取 得部2 8将$¥追加至W (步骤S73~S78)。接着,制约条件取得部28由于$v不是起点语句的输出变量或声明函数的输入变量并且V为空,因此返回到步骤 S72 (步骤 S79,S74)。
[0160]接着,制约条件取得部28从W取得变量$v并将其从W删除,取得将$v作为输出的语句[L4]和保存了变量$x的列表V (步骤S72?S73)。接着,由于语句[L4]是and运算,因此取得输入变量$x。由于$x存在于T,因此对制约条件C ($x)追加C ($v)0此时,将C ($v)展开并追加,因此展开为C ($x)= C ($hl)A($v =“Dan”)。并且,制约条件取得部28对W追加$x,返回到步骤72 (步骤S74?S79,S74)。
[0161]接着,制约条件取得部28从W取得变量$x并将其从W删除,取得将$x作为输出的语句[L2]和保存了变量$hl的列表V (步骤S72?S73)。[L2]将C ($x)并追加至C($hl),作为C ($hl) = C ($h) Λ($ν =“Dan,,)。并且,制约条件取得部28对W追加$hl。制约条件取得部28由于$hl是声明函数的输入变量,因此将$hl追加至F,返回到步骤72(步骤 S74 ?S80,S74)。
[0162]接着,制约条件取得部28从W取得变量$hl并将其从W删除,由于不存在将$hl作为输出的语句,因此返回到步骤72 (步骤S72?S74)。
[0163]接着,制约条件取得部28从W取得变量$y并将其从W删除,取得将$y作为输出的语句[L5]和保存了变量$u的列表V (步骤S72?S73)。接着,由于语句[L5]不是and运算,因此取得输入变量$u。由于$u存在于T,因此对制约条件C ($u)追加C ($y)0此时,将C ($y)展开并追加至C ($u),因此成为C ($u) = C ($χ) Λ ($u =“Suciu”)。并且,制约条件取得部28对W追加$u,返回到步骤72 (步骤S74至?S79,S74)。
[0164]接着,制约条件取得部28从W取得变量$u并将去从W删除,取得将$u作为输出的语句[L3]和保存了变量$x的列表V (步骤S72?S73)。接着,由于语句[L3]不是and运算,因此取得输入变量$x。由于$x存在于T,因此对制约条件C($x)追加C($u)。此时,由于将 C ($u)展开并追加,因此成为 C ($x) = C ($hl) Λ ($v =“Dan”)Λ ($u =“Suciu,,)。并且,制约条件取得部28对W追加$x,返回到步骤72 (步骤S74?S79,S74)。
[0165]接着,制约条件取得部28从W取得变量$x并将其从W删除,取得将$x作为输出的语句[L2]和保存了变量$hl的列表V (步骤S72?S73)。接着,由于语句[L2]不是and运算,因此取得输入变量$hl。由于$hl存在于T,因此对制约条件C ($hl)追加C ($x)0此时,将 C ($x)展开并追加,因此成为 C ($hl)= C ($h)A ($v =“Dan”)A ($u =“Suciu”)。并且,制约条件取得部28对W追加$hl。由于$hl是声明函数的输入变量,因此将$hl追加至F,返回到步骤72 (步骤S74?S80,S74)。
[0166]接着,制约条件取得部28从W取得变量$b并将其从W删除,取得将$b作为输出的语句[L13]和保存了变量$a的列表V (步骤S72?S73)。接着,语句[L13]不是and运算,因此取得输入变量$a。由于$a存在于T,因此对制约条件C (a)追加C ($b)。此时,将C ($b)展开并追加,因此成为 C ($a) = C ($h2) Λ (contains ($a,“XML”))。并且,制约条件取得部28对W追加$a,返回到步骤72 (步骤S74?S79,S74)。
[0167]接着,制约条件取得部28从W变量取得$a并将其从W删除,取得将$a作为输出的语句[L12]和保存了变量$h2的列表V (步骤S72?S73)。接着,由于语句[L12]不是and运算,因此取得输入变量$h2。由于$h2存在于T,因此对制约条件C (h2)追加C ($a)。此时由于将C ($a)展开并追加,因此成为C ($h2)=C ($h) Λ (contains ($a,“XML,,))。并且,制约条件取得部28对W追加$h2,对F追加$a,返回到步骤72 (步骤S74~S80,S74)。
[0168]接着,制约条件取得部28从W变量取得$h2并将其从W删除,由于不存在将$h2作为输出的语句,因此返回到步骤72 (步骤S72~S74)。
[0169]接着,制约条件取得部28从W取出$n并将其从W删除,取得将$n作为输出的语句[L24]和保存了变量$1、$m的列表V (步骤S72~S73)。接着,制约条件取得部28由于语句[L24]是具有参数的and运算并且两个输入变量$1、$m都存在于T,因此对W保存$1、$m (步骤 S74, S75, S81 ~S86)。
[0170]接着,制约条件取得部28从W取出$m并将其从W删除,取得将$m作为输出的语句[L23]和保存了变量$k的列表V (步骤S72~S73)。接着,由于语句[L23]不是and运算,因此取得输入变量$k。由于$k存在于T,因此对制约条件C ($k)追加C ($y)。此时由于将C ($m)展开并追加,因此成为C ($k)=C ($h)A C ($k<= 1999)。并且,对W追加$k,返回到步骤72 (步骤S74~S79,S74)。
[0171]接着,制约条件取得部28从W取得变量$1^并将其从W删除,取得将$1^作为输出的语句[L21]和保存了变量$h的列表V (步骤S72~S73)。接着,由于语句[L21]不是and运算,因此取得输入变量$h。由于$h存在于T,因此对制约条件C ($h)追加C ($k)。此时,由于将C ($k)展开并追加,因此成为C ($h) = C ($g) Λ C ($k <= 1999)。并且,制约条件取得部28对W追加$h,返回到步骤72 (步骤S74~S79,S74)。
[0172]接着,制约条件取得部28从W取得变量$h并将其从W删除,取得将$h作为输出的语句[L18]和保存了变量$g的列表V (步骤S72~S73)。接着,由于语句[L18]不是and运算,因此取得输入 变量$g。由于$g存在于T,因此对制约条件C ($g)追加C ($h)。此时由于将C ($h)展开并追加,因此成为C ($g)= C ($k<= 1999)。并且,对W追加$g。制约条件取得部28由于$8是起点语句的输出变量,因此将$11追加至F,返回到步骤72 (步骤 S74 ~S80,S74)。
[0173]接着,制约条件取得部28从W取得变量$g并将其从W删除,取得将$g作为输出的语句[L17]和空的列表V (步骤S72~S73)。制约条件取得部28由于V为空因此,返回到步骤72 (步骤S74)。
[0174]接着,制约条件取得部28从W取出$i并将其从W删除,取得将$1作为输出的语句[L19]和保存了变量$h的列表V (步骤S72~S73)。接着,由于语句[L19]不是and运算,因此取得输入变量$h。由于$h存在于T,因此对制约条件C ($h)追加C ($i)0此时,由于将C ($i)展开并追加,因此成为C ($h) = C ($g) Λ C ($k <= 1999) Λ C ($u =“Suciu”)Λ C ($v = “Dan”)。并且,制约条件取得部28对W追加$h,返回到步骤72 (步骤 S74 ~S79,S74)。
[0175]接着,制约条件取得部28从W取得变量$h并将其从W删除,取得将$h作为输出的语句[L18]和保存了变量$g的列表V (步骤S72~S73)。接着,由于语句[L18]不是and运算,因此取得输入变量$g。由于$g存在于T,因此对制约条件C ($g)追加C ($h)0此时由于将C ($h)展开并追加,因此成为C ($g) = C ($k <= 1999) Λ C ($u = “Suciu”)Λ C ($v =“Dan”)。并且,制约条件取得部28对W追加$g。由于$g是起点语句的输出变量,因此将$h追加至F,返回到步骤72 (步骤S74~S80,S74)。
[0176]接着,制约条件取得部28从W取得变量$g并将其从W删除,取得将$g作为输出的语句[L17]和空的列表V (步骤S72~S73)。制约条件取得部28由于V为空,因此返回到步骤72 (步骤S74)。
[0177]接着,制约条件取得部28由于W为空,因此,展开在F中登记了的三个变量$x、$a、$h的制约条件C ($x)、C ($a)、C ($h),知道仅成为比较条件为止。C ($g)仅变为比较条件,因为通过传播该条件而仅成为比较条件(步骤S72,S87)。以上,使从输出向输入的制约条件取得处理结束。将包含变量$x、$a、$h的列表F和图16所示制约信息列表C、图14所示路径信息列表P输出,返回到图10的步骤S25。
[0178]接着,制约条件取得部28将在S25获得的制约信息列表C、路径信息列表P的要素分别追加至CA、PA。由于CA、PA是空列表,因此与C、P 一致(步骤S26)。
[0179]接着,制约条件取得部28由于R为空,因此使制约条件取得处理(步骤S22)。输出包含变量$x、$a、$h的列表F、图16所示制约信息列表CA、图14所示路径信息列表PA,返回到图8的步骤S3。
[0180]制约条件取得部28的制约条件取得处理结束时,接着,句子结构解析树改写处理部29接受制约条件取得处理的输出,进行基于制约条件的句子结构解析树改写处理(步骤S4)。句子结构解析树改写处理部29以如下方式进行改写:为了在X Query的处理的最初实施而使所获得的制约条件移动,并且,在制约条件的原来的位置,取得通过移动了的式子获得的要素的集合与从最上位起对结构化文档搜索来的要素的集合的ID之积,由此取得与改写前相同的结果。参照图17~图18对句子结构解析树改写处理部29的改写处理的一例进行说明。
[0181]图17是在图18的流程图中利用的改写用的模板的一例。图17具有“模板名(^>7° >—卜名)”、“基准模板(~'一;^ f >71—卜)”、“参数”的项目。“模板名”是唯一地指定模板的名字。“基准模`板”是作为制作的语句的基准的模板,[Al~[E]是能够变更的参数部分。[参数]是对填入到基准模板中的值的内容进行记述的地方,以“[F]:G”的格式记述多个。[F]是基准模板中的与[A]~[E]相应的场所的名字,G对代入到该[F]的值进行了说明。在图17中,TPl的模板对在基准模板中以“declare variable”开始的两个声明变量的语句进行记述。以[]包围的部分是与[Y]相对的过滤条件的X Query的语法。[$X] / fn:root (.)是对于保存于$X的各要素取得结构化文档的最上位的文档要素的函数。TPl被交付比较条件式d作为输入,将d中记述的变量$e的结构条件P ($e)、d内的比较运算符、d内的比较常量分别作为[Y]、[Z]、[V]来对待。TP2的模板由一个let语句构成,$ [X] intersects [Y]是使$ [乂]和$ [Y]的各要素集合的集合积保留的运算。TP3的模板由一个let语句构成,是对于输入列表E的各要素[$e [I]...$e [η]]全部,通过intersect运算使集合积保留的语句。Σ表现i从2起到η为止的重复。ΤΡ4的模板是在语句的途中埋入的过滤表现,对于在位于ΤΡ4左的变量中保存的各要素,取得结构化文档的最上位的文档要素,使$ [X]和集合积保留。
[0182]图18是表示句子结构解析树改写的流程的流程图。句子结构解析树改写处理部29首先接受作为输入被赋予的改写对象变量列表F、与F内的变量相对的制约信息列表C、路径信息列表P,准备空的列表A、B、D、E。(步骤SlOl )。接着,句子结构解析树改写处理部29判断P是否为空(步骤S102)。
[0183]P不为空时(步骤S102:否),句子结构解析树改写处理部29取得P的开头的要素即路径式子P ($1)并将其从P中删除(步骤S103)。接着,判断$1是否存在于F (步骤S104)。
[0184]$1存在于F时(步骤S104:是),句子结构解析树改写处理部29从C取得$1的制约条件C ($1)(步骤S105)。接着,句子结构解析树改写处理部29判断在A内是否存在制约条件与C ($1)—致的变量(步骤S106)。
[0185]A内不存在制约条件与C ($1) —致的变量时(步骤S106:否),句子结构解析树改写处理部29将$1追加至A,取得将在C ($1)内的列表B不存在的条件汇集的列表D。接着,句子结构解析树改写处理部29将D的全部要素取到B中(步骤S107)。
[0186]接着,取得D的开头的要素d,句子结构解析树改写处理部29从D删除d (步骤S108)。句子结构解析树改写处理部29对图18的模板TPl的参数应用条件d作为输入并追加至查询。接着,句子结构解析树改写处理部29将记述了 d的语句置换为应用于图18的模板TP2的语句(步骤S109)。接着,句子结构解析树改写处理部29判断D是否为空(步骤 S110)。
[0187]D为空时(步骤SllO:是),句子结构解析树改写处理部29判断E的要素数是否为2以上(步骤S111)。
[0188]E的要素数为2以上时(步骤SI 11:是),句子结构解析树改写处理部29对图18的模板TP3作为参数应用列表E作为输入并追加到查询中。将追加后的结果的输出变量作为$3 (步骤S112)。接着,句子结构解析树改写处理部29移动到步骤S113,继续进行处理。
[0189]另一方面,E的要素数为I时(步骤SI 11:否),句子结构解析树改写处理部29将E的开头要素作为$3 (步骤S116)。接着,句子结构解析树改写处理部29移动到步骤S113,继续进行处理。
[0190]接着,句子结构解析树改写处理部29取得输出$1的式子c (步骤S113)。接着,句子结构解析树改写处理部29判断式子c的输入变量$4是否为起点语句的输出变量(步骤 S114)。
[0191]另一方面,式子c的输入变量$4为起点语句的输出变量时(步骤S114:是),句子结构解析树改写处理部29将$4改写为$3(步骤S115)。接着,移动到步骤S118,继续进行处理。
[0192]另一方面,式子c的输入变量$4不是起点语句的输出变量时(步骤S114:否),句子结构解析树改写处理部29在图18的模板TP4中对参数应用$3作为输入,追加到式子c的输入变量$4之后(步骤SI 17)。接着,移动到步骤S118,继续进行处理。
[0193]接着,使E为空(步骤S113),句子结构解析树改写处理部29返回到步骤S102,继续进行接下来的处理。
[0194]另一方面,D不为空时(步骤SI 10:否),句子结构解析树改写处理部29返回到步骤S108,继续进行接下来的处理。
[0195]另一方面,A内存在制约条件与C ($1)—致的变量时(步骤S106:是),句子结构解析树改写处理部29返回到步骤S102,继续进行接下来的处理。
[0196]另一方面,$1不存在于F时(步骤S104:否),句子结构解析树改写处理部29返回到步骤S102,继续进行接下来的处理。
[0197]另一方面,步骤S102的判断中P为空时(步骤S102为是),句子结构解析树改写处理部29使句子结构解析树改写处理结束。
[0198]在此,参照图17?图18对用包含变量$x、$a、$h的列表F、图16所示制约信息列表C、图14所示路径信息列表P进行句子结构解析树改写处理时的处理的概要进行说明。
[0199]首先,句子结构解析树改写处理部29接受包含变量$x、$a、$h的列表F、图16所示制约信息列表C、图14所示路径信息列表P作为输入,准备A、B、D、E作为空的列表(步骤SlOD0接着,句子结构解析树改写处理部29从P的开头接受P ($h),并将其从P中删除(步骤 S102 ?S103)。
[0200]接着,句子结构解析树改写处理部29因为$h存在于F,所以取得$h的制约条件C($h)(步骤 S104,步骤 S102 ?S105)。
[0201]接着,由于列表A为空,因此句子结构解析树改写处理部29对A追加C ($h)的制约条件($k < = 1999)、($v = “Dan”)、($u = “Suciu”),由于列表 B 为空($k < = 1999),因此取得将($v =“Dan,,)、($u = “Suciu”)作为要素的列表D (步骤S106?S107)。
[0202]接着,句子结构解析树改写处理部29取得D的开头的要素($k <= 1999)并将其从D中删除(步骤S108)。接着,句子结构解析树改写处理部29对图17的TPl交付($k< =1999)作为输入,对查询追加两个声明变量的语句。TPl的[Y]被代入$k的路径信息P($k)的结构条件“ / book / @ year”,[Z]被代入比较运算符“< = ”,[V]被代入值“1999”,[X]、[W]中以避免被至此出现的变量名覆盖的方式代入新变量$1、$1—root。追加后的语句与图19的[L1]、[L2]相应。接着,句子结构解析树改写处理部29将$1 —root追加至列表E。并且,句子结构解析树改写处理部29对图17的TP2交付($k<= 1999)作为输入,改写记述有$k <= 1999的语句。TP2的[X]被代入保存条件$k <= 1999的变量$m,[Y]被代入$k,$z被代入$1。图9的[L23]被改写为图19的[L33](步骤S108?S109)。
[0203]接着,关于D的剩余的要素($v = “Dan”)、($u = “Suciu”),也同样地应用步骤S109的处理。对($v = “Dan”)应用了 TPl的结果与图19的[L3]、[L4]相应,应用了 TP2的结果与图19的[L16]相应。另外,对($u =“Suciu”)应用了 TPl的结果与图19的[L5]、[L6]相应,应用了 TP2的结果与图19的[L15]相应。E被追加$2 — root、$3 — root (步骤 S110,步骤 S108 ?S109)。
[0204]接着,由于D为空并且E的要素数为3,因此句子结构解析树改写处理部29对图17的TP3交付列表E作为输入,追加一个声明变量的语句。TP3的[η]被代入E的要素数
3,e [I]到e [3]被代入E的各要素$1—root、$2 — root、$3 — root, [X]被代入避免被至此出现的变量名覆盖的方式代入新变量$4 —root。应用了 TP3的结果与图19的[L9]相应(步骤SllO?S112)。
[0205]接着,由于输出$h的式子与图9的[L18]相应并且[L18]的输入变量$g是起点语句的输出变量,因此句子结构解析树改写处理部29将$g改写为$4 —root。改写后的结果与图19的[L28]相应(步骤S113?S115)。
[0206]接着,句子结构解析树改写处理部29使E为空,从P的开头取出P ($k)(步骤S118,S102?S103)。由于P ($k)及P ($1)的变量$k、$1不存在于F,因此跳出处理(步骤S104,S102?S103)。接着,句子结构解析树改写处理部29从P的开头接受P ($a)并从P删除(步骤S104)。
[0207]接着,句子结构解析树改写处理部29因为$a存在于F,所以取得$a的制约条件C($a)(步骤 S104 ?S105)。
[0208]接着,A内的变量$h的制约信息C ($h)与C ($a)不一致,因此句子结构解析树改写处理部29对A追加$a。接着,句子结构解析树改写处理部29取得将C ($a)内的B中不存在的条件(Contains ($a,“XML”))作为要素的列表D。接着,句子结构解析树改写处理部29将D的要素即条件(Contains ($a,“XML”))追加至B (步骤S106?S107)。
[0209]接着,句子结构解析树改写处理部29取得D的开头的要素(Contains($a,“XML”))并将其从D删除(步骤S108)。接着,句子结构解析树改写处理部29对图17的TPl交付(Contains ($a,“XML”))作为输入,对查询追加两个声明变量的语句。TPl的[Y]被代入$a的路径信息P($a)的结构条件“ / book / section / p”, [Z]被代入比较运算符“contains()”,[V]被代入值“ ‘XML’ ”,[X]、[W]以避免被至此出现的变量名覆盖的方式被代入新变量$5、$5 —root。追加后的语句与图19的[L8]、[L9]相应。接着,句子结构解析树改写处理部29将$5 _ root追加至列表E。并且,句子结构解析树改写处理部29对图17的TP2交付(Contains ($a,“XML”))作为输入,对记述有(Contains ($a,“XML”))的语句进行改写。TP2的[X]被代入保存(Contains ($a,“XML,,))的变量$b,[Y]被代入$a,$z被代入$5。图9的[L13]被改写为图19的[L23](步骤S108?S109)。
[0210]接着,D为空并且E的要素数为1,因此句子结构解析树改写处理部29由于输出$a的式子取得图9的[L12]并且[L12]的输入变量$h2不是起点语句的输出变量,因此对图17的TP4交付$5 —root作为输入,将所获得的式子追加至图9的[L12]的输入变量$h2之后。TP4的[X]被代入变量$5 —root,追加的式与图19的[L22]相应(步骤SllO?Slll,S116, S113 ?S114,S117)。
[0211]接着,句子结构解析树改写处理部29使E为空,从P的开头接受P ($x)并将其从P中删除(步骤S104)。
[0212]接着,句子结构解析树改写处理部29因为$x存在于F,所以取得$x的制约条件C($x)(步骤 S104 ?S105)。
[0213]接着,句子结构解析树改写处理部29由于A内的变量$h的制约信息C ($h)与C($x) 一致,因此返回到步骤S102,从P的开头接受P ($u)并将其从P中删除(步骤S106,S102?S103)。P ($u)及残留于P的P ($v)的变量$u、$v都不存在于F,因此返回到步骤S102。由于P变为空,因此使句子结构解析树改写处理结束(步骤S104,S102?S104,S102)。将图19的X Query作为句子结构解析树输出,返回到图8的步骤S4。
[0214]句子结构解析树改写部29的句子结构解析树改写处理结束时,改写过的句子结构解析树被输出。句子结构解析树以能够再现X Query的语法的形式来表现。接着,通过查询执行部30,进行执行改写过的句子结构解析树在此为X Query处理(步骤S5)。被改写后也保持X Query的形式,因此查询执行处理能够以任意的X Query处理系统执行。
[0215]查询执行部30的查询执行处理结束时,最后通过检索接口部26,查询执行部30的输出作为结果数据返送至客户终端3 (步骤S6)。
[0216]图20是对于图4?图6的结构化文档装置内的文档集合执行将图7所例示的XQuery改写后的图19的X Query的结果。通过[LI]?[L6]及[L9],最初在结构化文档集合中作为满足制约条件的对象,仅对图4、图5的结构化文档筛选对象。对于筛选过的结构化文档,从[L27]起实施处理。并且,满足[L15]?[L17]的结构化文档仅成为图4。为此,结果是,作为将图4的< title >、< author >要素及满足[L24]条件的图4内的< p >要素组合后的XML而输出。
[0217]以上,如举出具体的例子说明那样,根据本实施方式,服务器I将结构化文档数据保存于结构化文档DB21。另外,服务器I在结构化文档数据的检索时,对来自客户终端3的输入查询数据进行句子结构解析,将输入查询数据生成一个语句由单一的运算式构成的句子结构解析树,按从输入向输出、从输出向输入的方向对所获得的句子结构解析树进行搜索,由此取得与对象结构化文档集合有关的制约条件。以构成制约条件的各条件的层次结构互不依存的方式来缓和条件。由此,在对所获得的制约条件进行改写时,能够简单地以互相独立的形式作为声明变量来记述。取与改写前的输入变量和要素的ID有关的积,由此缓和后的条件能够取得与原来的条件相同的结果。通过这种改写,能够改写为在包含嵌套查询的这种复杂的X Query中,也能够在较早的阶段对成为对象的结构化文档集合进行筛选。并且,在要求严密条件时,通过取要素的ID的积,从而能够避免对相同的条件式进行二次评价。为此,对于早期筛选过的结构化文档集合实施X Query的处理即可,因此能够高速地执行检索。
[0218]此外,在实施方式中,按使改写结果与输入相同的查询的语法进行改写,但本提案并不限定于此。例如即使是改写为结构化文档检索装置生成执行计划所用的内部形式的形式,也能够应用,此时使缓和了的制约条件的执行顺序包含JOIN (结合运算)、0RDERBY (分类运算)的查询整体的最优化是可能的。另外,取得结构化文档的最上位要素并通过在XQuery的句子结构中存在的INTERSECT运算,记述了筛选,但本提案并不限定于此。例如如专利文献2那样、将结构化文档的要素列表作为输入,并准备仅对于在列表内存在的结构化文档实施运算的函数,因此即使不利用INTERSECT运算也能够实现同等的功能。
[0219]另外,在实施方式中,为了无视构成制约条件的各条件间产生的结构化文档内的层次结构的依存关系而进行了缓和,但本提案并不限定于此。例如也可以将无视依存关系的结构条件仅限定为一部分层次结构条件。另外,也可以将层次结构条件的亲子关系缓和为祖先子孙关系或,以指定任意的要素名的方式进行缓和。并且,作为用于缓和制约条件的信息,也可以使用XML的概要信息即DTD、XML SCHEMA的利用等。
[0220]并且,在实施方式中,作为指定多个条件的运算符,仅关于and条件进行了记述,但本提案并不限定于此。通过使制约条件与or对应,由此对于包含or条件的情况,也能够进行同样地处理。
[0221]以上说明了的实施方式中的服务器I的功能例如通过计算机的运算装置即CPUlOl执行作为应用程序安装的结构化文档管理程序来实现。
[0222]实施方式中的服务器I执行的结构化文档管理程序例如以能够安装的形式或能够执行的形式的文件记录于CD-ROM、软盘(FD)、CD-R、DVD (Digital Versatile Disc)等计算机可读取的记录介质110来提供。
[0223]另外,也可以构成为将实施方式中的服务器I执行的结构化文档管理程序保存于与因特网等网络2连接的计算机上,经由网络2中转下载从而提供。另外,也可以构成为经由因特网等网络2中转来提供或发布实施方式中的服务器I执行的结构化文档管理程序。并且,也可以构成为将实施方式中的服务器I执行的结构化文档管理程序预先装入R0M102等来提供。[0224]第一实施方式中的服务器I执行的结构化文档管理程序为包含保存接口部24、检索接口部26、句子结构解析部27、制约条件取得部28、句子结构解析树改写部29、查询执行部30等的模块构成,作为实际的硬件,CPU (处理器)101从HDD104等读出并执行结构化文档管理程序,由此上述各部被装载到主存储装置(例如RAM103)上,在主存储装置上生成保存接口部24、检索接口部26、句子结构解析部27、制约条件取得部28、句子结构解析树改写部29、查询执行部30等。
[0225]通过以上所述的实施方式涉及的结构化文档管理系统,对输入查询数据进行句子结构解析,提取结构化文档内的要素的层次结构条件和值的条件作为制约条件。此时对结构化文档的要素满足的层次条件进行缓和,将条件缓和为也包含通过原来的层次条件未获得的要素的形式。为此,能够以缓和了的条件能够在嵌套子查询间移动的形式进行改写。缓和了的条件应用取要素识别符的积集合的谓语条件,从而为了取得与原来的条件相同的结果而进行改写。由此,能够早期地应用对结构化文档集合的筛选,因此能够高速地执行检索。
[0226]此外,对本发明的几个实施方式进行说明,但这些实施方式作为例子表示,无意限定发明的范围。这些新的实施方式能够通过其他各种方式实施,在不脱离发明的主旨的范围内,能够进行各种省略、置换、变更。这些实施方式及其变形包含于发明的范围及要旨,并且包含于权利要求书所记载的发明及其均等的范围内。
[0227]符号说明
[0228]I服务器
[0229]24保存接口部
[0230]26检索接口部
[0231]27句子结构解析部
[0232]28制约条件取得部
[0233]29句子结构解析树改写部
[0234]30查询执行部
【权利要求】
1.一种结构化文档管理装置,包括: 结构化文档受理部,受理具有层次化后的逻辑结构的结构化文档的输入; 结构化文档存储部,存储所输入的所述结构化文档数据; 查询数据受理部,受理查询数据的输入; 句子结构解析部,解析所输入的查询数据的句子结构,取得句子结构解析树,该句子结构解析树是以成为定义成各变量仅被代入一次的静态单赋值的方式所分解的句子结构解析树; 制约条件取得部,从由所述句子结构解析部获得的句子结构解析树,取得制约条件,该制约条件包含各句子结构解析树的变量需要满足的层次条件及变量的值的条件; 句子结构解析树改写部,基于由所述制约条件取得部获得的制约条件,将所述查询数据改写为通过所述制约条件能够对作为对象的所述结构化文档进行筛选的形态;以及查询执行部,将由所述句子结构解析树改写部改写过的所述查询数据作为输入,输出检索结果。
2.如权利要求1所述的结构化文档管理装置, 所述制约条件取得部对所述制约条件追加所述变量需要满足的层次条件和由同一要素名规定的其他的层次 条件, 所述句子结构解析树改写部,基于追加过的所述制约条件改写所述查询数据时,对于所述制约条件,附加能够求出与追加其他层次条件之前的制约条件相同的结果的其他条件。
3.如权利要求1所述的结构化文档管理装置, 所述句子结构解析树改写部使基于由所述制约条件取得部获得的所述制约条件的改写结果为与原来的查询数据相同的语法格式。
4.一种结构化文档管理方法, 受理具有层次化后的逻辑结构的结构化文档的输入, 存储所输入的所述结构化文档数据, 受理查询数据的输入, 解析所输入的查询数据的句子结构,取得句子结构解析树,该句子结构解析树是以成为定义成各变量仅被代入一次的静态单赋值的方式所分解的句子结构解析树, 从所述句子结构解析树,取得制约条件,该制约条件包含各句子结构解析树的变量需要满足的层次条件及变量的值的条件, 基于所述制约条件,将所述查询数据改写为通过所述制约条件能够对作为对象的所述结构化文档进行筛选的形态, 将所述改写过的所述查询数据作为输入,输出检索结果。
5.一种结构化文档管理程序,用于使计算机执行以下各部: 结构化文档受理部,受理具有层次化后的逻辑结构的结构化文档的输入; 结构化文档存储部,存储所输入的所述结构化文档数据; 查询数据受理部,受理查询数据的输入; 句子结构解析部,解析所输入的查询数据的句子结构,取得句子结构解析树,该句子结构解析树以成为定义成各变量仅被代入一次的静态单赋值的方式所分解的句子结构解析树; 制约条件取得部,从由所述句子结构解析部获得的句子结构解析树,取得制约条件,该制约条件包含各句子结构解析树的变量需要满足的层次条件及变量的值的条件; 句子结构解析树改写部,基于由所述制约条件取得部获得的制约条件,将所述查询数据改写为通过所述制约条件能够对作为对象的所述结构化文档进行筛选的形态;以及查询执行部,将由所述句子结构解析树改写部改写过的所述查询数据作为输入,输出检索 结果。
【文档编号】G06F17/30GK103827860SQ201280002749
【公开日】2014年5月28日 申请日期:2012年9月20日 优先权日:2012年9月20日
【发明者】黑田洋介, 服部雅一 申请人:株式会社东芝, 东芝解决方案株式会社