(57)【特許請求の範囲】
【請求項１】
データベースと、前記データベースに蓄積されるべきデータと検索条件とを入力する入力部と、前記データベースに対してデータを読み書きするデータベース管理システムと、前記データベースに蓄積されたデータの検索結果を出力する出力部と、を備えるデータベース装置において、
前記データベース装置内において定義される各項目の項目名とデータタイプと項目長とを、１又は複数の独立したパケットに関係付けて記憶する項目定義領域の生成手段と、
前記項目定義領域生成手段により定義された各項目に係るレコードを、前記１又は複数の独立したパケットのパケットアドレスに関係付けて記憶するレコード管理領域の生成手段と、
前記入力部より入力されたデータと前記レコード管理領域を参照して生成するデータ領域の生成手段と、
データの検索の際には、前記入力部より入力されたデータと前記レコード管理領域において管理されているレコードのデータとが検索条件に合致するとき前記データ領域から合致したデータを抽出する抽出手段と、
前記抽出手段により抽出されたデータを出力する出力手段と、
を備え、
前記項目定義領域手段及び前記レコード管理領域生成手段は、前記１又は複数の独立したパケットのパケットアドレスを管理するノード・アロケーション・テーブルと各レコードの基本的な情報、位置、サイズを管理するノード・ディスクリプタとを用いて、前記項目と前記レコードとを管理することを特徴とする可変長データベース装置。
【請求項２】
前記項目定義領域、前記レコード管理領域及び前記データ領域は、可変長に構成されることを特徴とする請求項１に記載の可変長データベース装置。
【請求項３】
前記データのデータタイプ、データ長及びデータの内容は、データ毎に設定されることを特徴とする請求項１に記載の可変長データベース装置。
【請求項４】
前記項目定義領域、前記レコード管理領域及び前記データ領域におけるデータテーブルは、１又は複数のパケットとクラスタで構成されていることを特徴とする請求項２に記載の可変長データベースアクセス装置。
【請求項５】
前記データテーブルへのアクセスは、パケット単位で行なわれることを特徴とする請求項４に記載の可変長データベース装置。
【請求項６】
前記データテーブルの最初のクラスタの先頭パケットは、テーブル・コントロール・パケットであることを特徴とする請求項５に記載の可変長データベース装置。
【請求項７】
前記データテーブルの２番目以降の前記クラスタの先頭パケットは、パケットの使用状態を示すパケット・コントロール・テーブルであることを特徴とする請求項６に記載の可変長データベース装置。
【請求項８】
前記パケットのサイズは、任意に設定できることを特徴とする請求項４に記載の可変長データベース装置。
【請求項９】
前記クラスタに含まれるパケットの数は、パケットのサイズがｎバイトの時は８ｎ個であることを特徴とする請求項８に記載の可変長データベース装置。
【請求項１０】
前記クラスタのサイズは、パケットのサイズがｎバイトの時は８ｎの二乗バイトであることを特徴とする請求項９に記載の可変長データベース装置。
【請求項１１】
前記レコードのデータサイズがパケットのサイズより大きい場合は、複数のパケットに分割されて格納されることを特徴とする請求項１０記載の可変長データベース装置。
【請求項１２】
前記分割されて格納されたデータのアドレッシングは、間接的に該パケットを参照することを特徴とする請求項１１に記載の可変長データベース装置。
【請求項１３】
前記間接的なアドレッシングは、前記ノード・ディスクリプタがノード・アロケーション・テーブルを指し、前記ノード・アロケーション・テーブルが管理する前記パケット・アドレスにより、当該パケットが参照されることを特徴とする請求項１２に記載の可変長データベース装置。
【請求項１４】
前記アドレッシングは、１パケットがｎバイトの時に８分のｎの二乗バイト（ｎ２／８）までのレコードを間接アドレッシングすることを特徴とする請求項１３に記載の可変長データベース装置。
【請求項１５】
前記間接アドレッシングで、レコードサイズが前記パケットのサイズ以上である場合は、１又は複数段階の間接アドレッシングを管理することを特徴とする請求項１４に記載の可変長データベース装置。
【請求項１６】
前記パケットは、独立しており、ファイル上での連続性や格納位置に制限されないことを特徴とする請求項８に記載の可変長データベース装置。
【請求項１７】
前記データベース管理システムは、インターネットを利用したマルチメディアデータのデータ種別を判断する手段を有し、当該マルチメディアデータを前記データベースに記憶することを特徴とする請求項８に記載の可変長データベース装置。
【請求項１８】
データベースに蓄積されるべきデータと検索条件とを入力し、入力されたデータを記憶し、前記記憶されたデータを検索して出力する方法であって、
前記データベース装置内において定義される各項目の項目名とデータタイプと項目長とを、１又は複数の独立したパケットに関係付けて記憶する項目定義領域を生成する工程と、
前記項目定義領域生成手段により定義された各項目に係るレコードを、前記１又は複数の独立したパケットのパケットアドレスに関係付けて記憶するレコード管理領域を生成する工程と、
前記入力部より入力されたデータと前記レコード管理領域を参照してデータ領域を生成する工程と、
データの検索の際に、前記入力されたデータと前記レコード管理領域において管理されているレコードのデータとが検索条件に合致するとき前記データ領域から合致したデータを抽出する工程と、
前記抽出手段により抽出されたデータを出力する工程と、
の各工程を有し、
前記項目定義領域を生成する工程及び前記レコード管理領域を生成する工程においては、前記１又は複数の独立したパケットのパケットアドレスを管理するノード・アロケーション・テーブルと各レコードの基本的な情報、位置、サイズを管理するノード・ディスクリプタとを用いて、前記項目と前記レコードとを管理することを特徴とする可変長データベースアクセス方法。
【請求項１９】
前記データのデータタイプ、データ長及びデータの内容は、データ毎に設定されることを特徴とする請求項１８に記載の可変長データベースアクセス方法。
【請求項２０】
前記項目定義領域、前記レコード管理領域及び前記データ領域におけるデータテーブルは、１又は複数のパケットとクラスタで構成されていることを特徴とする請求項１８に記載の可変長データベースアクセス方法。
【請求項２１】
前記データテーブルへのアクセスは、パケット単位で行なわれることを特徴とする請求項２０に記載の可変長データベースアクセス方法。
【請求項２２】
前記データテーブルの最初のクラスタの先頭パケットは、テーブル・コントロール・パケットであることを特徴とする請求項２１に記載の可変長データベースアクセス方法。
【請求項２３】
前記データテーブルの２番目以降の前記クラスタの先頭パケットは、パケットの使用状態を示すパケット・コントロール・テーブルであることを特徴とする請求項２２に記載の可変長データベースアクセス方法。
【請求項２４】
前記パケットのサイズは、任意に設定できることを特徴とする請求項１８に記載の可変長データベースアクセス方法。
【請求項２５】
前記クラスタに含まれるパケットの数は、パケットのサイズがｎバイトの時は８ｎ個であることを特徴とする請求項２４に記載の可変長データベースアクセス方法。
【請求項２６】
前記クラスタのサイズは、パケットのサイズがｎバイトの時は８ｎの二乗バイトであることを特徴とする請求項２５に記載の可変長データベースアクセス方法。
【請求項２７】
前記レコードのデータサイズがパケットのサイズより大きい場合は、複数のパケットに分割されて格納されることを特徴とする請求項２６に記載の可変長データベースアクセス方法。
【請求項２８】
前記分割されて格納されたデータへのアドレッシングは、間接的に該パケットを参照することを特徴とする請求項２７に記載の可変長データベースアクセス方法。
【請求項２９】
前記間接的なアドレッシングは、前記ノード・ディスクリプタがノード・アロケーション・テーブルを指し、前記ノード・アロケーション・テーブルが管理する前記パケット・アドレスにより、当該パケットが参照されることを特徴とする請求項２８に記載の可変長データベースアクセス方法。
【発明の詳細な説明】
【０００１】
【発明の属する技術分野】
本発明は、コード化された文字データのみならず、画像データ、音声データ、ムービーデータなどのマルチメディアデータも取り扱うことができるデータベースシステムであって、データの追加、変更、削除をデータベースシステム稼動中に行うことが可能で、データベースの構成を再構築する必要がない可変長データベース装置及びデータベースアクセス方法に関する。
【０００２】
【従来の技術】
データベースは、各種データを対応付けて蓄積し、必要に応じて所望のデータを検索・出力するものである。従来のデータベースシステムは、データを蓄積するデータベースと、このデータベースに対してデータを読み書きするデータベース管理システムと、データベースを運用管理するサーバとサーバ上でデータベースを用いた各種の機能を実現するアプリケーションからなっている。
【０００３】
今まで種々のデータベースが存在したが、現在はリレーショナルデータベースが通常使用されている。このリレーショナルデータベースは、全てのデータを表を用いて関連付け、その関係をテーブルに構成し格納する方法である。データは他のデータテーブルと関連付けられて、定められた長さで、定められたタイプで、定められた領域に、定められた順番で保管されている。このように従来のデータベース構造は、管理するデータのレコード長や項目長が固定長であった。そのため常にデータの整合性が保たれていないとシステムはエラーとなり停止してしまう。データベーステーブルの定義や構造に関する追加や変更が発生した場合に、その部分だけ追加や変更しただけでは、既にあるデータとの整合性が取れなくなる。整合性を保つためには、システムを停止させ時間をかけて関連する全てのデータの変更を行なう必要があった。
【０００４】
また、マルチメディアデータなどに対してはＢＬＯＢ（Binary Large Object）型などで管理するか、データを外部ファイルとして保存し、それをファイル名と対応させる方法で管理していた。そのためデータベースに一元性がなくシステムの管理も複雑になりシステム効率も悪かった。
【０００５】
【発明が解決しようとする課題】
急速な情報技術の進歩により、益々、ＩＴ（Information
Technology）を利用した種々の社会活動や経済活動が行なわれるようになってくる。さらに、データ処理機器と通信技術の発達により様々な種類のデータが交信されるようになっている。このような環境において、膨大な量のデータを効率よく取り扱う方法を確立することの重要性が益々高まっている。
【０００６】
従来のデータベースは業務やサービスに対して効率よくデータ処理を行なうために、その業務やサービスに特化した設計がなされているため、業務内容の変更にともない既に構築されているデータベースを変更することは多大な労力を必要としている。またデータベースのテーブルは、レコード長や項目データ長が固定長で規則正しく順に詰められて管理されている。希望のレコードをアクセスする時は、格納されているレコードのアドレスを計算して当該レコードの位置を決めアクセスすることとなる。したがってデータ構造も固定的である必要がある。
【０００７】
このような構造から、項目等の登録の変更を行なうと、関連する全てのレコードを変更しないとデータの整合性がなくなりデータベーステーブルへのアクセスが不可能となる。データの整合性を維持するために、データベースを再構築するためには、システムを停止する必要があった。
【０００８】
今後、データによっては、マルチメディアデータのように長さの極端に異なるデータを取り扱うことが必要になる。データの長さの設定は、通常使用するアプリケーション等で考えられる最大の長さを設定し定義する。このような場合は、テーブルが冗長になってしまい資源の利用効率が悪くなり、データベースの管理も大変になる。そのため、マルチメディアデータを取り扱うためにオブジェクト指向のデータベースも考えられているが、一般的に使用されているデータベースとその構造が異なる。したがって、従来のデータベースのなかに取り込むことは困難であった。
【０００９】
さらに、インターネットの普及によりインターネットとの親和性に優れているＸＭＬ（Extensible Markup Language）等の言語の利用性が高まっている。従来のデータベースシステムでは、ＸＭＬによる柔軟な項目定義と構造化されたデータ構造に対応することが出来ない。ＸＭＬの定義を行なう都度テーブルや構造の再定義が必要となる。その度にデータベースシステムを停止して、データベースの再構築を行なわなければならない。
【００１０】
本発明は、このような事情からなされたもので、レコードは可変長で、項目も可変長であり、且つ長大データを単一テーブルで管理可能とするデータベース装置とデータベースアクセス方法とを提供することである。
【００１１】
本発明は、さらに、テーブルの項目やレコードの仕様変更に伴ってデータベースを変更する場合、データベースを再構築することなしに、データの追加や変更等を行なうことが出来るデータベース装置を提供することを目的とする。
【００１２】
【課題を解決するための手段】
このような従来のデータベース構造に係わる課題を解決するために、本発明は項目、レコード及びデータを可変長データとして取扱うことを可能にするべく、データベースと、前記データベースに蓄積されるべきデータと検索条件とを入力する入力部と、前記データベースに対してデータを読み書きするデータベース管理システムと、前記データベースに蓄積されたデータの検索結果を出力する出力部と、を備えるデータベース装置において、前記データベース装置内において定義される各項目の項目名とデータタイプと項目長とを、１又は複数の独立したパケットに関係付けて記憶する項目定義領域の生成手段と、前記項目定義領域生成手段により定義された各項目に係るレコードを、前記１又は複数の独立したパケットのパケットアドレスに関係付けて記憶するレコード管理領域の生成手段と、前記入力部より入力されたデータと前記レコード管理領域を参照して生成するデータ領域の生成手段と、データの検索の際には、前記入力部より入力されたデータと前記レコード管理領域において管理されているレコードのデータとが検索条件に合致するとき前記データ領域から合致したデータを抽出する抽出手段と、前記抽出手段により抽出されたデータを出力する出力手段と、を備え、前記項目定義領域手段及び前記レコード管理領域生成手段は、前記１又は複数の独立したパケットのパケットアドレスを管理するノード・アロケーション・テーブルと各レコードの基本的な情報、位置、サイズを管理するノード・ディスクリプタとを用いて、前記項目と前記レコードとを管理することを特徴とする可変長データベース装置を提供するものである。
【００１３】
これにより、本可変長データベース装置においては、項目定義領域、レコード管理領域及びデータ領域が、可変長に構成される。そして、前記データのデータタイプ、データ長及びデータの内容は、データ毎に設定されるのである。
【００１４】
そして、項目定義領域、レコード管理領域及びデータ領域におけるデータテーブルは、１又は複数のパケットとクラスタで構成され、前記データテーブルへのアクセスは、パケット単位で行なわれるのである。
【００１５】
ところで、前記データテーブルの最初のクラスタの先頭パケットは、テーブル・コントロール・パケットであり、前記データテーブルの２番目以降の前記クラスタの先頭パケットは、パケットの使用状態を示すパケット・コントロール・テーブルである。
【００１６】
そして、前記パケットのサイズは、任意に設定できる。また、前記クラスタに含まれるパケットの数は、パケットのサイズがｎバイトの時は８ｎ個であり、前記クラスタのサイズは、パケットのサイズがｎバイトの時は８ｎの二乗バイトである。
【００１７】
また、前記レコードのデータサイズが予め設定された所定のパケットのサイズより大きい場合は、複数のパケットに分割されて格納され、前記分割されて格納されたデータのアドレッシングは、間接的に該パケットを参照することにより行われる。
【００１８】
さらに、前記間接的なアドレッシングは、前記ノード・ディスクリプタがノード・アロケーション・テーブルを指し、前記ノード・アロケーション・テーブルが管理する前記パケット・アドレスにより、当該パケットが参照されることとなる。
【００１９】
前記アドレッシングにおいては、１段のアドレッシングによって、１パケットがｎバイトの場合では８分のｎの二乗バイト（ｎ２／８）までのレコードを間接アドレッシングする。そして、前記間接アドレッシングでは、レコードサイズが前記パケットのアドレッシングできるサイズ以上である場合は、１又は複数段の間接アドレッシングを管理するのである。間接アドレッシングで管理できるレコードのサイズは、ｍ段の間接アドレッシングをする場合、（ｎｍ+１／８ｍ）バイトとなる。これにより、前記パケットは、独立しており、ファイル上での連続性や格納位置に制限されない。
【００２０】
前記データベース管理システムは、インターネットを利用したマルチメディアデータのデータ種別を判断する手段を有し、当該マルチメディアデータを前記データベースに記憶する。
【００２１】
本願は、さらに、データベースに蓄積されるべきデータと検索条件とを入力し、入力されたデータを記憶し、前記記憶されたデータを検索して出力する方法であって、前記データベース装置内において定義される各項目の項目名とデータタイプと項目長とを、１又は複数の独立したパケットに関係付けて記憶する項目定義領域を生成する工程と、前記項目定義領域生成手段により定義された各項目に係るレコードを、前記１又は複数の独立したパケットのパケットアドレスに関係付けて記憶するレコード管理領域を生成する工程と、前記入力部より入力されたデータと前記レコード管理領域を参照してデータ領域を生成する工程と、データの検索の際に、前記入力されたデータと前記レコード管理領域において管理されているレコードのデータとが検索条件に合致するとき前記データ領域から合致したデータを抽出する工程と、前記抽出手段により抽出されたデータを出力する工程と、の各工程を有し、前記項目定義領域を生成する工程及び前記レコード管理領域を生成する工程においては、前記１又は複数の独立したパケットのパケットアドレスを管理するノード・アロケーション・テーブルと各レコードの基本的な情報、位置、サイズを管理するノード・ディスクリプタとを用いて、前記項目と前記レコードとを管理することを特徴とする可変長データベースアクセス方法を提供するものである。
【００２２】
【００２３】
【００２４】
【００２５】
【００２６】
このように、本可変長データベースシステムにおいては、ファイル全体をパケットの集合体として管理することにより、項目定義構造体、レコード構造体、並びにデータレコード自体を可変長として取り扱うことを可能にしたのである。
【００２７】
また、本データベースシステムにおいては、項目やレコードの追加、変更、削除等が発生すると、発生都度そのデータを入力すればよい。入力したデータの処理がパケット単位に行なわれ、データの長さや位置に制限されず関連付けて格納される。このように次々と入力データを格納することが出来るので、これから益々利用されるインターネットを使った巨大なデータの処理にも対応できるのである。
【００２８】
本発明は、システムを稼動させたままで、データベースの構造の変更や、長大なマルチメディアのデータを効率良く管理する事が可能となる。又、これからの情報環境で要求されるシステム対応として、柔軟なデータ構造を持つＸＭＬなどの新しいフレキシブルなデータ構造に対する対応も本発明の可変長データベースで処理可能となる。
【００２９】
【発明の実施の形態】
本発明の１実施形態によるデータベース装置及び方法の例を図に基づいて説明する。
【００３０】
図１は実施形態の装置の構成例を示すブロック図である。符号１はデータが記憶媒体に格納されたデータベースである。符号２はデータベースに対してデータの入出力を行なうDatabase Management System（以下、「ＤＢＭＳ」という）である。符号３はデータの入力部である。符号３はデータの項目を定義する項目定義部、符号４は前記項目を関連付けてレコードを定義するレコード定義部である。符号６はデータベースから取り出されたデータを一時格納するデータ格納部である。符号７は格納されたデータをアクセスし出力する出力部である。
【００３１】
つぎに前記装置を用いて行う可変長データベースの構成を説明する。図２は本発明での可変長のデータベーステーブルの基本構成である。
【００３２】
本発明の可変長データベース（Variable
Storage Data Base、以下、「ＶＳＤＢ」という）は、データベーステーブル全体をパケットの集合体として管理する。ＶＳＤＢファイルはパケットを、従来のファイル・システムと同様の方法で連結することで可変長のレコードのアクセスを実現している。このことにより、項目定義構造体、レコード構造体及びレコード自体が、各々可変長として取り扱えるようになるものである。
【００３３】
テーブルはクラスタとパケットで構成され、アクセスは基本的にパケット単位で行なわれる。クラスタはパケットを管理する上での便宜上のアクセス単位である。また、クラスタは格納するデータが増えることにより次々増加させることが出来る。
【００３４】
本発明のデータベースは、固定長のパケットを連結することで可変長のレコードを実現することを可能にする。データは１つのパケットに収まるうちは同じパケット内に保存される。一つのパケットに収まらないデータは複数のパケットに分割されて格納され、ノード・アロケーション・テーブルによって管理される。ノード・アロケーション・テーブルを指し示すのがノード・ディスクリプタで、これらが集まって各ノードを管理する。
【００３５】
パケットは、テーブルで取り扱う基本的な単位で、一般的なファイル・システムのセクタに相当する。同様にクラスタは、一定の個数のパケットで構成されるパケットを管理する単位である。その先頭には当該クラスタ内に登録されているパケットの使用状態を示すパケット・コントロール・テーブル（以後ＰＣＴという。）パケット１２がある。最初のクラスタ１１の、言い換えれば第１クラスタの最初のパケットは、テーブル・コントロール・パケット１１もしくは単にテーブルヘッダと呼ぶもので、テーブルの基本的な情報が格納される。パケットの先頭の６４バイトは、ファイル作成時に決定されるヘッダで、変更されることは無い。  続く１９２バイトは、ＶＳＤＢシステムが管理するコントロール領域である。それ以降のクラスタ（第２クラスタ以降）にはこのような例外的なパケットは存在せず、必ずＰＣＴパケット１２がありそれに続いてデータパケット１３の順となる。
【００３６】
パケットのサイズは２５６バイトの整数倍で、１クラスタに属することの出来るパケットの個数は、パケット・サイズがｎバイトの場合８ｎ個で、クラスタのサイズは８ｎ２バイトとなる。
【００３７】
ＰＣＴパケットの構成を図３（ａ）に基づき説明する。ここで取り扱うデータの１バイトは、８ビット構成である。基本的にＰＣＴパケット３１のサイズは２５６バイトである。ＰＣＴパケットのバイト０番目３２で、ビット０がパケット０を示し、ビット１がパケット１を示す。バイト１番目のビット０はパケット８を示す。このようにして、クラスタの最後のパケット２０４７は、２５５バイト目３３のビット７で示される。
【００３８】
パケットには、クラスタの使用状況を表すＰＣＴパケットと実際のデータを表すデータパケットと、レコードの配置情報を記録したレノード・アロケーション・テーブル・パケットの３種類がある。
【００３９】
テーブルへのアクセスは長さが一定でない可変長レコードを基本に行なわれる。テーブルではアクセスするための最小単位がパケットであるが、大きなデータや可変長のデータを管理するためにパケットを複数個束ねて管理する。このパケットの束ねを管理するのがノード・ディスクリプタ及びノード・アロケーション・テーブルである。レコードの基本的な情報、位置・サイズなどは、ノード・ディスクリプタで管理される。
【００４０】
図３（ｂ）は、ノード・ディスクリプタの構成を示す。
【００４１】
テーブル・コントロール・パケット１１内には、ノード・ディスクリプタ４１がある。ノード・ディスクリプタの構成は、レコードのステータス、タイプ、リンク・カウンタ、レコードサイズ、パケット・アドレス等を表す１６バイトのデータで構成されている。
【００４２】
ステータスは１バイトの情報で、このレコードの使用状態やアクセスの状態等を示している。０ビット目から２ビット目は間接アドレスの段数を表し、３ビット目と４ビット目はアクセス許可を、５ビット目はリンクフラグを、６ビット目と７ビット目はレコードの状態を表している。
【００４３】
ステータス情報の６ビット目と７ビット目で示すレコードの状態は、未使用、トラッシュ、使用中、破棄の情報である。また５ビット目のリンクフラグが１であれば、このレコードが仮想レコードであることを示す。仮想レコードの場合、レコード・ディスクリプタの構成はこれとは異なる。タイプはそのレコードの使用目的を示す。
【００４４】
ステータス情報の５ビット目のアクセス許可は、２ビットの情報で、それぞれ以下の意味を持つ。２ビットが００は、アクセス不可を示し、０１はユーザー読み込み可能を示し、１０はユーザー書込み可能を示し、１１は、ユーザー読み書き可能を示している。
【００４５】
ステータス情報の０，１，２ビット目の間接アドレス段数は０から４である。０の時はノード・ディスクリプタが直接レコードデータを示す。１の時、レコード・ディスクリプタの示すパケットは、ノード・アロケーション・テーブルを示し、ノード・アロケーション・テーブルから実データへのリンクが実現される。
【００４６】
レコードディスクリプタ―の１バイト目のタイプは、１バイトで、そのレコードの使用目的を示すデータである。
【００４７】
レコードディスクリプタ―の２バイト目のリンク・カウンタは、このレコード番号を参照している仮想レコードの本数を示す。仮想レコードがリンクされると、インクリメントされ仮想レコードのリンクが解除されるとデクリメントされる。
【００４８】
レコードディスクリプタ―の４バイト目の更新日時はレコードが最後に更新された年、月、日、時、分、秒を保存する。
【００４９】
レコードディスクリプタ―の８バイト目のレコードサイズは実際のレコードの長さを、バイト単位で表します。
【００５０】
レコードディスクリプタ―の１２バイト目のパケット・アドレスは、レコード・データ・パケット又は、ルート・レコード・アドレス・テーブル・パケットを示すパケット・アドレスを示す。アドレスは、２０ビットでクラスタアドレスを表し、１１ビットでパケット・アドレスを表す。
【００５１】
仮想レコード・ディスクリプタは普通のレコード・ディスクリプタと異なり、タイプ、リンク・カウント、更新日時、レコードサイズを持たない。また、本来パケット・アドレスが入っているフィールドには、リンク先のレコードアドレスが入っている。
【００５２】
図４はノード・ディスクリプタが行なうパケットのアドレッシングの状態を示す例である。ノード・ディスクリプタは、レコードのサイズ、配置、タイプなどを表す１６バイトのデータである。レコードに登録されているデータは、パケットに収められ保管されている。したがって、レコードの長さがパケット・サイズより小さい場合は、ノード・ディスクリプタはノード内のデータが入った当該パケットを直接指し示す。図４（ａ）はこの状態を示す。レコードのデータがパケット・サイズより大きい場合は、間接的にパケットを指すようになる。
【００５３】
図４（ｂ）はこの状態を示す。この場合ノード・ディスクリプタ４１はノード・アロケーション・テーブル４２を指し、ノード・アロケーション・テーブルが管理するパケット・アドレスによってパケットを参照する。この方法を間接アドレッシングという。この一段の間接アドレッシングをする方法によって１パケットがｎバイトの時に８分のｎ２バイトまでレコードを管理することができる。
【００５４】
図４（ｂ）に示すように１個のパケットに入りきらないデータの場合は、２個以上のパケットに跨って登録される。これらのデータの登録されたパケットを指し示すパケット・アドレス・パケットの集まりを、ノード・アロケーション・テーブルと呼ぶ。
【００５５】
さらにこれ以上の大きなサイズのデータには、２段階以上の間接アドレッシングで管理できる。図４（ｃ）は２段階の間接アドレッシングの例である。間接アドレッシングで管理可能なデータサイズは、１パケットがｎバイトのとき、２段ではｎ３／６４バイト、３段ではｎ４／５１２バイト、４段ではｎ５／４０９６バイトまで管理が可能である。これを計算式に表すと、パケット・サイズ＝ｎバイト、ｍ段の管理サイズ＝ｎｍ＋１／８ｍバイトとなる。必要とするパケットの個数が、ノード・アロケーション・テーブルの容量に満たない時は、ヌルで埋められることになる。
【００５６】
図５は項目定義領域のアクセス状態について説明した図である。説明を簡単にするためここでは２段のノード・アロケーション・テーブルを持つとした場合を例として示している。
【００５７】
項目定義領域は、ノード・ディスクリプタ及びノード・アロケーション・テーブルで管理されたパケットに保存される。各パケットは独立しており、実際のファイル５１上での連続性や位置には依存しない。図５に示すように、パケットはパケット８，パケット２，パケット４の順番で保管されており連続していない。しかし、仮想的なファイルイメージ５２では連続したデータ構造として扱うことができる。
【００５８】
図５に示すように項目定義情報は、実際のファイル領域に保存された不連続なパケットの集合である。仮想的なイメージとしては不連続なパケットを繋ぎあわせて連続した状態にある。パケットの追加や削除により項目定義領域サイズに増減があっても、そのことでファイル全体への変更作業は発生しない。追加の場合は、使用していないパケットを、項目定義領域用のパケットとして加えればよい。削除の場合は、当該パケットを削除するのみでありファイル全体への変更は発生しない。これらのことからデータベース再構築の必要はない。
【００５９】
図６はレコード管理領域のアクセス状態を示している。
【００６０】
レコード管理領域も項目定義領域と同様に、ノード・ディスクリプタ及びノード・アロケーション・テーブルで管理されたパケットに保存される。各パケットは独立しており、ファイル上での連続性や位置の指定は必要でない。図は基本的に項目定義領域と同じで、パケット１から順に、ある一定個数のノード・ディスクリプタがノード・アロケーション・テーブルを介して不連続に保存されているパケットを繋ぎあわせた状態で保存されている。仮想的なイメージとしては不連続なパケットを繋ぎあわせて連続した状態にある。各ノードのデータ領域には、パケット中に保存されているノード・ディスクリプタを使ってアクセスする。
【００６１】
図７は、データレコードの構成例を示す。
【００６２】
データ領域も基本的には項目定義領域やレコード定義領域と同様、ノード・ディスクリプタ及びノード・アロケーション・テーブルで管理されたパケットに保存される。各パケットは独立しており、ファイル上での連続性や位置には依存しない。データ領域のアクセス方法は先の説明した項目定義領域と同じで、不連続なパケットを仮想的に繋ぎあわせて、１つの長いデータレコードとしてアクセスされる。仮想的なイメージとしては不連続なパケットを繋ぎあわせて連続した状態にある。このようにパケットとパケットの格納には連続した格納は必要ないので、すでに格納されたパケットの位置を変える必要がない。したがって、パケットの追加や削除により項目定義領域サイズに増減があっても、そのことでファイル全体への変更作業は発生しない。
【００６３】
パケットを追加する場合は、使用していないパケットを項目定義領域用のパケットとして加えればよい。削除の場合は、当該パケットを削除するのみでありデータベース再構築の必要はない。
【００６４】
一般的に可変長構造のレコードの内部は、１個以上の可変長項目（フィールド）で構成される。項目は、種類や大きさを記述した項目ヘッダとそれぞれの項目によって異なる項目本体からなっている。図７に示した例のデータレコードの中に項目定義領域で定義されたデータが保存される。データはデータタイプとデータ長とデータで構成されている。データタイプは、データの種類を示し、その種類はレコードの種類によって異なるが、レコードの開始ＢＯＤと終わりＥＯＲのフォーマットはシステムで定められている。データ長は項目本体の長さを示す。
【００６５】
項目本体のフォーマットは、レコードのタイプによって決められるため不定である。基本的に、項目定義等による制限を受けない限り、データのタイプやデータ長はそのデータ毎に任意に設定可能で、長さやタイプの違うデータを登録することが可能である。また長大なデータを登録する場合、パケット数個にまたがり登録されるが、テーブル全体を変更するような作業は発生しない。
【００６６】
つぎにデータベーステーブルに新しく項目を追加する作業について、図８に基づき説明する。説明はパケットによる不連続に格納されているイメージを省略して、データの格納が連続しているイメージで説明する。
【００６７】
既存の項目定義に対して新項目Ｘ８１を追加する場合の作業である。項目の並びと項目の順序は互いに関連しないので、イメージ的には項目ｍ８２の後ろに項目Ｘを追加するような格好になる。項目Ｘ分のスペースがパケットに残っている場合は、そのパケットに項目Ｘのデータが書き込まれるが、パケットから溢れる場合は、新しくパケットを追加してそこに書き込まれることになる。データの領域はデータが登録又は更新された時にパケット単位で作成されるので、項目が追加されてもデータベーステーブルの全面更新をする必要はない。
【００６８】
削除作業について図９に基づき説明する。項目定義領域から既存項目である項目Ｘを削除する。実際には定義領域の項目Ｘを削除するのではなく、項目Ｘに削除フラグ９１がセットされる。データの領域は直ぐには削除されず、データの更新時に始めて削除される。したがって項目が削除されてもデータベーステーブルの全面的な更新をする必要はない。実際に削除されるまで項目情報に削除フラグがセットされているので、そのデータにアクセス出来ないように制御されている。
【００６９】
項目長の変更について図１０に基づき説明する。項目定義領域の既存項目である項目Ｘの項目長を変更する作業である。項目定義を変更しても項目自体はデータが変更されない限り変更されない。従って、データがデータベースのデータ領域に登録される時に初めて更新される。データがパケットより溢れた場合は、そっくり別のパケットに登録される。別のパケットに登録された項目Ｘが占めていた空のデータ領域は、他のデータに使用されるか若しくはブランクのまま残ることとなる。したがって、項目が変更されてもデータベーステーブルの全面的な更新をする必要はない。
【００７０】
項目データ内のタイプを変更する作業につき図１１に基づき説明する。項目定義を変更しても項目のデータにはそれぞれデータのタイプが記録されており、項目定義のタイプを変更してもデータは変更する必要はない。従って、項目Ｘに定義されているタイプの定義を変更してもデータは変更する必要がない。実際に項目定義中で定義している項目のタイプは入出力時の項目タイプを規定しているだけで、実データのタイプを規制するものではない。従って項目タイプが変更されてもデータベーステーブルの全面的な変更作業をする必要がない。
【００７１】
本発明の基本構成について説明してきたが、本発明のシステムを運用するためのＶＳＤＢシステムが提供している機能について説明する。
【００７２】
まず、ＶＳＤＢシステムに関するものについては、ＶＳＤＢシステムの初期化と終了がある。
【００７３】
ＶＳＤＢファイルに関するものとしては、ファイルのオープン及び作成、ファイルのクローズ、ファイルの１時クローズ、ファイルの再オープン、ファイルに登録されているレコード数、パスワードの解除、パスワードの設定がある。
【００７４】
レコードレベルに関するものは、レコードのオープン・作成、管理レコードのオープン、レコードのクローズ、レコードの削除、レコード番号の取得、仮想レコードの作成、レコードの読み込み、レコードの書込み、シークポインターの移動、項目単位の読み込み、項目単位の書込み、レコードタイプの設定・取得、レコードのアクセス時刻の変更、レコードモードの変更がある。
【００７５】
ＶＳＤＢシステムの初期化は、ＶＳＤＢファイルの初期化を行なう。広域的な変数やポインタの初期化、キャッシュなどの初期化、キャッシュメモリの取得などを行なう。終了は、オープンされているＶＳＤＢファイルが存在すればクローズし、キャッシュメモリを開放する。
【００７６】
ファイルのオープン・作成では、ＶＳＤＢファイルをオープンする。ファイル名とエラーモードをパラメータに渡し、ＶＳＤＢ管理領域へのポインタを返す。オープンモードは、ファイルが存在しない場合に作成するかどうか、また、ファイルが壊れている場合に強制的にオープンするかなどの指定を行なう。この指定は、ＯＲで結合して指定することが出来る。動作は、必要なメモリを取得し、ヘッダやコントロールなどのファイル管理情報を読み込む。ヘッダやコントロールにエラーがあり、強制オープンを指定していない場合、ＮＵＬＬポインタを返し、エラーコードを広域変数に設定する。また必要なメディア情報を取得する。ルートレコードをレコード・オープン命令でオープンします。パスワードが設定されている場合、パスワードの解除関数が呼び出されるまで、実際のアクセスを禁止する。
【００７７】
エラーは次のような状態のときである。ファイルが存在しない時、ファイル作成モードでない時エラーとなる。また、ファイルが破壊されている時、即ち強行実行モードでない時、または、強行実行モードでも、修復が不可能な穂と破壊されている時。ファイルに読み込み専用属性がついている時にエラーが示される。
【００７８】
ファイルのクローズは、オープンしているＶＳＤＢをクローズする機能で、このファイルに含まれるレコードで、オープンされているものがあれば、全てクローズする。ルートレコードをクローズする。バッファリングされたキャッシュを書き戻す、コントロールブロックを更新する、ファイルを閉じ、使用していたメモリ空間を開放する。
【００７９】
ファイルの一時クローズは、ＶＳＤＢファイルを一時的にクローズする。必要な情報を書き出すがメモリは開放しない。この処理ではこのファイルに含まれるレコードでオープンされているものがあれば全てクローズする。ルートレコードをクローズする。バッファリングされたキャッシュを書き戻す。コントロールブロックを更新する。ファイルを閉じる。
【００８０】
ファイルの再オープンは、仮クローズでクローズしたファイルを再オープンする。処理は、ファイル構造体に保存されているファイルパスで、ファイルをオープンする。ファイルヘッダやコントロールの内容を比較し、異なっていたら違うファイルと見做しエラーを返す。ディスクの情報を得ることの出来るシステムなら、その情報を基にメディアの検査も行なう。エラーは、同名の違うファイルを再オープンしようとした。同じファイル方のシステムで更新されている。同じファイルが破壊されている。
【００８１】
登録されているレコード数の取得は、登録されているレコード数を得る。夫々のモードにしたがって登録されているレコードの本数を返す。
パスワードの解除・検査は、パスワードでアクセス制限されているファイルのアクセスを可能にする。不正なパスワードが入力された場合、エラーを返しアクセスを禁止する。パスワードの存在検査をする時は、パラメータにＮＵＬＬポインタを渡す。
【００８２】
パスワードの解除及び検査では、アクセスを制限されているファイルのアクセスを可能にする。不正なパスワードが入力された場合は、エラーを返し、アクセスを禁止する。パスワードの存在検査をする時は、パラメータにＮＵＬＬポインタを渡す。コントロール部のパスワードと比較し、同じであれば以降のアクセスを可能にする。
【００８３】
パスワードの設定では、新しいパスワードを設定する。パスワードを更新するときは、現在のパスワードが異なれば、パスワードは設定されない。現在パスワードが無い場合は、ＮＵＬＬポインタを渡す。パスワードの長さは、ヌルターミネイトを除いて１５バイト以内の文字列である必要がある。パスワードが１５バイト以上の時は設定せずエラーを返す。新しいパスワードがヌルポインターの時は、パスワードが解除される。
【００８４】
レコードの削除では、レコード番号で指定されたレコードを削除する。レコードが保持しているレコードのパケットを全て開放する。レコード・ディスクリプタのステータスバイトの使用状態を、未使用状態にする。レコードの使用状態を保全しているビットマップに未使用になったことを通知する。レコードが他のレコードから参照されている場合、即ちリンクカウントが１以上の場合は削除することが出来ず、トラッシュ状態になる。トラッシュされているレコードを削除する時は、開放されたパケットの個数を、トラッシュ・パケットの個数から減算する。
【００８５】
レコードのトラッシュは、レコード番号で指定されたレコードをトラッシュする。指定されたレコードのレコード・ディスクリプタのステータス・バイトの状態を使用状態からトラッシュ状態にする。また、このレコードに含まれるパケット個数を計算し、トラッシュ状態のパケット個数に加算する。トラッシュ状態のレコードは、オープンすることは出来ない。未使用レコードや破棄レコードは、トラッシュすることは出来ない。
【００８６】
レコードの復活では、トラッシュされたレコードを回復する。指定されたレコードのレコード・ディスクリプタのステータス・バイトの状態をトラッシュ状態から、使用状態にする。また、このレコードに含まれるパケット個数を計算し、トラッシュ状態のパケット個数から減算する。未使用レコードは復活できない。
【００８７】
レコードのリンクは、レコード番号で指定されたレコードの仮想レコードを作成する。未使用レコードを探し、そのレコードを仮想レコードとして指定されたレコードに結びつける。ただし、リンク元のレコードが、仮想レコードである場合、作成される仮想レコードは、リンク元のレコードの実レコードにリンクされる。
【００８８】
レコードのオープンは、使用するレコードをオープンする。可変長レコードであるため、レコードの使用をする前に、その宣言をする。この関数が返すレコード情報のハンドルを通して、レコードのデータにアクセスすることが出来る。モードは、書込み可能モードと一緒に設定する必要がある。レコード番号に新規レコードを指定した場合、空の新しいレコードを割り付ける。作製されるレコードのアクセス・モードは、常に読み書き可能である。その方法は、レコード番号から同じレコードが既にオープンされていないかを調べる。レコードがオープンしていなければ、レコード管理領域と、レコード・ハンドラ領域の２組の領域を確保し、ハンドラからレコード管理領域へポインタを結ぶ。レコードがオープンされていれば、レコード・ハンドラのみを確保し、存在するレコード管理領域へポインタを繋ぐ。
【００８９】
管理レコードのオープンは、管理レコードをオープンする。他のレコードと同様にアクセス出来る。書込み又は削除モードでオープンする場合は、現在の管理レコードの内容を、予備の管理レコードにコピーする。
【００９０】
レコードのクローズは、レコードをクローズする。クローズする時は次の処理をする。キャッシュバッファに保持されているレコードの内容をファイルに書き出す。レコード・ディスクリプタの内容を更新する。レコードのハンドルを開放する。
【００９１】
レコード番号の取得は、現在アクセス中のレコード情報ハンドルから、レコード番号を得ます。これは、基本的に新規レコードのオープンを行なった時に用いられる。管理レコードなどのハンドルに対して、関数を実行した場合、レコード番号はコントロールを返す。
【００９２】
レコード種別の設定・取得は、オープンのレコードの種別を設定し取得する。レコードの種別を設定する場合、パラメータのタイプにその種別番号を設定する。
【００９３】
レコード・アクセス権の設定と読み出しは、指定されたレコードのアクセス許可を設定し読み出しを行なう。レコード番号から該当するレコードがオープンされているか調べ、レコードがオープンされていれば、レコード上のレコード・ディスクリプタを変更する。この変更によるアクセス制限は、次のオープンからで、現在のオープンには影響しない。該当するレコードがオープンされていなければ、ルートレコードから該当するレコードを読み出し、そのステータス・バイトを変更する。
【００９４】
最終アクセス時刻の取得と設定は、指定されたレコードの最終アクセス時刻を設定して読み出しを行なう。
【００９５】
レコードへの読み込みは、レコードから指定されたバイト数のデータを読み込みを行なう。読み込まれた長さをシステムに返す。
【００９６】
項目単位での書込みは、指定されたレコードに、項目データの書込みを行なう。レコードのシークポイントは、次の位置に移動する。ディスクフルなどのエラーが発生した場合は、書込みを中止しシーク・ポインタを書込みを行なう前の位置に戻し、書き込んだ部分の切り詰めを行なう。
【００９７】
項目単位での読み込みは、指定されたレコードから、項目データの読み込みを行なう。レコードのシークポインターは次の位置に移動する。項目の長さがバッファの長さより大きい場合、シーク・ポインタを現在の位置に戻し、読み込みを中止する。
【００９８】
以上、本発明における機能を説明した。さらに、本発明でのファイルシステムは７つのモジュールで構成されている。各々のモジュールについて図１２に基づいて説明する。
【００９９】
ＶＳＤＢエントリー・モジュール１２０は、ＶＳＤＢモジュールの公開関数で構成されるモジュールである。ＶＳＤＢ操作関数が呼び出されると、以下の５つのモジュールを呼び出し、処理が実行される。
【０１００】
レコード・ハンドラ管理モジュール１２１は、１つのレコードを複数のハンドラがアクセスするため、個々のハンドラ―での管理を一元化するための処理を行なう。これによってレコード・ハンドルの２重化や仮想レコードの処理を行なう。
【０１０１】
レコード番号管理モジュール１２２は、基本的には、レコード番号からルートレコードで、実際のノード・ディスクリプタを取得するまでの管理を行なう。このモジュールは、ルートレコードと対応しており、ＶＳＤＢファイルと１対１に対応している。
【０１０２】
レコード・アクセス管理モジュール１２３は、ノード・ディスクリプタから、実際のレコードデータのクラスタとパケット・アドレスを取得するなどの処理を行なう。このモジュールが扱う管理モジュールは、基本的にノード・ディスクリプタと１対１に対応している。
【０１０３】
ＰＣＴ管理モジュール１２４は、空きパケットの管理を行なう。基本的には、クラスタ毎に管理する。また、ＰＣＴのキャッシング処理もこのモジュールで行われる。
【０１０４】
パケットキャッシング管理モジュール１２５は、パケットの管理と連動してパケット単位でキャッシュ処理を行う。パケット又は連続した８個のパケットで構成されるブロック単位で処理を行われる。
【０１０５】
例外処理モジュールは、上記モジュールに含まれないモジュールで、汎用処理関数群１２６とファイル修復モジュール１２７がある。
【０１０６】
ここで、図１３はデータ管理が各々のモジュールに関連し管理運営されているデータの流れを示す。次に、本発明によるデータベース装置を用いて実際のデータベースの動作につき説明する。
【０１０７】
まずデータベースを定義する。データベース定義とは、どのような項目があり、その項目に収納するデータの型とサイズを決定することである。入力データは識別子、項目名、サイズ、データの型を入力する。これを受け取った項目定義部では入力データをパケットに読取る。パケットが一杯であれば次のパケットへ読み込む。これらのコントロールは次に説明するパケットの先頭にあるコントロールパケットの中のノード・ディスクリプタ及びノード・アロケーション・テーブルが管理する。ノード・ディスクリプタが管理する管理項目はステータス、データタイプ、更新日時、サイズ、パケット・アドレスであり、システムがこれらの入力データから定義を行ない、項目データを生成する。
【０１０８】
次にシステム（ＶＳＤＢ）は、生成された項目データをレコード定義部に通知する。項目データを受け取ったレコード定義部は前記項目データ定義と同様にパケットの形でレコードデータを生成する。生成されたパケットは、パケットの先頭にあるコントロールパケットの中のノード・ディスクリプタ及びノード・アロケーション・テーブルで関連付けられて管理されている。
【０１０９】
次にシステム（ＶＳＤＢ）は、レコード定義部が生成したレコードに基づき入力データをデータベースに保管する。ここでも同様にパケットの形態でタイプ、データ長、データの形式で保管される。保管は前記項目と前記レコードと同様の形式で行なわれる。生成されたパケットレコードは、パケットの先頭にあるコントロールパケットの中のノード・ディスクリプタ及びノード・アロケーション・テーブルに関連付けられて管理されている。以上の動作がＶＳＤＢシステムの関連する各々のモジュールにより管理され可変長データベースを形成している。
【０１１０】
【発明の効果】
本発明による可変型可変長データベースシステムは、ファイル全体をパケットの集合体として管理することにより、項目定義構造体、レコード構造体、並びにデータレコード自体を可変長として取り扱えるようにしたものである。このことから画像データ、音声データ、ムービーデータ、文字、図形などの巨大なマルチメディアデータを取り扱うことが可能になった。益々多様化するデータ構造に柔軟に対応できるデータベース装置と、データベースアクセス方法と、を提供することができる。加えて、前記データベースは、インターネットを利用して、マルチメディアデータを自動的に取り込むことが出来る。
【０１１１】
さらに、データベースの構成を正規化するために、システムを停止する必要が無い。データの追加や、変更があってもシステムを稼動させたままでデータの追加や変更を行うことが出来る。このことに依り、データベースの構造の変更や長大なマルチメディアのデータを効率良く管理する事が可能となる。また、これからの情報環境で要求されるシステム対応として、柔軟なデータ構造を持つＸＭＬなどの新しいフレキシブルなデータ構造に対する対応も本発明の可変長データベースで処理可能となる。
【図面の簡単な説明】
【図１】  本発明における実施例に係る可変長データベース装置の構成例のブロック図を示す。
【図２】  本発明における実施例に係るデータベーステーブルの基本構成例を示す。
【図３】  本発明における実施例に係る、（ａ）はＰＣＴの使用状態を、（ｂ）はレコード・ディスクリプタの構成例を示す。
【図４】  本発明における実施例に係るノード・ディスクリプタとノード・アロケーション・テーブルのアドレッシングの状態を説明するためのものであって、（ａ）は、直接パケットを指す状態を示し、
（ｂ）は、１段階の間接アドレッシング状態を示し、
（ｃ）は、２段階の間接アドレッシングの状態例を示す。
【図５】  本発明における実施例に係る項目定義領域例を示す。
【図６】  本発明における実施例に係るレコード管理領域例を示す。
【図７】  本発明における実施例に係るデータレコードの構成例を示す。
【図８】  本発明における実施例に係る項目の追加の１例を示す。
【図９】  本発明における実施例に係る項目の削除の１例を示す。
【図１０】  本発明における実施例に係る項目の変更の１例を示す。
【図１１】  本発明における実施例に係る項目のタイプを変更する１例を示す。
【図１２】  本発明における実施例に係るＶＳＤＢモジュール構成の１例を示す。
【図１３】  本発明における実施例に係るＶＳＤＢモジュールでのデータの流れのブロック図例を示す。
【符号の説明】
１  データ格納部
２  ＤＢＭＳ
３  入力部
４  項目定義部
５  レコード定義部
６  データ一時保管部
７  出力部
１１  テーブル・コントロール・パケット
１２  ＰＣＴパケット
１３  パケット
１４  第１クラスタ
３１  ＰＣＴパケット
３２  ＰＣＴパケットの最初の０バイト目
３３  ＰＣＴパケットの２５５バイト目
４１  ノード・ディスクリプタ
４２  ノード・アロケーション・テーブル
５１  実ファイル
５２  仮想的なファイルのイメージ
８１  項目ｍ
８２  項目ｘ
９１  削除フラグ
１２０  ＶＳＤＢエントリー・モジュール
１２１  レコード・ハンドラ管理モジュール
１２２  レコード番号管理モジュール
１２３  レコード・アクセス管理モジュール
１２４  ＰＣＴ管理モジュール
１２５  キャッシュバッファ管理モジュール
１２６  汎用関数群モジュール
１２７  修復モジュール
【図１】
0003636977.tif 000002
【図２】
0003636977.tif 000003
【図３】
0003636977.tif 000004
【図４】
0003636977.tif 000005
【図５】
0003636977.tif 000006
【図６】
0003636977.tif 000007
【図７】
0003636977.tif 000008
【図８】
0003636977.tif 000009
【図９】
0003636977.tif 000010
【図１０】
0003636977.tif 000011
【図１１】
0003636977.tif 000012
【図１２】
0003636977.tif 000013
【図１３】
0003636977.tif 000014