JP4681555B2 - ノード挿入方法、情報処理装置、および、ノード挿入プログラム - Google Patents
ノード挿入方法、情報処理装置、および、ノード挿入プログラム Download PDFInfo
- Publication number
- JP4681555B2 JP4681555B2 JP2006528509A JP2006528509A JP4681555B2 JP 4681555 B2 JP4681555 B2 JP 4681555B2 JP 2006528509 A JP2006528509 A JP 2006528509A JP 2006528509 A JP2006528509 A JP 2006528509A JP 4681555 B2 JP4681555 B2 JP 4681555B2
- Authority
- JP
- Japan
- Prior art keywords
- node
- parent
- child
- master
- nodes
- 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.)
- Expired - Fee Related
Links
Images
Classifications
-
- G—PHYSICS
- G06—COMPUTING; CALCULATING OR COUNTING
- G06F—ELECTRIC DIGITAL DATA PROCESSING
- G06F16/00—Information retrieval; Database structures therefor; File system structures therefor
- G06F16/20—Information retrieval; Database structures therefor; File system structures therefor of structured data, e.g. relational data
- G06F16/22—Indexing; Data structures therefor; Storage structures
- G06F16/2228—Indexing structures
- G06F16/2246—Trees, e.g. B+trees
Landscapes
- Engineering & Computer Science (AREA)
- Theoretical Computer Science (AREA)
- Software Systems (AREA)
- Data Mining & Analysis (AREA)
- Databases & Information Systems (AREA)
- Physics & Mathematics (AREA)
- General Engineering & Computer Science (AREA)
- General Physics & Mathematics (AREA)
- Information Retrieval, Db Structures And Fs Structures Therefor (AREA)
Description
【0001】
本発明はツリー型データ構造を取り扱う方法、特に、ツリー型データ構造にノードを挿入する方法に関する。また、本発明は、係る方法を実施する情報処理装置に関する。更に、本発明は、係る方法を実行するためのプログラム、及び、このプログラムを記録した記録媒体に関する。
【背景技術】
【0002】
データベースは種々の用途に用いられているが、中規模ないし大規模システムにおいては、論理的な矛盾が排除できるリレーショナルデータベース(RDB)の使用が主流となっている。たとえば、RDBは飛行機の座席予約等のシステムに利用されている。この場合、キー項目を指定することにより、(多くの場合1件の)ターゲットを迅速に検索することもでき、或いは、予約の確定、キャンセル或いは変更などを行うことができる。また、各便の座席数はせいぜい数百であるため、特定の航空便の空席数を求めることも可能である。
【0003】
このようなRDBは、表形式データの取り扱いに適しているが、ツリー形式データの取り扱いには適していないことが知られている(例えば、非特許文献1を参照。)。
【0004】
更に、アプリケーションの中には、表形式による表現よりもツリー形式による表現の方が適しているものが存在する。特に、近年、イントラネットやインターネットのアプリケーションのデータ標準として、ツリー型データ構造を採用するXMLが普及している(XMLの詳細については、例えば、非特許文献2を参照。)。
【0005】
しかし、ツリー型データ構造の取り扱い、例えば、ツリー形式データの検索は、一般に、大変効率が悪い。この効率の悪さの第1の理由は、データが各所のノードに分散して存在するため、データの存在すべき場所を直ちに特定することが困難である点にある。RDBでは、例えば、「年齢」というデータは、あるテーブルの「年齢」という項目だけに格納されている。しかし、ツリー型データ構造では、「年齢」というデータを保持するノードが各所に散在しているので、一般的には、ツリー型データ構造の全体を調べなければ、該当するデータを検索することができない。
【0006】
効率の悪さの第2の理由は、検索の結果を表現するために時間がかかるという点にある。検索にヒットしたノード群を表現しようとすると、屡々、そのノードの子孫にあたるノードも表現しなければならないが、RDBMSとは異なりデータ構造が非定型であるため、子孫ノードを表現するために時間がかかる。
【0007】
そこで、データベースの主流であるRDBの利点をいかすため、従来、ツリー型データ構造をデータベース化するとき、ツリー形式データをRDB化する方法(例えば、特許文献1を参照。)が提案されている。RDBでは、データはテーブル(表)に分解して保持される。そのため、実際のツリー形式データをRDB化するには、ツリー形式データをテーブルに押し込める必要がある。しかし、様々のツリー型データ構造を取り扱うためには、その構造毎に個別にデータをテーブルに押し込め、システム設計を行わなければならない。したがって、RDBに基づくシステム構築は非常に手間のかかる作業である。
【0008】
これに対して、ツリー形式データ、特に、XMLデータをそのままの形でデータベース化する方法も提案されている。ツリー型データ構造の場合、一つのノードに子孫ノードをぶら下げることができ、多様な表現が可能であるため、システム設計の手間を大幅に削減することができる。したがって、XMLのようなツリー構造を取り扱える技術を核として、ツリー形式データを処理することへのニーズが高まっている。
【0009】
XMLデータをそのままの形でデータベース化する方法の一例のアプローチは、ツリー構造に記入されているデータのコピーを取り出し、例えば、「年齢」という項目であれば、「年齢」の検索用インデックスデータを別途保持する(例えば、特許文献2を参照。)。これにより、データ自身に属性を付加できるというXMLデータのメリットを十分に活用すると共に、タグを用いて表現された各項目の関係構造をそのまま記憶できるようにしている。
【0010】
また、XML文書をツリー構造でメモリ上に展開するためのDOMと呼ばれるオブジェクトモデルのインタフェースが公開されている(例えば、非特許文献3を参照。)。
【特許文献1】
特開2003−248615号公報
【特許文献2】
特開2001−195406号公報
【非特許文献1】
株式会社セック、"Karearea White Paper"、[online]、[平成16年2月19日検索]、インターネット<URL:http://www.sec.co.jp/products/karearea/>
【非特許文献2】
W3C、"Extensible Markup Language (XML) 1.0 (Third Edition)"、[online]、2004年2月4日、[平成16年2月19日検索]、インターネット<URL:http://www.w3.org/TR/2004/REC-xml-20040204/>
【非特許文献3】
R. アラン ワイク、ブラッド ルーペン、サルタン ルーマン、「プログラミングXML」、日経DPソフトプレス、2002年、p.59−84
【発明の開示】
【発明が解決しようとする課題】
【0011】
しかし、上記の検索用インデックスデータを別途保持するようなアプローチでは、少なくともデータは二重に保持され、かつ、インデックスを作成するコスト及びインデックスを格納するためのデータ領域が必要となり、大規模なデータを保持する上で不利である。
【0012】
このようなメカニズムによって、実際に検索を行い、ノードを特定したとしても、そのノードを表現するためには時間がかかる。また、このメカニズムは、ノード間の関係を問題とする検索(例えば、祖先に「60歳」という「年齢」を含み、子孫に「1歳」という「年齢」を含むツリーの抽出)には利用できない。
【0013】
このような従来技術の根本的な問題点は、個々のデータのみに着目し、データを蓄えたノード間をポインタで接続することによりツリー型データ構造が表現されているため、データ間の関係、例えば、親子、祖先、子孫、兄弟(シブリング)、世代などの関係を効率的にトレースすることができないことにある。換言すると、ポインタは、その値が一定しないため、データの格納アドレスを示すという用途にしか使用できず、ノード間の関係を直接的に表現することができない。その結果として、従来技術では、ツリー型データ構造のトポロジーを編集すること、特に、ツリー構造型データのあるノードに子孫ノードを挿入することが困難であった。また、上記のDOMは、ツリー型データ構造のトポロジーを編集する操作のインタフェースを規定するだけであり、操作の具体的手法を規定するものではない。
【0014】
そこで、本発明は、効率的にツリー型データ構造にノードを挿入することができる方法、情報処理装置、プログラム、および、プログラムを記録した記録媒体の提供を目的とする。
【課題を解決するための手段】
【0015】
上記目的を達成するため、本発明は、ツリー型データ構造を構成するノード間の親子関係を、親ノードに子ノードを対応付ける「親→子」関係ではなく、子ノードに親ノードを対応付ける「子→親」関係によって表現するという親子関係表現に基づいて、ツリー型データ構造のマスタ側データに、ツリー型データ構造のスレイブ側データからのノードを挿入する。
【0016】
したがって、本発明によれば、ツリー型データ構造をもつマスタ側データにツリー型データ構造をもつスレイブ側データのノードを挿入するノード挿入方法は、
前記マスタ側データ及び前記スレイブ側データのそれぞれにおいて、ルート・ノードを含むノードに固有のノード識別子が付与され、前記ルート・ノード以外のノードである非ルート・ノードの各々に付与されたノード識別子に前記非ルート・ノードの各々の親ノードに付与されたノード識別子が関連付けられ、これにより、ノード間の親子関係が表現され、
当該ノード挿入方法は、
前記スレイブ側データ中のスレイブ側特定ノードの子孫ノードを特定するステップと、
前記スレイブ側特定ノードに対応した前記マスタ側データ中のマスタ側特定ノードの子孫ノードとして、前記スレイブ側特定ノードの前記子孫ノードを前記マスタ側データに挿入するステップと、
を含む。
【0017】
従来から知られている「親→子」関係によって親子関係を表現する場合、一つの親ノードに複数の子ノードが対応する場合があるので、親ノードと子ノードの二つの要素を特定しなければ親子関係を定義できない。即ち、親ノードを特定しても、その親ノードと親子関係にある子ノードを特定することができない。これに対して、本発明のように「子→親」関係によって親子関係を表現する場合、一つの子ノードには必ず唯一の親ノードが対応するので、子ノードを特定することによって、この子ノードに対応する唯一の親ノードを直ちに特定することができる。これにより、マスタ側データのマスタ側特定ノードと、スレイブ側データのスレイブ側特定データとを指定して、マスタ側特定ノードの子孫ノードとして、スレイブ側特定データの子孫ノードを挿入することができる。
[0018] 本発明の好ましい実施態様では、「子→親」表現による親子関係は、同じ世代のノードよりも子ノードを優先する深さ優先モードで、ノード識別子としてノードに付与された連続する整数の配列によって表現される。このため、好ましい実施態様にかかるノード挿入方法において、前記ノードに付与された固有のノード識別子は、同じ世代のノードよりも子ノードを優先して付与された連続する整数である。
[0019] そして、スレイブ側データのスレイブ側特定ノードの子孫ノードを、親子関係を表現する配列の連続領域によって判定し、マスタ側データと、スレイブ側特定ノードの子孫ノードと、について新たな親子関係を表現する配列を生成する。このため、より好ましい実施態様において、ノード挿入方法は、
前記マスタ側データ及び前記スレイブ側データのそれぞれにおいて、前記ノード間の親子関係は、前記非ルート・ノードの各々に付与されたノード識別子の順に、このノード識別子に関連付けられた前記親ノードに付与されたノード識別子が格納された配列によって表現され、
前記スレイブ側データ中のスレイブ側特定ノードの子孫ノードを特定するステップは、前記スレイブ側データの前記親子関係を表現する配列中の前記スレイブ側特定ノードに付与されたノード識別子に関連付けられた前記親ノードのノード識別子が格納されている位置の次の位置から、前記スレイブ側特定ノードに付与されたノード識別子の値以上の値が格納されている連続領域を抽出することにより、前記スレイブ側特定ノードの全ての子孫ノードを特定するステップを含む。
[0020] また、別の好ましい実施態様において、ノード挿入方法は、前記スレイブ側特定ノードの前記子孫ノードを前記マスタ側データに挿入するステップは、前記マスタ側データ中のノードと前記スレイブ側データ中の前記スレイブ側特定ノードの前記子孫ノードに、前記スレイブ側特定ノードの前記子孫ノードが前記マスタ側データ中の前記マスタ側特定ノードの子孫ノードに挿入される順序で、同じ世代のノードよりも子ノードを優先してノード識別子を付与し、当該ノード識別子の順に対応する親ノードのノード識別子を関連付けることにより、前記マスタ側データのノード間の親子関係を表現する配列に前記スレイブ側データ中の前記スレイブ側特定ノードの前記子孫ノードの親子関係を表現する配列が挿入された新たな親子関係を表現する配列を生成するステップを含む。
【0021】
このように、ノード識別子を連続する整数で表すことによって、ノード識別子から、そのノードに対応する親ノードのノード識別子が格納されているアドレスを簡単に取得することができるので、子ノードのノード識別子から親ノードのノード識別子を引く処理を高速化することができる。また、深さ優先で連続番号が付与されたノードの親子関係を「子→親」関係に基づいて配列表現すると、あるノードの子孫ノードが連続領域に出現するという優れた性質が得られるので、この性質を利用して、スレイブ側特定ノードの子孫ノードを特定することができる。
【0022】
さらに、好ましい実施態様においては、上記ノード挿入方法において、
前記新たな親子関係を表現する配列を生成するステップは、
前記マスタ側データのノードについて、前記マスタ側特定ノードが現れるまで、同じ世代のノードよりも子ノードを優先してノード識別子を付与し、当該ノードの当該ノード識別子に当該ノードの親ノードのノード識別子を関連付けるステップと、
前記マスタ側特定ノードにノード識別子を付与し、前記マスタ側特定ノードの子孫ノードとして、前記スレイブ側特定のノードの前記子孫ノードに、同じ世代のノードよりも子ノードを優先してノード識別子を付与し、当該子孫ノードのそれぞれにその親ノードのノード識別子を関連付けるステップと、
前記マスタ側データに未だノード識別子が付与されていない残りのノードが存在する場合、当該残りのノードについて、同じ世代のノードよりも子ノードを優先してノード識別子を付与し、当該残りのノードの当該ノード識別子に親ノードのノード識別子を関連付けるステップと、
を含む。
【0023】
これにより、新たな親子関係を表現する配列は、挿入点までの処理と、挿入点における処理と、挿入点の後の処理の3ステップで生成することができる。
[0024] また、本発明によれば、上述したようなノード挿入方法を実施する情報処理装置が提供される。
[0025] 本発明の目的は、ツリー型データ構造をもつマスタ側データ及びツリー型データ構造をもつスレイブ側データを記憶する記憶手段を含み、
前記記憶手段に記憶された前記マスタ側データ及び前記スレイブ側データのそれぞれは、ルート・ノードを含む、ノードに固有のノード識別子が付与され、前記ルート・ノード以外のノードである非ルート・ノードの各々に付与されたノード識別子に前記非ルート・ノードの各々の親ノードに付与されたノード識別子が関連付けられ、これにより、ノード間の親親子関係が表現されている、
情報処理装置であって、
前記スレイブ側データ中のスレイブ側特定ノードの子孫ノードを特定する子孫ノード特定手段と、
前記スレイブ側特定ノードに対応した前記マスタ側データ中のマスタ側特定ノードの子孫ノードとして、前記スレイブ側特定ノードの前記子孫ノードを前記マスタ側データに挿入し、新たな親子関係を表現する情報を前記記憶手段に格納するノード挿入手段と、
を含む、
情報処理装置によって達成される。
[0026] また、好ましい実施態様においては、上記情報処理装置において、前記ノードに付与された固有のノード識別子は、同じ世代のノードよりも子ノードを優先して付与された連続する整数である。
[0027] より好ましい実施態様においては、上記情報処理装置において、
前記マスタ側データ及び前記スレイブ側データのそれぞれにおいて、前記ノード間の親子関係は、前記非ルート・ノードの各々に付与されたノード識別子の順に、このノード識別子に関連付けられた前記親ノードに付与されたノード識別子が格納された配列によって表現され、
前記子孫ノード特定手段は、前記スレイブ側データの前記親子関係を表現する配列中の前記スレイブ側特定ノードに付与されたノード識別子に関連付けられた親ノードのノード識別子が格納されている位置の次の位置から、前記スレイブ側特定ノードに付与されたノード識別子の値以上の値が格納されている連続領域を抽出することにより、前記スレイブ側特定ノードの全ての子孫ノードを特定する。
【0028】
また、好ましい実施態様においては、前記ノード挿入手段は、前記マスタ側データ中のノードと前記スレイブ側データ中の前記スレイブ側特定ノードの前記子孫ノードに、前記スレイブ側特定ノードの前記子孫ノードが前記マスタ側データ中の前記マスタ側特定ノードの子孫ノードに挿入される順序で、同じ世代のノードよりも子ノードを優先してノード識別子を付与し、当該ノード識別子の順に対応する親ノードのノード識別子を関連付けることにより、前記マスタ側データのノード間の親子関係を表現する配列に前記スレイブ側データ中の前記スレイブ側特定ノードの前記子孫ノードの親子関係を表現する配列が挿入された新たな親子関係を表現する配列を生成する。
【0029】
より好ましい実施態様において、
前記ノード挿入手段は、
前記マスタ側データのノードが前記マスタ側特定ノードであるかどうかを判定する手段と、
前記マスタ側データのノードが前記マスタ側特定ノードではない場合、当該ノードに同じ世代のノードよりも子ノードを優先してノード識別子を付与し、当該ノードの当該ノード識別子に当該ノードの親ノードのノード識別子を関連付ける手段と、
前記マスタ側データのノードが前記マスタ側特定ノードである場合、前記マスタ側特定ノードにノード識別子を付与し、前記マスタ側特定ノードの子孫ノードとして、前記スレイブ側特定のノードの前記子孫ノードに、同じ世代のノードよりも子ノードを優先してノード識別子を付与し、当該子孫ノードのそれぞれにその親ノードのノード識別子を関連付ける手段と、
を含む。
【0030】
また、本発明によれば、上述したようなノード挿入方法をコンピュータに実行させるためのプログラムが提供される。
【0031】
更に、本発明によれば、上記プログラムを記録した記録媒体が提供される。
【発明の効果】
【0032】
本発明によれば、ツリー型データ構造のノード間の親子関係は、「子→親」表現に基づいて記述されるので、一つのノードに対して一つの格納場所を設けることにより親子関係を定義することができる。したがって、ツリー型データ構造を操作する際にアクセスされるメモリの量が低減し、これにより、ノード挿入操作が高速化される。
【0033】
更に、本発明は、深さ優先モードでノードに番号を付与することにより、スレイブ側特定ノードの子孫ノードのブロックを容易に特定することができるので、ノード挿入操作がさらに高速化される。
【発明を実施するための最良の形態】
【0034】
以下、添付図面を参照して、本発明の実施の形態につき説明を加える。
【0035】
[コンピュータシステム構成]
図1は、本発明の実施の形態にかかるツリー型データ構造を取り扱うコンピュータシステムのハードウェア構成を示すブロックダイヤグラムである。図1に示すように、このコンピュータシステム10は、通常のものと同様の構成であり、プログラムを実行することによりシステム全体および個々の構成部分を制御するCPU12、ワークデータなどを記憶するRAM(Random Access Memory)14、プログラム等を記憶するROM(Read Only Memory)16、ハードディスク等の固定記憶媒体18、CD−ROM19をアクセスするためのCD−ROMドライバ20、CD−ROMドライバ20や外部ネットワーク(図示せず)と接続された外部端子との間に設けられたインタフェース(I/F)22、キーボードやマウスからなる入力装置24、CRT表示装置26を備えている。CPU12、RAM14、ROM16、外部記憶媒体18、I/F22、入力装置24および表示装置26は、バス28を介して相互に接続されている。
【0036】
本実施の形態にかかる、ツリー型データ構造を記憶装置上に構築するプログラム、及び、ツリー型データ構造を記憶装置上で変換するプログラムは、CD−ROM19に収容され、CD−ROMドライバ20に読取られても良いし、ROM16に予め記憶されていても良い。また、いったんCD−ROM19から読み出したものを、外部記憶媒体18の所定の領域に記憶しておいても良い。或いは、上記プログラムは、ネットワーク(図示せず)、外部端子およびI/F22を経て外部から供給されるものであっても良い。
【0037】
また、本発明の実施の形態にかかる情報処理装置は、コンピュータシステム10にツリー型データ構造を記憶装置上に構築するプログラム、及び、ツリー型データ構造を記憶装置上で変換するプログラムを実行させることにより実現される。
【0038】
[ツリー型データ構造]
図2A、Bは、ツリー形式データの一例であるPOSデータの説明図である。図2Aは、このツリー形式データのデータ構造(即ち、トポロジー)及びデータ値を視覚的に表現した一例であり、図2Bは、同じツリー形式データをXML形式で表現した一例である。図2A、Bに示されるようにツリー型データ構造は、ルート・ノード(本例では、POSデータ)から始めて、各ノードで枝分かれしてリーフ・ノード(端点)に至るノードとアークの組み合わせによって表現される。各ノードの実体的な値、例えば、店名ノードの値="フランス店"の格納場所は、店名ノードに関連したポインタで指定される。
【0039】
本発明は、ツリー型データ構造のトポロジーを対象とするため、以下の説明では、主として、ツリー型データ構造のトポロジーに関して説明する。
【0040】
従来、このようなツリー型データ構造は、データを蓄えたノード間をポインタで接続することによって表現されている。しかし、ポインタ表現は、ポインタ値に必然性がないという欠点がある。即ち、ある場合には特定のノードAがある番地(例えば、100番地)に格納され、別の場合には同じノードAが別の番地(例えば、200番地)に格納されるので、ポインタ値が一定ではなく、ポインタ値は、本質的にノードの格納アドレスを表現するに過ぎない。そのため、例えば、ノードが深さ優先の規則に従ってポインタで接続されている場合、これらのノードを幅優先の規則に従ってポインタで再接続することは困難である。
【0041】
これに対して、本発明者は、ツリー型データ構造のトポロジーがアークリストによって記述可能であることに着目した。アークリストとは、ノード間の親子関係を表すアークのリストである。図3A〜Cは、アークリストを用いたツリー型データ構造の表現形式の一例の説明図である。図3A〜Cの例では、0、10、20、30、40、50、60、70、80、90、100及び110のノード識別子(ID)が付与された12個のノードからなるツリー型データ構造が示されている。図3Aはツリー型データ構造の全体を示している。図3Aにおいて、(ノードのタイプを表している)丸形、ハート形などの図形の中央に記載された数字は、ノードIDを表し、矢印と矢印の側に記載された<0,10>などの数字の対は、アークを表している。尚、ノードIDは、文字列には限られず、数値、特に、整数でもよい。図3Bは、親ノード(From−ID)から子ノード(To−ID)へのアークリストを示し、図3Cは、ノードIDとノードTypeの対のリストからなるノードリストを示す。尚、ツリー型データ構造を表現するだけの目的のためにはノードリストが無くても構わない。原理的には、このようなアークリストを用いることによって、ノード間の関係をポインタによらずに直接的に記述することが可能である。
【0042】
[「子→親」関係に基づく表現]
図3A〜Cの例では、アークリストは、親ノードに子ノードを対応付ける「親→子」関係に基づいて記述されている。そのため、一つの親ノード、例えば、ルート・ノード0には、3個の子ノード10、60及び80が存在するため、アークリストのFrom−IDには、同じノードIDの0が3回出現している。つまり、親ノードを特定しても子ノードを特定することができないので、アークリストは、要素From−IDの配列と要素To−IDの配列により構成される。アークリストを使用する場合、あるノードは、From−IDの配列と、To−IDの配列の両方の配列に出現する。
【0043】
これに対して、親子関係は、「子→親」関係によっても表現することが可能である。この場合、ノード間の親子関係は、ルート・ノード以外のノードである非ルート・ノードの各々と、関連付けられた親ノードと、の組の配列によって表現される。この「子→親」関係によって親子関係を表現する場合、「親→子」関係の場合には得られなかった重要な性質がある。即ち、一つの子ノードには必ず唯一の親ノードが対応するので、子ノードを特定することによって、この子ノードに対応する唯一の親ノードを直ちに特定することができる。つまり、アークリストは、実際には、要素To−IDの配列だけを準備すればよい。この結果として、アークリストを格納するための記憶容量が削減される。この記憶容量の削減は、メモリへのアクセス回数が低減するという効果があるので、結果的に、処理の高速化が実現できる。
【0044】
図4A〜Cは、本発明の一実施例による「子→親」関係に基づくツリー型データ構造の表現方法の説明図である。図4Aはツリー全体の説明図であり、図4Bは「子→親」関係に基づくアークリストである。図4Bのアークリストは、ルート・ノードに対する親ノードの格納領域を含んでいるので、ルート・ノードの親ノードとして、便宜的に"−"が設定されている。但し、ルート・ノードに対応する親ノードは存在しないので、図4Cに示されるように、「子→親」関係に基づくアークリストからルート・ノードに対する親ノードの格納領域を除いても構わない。このように本発明の一実施例では、ルート・ノード以外のノードである非ルート・ノードの各々に対して、非ルート・ノードの親ノードを関連付けることによりノード間の親子関係を表現する。そして、「子→親」表現された子のノードから親のノードのリストを辿ることでツリーのトポロジーを表現することができる。
【0045】
このような「子→親」関係に基づくツリー型データ構造は、本発明の一実施例によれば、図5に示されるように、図1に示されたコンピュータシステム10に、ルート・ノードを含むノードに固有のノード識別子を付与するノード定義ステップ501と、前記ルート・ノード以外のノードである非ルート・ノードの各々に付与されたノード識別子に、前記非ルート・ノードの各々の親ノードに付与されたノード識別子を関連付ける親子関係定義ステップ502と、を実行させることによってRAM14上に構築される。このように、最初に、文字列、浮動小数、整数などの任意の識別情報によってノードにノード識別子を付与し、次に、「子→親」表現に基づいて親子関係を定義することによって、子ノードのノード識別子から親ノードのノード識別子を引く(ルックアップする)ことでツリーのトポロジーを表現することができる。
【0046】
[ノード識別子]
好ましい一実施例によれば、ノード定義ステップはノード識別子として数値を使用し、より好ましくは、連続する整数を使用し、更に好ましくは、0又は1からの整数連番を使用する。これにより、ノード識別子から、そのノードに対応する親ノードのノード識別子が格納されているアドレスを簡単に取得することができるので、子ノードのノード識別子から親ノードのノード識別子を引く処理を高速化することができる。
【0047】
ツリー型データ構造のノードにノード識別子として順序付きの番号を付与してノード間の親子関係を表現する場合、番号の付与順序に規則を定めることによって、その後のツリー型データ構造の取り扱いが容易になるという利点がある。本発明によれば、この番号の付与順序の規則として、同じ世代のノードよりも子ノードを優先する深さ優先モードと、子ノードよりも同じ世代のノードを優先する幅優先モードが利用される。
【0048】
図6A〜Cは、本発明の一実施例によりID形式のツリー構造型データを整数連番形式のツリー構造型データへ変換する処理の説明図である。図6Aには、各ノードにID番号が付与されたツリー構造型データが示され、図6Bには、変換規則が示され、図6Cには、各ノードに整数連番が付与されたツリー構造型データが示されている。本例の変換規則は、深さ優先で連続番号を付与する規則であり、具体的には、複数の子ノードが存在する場合、長子(一番上の兄)ノードに最小番号を付与し、末子(一番下の弟)ノードに大きい番号を付与し、かつ、兄弟ノードよりも子ノードを優先して番号を付与する。本例では、昇順に番号付けをしているが、降順に番号付けをしてもよい。
【0049】
また、図7A〜Cは、本発明の他の一実施例によりID形式のツリー構造型データを整数連番形式のツリー構造型データへ変換する処理の説明図である。図7Aには、各ノードにID番号が付与されたツリー構造型データが示され、図7Bには、変換規則が示され、図7Cには、各ノードに整数連番が付与されたツリー構造型データが示されている。本例の変換規則は、幅優先で連続番号を付与する規則であり、具体的には、複数の子ノードが存在する場合、長子(一番上の兄)ノードに最小番号を付与し、末子(一番下の弟)ノードに大きい番号を付与し、かつ、子ノードよりも兄弟ノードを優先して番号を付与する。本例では、昇順に番号付けをしているが、降順に番号付けをしてもよい。
【0050】
このようにノード識別子として番号を使用すると、ノード番号から直ちに、即ち、O(1)のオーダーで、そのノードに関する格納値が格納されているアドレスを引くことができる。また、親子関係を「子→親」表現することによって、子ノードから親ノードを直ちに、即ち、O(1)のオーダーで引くことができる。
【0051】
[深さ優先モード]
本発明の一実施例によれば、図6A〜Cに示されるような深さ優先に基づくツリー型データ構造は、図1に示されたコンピュータシステム10に、
同じ世代のノードよりも子ノードを優先して、ルート・ノードを含むノードに固有の連続する整数を付与するノード定義ステップと、
ルート・ノード以外のノードである非ルート・ノードの各々に付与された整数の順に、非ルート・ノードの各々の親ノードに付与された整数を並べることにより形成される配列を前記記憶装置に格納する親子関係定義ステップと、
を実行させることによって、記憶装置上に構築される。これにより、ノードは深さ優先で連続整数が付与され、ノード間の親子関係は「子→親」関係の配列によって表現される。
【0052】
図8は、本発明の一実施例による深さ優先に基づくノード定義処理のフローチャートである。このノード定義処理は、コンピュータシステム10に
最初にルート・ノードに番号を付与するステップ801と、
既に番号が付与されたあるノードに唯一の子ノードが存在する場合には、当該子ノードに当該あるノードに付与された前記番号の次の番号を付与するステップ802と、
既に番号が付与されたあるノードに複数の子ノードが存在する場合には、当該複数の子ノードの間の兄弟関係に従って、弟ノードは直上の兄ノードの全ての子孫ノードに番号が付与された後に次の番号が付与されるように、一番上の兄ノードから一番下の弟ノードまで番号を付与するステップ803と、
を実行させる。これにより、深さ優先モードで同一の親ノードから派生した複数の子ノードの間に兄弟関係が定義される。
【0053】
図9は、本発明の一実施例により図6A〜Cに示された深さ優先のツリー型データ構造から作成された「子→親」表現に基づく親子関係の配列の説明図である。同図にサブツリー1又はサブツリー2として示されているように、深さ優先で連続番号が付与されたノードの親子関係を「子→親」関係に基づいて配列表現すると、あるノードの子孫ノードが連続領域に出現するという優れた性質が得られる。
【0054】
本発明の一実施例では、深さ優先モードの優れた性質を利用することにより、前記配列から、あるノードに付与された整数以上の値が格納されている連続領域を抽出することにより、前記あるノードの全ての子孫ノードを特定する。これにより、あるノードの子孫ノードを表すノード群が前記配列内の連続ブロックとして獲得できる。例えば、連続ブロックのサイズをmとすると、あるノードの全ての子孫ノードを特定するための処理速度は、O(m)のオーダーになる。
【0055】
既に説明したように、ノード間の親子関係は、「子→親」関係の配列の他に、「親→子」関係の配列によっても表現できる。図10は、図6A〜Cに示された深さ優先のツリー型データ構造から作成された「親→子」表現に基づく親子関係の配列の説明図である。一つの親ノードに対して複数の子ノードが存在し得るので、親子関係の配列は、各ノードに対する子ノードの番号が格納されている領域を示すための配列Aggrと、子ノードの番号が格納されている配列P→Cの二つの配列により構成される。例えば、配列Aggrの先頭から2番目の要素Aggr[1]の値は”3”であり、これは、ノード[1]に対する子ノードの番号は、配列P→Cの要素P→C[3]以降に格納されていることを表している。これにより、ノード[0]、即ち、ルート・ノードに対する子ノードは、配列P→Cの先頭から3個の要素、P→C[0]の1、P→C[1]の6、及びP→C[2]の8であることがわかる。
【0056】
この「親→子」表現に基づく親子関係の配列の求め方を説明する。
(1)ノードの番号が配列P→Cの最大の添字(=11)と一致する場合、このノードに属する子ノードは存在しない。したがって、処理は継続されない。
(2)同図に太字で表された親ノードの番号からAggr値を求める。このAggr値は、配列P→Cの開始点を表す。
(3)太字で表された親ノード番号+1に対応するAggr値を求める。このAggr値−1が配列P→Cの終了点である。
【0057】
例えば、ノード0の子ノードの開始点は、Aggr[0]、即ち、0であり、終了点は、Aggr[1]−1、即ち、3−1=2である。したがって、ノード0の子ノードは、配列P→Cの0〜2番目の要素、即ち、1、6及び8である。
【0058】
或いは、「親→子」表現に基づく親子関係は、より単純に、親ノード番号の配列と、対応する子ノード番号の配列と、の二つの配列により表現することも可能である。しかし、この配列を利用して親子関係を見つけるためには、親ノードの番号を検索しなければならないので、即ち、log(n)のアクセス時間を要するので効率が悪い。
【0059】
[幅優先モード]
本発明の一実施例によれば、図7A〜Cに示されるような幅優先に基づくツリー型データ構造は、図1に示されたコンピュータシステム10に、
子ノードよりも同じ世代のノードを優先して、ルート・ノードを含むノードに固有の連続する整数を付与するノード定義ステップと、
前記ルート・ノード以外のノードである非ルート・ノードの各々に付与された整数の順に、前記非ルート・ノードの各々の親ノードに付与された整数を並べることにより形成される配列を前記記憶装置に格納する親子関係定義ステップと、
を実行させることによって、記憶装置上に構築される。これにより、ノードは幅優先モードで連続整数が付与され、ノード間の親子関係は「子→親」関係の配列によって表現される。
【0060】
図11は、本発明の一実施例による幅優先に基づくノード定義処理のフローチャートである。このノード定義処理は、コンピュータシステム10に、
各ノードが前記ルート・ノードから何世代目のノードであるか、及び、各世代に含まれるノード数を算出するステップ1101と、
最初に前記ルート・ノードに番号を付与するステップ1102と、
ある世代に含まれる全てのノードに番号が付与されたならば、当該ある世代の次の世代にノードが存在しなくなるまで、当該次の世代に含まれる全てのノードに対して、親ノードが異なる場合には、当該親ノードに番号が付与された順番に当該ノードに番号を付与し、当該親ノードが同一である場合には、当該親ノードから派生した複数の子ノードの間に兄弟関係を定義し、一番上の兄ノードから一番下の弟ノードまで直前に付与された番号の次の番号から連続的に変化する固有の整数を順に付与するステップ1013と、
を実行させる。これにより、幅優先モードで同一の親ノードから派生した複数の子ノードの間に兄弟関係が定義される。
【0061】
図12は、本発明の一実施例により図7A〜Cに示された幅優先のツリー型データ構造から作成された「子→親」表現に基づく親子関係の配列の説明図である。同図に示されているように、幅優先で連続番号が付与されたノードの親子関係を「子→親」関係に基づいて配列表現すると、あるノードの子ノードは連続領域に出現するという優れた性質が得られる。これは、幅優先モードで連続番号が付与されたノードの親子関係を「子→親」関係に基づいて配列表現すると、親ノードに付与された番号が前記配列中に順序付き(昇順又は降順)で出現することによる。
【0062】
したがって、本発明の一実施例では、幅優先モードの優れた性質を利用することにより、前記配列から、あるノードに付与された整数と同じ値が格納されている連続領域を抽出することにより、前記あるノードの全ての子ノードを特定する。これにより、あるノードの子ノードを、例えば、二分探索などの手法を用いて検索することが可能であり、即ち、O(log(n))のオーダーで検索することが可能になる。
【0063】
既に説明したように、ノード間の親子関係は、「子→親」関係の配列の他に、「親→子」関係の配列によっても表現できる。図13は、図7A〜Cに示された幅優先のツリー型データ構造から作成された「親→子」表現に基づく親子関係の配列の説明図である。図13一つの親ノードに対して複数の子ノードが存在し得るので、親子関係の配列は、各ノードに対する子ノードの番号が格納されている領域を示すための配列Aggrと、子ノードの番号が格納されている配列P→Cの二つの配列により構成される。例えば、配列Aggrの先頭から2番目の要素Aggr[1]の値は”3”であり、これは、ノード[1]に対する子ノードの番号は、配列P→Cの要素P→C[3]以降に格納されていることを表している。これにより、ノード[0]、即ち、ルート・ノードに対する子ノードは、配列P→Cの先頭から3個の要素、P→C[0]の1、P→C[1]の2、及び、P→C[2]の3であることがわかる。
【0064】
この「親→子」表現に基づく親子関係の配列の求め方を説明する。
(1)ノードの番号が配列P→Cの最大の添字(=11)と一致する場合、このノードに属する子ノードは存在しない。したがって、処理は継続されない。
(2)同図に太字で表された親ノードの番号からAggr値を求める。このAggr値は、配列P→Cの開始点を表す。
(3)太字で表された親ノード番号+1に対応するAggr値を求める。このAggr値−1が配列P→Cの終了点である。
【0065】
例えば、ノード0の子ノードの開始点は、Aggr[0]、即ち、0であり、終了点は、Aggr[1]−1、即ち、3−1=2である。したがって、ノード0の子ノードは、配列P→Cの0〜2番目の要素、即ち、1、2及び3である。
【0066】
[ツリー型データ構造の表現形式の相互変換]
上述のように、ノードに連続番号を付与するための深さ優先モード及び幅優先モードは、それぞれ、固有の優れた性質を備えている。本発明の一実施例によるコンピュータシステムは、深さ優先に基づく「子→親」表現形式と、幅優先に基づく「子→親」表現形式と、「親→子」表現形式と、の間で相互に表現形式を変換することができる。図14は、本発明の一実施例による三つの表現形式の相互変換の関係を示す図である。
【0067】
図15は、本発明の一実施例によりコンピュータシステムによって実現されるツリー型データ構造の構築方法のフローチャートである。同図に示されるように、コンピュータシステム10は、ルート・ノードから始めて全てのノードに連続的に変化する整数を一意に割り当てるステップ1510と、ノード間に親子関係を定義するステップ1520と、を実行することにより、ツリー型データ構造を記憶装置上に構築する。
【0068】
好ましくは、前記全てのノードに整数を一意に割り当てるステップ1510は、
同じ世代のノードよりも子ノードを優先して番号を付与する深さ優先モードと、子ノードよりも同じ世代のノードを優先して番号を付与する幅優先モードのどちらのモードでノードに番号を付与するかを選択するステップ1511と、
前記深さ優先モードが選択された場合に、深さ優先でノードを検索し、検索された順にノードに番号を付与するステップ1512と、
前記幅優先モードが選択された場合に、幅優先でノードを検索し、検索された順にノードに番号を付与するステップ1513と、
を含む。これにより、深さ優先モードによるノード番号付与と幅優先モードによるノード番号付与を一つのシステムに併存させることができるので、状況に応じて適切な表現形式を利用することが可能である。
【0069】
また、好ましくは、前記ノード間に親子関係を定義するステップ1520は、
子ノードから親ノードへの関係を定義する子親表現モードと、親ノードから子ノードへの関係を定義する親子表現モードのどちらのモードで親子関係を定義するかを選択するステップ1521と、
前記子親表現モードが選択された場合に、子ノードに付与された番号の順に、当該子ノードに対応する親ノードに付与された番号を前記記憶装置に格納するステップ1522と、
前記親子表現モードが選択された場合に、親ノードに付与された番号の順に、当該親ノードに対応する子ノードに付与された番号の配列を前記記憶装置に格納するステップ1523と、
を含む。これにより、「子→親」関係で表現されているノード間の親子関係を、状況に応じて、「親→子」関係で表現することが可能になる。「親→子」関係に基づく表現は、例えば、外部との情報交換の際に有利である。
【0070】
このように、本発明の一実施例によれば、ツリー型データ構造の表現形式として、親子関係を表現するための「子→親」表現及び「親→子」表現、並びに、ノードに番号を付与するため深さ優先モード及び幅優先モードを選択的に利用可能である。以下では、異なる表現形式の相互変換の方法を簡単に説明する。
【0071】
[深さ優先「子→親」表現から幅優先「子→親」表現への変換]
図16A、Bは、本発明の一実施例による、深さ優先「子→親」表現(図16A)から、幅優先「子→親」表現(図16B)への変換の説明図である。図17は、この本発明の一実施例による深さ優先「子→親」表現から幅優先「子→親」表現への変換方法のフローチャートである。親子関係は、子ノードに付与された番号の順に、当該子ノードに対応する親ノードに付与された番号をコンピュータシステム10の記憶装置、例えば、RAM14に格納することにより定義されている。図17に示されるように、コンピュータシステム10は、
同じ世代のノードよりも子ノードを優先してノードに番号を付与する深さ優先モードで表現されたツリー型データ構造の各ノードの世代を判定し、世代毎に属しているノードの個数を計数するステップ1701と、
前記世代毎に属しているノードの個数に基づいて、子ノードよりも同じ世代のノードを優先してノードに番号を付与する幅優先モードで番号を付与する際に各世代において付与される番号を決定するステップ1702と、
前記判定されたノードの世代及び前記決定された各世代において付与される番号に基づいて、前記各ノードの番号を前記幅優先モードで付与される番号に変換する変換配列を作成するステップ1703と、
前記各ノードの前記親子関係を、前記変換配列を使用して前記幅優先モードで付与される番号で表現された親子関係に変換するステップ1704と、
を実行する。これにより、深さ優先モードに基づく「子→親」表現形式から幅優先モードに基づく「子→親」表現形式への変換が可能になる。
【0072】
以上の処理により、図16A、Bに示されるような深さ優先「子→親」表現から幅優先「子→親」表現への変換が行われる。
【0073】
[幅優先「子→親」表現から深さ優先「子→親」表現への高速変換]
図18A、Bは、本発明の一実施例による、幅優先「子→親」表現(図18A)から、深さ優先「子→親」表現(図18B)への変換の説明図である。図19は、この本発明の一実施例による幅優先「子→親」表現から深さ優先「子→親」表現への変換方法のフローチャートである。親子関係は、子ノードに付与された番号の順に、当該子ノードに対応する親ノードに付与された番号をコンピュータシステム10の記憶装置、例えば、RAM14に格納することにより定義されている。図19に示されるように、コンピュータシステム10は、
子ノードよりも同じ世代のノードを優先してノードに番号を付与する幅優先モードで表現されたツリー型データ構造の各ノードの子孫の数を計数するステップ1901と、
親ノードに付与されるべき番号に、当該ノードと同一の親ノードから派生した兄弟ノードのうち当該ノードよりも前に番号が付与されている兄ノードの数及び当該兄ノードの子孫の数を加算することにより、前記幅優先モードで付与された番号を、同じ世代のノードよりも子ノードを優先してノードの番号を付与する深さ優先モードで付与される番号に変換する変換配列を作成するステップ1902と、
前記各ノードの前記親子関係を、前記変換配列を使用して前記深さ優先モードで付与される番号で表現された親子関係に変換するステップ1903と、
を実行する。これにより、図18A、Bに示されるような幅優先モードに基づく「子→親」表現形式から深さ優先モードに基づく「子→親」表現形式への高速変換が可能になる。
【0074】
[幅優先「子→親」表現から深さ優先「子→親」表現への変換]
本発明の他の一実施例によれば、幅優先「子→親」表現から深さ優先「子→親」表現への変換は、図19に関して説明した高速変換方法の他に、検索を利用した変換方法によっても実現できる。以下では、この検索を利用した変換方法を説明する。
【0075】
幅優先「子→親」表現による親子関係は、子ノードに付与された番号の順に、当該子ノードに対応する親ノードに付与された番号をコンピュータシステム10の記憶装置、例えば、RAM14に格納することにより定義されている。コンピュータシステム10は、
子ノードよりも同じ世代のノードを優先してノードに番号を付与する幅優先モードで表現されたツリー型データ構造の各ノードを深さ優先で検索し、前記幅優先モードで付与された番号を、同じ世代のノードよりも子ノードを優先してノードの番号を付与する深さ優先モードで付与される番号に変換する変換配列を作成するステップと、
前記各ノードの前記親子関係を、前記変換配列を使用して前記深さ優先モードで付与される番号で表現された親子関係に変換するステップと、
を実行する。
【0076】
この検索に基づく変換方法によって作成された変換配列は、先の高速変換方法の例で作成される変換配列と同じである。
【0077】
[「子→親」表現から「親→子」表現への変換]
次に、本発明の一実施例による子ノードに親ノードを対応付ける「子→親」関係から親ノードに子ノードを対応付ける「親→子」関係への変換方法を説明する。
【0078】
図20は、本発明の一実施例による「子→親」表現から「親→子」表現への変換方法のフローチャートである。親子関係は、子ノードに付与された番号の順に、当該子ノードに対応する親ノードに付与された番号を第1の配列の要素としてコンピュータシステム10の記憶装置、例えば、RAM14に格納することにより定義されている。コンピュータシステム10は、
各ノードに関して、当該ノードに付与された番号が前記第1の配列の要素として出現する回数を計数するステップ2001と、
前記各ノードに関して当該ノードに対応する子ノードに付与された番号を格納するため、前記計数された回数に応じた個数の連続領域を前記記憶領域に第2の配列として確保するステップ2002と、
前記第1の配列の要素を順次に読み出し、当該要素と値が一致する番号が付与されたノードのために確保された前記第2の配列の要素として、前記第1の配列の要素に対する子ノードの番号を順次に格納するステップ2003と、
を実行する。これにより、親子関係は、「子→親」表現形式から「親→子」表現形式に変換される。即ち、変換後の親子関係は、親ノードに付与された番号の順に、当該親ノードに対応する子ノードに付与された番号を前記第2の配列の要素として前記記憶装置に格納することにより定義される。
【0079】
この変換方法では、深さ優先又は幅優先の性質はそのまま保存されるので、深さ優先モードに基づく「子→親」表現は、深さ優先モードに基づく「親→子」表現に変換され、幅優先モードに基づく「子→親」表現は、幅優先モードに基づく「親→子」表現に変換される。
【0080】
[「親→子」表現から「子→親」表現への変換]
次に、本発明の一実施例による親ノードに子ノードを対応付ける「親→子」関係から子ノードに親ノードを対応付ける「子→親」関係への変換方法を説明する。
【0081】
図21は、本発明の一実施例による幅優先「子→親」表現から深さ優先「子→親」表現への変換方法のフローチャートである。親子関係は、親ノードに付与された番号の順に、当該親ノードに対応する子ノードに付与された番号を第1の配列の要素としてコンピュータシステム10の記憶装置、例えば、RAM14に格納することにより定義されている。コンピュータシステム10は、
子ノードに付与された番号の順に、当該子ノードに対応する親ノードに付与された番号を格納するため、前記記憶装置に第2の配列を確保するステップ2101と、
前記第1の配列の要素を順次に読み出し、当該要素と値が一致する番号が付与されたノードのために確保された前記第2の配列の要素として、前記第1の配列の要素に対する親ノードの番号を順次に格納するステップ2102と、
を実行する。これにより、親子関係は、「親→子」表現形式から「子→親」表現形式に変換される。即ち、変換後の親子関係は、子ノードに付与された番号の順に、当該子ノードに対応する親ノードに付与された番号を前記第2の配列の要素として前記記憶装置に格納することにより定義される。
【0082】
この変換方法では、深さ優先又は幅優先の性質はそのまま保存されるので、深さ優先モードに基づく「親→子」表現は、深さ優先モードに基づく「子→親」表現に変換され、幅優先モードに基づく「親→子」表現は、幅優先モードに基づく「子→親」表現に変換される。
【0083】
[ノード挿入]
次に、ツリー型データ構造のトポロジーを編集する操作である「ノード挿入」について説明する。本発明の「ノード挿入」は、ツリー型データ構造をもつマスタ側データのある特定ノード(=マスタ側特定ノード)の子孫ノードとして、ツリー型データ構造をもつスレイブ側データのある特定ノード(=スレイブ側特定ノード)の子孫ノードを追加することを意味する。
【0084】
図22A〜Cは、本発明の一実施例によるツリー型データ構造におけるノード挿入の説明図である。図22Aは、深さ優先でノードに番号が付与された深さ優先モードのマスタ側データを示し、図22Bは、深さ優先モードのスレイブ側データを示し、図22Cは、スレイブ側データの一部のノードをマスタ側データに挿入した結果を深さ優先モードで表現している。より詳細には、マスタ側データのノード5の子孫ノードとして、スレイブ側データのノード1の子孫ノード(ノード2、ノード3及びノード4)が挿入され、マスタ側データのノード9の子孫として、スレイブ側データのノード5の子孫ノード(ノード6及びノード7)が挿入され、全てのノードには深さ優先で番号が再付与されている。マスタ側データのノード5に子孫ノードが挿入され、挿入された子孫ノードにノード6、ノード7及びノード8の番号が付与されるので、マスタ側データのノード6の番号は、ノード9に付け直される。同様に、マスタ側データのノード6、ノード7、ノード8及びノード9は、それぞれ、ノード9、ノード10、ノード11及びノード12のように番号が再付与される。さらに、マスタ側データの現在のノード12(番号再付与前のノード9)には、スレイブ側データのノード6及びノード7が挿入され、それぞれ、ノード13及びノード14として番号が再付与される。これにより、元のマスタ側データのノード10及びノード11は、それぞれ、ノード15及びノード16のように番号が再付与される。
【0085】
同図の例では、スレイブ側データのノード5の子ノード6及び子ノード7は、マスタ側データのノード9の子ノード10及び子ノード11よりも前に挿入されているが、子ノード10と子ノード11の間に挿入するように構成することが可能であり、或いは、子ノード10及び子ノード11の後に挿入するように構成することも可能である。
【0086】
図23は、本発明の一実施例によるノード挿入方法のフローチャートである。この方法は、ツリー型データ構造をもつマスタ側データに、ツリー型データ構造をもつスレイブ側データのノードを挿入する。
【0087】
マスタ側データ及びスレイブ側データのそれぞれにおいて、ルート・ノードを含むノードに固有のノード識別子が付与されている。ルート・ノード以外のノードである非ルート・ノードの各々に付与されたノード識別子には、非ルート・ノードの各々の親ノードに付与されたノード識別子が関連付けられ、これにより、ノード間の親子関係が表現されている。
【0088】
本実施例のノード挿入方法は、
スレイブ側データ中のスレイブ側特定ノードの子孫ノードを特定するステップ2301と、
スレイブ側データ中のスレイブ側特定ノードに対応したマスタ側データ中の別の特定ノードの子孫ノードとして、スレイブ側データ中のスレイブ側特定ノードの子孫ノードをマスタ側データに挿入するステップ2302と、
を含む。
【0089】
このように本発明の一実施例によるノード挿入方法は、「子→親」表現のツリー型データ構造を採用して、スレイブ側データのスレイブ側特定ノードの子孫ノードを、マスタ側データのマスタ側特定ノードの子孫ノードとして、マスタ側データに挿入する。
【0090】
本発明の好ましい一実施例によれば、上記ノード間の親子関係は、深さ優先モードに基づく「子→親」表現形式で表され、ノード識別子は、連続する整数である。このとき、例えば、図22A〜Cに示されたツリー型データ構造は、図24A〜Cに示されるような深さ優先モードに基づく「子→親」表現形式で記述することができる。図24A、B及びCは、それぞれ、図22A、B及びCのデータ構造に対応した深さ優先モードに基づく「子→親」表現形式の説明図である。
【0091】
図24A〜Cに示されるように、マスタ側データ及びスレイブ側データのノードに付与された固有のノード識別子は、同じ世代のノードよりも子ノードを優先して付与された連続する整数である。また、マスタ側データ及びスレイブ側データのそれぞれにおいて、ノード間の親子関係は、非ルート・ノードの各々に付与されたノード識別子の順に関連付けられた、非ルート・ノードの各々の親ノードに付与されたノード識別子からなる配列によって表現されている。即ち、ノード間の親子関係は、深さ優先モードに基づく「子→親」表現形式で表されている。
【0092】
このとき、スレイブ側データ中のスレイブ側特定ノードの子孫ノードを特定するステップ2301は、スレイブ側データの親子関係を表現する配列中のスレイブ側特定ノードに付与されたノード識別子が格納されている位置の次の位置から、スレイブ側特定ノードに付与されたノード識別子の値以上の値が格納されている連続領域を抽出することにより、スレイブ側特定ノードの全ての子孫ノードを特定する。この子孫ノードの特定は、図9を参照して説明したように、深さ優先で連続番号が付与されたノードの親子関係を「子→親」関係に基づいて配列表現すると、あるノードの子孫ノードが連続領域に出現するという、深さ優先モードの優れた性質に基づいている。
【0093】
また、図24Cに示されるように、スレイブ側特定ノードの子孫ノードをマスタ側データに挿入するステップ2302は、マスタ側データ中のノードとスレイブ側データ中のスレイブ側特定ノードの子孫ノードに、スレイブ側特定ノードの子孫ノードがマスタ側データ中のマスタ側特定ノードの子孫ノードに挿入される順序で、同じ世代のノードよりも子ノードを優先してノード識別子を付与し、当該ノード識別子の順に対応する親ノードのノード識別子を関連付けることにより、マスタ側データのノード間の親子関係を表現する配列にスレイブ側データ中のスレイブ側ノードの子孫ノードの親子関係を表現する配列が挿入された新たな親子関係を表現する配列を生成するステップを含む。
【0094】
このように、本発明の好ましい一実施例によれば、親子関係は深さ優先であること、ならびに、ノード識別子は連続する整数であること、を利用して、スレイブ側データ中の子孫ノードを連続領域によって判定し、マスタ側データとスレイブ側データ中の子孫ノードについて新たな親子関係を表現する配列を生成する。
【0095】
さらに、上記の新たな親子関係を表現する配列を生成するステップは、子孫ノードの挿入点までの処理と、子孫ノードの挿入点における処理と、子孫ノードの挿入点の後の処理の3ステップで実現することができる。図25は、本発明の一実施例による新たな親子関係を表現する配列を生成する処理のフローチャートである。
【0096】
図25に示されるように、新たな親子関係を表現する配列を生成するステップは、子孫ノード挿入点までの処理ステップ2501と、子孫ノードの挿入点における処理ステップ2502と、子孫ノードの挿入点後の処理ステップ2503と、を含む。
【0097】
ステップ2501:マスタ側データのノードについて、マスタ側特定ノードが現れるまで、同じ世代のノードよりも子ノードを優先してノード識別子を付与し、当該ノードの当該ノード識別子に当該ノードの親ノードのノード識別子を関連付ける。
【0098】
ステップ2502:マスタ側特定ノードにノード識別子を付与し、続いて、マスタ側特定ノードの子孫ノードとして、スレイブ側特定のノードの子孫ノードに、同じ世代のノードよりも子ノードを優先してノード識別子を付与し、当該子孫ノードのそれぞれにその親ノードのノード識別子を関連付ける。
【0099】
ステップ2503:マスタ側データに未だノード識別子が付与されていない残りのノードが存在する場合、当該残りのノードについて、同じ世代のノードよりも子ノードを優先してノード識別子を付与し、当該残りのノードの当該ノード識別子に親ノードのノード識別子を関連付ける。
【0100】
また、図24A〜Cに示された例のように、スレイブ側特定ノード1及びスレイブ側特定ノード2の二つ以上のノードの子孫ノードを同時にマスタ側データに挿入する場合には、スレイブ側特定ノードに対応したマスタ側特定ノードが無くなるまで、上記のステップ2501とステップ2502を繰り返し実行した後、ステップ2503を実行すればよい。
【0101】
[ノードの実体的な値の取り扱い方]
以上の説明のように、ツリー型データ構造のトポロジーを操作するノード挿入は、ノードに付与されたノード識別子(例えば、ノード番号)を付け直す操作であることがわかる。一方、ノードには、そのノードの実体的な値として、そのノードのタイプを表すノードタイプと、値を表すノード値と、が関連付けられている。これらのノードタイプ及びノード値は、図2A、Bに関して説明したように、ノードタイプ及びノード値を記述する情報が格納されたノード情報格納領域へのポインタを、ノード識別子に随伴させることによって特定することができる。
【0102】
図26には、本発明の一実施例によるノード挿入処理におけるノードの実体的な値の取り扱い方の一例が示されている。例えば、図24A〜Cに示された例では、スレイブ側のノード2は、マスタ側のノード5の子孫ノードとして挿入することにより、挿入処理後のノード6になる。一方、スレイブ側のノード2の実体的な値は、図26に示されるように、アドレスaaaaのノード情報格納領域に格納されている。このスレイブ側のノード2をマスタ側データに挿入するとき、挿入によって生成されたノード6のポインタに、アドレスaaaaをコピーする。これにより、挿入後のノードに、対応したノード情報格納領域を指定するポインタを随伴させることができる。
【0103】
[ノード挿入処理の例]
次に、図22A〜Cに示した例を用いて、本発明の一実施例によるノード挿入処理をさらに詳しく説明する。図27は、本発明の一実施例によるノード挿入処理の全体的な説明図である。本例では、マスタ側のノード5(マスタ側特定ノード1)の子孫ノードとして、スレイブ側のノード1(スレイブ側特定ノード1)の子孫ノード(ノード2、ノード3及びノード4)を挿入し、マスタ側のノード9(マスタ側特定ノード2)の子孫ノードとして、スレイブ側のノード5(スレイブ側特定ノード2)の子孫ノード(ノード6及びノード7)を挿入する。
【0104】
ノード挿入処理に使用されるスレイブ側特定ノードとマスタ側特定ノードは、マッチングしているノードである。以下の例では、スレイブ側特定ノードのノードタイプ及びノード値がマスタ側特定ノードのノードタイプ及びノード値と、それぞれ、一致している場合に、スレイブ側特定ノードとマスタ側特定ノードはマッチングしている、と判定する。図27の例では、スレイブ側のノード1とマスタ側のノード5は、共にハート形で描かれていて、ノードタイプが一致している。また、図示されていないが、ノードの保持するノード値も一致している。同様に、スレイブ側のノード5とマスタ側のノード3は、同じノードタイプを有し、保持するノード値も一致している。これらのスレイブ側特定ノード及びマスタ側特定ノードは、予めユーザが指定してもよく、或いは、ユーザが設定した条件に従って自動的に判定してもよい。
【0105】
図27には、マスタ側、スレイブ側及びノード挿入操作後のそれぞれについて、ツリー型データ構造と、深さ優先モードに基づく「子→親」表現形式の親子関を表す配列と、が示されている。また、ノード挿入処理後のツリー型データ構造及び親子関係を表す配列では、ノード識別子であるノード番号の変化する様子も示されている。
【0106】
本発明の一実施例によるノード挿入処理は、マスタ側のノードとスレイブ側のノードのマッチングを行って、ノード挿入処理の対象となるノード、即ち、特定ノード及び別の特定ノードを決定した後、ノードリスト、即ち、深さ優先モードに基づく「子→親」表現形式の親子関を表す配列を合成する。
【0107】
以下、図28A乃至図35を参照してノードリスト合成処理を説明する。ノードリスト合成処理は、子孫ノードを特定する処理と、最初の挿入点までの処理と、挿入処理と、次の挿入点までの処理と、2回目の挿入処理と、挿入点以降の処理と、を含む。
【0108】
図28A〜Fは、本発明の一実施例による子孫ノードを特定する処理の説明図である。ノード挿入処理を行うためには、上述のように、各スレイブ側特定ノードの子孫ノード(即ち、サブツリー)の範囲を特定する必要がある。深さ優先モードに基づく「子→親」表現形式では、特定ノード、即ち、頂点ノードに対する子孫ノードは、頂点ノード以降の連続した範囲に存在している。そこで、子孫ノードを特定する処理では、この頂点ノード以降の連続した範囲を見つける。図28A〜Fにおいて、太線の矢印は、スレイブ側特定ノード1及びマスタ側特定ノード1についての処理を説明するための矢印であり、白抜きの矢印は、スレイブ側特定ノード2及びマスタ側特定ノード2についての処理を説明するための矢印である。
【0109】
手順1では、頂点ノード(=スレイブ側特定ノード1)であるノード1の次のノード2からチェックを開始する。{2}の内容(=ノード2に関連付けられた親ノード番号)をチェックすると1であり、頂点ノード1以上の値であるので、ノード2は頂点ノード[1]に属することがわかる。
【0110】
手順2では、{3}の内容をチェックすると2であり、頂点ノード1以上の値であるので、ノード3は頂点ノード[1]に属することがわかる。
【0111】
手順3では、{4}の内容をチェックすると1であり、頂点ノード1以上の値であるので、ノード4は頂点ノード[1]に属することがわかる。
【0112】
手順4では、{5}の内容をチェックすると0であり、頂点ノード1よりも小さい値であるので、ノード5(及びそれ以降のノード)は頂点ノード[1]に属さないことがわかる。
【0113】
頂点ノード1に対するチェックはここで終了し、頂点ノード[1]に属するノードのノード番号の末尾は{4}であることがわかる。
【0114】
手順5及び6では、同様に、頂点ノード[5]に属するノードをチェックすると、頂点ノード[5]に属するノードのノード番号の末尾は{7}であることがわかる。
【0115】
子孫ノードが特定されると、次に、ノードリストの合成結果配列を生成する。そのため、最初に、マスタ側のノード番号がどのように変化するかを記録する変換配列と、合成結果配列を準備する。変換配列のサイズは、元のマスタ側のC→P配列と同じサイズであり、合成結果配列のサイズは、元のマスタ側のC→P配列のサイズに、挿入されるスレイブ側の子孫ノードの個数(=サブツリーのサイズの合計)を加算することによって計算できる。図29は、本発明の一実施例による挿入処理の初期状態の説明図である。
【0116】
次に、最初の挿入点までの処理が行われる。図30A〜Cは、本発明の一実施例による最初の挿入点までの処理の説明図である。
【0117】
手順1:(1)マスタ側のノード0についての処理を行う(図30A)。変換配列[0](変換配列のアドレス0)には、(マスタ側のC→P配列のアドレス番号)+nIns=0+0を格納する。ここで、nInsは、スレイブ側から挿入されたノードの個数を表している。変換配列に格納される値は、ノード挿入操作によって、マスタ側のノード番号がどのように付け直されたかを示している。(2)マスタ側のC→P配列[0](C→P配列のアドレス0)の内容が−1であるので、この値をそのまま合成結果配列[0](合成結果配列のアドレス0)に格納する。変換配列挿入ポインタ及び合成結果配列挿入ポインタは、初期状態では先頭(即ち、アドレス0)にセットされ、変換配列及び合成結果配列に値が格納されると、それぞれ、次のアドレスへ進められる。
【0118】
手順2:(1)マスタ側のノード1についての処理を行う(図30B)。変換配列[1]には、(マスタ側のC→P配列のアドレス番号)+nIns=1+0を格納する。(2)マスタ側のC→P配列[1]の内容が0(0以上)であるので、この値0をアドレスとして変換配列を参照し、変換配列[0]の内容を、合成結果配列[1]に格納する。
【0119】
手順3:手順2と同様の操作を挿入点、即ち、マスタ側のノード5まで続ける(図30C)。
【0120】
図31は、本発明の一実施例による最初の挿入点における挿入処理の説明図である。同図に示された手順4では、nInsの値を、挿入されるノードの個数分、即ち、3だけ増加させる。次に、スレイブ側の特定ノード1の3個の子孫ノードのノード番号(2、3及び4)に、以下の式によって決まるオフセットを加えて、対応する合成結果配列[6]、合成結果配列[7]及び合成結果配列[8]に順次格納する。ここで、
オフセット=(合成結果配列の挿入ポインタアドレス(本例では、6)−1)−スレイブ側挿入開始点アドレス(本例では、1)=4
である。尚、オフセットの計算時に、合成結果配列の挿入ポインタアドレスは6に固定されている。また、スレイブ側挿入開始点アドレスは、スレイブ側特定ノード1のノード番号1である。したがって、合成結果配列[6]=1+4=5、合成結果配列[7]=2+4=6、及び、合成結果配列[7]=1+4=5のようになる。
【0121】
図32は、本発明の一実施例による次の挿入点までの処理の説明図である。手順5では、次の挿入点まで、手順2と同様の操作を繰り返す。具体的には、マスタ側のノード6、ノード7、ノード8及びノード9について、変換配列[i]に(マスタ側のC→P配列のアドレス番号)+nIns=i+3を格納する。ここで、iはマスタ側のノード番号を表す。次に、マスタ側のC→P配列[i]の内容jをアドレスとして変換配列[j]を参照し、変換配列[j]の内容を、合成結果配列[変換配列[i]]に格納する。例えば、i=7のとき、変換配列[7]に、7+3=10を格納し、次に、C→P配列[7]の内容である6をアドレスとして、変換配列[6]を参照し、この変換配列[6]の内容である9を、合成結果配列[変換配列[7]]=合成結果配列[10]に格納する。
【0122】
図33は、本発明の一実施例による2回目の挿入点における挿入処理の説明図である。同図に示された手順6では、現在のnInsの値3を、挿入されるノードの個数分、即ち、2だけ増加させ、nIns=5とする。次に、スレイブ側の特定ノード2の2個の子孫ノードのノード番号(6及び7)に、以下の式によって決まるオフセットを加えて、対応する合成結果配列[13]及び合成結果配列[14]に順次格納する。ここで、
オフセット=(合成結果配列の挿入ポインタアドレス(本例では、13)−1)−スレイブ側挿入開始点アドレス(本例では、5))=7
である。尚、オフセットの計算時に、合成結果配列の挿入ポインタアドレスは13に固定されている。また、スレイブ側挿入開始点アドレスは、スレイブ側特定ノード2のノード番号である。したがって、合成結果配列[13]=5+7=12、及び、合成結果配列[14]=5+7=12のようになる。
【0123】
図34は、本発明の一実施例による挿入点以降の処理の説明図である。同図に示された手順7では、手順2及び手順5と同様の操作を繰り返す。具体的には、マスタ側のノード10及びノード11について、変換配列[i]に(マスタ側のC→P配列のアドレス番号)+nIns=i+5を格納する。ここで、iはマスタ側のノード番号を表す。次に、マスタ側のC→P配列[i]の内容jをアドレスとして変換配列[j]を参照し、変換配列[j]の内容を、合成結果配列[変換配列[i]]に格納する。例えば、i=10のとき、変換配列[10]に、10+5=15を格納し、次に、C→P配列[10]の内容である9をアドレスとして、変換配列[9]を参照し、この変換配列[9]の内容である12を、合成結果配列[変換配列[10]]=合成結果配列[15]に格納する。i=11の場合も同様である。
【0124】
以上の処理によって、合成結果配列、即ち、マスタ側データにスレイブ側データの特定ノードの子孫ノードを挿入することにより生成された新たなデータ構造の深さ優先モードに基づく「子→親」表現形式の親子関係が得られる。図35は、本発明の一実施例によるノード挿入処理の結果の説明図である。同図には、深さ優先モードに基づくノード番号によるツリー構造と、対応する深さ優先の「子→親」表現による親子関係と、が示されている。
【0125】
尚、ノード挿入処理によって得られた深さ優先モードの記述は、必要に応じて、図16A、B及び図17を参照して説明した[深さ優先「子→親」表現から幅優先「子→親」表現への変換]を用いることにより、O(n)の操作で幅優先モードの記述に変換することができる。
【0126】
[情報処理装置]
図36は、本発明の一実施例によるツリー型データ構造を構築する情報処理装置3600のブロック図である。情報処理装置3600は、ツリー型データ構造を表現するデータを記憶する記憶部3601と、スレイブ側データ中のスレイブ側特定ノードの子孫ノードを特定する子孫ノード特定部3602と、スレイブ側特定ノードに対応したマスタ側データ中のマスタ側特定ノードの子孫ノードとして、スレイブ側特定ノードの子孫ノードをマスタ側データに挿入し、新たな親子関係を表現する情報を記憶部3601に格納するノード挿入部3603と、を含む。
【0127】
好ましい一実施例によれば、ノードに付与された固有のノード識別子は、同じ世代のノードよりも子ノードを優先して付与された連続する整数である。また、マスタ側データ及びスレイブ側データのそれぞれにおいて、ノード間の親子関係は、非ルート・ノードの各々に付与されたノード識別子の順に関連付けられた非ルート・ノードの各々の親ノードに付与されたノード識別子からなる配列によって表現される。
【0128】
子孫ノード特定部3602は、スレイブ側データの親子関係を表現する配列中のスレイブ側特定ノードに付与されたノード識別子が格納されている位置の次の位置から、スレイブ側特定ノードに付与されたノード識別子の値以上の値が格納されている連続領域を抽出することにより、スレイブ側特定ノードの全ての子孫ノードを特定する。
【0129】
また、ノード挿入部3603は、マスタ側データ中のノードとスレイブ側データ中のスレイブ側特定ノードの子孫ノードに、スレイブ側特定ノードの子孫ノードがマスタ側データ中のマスタ側特定ノードの子孫ノードに挿入される順序で、同じ世代のノードよりも子ノードを優先してノード識別子を付与し、当該ノード識別子の順に対応する親ノードのノード識別子を関連付けることにより、マスタ側データのノード間の親子関係を表現する配列にスレイブ側データ中のスレイブ側特定ノードの子孫ノードの親子関係を表現する配列が挿入された新たな親子関係を表現する配列を生成する。
【0130】
さらに、好ましい一実施例によれば、情報処理装置3600において、ノード挿入部3603は、マスタ側データのノードがマスタ側特定ノードであるかどうかを判定するノード判定部3631と、マスタ側データのノードがマスタ側特定ノードではない場合、当該ノードに同じ世代のノードよりも子ノードを優先してノード識別子を付与し、当該ノードの当該ノード識別子に当該ノードの親ノードのノード識別子を関連付ける非特定ノード操作部3632と、マスタ側データのノードがマスタ側特定ノードである場合、マスタ側特定ノードにノード識別子を付与し、続いて、マスタ側特定ノードの子孫ノードとして、スレイブ側特定のノードの子孫ノードに、同じ世代のノードよりも子ノードを優先してノード識別子を付与し、当該子孫ノードのそれぞれにその親ノードのノード識別子を関連付ける特定ノード操作部3633と、を含む。
【0131】
本発明は、以上の実施の形態に限定されることなく、特許請求の範囲に記載された発明の範囲内で、種々の変更が可能であり、それらも本発明の範囲内に包含されるものであることは言うまでもない。
【図面の簡単な説明】
【0132】
【図1】図1は、本発明の実施の形態にかかるツリー型データ構造を取り扱うコンピュータシステムのブロックダイヤグラムである。
【図2】図2A、Bは、ツリー形式データの一例であるPOSデータの説明図であり、図2Aは、このツリー形式データのデータ構造(即ち、トポロジー)及びデータ値を視覚的に表現した例、図2Bは、同じツリー形式データをXML形式で表現した例を示す。
【図3】図3A〜Cは、アークリストを用いたツリー型データ構造の表現形式の一例の説明図である。
【図4】図4A〜Cは、本発明の一実施例による「子→親」関係に基づくツリー型データ構造の表現方法の説明図である。
【図5】図5は、本発明の一実施例によるツリー型データ構造を記憶装置上に構築する方法のフローチャートである。
【図6】図6A〜Cは、本発明の一実施例によりID形式のツリー構造型データを整数連番形式のツリー構造型データへ変換する処理の説明図である。
【図7】図7A〜Cは、本発明の他の一実施例によりID形式のツリー構造型データを整数連番形式のツリー構造型データへ変換する処理の説明図である。
【図8】図8は、本発明の一実施例による深さ優先に基づくノード定義処理のフローチャートである。
【図9】図9は、本発明の一実施例により作成された「子→親」表現に基づく親子関係の配列の説明図である。
【図10】図10は、図6A〜Cに示された深さ優先のツリー型データ構造から作成された「親→子」表現に基づく親子関係の配列の説明図である。
【図11】図11は、本発明の一実施例による幅優先に基づくノード定義処理のフローチャートである。
【図12】図12は、本発明の一実施例により作成された「子→親」表現に基づく親子関係の配列の説明図である。
【図13】図13は、図7A〜Cに示された深さ優先のツリー型データ構造から作成された「親→子」表現に基づく親子関係の配列の説明図である。
【図14】図14は、本発明の一実施例による三つの表現形式の相互変換の関係を示す図である。
【図15】図15は、本発明の一実施例によるコンピュータシステムによって実現されるツリー型データ構造の構築方法のフローチャートである。
【図16】図16A、Bは、本発明の一実施例による深さ優先「子→親」表現から幅優先「子→親」表現への変換の説明図である。
【図17】図17は、本発明の一実施例による深さ優先「子→親」表現から幅優先「子→親」表現への変換方法のフローチャートである。
【図18】図18A、Bは、本発明の一実施例による幅優先「子→親」表現から深さ優先「子→親」表現への変換の説明図である。
【図19】図19は、本発明の一実施例による幅優先に基づくノードの親子関係を深さ優先に基づくノードの親子関係に変換する処理の説明図である。
【図20】図20は、本発明の一実施例による「子→親」表現から「親→子」表現への変換方法のフローチャートである。
【図21】図21は、本発明の一実施例による「親→子」表現から「子→親」表現への変換方法のフローチャートである。
【図22】図22A〜Cは、本発明の一実施例によるツリー型データ構造におけるノード挿入の説明図である。
【図23】図23は、本発明の一実施例によるノード挿入方法のフローチャートである。
【図24】図24A〜Cは、それぞれ、図22A〜Cに対応した深さ優先「子→親」表現形式の説明図である。
【図25】図25は、本発明の一実施例による新たな親子関係を表現する配列を生成する処理のフローチャートである。
【図26】図26は、本発明の一実施例によるノード挿入処理におけるノードの実体的な値の取り扱い方の一例の説明図である。
【図27】図27は、本発明の一実施例によるノード挿入処理の全体的な説明図である。
【図28】図28A〜Fは、本発明の一実施例による子孫ノードを特定する処理の説明図である。
【図29】図29は、本発明の一実施例による挿入処理の初期状態の説明図である。
【図30】図30A〜Cは、本発明の一実施例による最初の挿入点までの処理の説明図である。
【図31】図31は、本発明の一実施例による最初の挿入点における挿入処理の説明図である。
【図32】図32は、本発明の一実施例による次の挿入点までの処理の説明図である。
【図33】図33は、本発明の一実施例による2回目の挿入点における挿入処理の説明図である。
【図34】図34は、本発明の一実施例による挿入点以降の処理の説明図である。
【図35】図35は、本発明の一実施例によるノード挿入処理の結果の説明図である。
【図36】図36は、本発明の一実施例によるノード挿入操作を行う情報処理装置のブロック図である。
【符号の説明】
【0133】
10 コンピュータシステム
12 CPU
14 RAM
16 ROM
18 固定記憶装置
20 CD−ROMドライバ
22 I/F
24 入力装置
26 表示装置
3600 情報処理装置
3601 記憶部
3602 子孫ノード特定部
3603 ノード挿入部
3631 ノード判定部
3632 非特定ノード操作部
3633 特定ノード操作部
Claims (10)
- ツリー型データ構造をもつマスタ側データおよびツリー型データ構造をもつスレイブ側データを格納する記憶装置を含むコンピュータが前記マスタ側データに前記スレイブ側データのノードを挿入するノード挿入方法であって、
前記コンピュータのCPUは、前記マスタ側データ及び前記スレイブ側データのそれぞれにおいて、ルート・ノードを含むノードに、同じ世代のノードよりも子ノードを優先して付与された連続する整数である固有のノード識別子を付与し、前記ルート・ノード以外のノードである非ルート・ノードの各々に付与されたノード識別子に前記非ルート・ノードの各々の親ノードに付与されたノード識別子を関連付け、前記非ルート・ノードの各々に付与されたノード識別子の順に、このノード識別子に関連付けられた前記親ノードに付与されたノード識別子を配列として前記記憶装置に格納し、この配列によって、ノード間の親子関係を表現し、
当該ノード挿入方法は、
前記CPUが、前記スレイブ側データの前記親子関係を表現する配列中のスレイブ側特定ノードに付与されたノード識別子に関連付けられた前記親ノードのノード識別子が格納されている位置の次の位置から、前記スレイブ側特定ノードに付与されたノード識別子の値以上の値が格納されている連続領域を抽出することにより、前記スレイブ側特定ノードの全ての子孫ノードを特定するステップと、
前記CPUが、前記スレイブ側特定ノードに対応した前記マスタ側データ中のマスタ側特定ノードの子孫ノードとして、前記スレイブ側特定ノードの前記子孫ノードを前記マスタ側データに挿入するステップと、
を含むことを特徴とするノード挿入方法。 - 前記スレイブ側特定ノードの前記子孫ノードを前記マスタ側データに挿入するステップは、前記CPUが、前記マスタ側データ中のノードと前記スレイブ側データ中の前記スレイブ側特定ノードの前記子孫ノードに、前記スレイブ側特定ノードの前記子孫ノードが前記マスタ側データ中の前記マスタ側特定ノードの子孫ノードに挿入される順序で、同じ世代のノードよりも子ノードを優先してノード識別子を付与し、当該ノード識別子の順に対応する親ノードのノード識別子を関連付けることにより、前記マスタ側データのノード間の親子関係を表現する配列に前記スレイブ側データ中の前記スレイブ側特定ノードの前記子孫ノードの親子関係を表現する配列が挿入された新たな親子関係を表現する配列を生成し、前記記憶装置に格納するステップを含む、
請求項1に記載のノード挿入方法。 - 前記新たな親子関係を表現する配列を生成し、前記記憶装置に格納するステップは、
前記CPUが、前記マスタ側データのノードについて、前記マスタ側特定ノードが現れるまで、同じ世代のノードよりも子ノードを優先してノード識別子を付与し、当該ノードの当該ノード識別子に当該ノードの親ノードのノード識別子を関連付けるステップと、
前記CPUが、前記マスタ側特定ノードにノード識別子を付与し、前記マスタ側特定ノードの子孫ノードとして、前記スレイブ側特定のノードの前記子孫ノードに、同じ世代のノードよりも子ノードを優先してノード識別子を付与し、当該子孫ノードのそれぞれにその親ノードのノード識別子を関連付けるステップと、
前記CPUが、前記マスタ側データに未だノード識別子が付与されていない残りのノードが存在する場合、当該残りのノードについて、同じ世代のノードよりも子ノードを優先してノード識別子を付与し、当該残りのノードの当該ノード識別子に親ノードのノード識別子を関連付けるステップと、
を含む、
請求項2に記載のノード挿入方法。 - ツリー型データ構造をもつマスタ側データ及びツリー型データ構造をもつスレイブ側データを記憶する記憶装置を含み、
CPUを用いて、前記記憶装置に記憶された前記マスタ側データ及び前記スレイブ側データのそれぞれにおいて、ルート・ノードを含むノードに、同じ世代のノードよりも子ノードを優先して付与された連続する整数である固有のノード識別子を付与し、前記ルート・ノード以外のノードである非ルート・ノードの各々に付与されたノード識別子に前記非ルート・ノードの各々の親ノードに付与されたノード識別子を関連付け、前記非ルート・ノードの各々に付与されたノード識別子の順に、このノード識別子に関連付けられた前記親ノードに付与されたノード識別子を配列として前記記憶装置に格納し、この配列によって、ノード間の親子関係を表現する情報処理装置であって、
前記CPUを用いて、前記スレイブ側データの前記親子関係を表現する配列中のスレイブ側特定ノードに付与されたノード識別子に関連付けられた前記親ノードのノード識別子が格納されている位置の次の位置から、前記スレイブ側特定ノードに付与されたノード識別子の値以上の値が格納されている連続領域を抽出することにより、前記スレイブ側特定ノードの全ての子孫ノードを特定する子孫ノード特定手段と、
前記CPUを用いて、前記スレイブ側特定ノードに対応した前記マスタ側データ中のマスタ側特定ノードの子孫ノードとして、前記スレイブ側特定ノードの前記子孫ノードを前記マスタ側データに挿入し、新たな親子関係を表現する情報を前記記憶装置に格納するノード挿入手段と、
を含む、情報処理装置。 - 前記ノード挿入手段は、前記CPUを用いて、前記マスタ側データ中のノードと前記スレイブ側データ中の前記スレイブ側特定ノードの前記子孫ノードに、前記スレイブ側特定ノードの前記子孫ノードが前記マスタ側データ中の前記マスタ側特定ノードの子孫ノードに挿入される順序で、同じ世代のノードよりも子ノードを優先してノード識別子を付与し、当該ノード識別子の順に対応する親ノードのノード識別子を関連付けることにより、前記マスタ側データのノード間の親子関係を表現する配列に前記スレイブ側データ中の前記スレイブ側特定ノードの前記子孫ノードの親子関係を表現する配列が挿入された新たな親子関係を表現する配列を生成する、
請求項4に記載の情報処理装置。 - 前記ノード挿入手段は、
前記CPUを用いて、前記マスタ側データのノードが前記マスタ側特定ノードであるかどうかを判定する手段と、
前記CPUを用いて、前記マスタ側データのノードが前記マスタ側特定ノードではない場合、当該ノードに同じ世代のノードよりも子ノードを優先してノード識別子を付与し、当該ノードの当該ノード識別子に当該ノードの親ノードのノード識別子を関連付ける手段と、
前記マスタ側データのノードが前記マスタ側特定ノードである場合、前記CPUを用いて、前記マスタ側特定ノードにノード識別子を付与し、前記マスタ側特定ノードの子孫ノードとして、前記スレイブ側特定のノードの前記子孫ノードに、同じ世代のノードよりも子ノードを優先してノード識別子を付与し、当該子孫ノードのそれぞれにその親ノードのノード識別子を関連付ける手段と、
を含む、
請求項5に記載の情報処理装置。 - ツリー型データ構造をもつマスタ側データ及びツリー型データ構造をもつスレイブ側データを記憶する記憶装置を含み、前記記憶装置に記憶された前記マスタ側データ及び前記スレイブ側データのそれぞれは、ルート・ノードを含むノードに、同じ世代のノードよりも子ノードを優先して付与された連続する整数である固有のノード識別子が付与され、前記ルート・ノード以外のノードである非ルート・ノードの各々に付与されたノード識別子に前記非ルート・ノードの各々の親ノードに付与されたノード識別子が関連付けられ、前記非ルート・ノードの各々に付与されたノード識別子の順に、このノード識別子に関連付けられた前記親ノードに付与されたノード識別子が格納された配列によって、ノード間の親子関係が表現されている、コンピュータに、
前記スレイブ側データの前記親子関係を表現する配列中のスレイブ側特定ノードに付与されたノード識別子に関連付けられた前記親ノードのノード識別子が格納されている位置の次の位置から、前記スレイブ側特定ノードに付与されたノード識別子の値以上の値が格納されている連続領域を抽出することにより、前記スレイブ側特定ノードの全ての子孫ノードを特定する機能と、
前記スレイブ側特定ノードに対応した前記マスタ側データ中のマスタ側特定ノードの子孫ノードとして、前記スレイブ側特定ノードの前記子孫ノードを前記マスタ側データに挿入し、新たな親子関係を表現する情報を前記記憶装置に格納する機能と、
を実現させるためのプログラム。 - 前記新たな親子関係を表現する情報を前記記憶装置に格納する機能は、前記マスタ側データ中のノードと前記スレイブ側データ中の前記スレイブ側特定ノードの前記子孫ノードに、前記スレイブ側特定ノードの前記子孫ノードが前記マスタ側データ中の前記マスタ側特定ノードの子孫ノードに挿入される順序で、同じ世代のノードよりも子ノードを優先してノード識別子を付与し、当該ノード識別子の順に対応する親ノードのノード識別子を関連付けることにより、前記マスタ側データのノード間の親子関係を表現する配列に前記スレイブ側データ中の前記スレイブ側特定ノードの前記子孫ノードの親子関係を表現する配列が挿入された新たな親子関係を表現する配列を生成する機能を含む、
請求項7に記載のプログラム。 - 前記新たな親子関係を表現する配列を生成する機能は、
前記マスタ側データのノードが前記マスタ側特定ノードであるかどうかを判定する機能と、
前記マスタ側データのノードが前記マスタ側特定ノードではない場合、当該ノードに同じ世代のノードよりも子ノードを優先してノード識別子を付与し、当該ノードの当該ノード識別子に当該ノードの親ノードのノード識別子を関連付ける機能と、
前記マスタ側データのノードが前記マスタ側特定ノードである場合、前記マスタ側特定ノードにノード識別子を付与し、前記マスタ側特定ノードの子孫ノードとして、前記スレイブ側特定のノードの前記子孫ノードに、同じ世代のノードよりも子ノードを優先してノード識別子を付与し、当該子孫ノードのそれぞれにその親ノードのノード識別子を関連付ける機能と、
を含む、
請求項8に記載のプログラム。 - 請求項7乃至9のうちいずれか1項に記載のプログラムを記録したコンピュータ読み取り可能な記録媒体。
Applications Claiming Priority (3)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
JP2004184497 | 2004-06-23 | ||
JP2004184497 | 2004-06-23 | ||
PCT/JP2005/011237 WO2006001241A1 (ja) | 2004-06-23 | 2005-06-20 | ノードを挿入する方法、装置及びプログラム |
Publications (2)
Publication Number | Publication Date |
---|---|
JPWO2006001241A1 JPWO2006001241A1 (ja) | 2008-07-31 |
JP4681555B2 true JP4681555B2 (ja) | 2011-05-11 |
Family
ID=35781724
Family Applications (1)
Application Number | Title | Priority Date | Filing Date |
---|---|---|---|
JP2006528509A Expired - Fee Related JP4681555B2 (ja) | 2004-06-23 | 2005-06-20 | ノード挿入方法、情報処理装置、および、ノード挿入プログラム |
Country Status (3)
Country | Link |
---|---|
US (1) | US20090019067A1 (ja) |
JP (1) | JP4681555B2 (ja) |
WO (1) | WO2006001241A1 (ja) |
Families Citing this family (6)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
WO2006080268A1 (ja) * | 2005-01-25 | 2006-08-03 | Turbo Data Laboratories Inc. | ツリーの検索、集計、ソート方法、情報処理装置、および、ツリーの検索、集計、ソートプログラム |
US8825710B2 (en) * | 2011-05-26 | 2014-09-02 | Planet Technologies | Cloud computing method for dynamically scaling a process across physical machine boundaries |
CA2815156C (en) * | 2013-05-06 | 2020-05-05 | Ibm Canada Limited - Ibm Canada Limitee | Document order management via relaxed node indexing |
US20160217302A1 (en) * | 2015-01-23 | 2016-07-28 | Karim Kassam | High-speed, hacker-resistant computer data storage and retrieval system |
KR102300791B1 (ko) * | 2017-03-20 | 2021-09-09 | 엘지전자 주식회사 | 공기조화기 및 그 제어방법 |
US10872090B2 (en) * | 2018-09-18 | 2020-12-22 | Mastercard International Incorporated | Generating test data based on data value rules of linked data nodes |
Citations (3)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
JPS648448A (en) * | 1987-07-01 | 1989-01-12 | Hitachi Ltd | Expression system for tree structure data |
JP2003271443A (ja) * | 2002-03-15 | 2003-09-26 | Toshiba Corp | 構造化データ格納システムおよび方法、構造化データ検索システムおよび方法、記録媒体 |
US20030236968A1 (en) * | 2002-06-19 | 2003-12-25 | Anindya Basu | Method and apparatus for generating efficient data structures for use in pipelined forwarding engines |
Family Cites Families (5)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
US6426750B1 (en) * | 1998-07-14 | 2002-07-30 | Microsoft Corporation | Run-time geomorphs |
EP1764710A4 (en) * | 2004-06-03 | 2009-03-18 | Turbo Data Lab Inc | LAYOUT GENERATION PROCESS, INFORMATION PROCESSING DEVICE AND PROGRAM |
EP1800227A2 (en) * | 2004-10-04 | 2007-06-27 | Clearpace Software Limited | Method and system for implementing an enhanced database |
US8209305B2 (en) * | 2006-04-19 | 2012-06-26 | Microsoft Corporation | Incremental update scheme for hyperlink database |
US8392366B2 (en) * | 2006-08-29 | 2013-03-05 | Microsoft Corporation | Changing number of machines running distributed hyperlink database |
-
2005
- 2005-06-20 JP JP2006528509A patent/JP4681555B2/ja not_active Expired - Fee Related
- 2005-06-20 US US11/571,191 patent/US20090019067A1/en not_active Abandoned
- 2005-06-20 WO PCT/JP2005/011237 patent/WO2006001241A1/ja active Application Filing
Patent Citations (3)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
JPS648448A (en) * | 1987-07-01 | 1989-01-12 | Hitachi Ltd | Expression system for tree structure data |
JP2003271443A (ja) * | 2002-03-15 | 2003-09-26 | Toshiba Corp | 構造化データ格納システムおよび方法、構造化データ検索システムおよび方法、記録媒体 |
US20030236968A1 (en) * | 2002-06-19 | 2003-12-25 | Anindya Basu | Method and apparatus for generating efficient data structures for use in pipelined forwarding engines |
Also Published As
Publication number | Publication date |
---|---|
WO2006001241A1 (ja) | 2006-01-05 |
JPWO2006001241A1 (ja) | 2008-07-31 |
US20090019067A1 (en) | 2009-01-15 |
Similar Documents
Publication | Publication Date | Title |
---|---|---|
JP4886693B2 (ja) | 情報処理方法、情報処理装置および情報処理プログラム | |
JP4537391B2 (ja) | ツリー型データ構造を取り扱う方法、情報処理装置、及び、プログラム | |
JP4681544B2 (ja) | 配列の生成方法、情報処理装置、及び、プログラム | |
JP4653157B2 (ja) | ツリーの検索、集計、ソート方法、情報処理装置、および、ツリーの検索、集計、ソートプログラム | |
JP4712718B2 (ja) | 配列の生成方法、及び、配列生成プログラム | |
US7353222B2 (en) | System and method for the storage, indexing and retrieval of XML documents using relational databases | |
JP5241738B2 (ja) | 表からツリー構造データを構築する方法及び装置 | |
JP4796970B2 (ja) | ツリーデータの検索・集計・ソート方法及びプログラム | |
KR101581980B1 (ko) | 계층적 데이터의 페이징 | |
JP4681555B2 (ja) | ノード挿入方法、情報処理装置、および、ノード挿入プログラム | |
IL157575A (en) | Encoding structural information in part for efficient search and browsing of information | |
CN102768674B (zh) | 一种基于路径结构的xml数据存储方法 | |
WO2015010509A1 (zh) | 一种基于一维线性空间实现Trie树的词典检索方法 | |
JP2011154653A (ja) | データモデリング方法及び装置及びプログラム | |
CN114372174A (zh) | 一种xml文档分布式查询方法及系统 | |
US7953761B2 (en) | System, method, and apparatus for retrieving structured document and apparatus for managing structured document | |
JP2006031377A (ja) | 構造化文書管理装置、検索装置、記憶方法、検索方法及びプログラム | |
JP4013632B2 (ja) | Xmlフォーマットデータ重複排除方法及び装置及びプログラム及びコンピュータ読み取り可能な記録媒体 | |
JP2004310249A (ja) | Xmlデータの検索方法及び検索装置、並びにプログラムおよびプログラムを記録した記録媒体 | |
JP2001134596A (ja) | 構造化文書管理装置および構造化文書検索方法 | |
JPH02190970A (ja) | インデクスの構造およびこれを用いるサーチ処理方法 | |
JP2002183142A (ja) | データ格納装置、データ格納方法及びデータ格納方法をコンピュータに実行させるためのプログラムを記録したコンピュータ読み取り可能な記録媒体 | |
Dweib et al. | MAXDOR Model |
Legal Events
Date | Code | Title | Description |
---|---|---|---|
A621 | Written request for application examination |
Free format text: JAPANESE INTERMEDIATE CODE: A621 Effective date: 20080520 |
|
A131 | Notification of reasons for refusal |
Free format text: JAPANESE INTERMEDIATE CODE: A131 Effective date: 20101109 |
|
A521 | Request for written amendment filed |
Free format text: JAPANESE INTERMEDIATE CODE: A523 Effective date: 20101214 |
|
TRDD | Decision of grant or rejection written | ||
A01 | Written decision to grant a patent or to grant a registration (utility model) |
Free format text: JAPANESE INTERMEDIATE CODE: A01 Effective date: 20110201 |
|
A01 | Written decision to grant a patent or to grant a registration (utility model) |
Free format text: JAPANESE INTERMEDIATE CODE: A01 |
|
A61 | First payment of annual fees (during grant procedure) |
Free format text: JAPANESE INTERMEDIATE CODE: A61 Effective date: 20110204 |
|
R150 | Certificate of patent or registration of utility model |
Free format text: JAPANESE INTERMEDIATE CODE: R150 |
|
FPAY | Renewal fee payment (event date is renewal date of database) |
Free format text: PAYMENT UNTIL: 20140210 Year of fee payment: 3 |
|
LAPS | Cancellation because of no payment of annual fees |