以下、本発明について、実施形態をもって説明するが、本発明は後述する実施形態に限定されるものではない。図1は、本実施形態のデータベース・システム100の実施形態を示す。データベース・システム100は、リレーショナル・データベース(以下、RDBとして参照する。)を実装する情報処理装置110と、RDBにより作成されたテーブルを格納するテーブル格納部130と、本実施形態により多言語対応するためのデータ構造を有するテーブルとして構成された言語リソースを格納する言語リソース・テーブル格納部132とを含んで構成されている。
情報処理装置110には、インターネット、LANなどを適宜含むネットワーク112が接続されていて、ネットワーク112を介してクライアント・コンピュータ(図示せず。以下、単にクライアントとして参照する。)からのアクセス要求を受領し、テーブルの作成、編集、検索などのサービスを提供する。なお、テーブル格納部130と、言語リソース・テーブル格納部132およびこれらに対応する後述する各処理部は、図1では機能を説明する便宜上分離した機能モジュールとして記述するものであり、単一のデータベースの機能モジュールとして統合した実装形式を採用することもできる。
言語リソース・テーブル格納部132は、データの各属性値などを格納するリソース情報格納部とを含んで構成される。また、言語リソース・テーブル格納部132は、リソース参照情報格納部を含んで構成されており、リソース参照情報格納部は、データベース・システム100が現時点で参照しているリソース・カラムの情報を管理し、排他制御、履歴管理などのために利用される。
情報処理装置110は、図1に示した実施形態では、サーバとして構成されている。情報処理装置110がサーバとして実装される場合、情報処理装置110は、CORBA(Common Object Resource Broker Architecture)などの分散コンピューティング環境を提供する専用サーバとして構成することもできるし、HTTPプロトコルを使用してファイル転送・検索などのサービスを実行するウェブ・サーバとして実装することもできる。情報処理装置110は、専用サーバとして実装する場合、専用のクライアント・ソフトウェアが提供するAPIやユーザ・インタフェースを使用して情報処理装置110にアクセスする。また、情報処理装置110がウェブ・サーバとして実装される場合には、クライアントは、Internet Explorer(登録商標)、Firefox(登録商標)、Opera(登録商標)などのウェブ・ブラウザを実装し、情報処理装置110へのアクセスを可能とする。
また、情報処理装置110のデータベース処理モジュールにアクセする目的で、クライアントは、JDBC(Java(登録商標)Database
Connectivity)やODBC(Open Database Connectivity)などのAPIを、アプリケーション・レベルでのアクセス・プロトコルとして実装する。クライアントは、情報処理装置110のデータベース・アプリケーションにアクセスする場合、これらのAPIを使用して情報処理装置110に対するデータベース・アクセスが可能とされている。
なお、情報処理装置110には、ローカルのキーボード、マウス、ディスプレイ装置などが、USB、XGAなどのバスを介して接続されていて、情報処理装置110の管理者などが、情報処理装置110にローカルにアクセスすることができる構成とされていてもよい。
上述した情報処理装置110は、PENTIUM(登録商標)、XEON(登録商標)、CELERON(登録商標)、ATHRON(登録商標)、その他のPENTIUM(登録商標)互換チップといったCISCアーキテクチャのマイクロプロセッサ、または、POWER PC(登録商標)などのRISCアーキテクチャのプロセッサを、シングルコアまたはマルチコアの形式で実装することができる。
また、情報処理装置110は、WINDOWS(登録商標)200X、UNIX(登録商標)、LINUX(登録商標)などのオペレーティング・システムにより制御され、C、C++、JAVA(登録商標)、JAVA(登録商標)BEANS、PERL、RUBYなどのプログラミング言語を実装し、各種プログラムをRAMなどの実行空間に読み込んでプロセッサがプログラムを実行させることによって、より詳細には後述する各機能部を、情報処理装置110上に実現する。なお、クライアントは、パーソナルコンピュータ、ワークステーション、PDA、携帯電話などから構成され、適切なOSの下で、情報処理装置110にアクセスし、検索や新規テーブルの作成などを行う。
以下、情報処理装置110の各機能部について説明する。情報処理装置110の各処理部は、情報処理装置110が、本実施形態のプログラムおよび従来のデータベース・アプリケーションを、RAMなどの実行空間内に読み込んで展開し、プロセッサがプログラムを実行することにより、情報処理装置110を、各処理部として機能する機能手段として実現させている。
情報処理装置110は、ネットワーク・アダプタ114と、クライアント接続処理部116と、コマンド処理部118とを含んで実装される。ネットワーク・アダプタ114は、ネットワーク112を介して送付されるRDBへのアクセス要求を受領し、より上位プロトコルを使用する各機能部へとアクセス要求の内容を渡している。なお、本実施形態において、アクセス要求には、RDBに対するテーブル作成、編集の要求の他、RDBを検索する要求を含む。クライアント接続処理部116は、本実施形態において、クライアントが使用する言語環境を判断し、アクセス要求に対応した処理を実行させる。クライアント接続処理部116は、この目的で言語設定部120を実装する。言語設定部120は、より詳細には、レジスタ処理部120aと、言語識別レジスタ120bとを管理する。レジスタ処理部120aは、言語設定部120が管理するメモリ領域を編集する機能を有しており、クライアントに対応して、言語識別レジスタ120bに対し現在の言語設定を設定する。
クライアント接続処理部116は、クライアントがデータベースに接続すると、クライアントから送信されるクライアントが使用している言語情報(以下、言語識別値として参照する。)を、レジスタ処理部120aが管理している言語識別レジスタ120bのうち、言語識別レジスタのCHARSETの値に設定するようにレジスタ処理部120aに依頼する。レジスタ処理部120aは、クライアントが使用している言語を言語識別レジスタ120bの言語識別レジスタの値としてCHARSETに設定する。言語識別レジスタ120bには、デフォルト言語識別レジスタの値としてDEFAULT_CHARSETも登録されており、DEFAULT_CHARSETの値は、英語にするなど、予め決められた値を設定しておくことができる。DEFAULT_CHARSETのデフォルト値については、特定の用途に対応して適宜設定することができる。
クライアントがデータベースに接続すると、クライアントはコマンドを発行することができる。コマンドは、本実施形態では、SQL文として構成されている。コマンド処理部118は、クライアントから発行されるコマンドを受け付け、コマンドの種類に応じて、処理を担当する処理部に処理を依頼する。
コマンドには、処理してほしい言語を言語識別値として含めることができ、処理を要求する言語の言語識別値が含まれている場合、情報処理装置110は、指定された言語についての処理を行う。また、処理を指定する言語識別値が含まれていない場合、言語識別レジスタ120bのCHARSETの値を言語識別値として、その言語についての処理を行う。
言語識別レジスタ120bは、情報処理装置110が管理するメモリ領域に確保されており、言語環境を識別するための機能を提供する。言語識別レジスタ120bは、種々の実装形式で情報処理装置110に構成することができるが、例えば、リレーショナル・レータベースとしてDB2(DB2は、インターナショナル・ビジネスマシーンズ・コーポレーションの登録商標である。)の場合には、特殊レジスタと呼ばれる変数群にこの値を表す変数を割り当てて実装することができる。
言語識別レジスタ120bは、本実施形態の言語設定部として機能し、例えばクライアントまたはシステム管理者からの要求に対応して、「SET DEFAULT_CHARSET ‘fr’」などのコマンドにより適宜設定を変更することができる。
なお、データベースに接続するクライアントは、データベースに接続時、クライアントが使用する言語識別値を送付するが、これはクライアントが使用するオペレーティング・システムなどから言語情報を取得し、その言語情報と下記表1の言語識別値との対応関係を適切な不揮発性メモリに保存しておき、該当する言語識別値をデータベースに送付する。あるいは、クライアントが言語情報をサーバに送付し、サーバ側でその言語情報と下記表1の言語識別値との対応関係を適切な不揮発性メモリに保存しておき、該当する言語識別値を取得してもよい。
コマンド処理部118は、受信したコマンドを解析し、コマンドの種類に応じて、テーブル処理部124または言語リソース処理部126に処理を依頼する。例えば、本実施形態で、受領したSQLコマンドが言語を指定するコマンドであるSET CHARSET文を含んでいれば、言語設定部120に、SET文の引数とされた言語識別値を、CHARSETに登録するように依頼する。一方、コマンドがテーブルに対する操作を指令する場合、テーブル処理部124に処理を依頼する。さらに、コマンドがリソース・テーブルに対する操作であれば、言語リソース処理部126に処理を依頼する。
レジスタ処理部120aは、接続クライアントごとに保持される各種変数を管理し、クライアントから「SET レジスタ名 値」文を受信すると、言語識別レジスタ120bの指定されたレジスタ名の値を指定された値に変更する。
テーブル処理部124は、クライアントからテーブルの作成・変更・除去コマンドやテーブルに対するデータの挿入・更新・削除・照会コマンドなどを受け付ける。テーブル処理部124は、本実施形態で実装された機能が使用できるようにする拡張コマンドを実装する。より詳細には、テーブル処理部124は、テーブル作成・更新・除去部124aと、データ挿入部124cと、データ更新部124bと、データ削除部124dとを含んで構成することができる。また、テーブル処理部124は、データ照会部124eを含んで実装されており、テーブル格納部130に格納された本実施形態のリソース・カラムを含むテーブルの検索を可能とする。照会についても、本実施形態では、SQL文のSELECTコマンドを適用することによって行なうことができる。
テーブル処理部124は、各処理部を呼び出して、本実施形態で実装されるリソース・カラムやリソース・テーブルのデータを修正し、テーブル処理部124が実行するデータ編集処理およびデータ照会処理は、リソース・カラムやリソース・テーブルを対象とする編集、照会処理を可能とすることを除き、従来の機能を使用して実装することができる。
当該拡張コマンドでは、例えば、テーブルの作成コマンドに、そのカラムとして、本実施形態で実装されたリソース・カラムを指定するコードを含ませて実装することができ、それぞれの処理は、リソース・カラムに記述された多言語データについてテーブル作成・更新・除去およびデータ照会を実行する。リソース・カラムとは、本実施形態で実装される、多言語表記されたデータを含むカラムを意味する。リソース・カラムにより、複数言語の値が管理される。本実施形態では、XMLを使用して複数言語の値を管理しており、DOMまたはSAXなどを含んで実装されるXMLパーザなどを含むことができる。構造化言語としてのXMLの使用は、特定の実施形態であり、構造化文書は、どのような形態で管理されてもよい。
言語リソース処理部126は、クライアントから本特許で実装されたリソース・テーブルの作成・除去コマンドや、リソース・テーブルに対するデータの挿入・更新・削除コマンドなどを受け付ける。言語リソース処理部126は、この目的のため、より詳細には、リソース・テーブル作成・除去部126aと、リソース・データ挿入部126cと、リソース・データ更新部126bと、リソース・データ削除部126dとを含んで構成することができる。
テーブル作成・変更・除去部126aは、リソース・カラムを保持するテーブルの作成や、リソース・カラムをテーブルに追加する処理を実行する。データ挿入部126c、データ更新部126b、データ削除部126dは、それぞれ、リソース・カラムに複数言語へのデータの挿入、データの更新、データの削除を実行する。
より詳細に各処理部の機能を説明すると、リソース・テーブル作成・除去部126aは、リソース・カラムとは独立して、複数言語の値を保持するためのリソース・テーブルを作成したり、除去することができる。このリソース・テーブルは、リソース・カラムから参照することができる。リソース・テーブルは、それぞれカテゴリ名で識別することができ、リソース・カラムの定義ではカテゴリ名を指定することができ、それによりリソース・カラムとリソース・テーブルを関連付けされている。
データ挿入部126cは、より具体的には、リソース・カラムにある言語の値を挿入する処理を実行する。この時に追加されたデータの言語識別値が言語識別レジスタDEFAULT_CHARSETと同じ場合、デフォルトの値としてもそのデータが格納される。また、データ更新部126bは、リソース・カラムにある言語の値を挿入・変更・削除する処理などを行う。この時追加したデータの言語識別値が言語識別レジスタDEFAULT_CHARSETと同じ場合、デフォルトの値も同様に処理される。
データ削除部126dは、リソース・カラムのデータを含めたレコードを削除する処理を行う。リソース・データ挿入部は、挿入するべきデータを、リソース・テーブルの適切な領域に追加する処理を実行させる。この時追加したデータの言語識別値が言語識別レジスタDEFAULT_CHARSETと同じ場合、デフォルトの値としてもそのデータが格納される。
また、図1には、レジスタ処理部120aが設定する言語識別レジスタ120bのデータ構造140を示す。言語識別レジスタ120bには、クライアントが要求する言語の値がない場合に使用するデフォルトの言語を指定する言語識別値を設定する、デフォルト言語識別レジスタのためのアドレス領域142と、クライアントが要求するデフォルトの言語識別値を登録する言語識別レジスタのためのアドレス領域144とを含んで構成される。
特定の実施形態では、アドレス領域142は、デフォルト言語識別レジスタとして、値DEFAULT_CHARSETを登録するものとして参照され、情報処理装置110がデフォルト設定で使用する言語が、情報処理装置110の起動時の初期設定などで設定される。なお、本実施形態では、例えば管理者からの指令に基づいて、デフォルト設定の言語も変更することができる。また、アドレス領域144は、言語識別レジスタとして、値CHARSETを登録するものとして参照され、接続クライアントのオペレーティング・システムの言語が初期設定さる。これらの言語識別レジスタは、接続クライアント毎に保持され、接続クライアントからSET文を指令することで変更することができ、切断すると解放される。
各コマンドには言語識別値を含めることができ、コマンドに言語識別値が指定されていた場合、そのコマンドの処理は、指定された言語識別値の言語環境で処理される。指定さなかった場合、CHARSETの言語環境で処理される。CHARSETの値は、クライアントからの明示的な言語設定のコマンド“SET CHARSET‘CHARSET名’”で変更することができる。
リソース・データ更新部126bは、リソース・テーブルに、すでに登録されたデータを更新する処理を実行させ、リソース・データ削除部126dは、リソース・テーブルに登録されたデータを削除する処理を実行させる。リソース・テーブルとは、本実施形態の多言語リソース・データを格納するテーブル構造を意味し、複数のリソース・カラムから参照することができる。リソース・カラムは、特定のテーブルのカラムとして他の属性を有するカラムとともにテーブルとして構成することができ、リソース・テーブルを参照することもできるし、他の実施形態では、リソース・カラムに本実施形態の多言語リソース・データを格納することもできる。
テーブル処理部124で処理されたリソース・カラムの定義(カテゴリ名などの定義情報)や、そのデータは、テーブル格納部130に格納され、テーブル処理部124からアクセスされる。
言語リソース処理部126で処理されたリソース・テーブルの定義(カテゴリ名などの定義情報)や、そのデータは、リソース情報格納部132で格納され、言語リソース処理部126からアクセスされる。テーブル処理部124でカテゴリ名付きのリソース・カラムを処理する場合、各言語の値は、リソース情報格納部の、そのカテゴリのリソース・テーブルに格納されるので、テーブル処理部124からもアクセス可能とされている。
言語リソース・テーブル格納部132のリソース参照情報格納部は、どのテーブルのどのカラムがどのカテゴリのリソース・テーブルを使用しているかが格納されており、テーブル処理部で、テーブルの作成・変更・除去を行った際、カテゴリ名付きのリソース・カラムが定義されていたら、その情報に基づき、リソース参照情報格納部の情報が更新される。その他、図に示す情報処理装置100には、その他のSQLコマンドに関連する既存のRDB処理を実行するための他処理部128が設けられている。
図2は、クライアントが本実施形態の情報処理装置110に接続してから接続を切断するまでのシーケンスの実施形態を示す。情報処理装置110は、その起動と同時にコマンド「db_start」210などを発行してRDBを起動し、RDBの終了コマンド220を受領して情報処理装置110のRDB処理が終了するまでクライアントからのアクセス要求を処理する。例えば、クライアント1が情報処理装置110が管理するデータベースに接続すると、クライアント1から接続時に送信される言語識別値を言語識別レジスタの値CHARSETに設定する。デフォルト言語識別レジスタの値DEFAULT_CHARSETは、予め設定された値、例えば英語などが設定されている。これらのレジスタは、接続クライアントごとに保持されて、クライアントごとの言語環境を提供する。
情報処理装置110は、クライアント1からのアクセス要求を処理しながら、さらにクライアント2からの接続要求およびコマンド(SQL文)240を受け付ける。コマンドがSET文を含む場合、レジスタ処理部120aに処理を依頼し、処理終了後、処理結果をクライアント240に返し、次のコマンドを受け付ける。同様の接続処理およびコマンド要求が、クライアント3およびクライアント4から行われ、情報処理装置110は、各クライアントごとにその処理に対応するサービスを実行させている。
コマンド230〜260がテーブルに対する操作であれば、テーブル処理部124に処理を依頼し、処理終了後、処理結果をクライアントに返し、次のコマンドを受け付ける。さらに、コマンドがリソース・テーブルに対する操作であれば、言語リソース処理部に処理を依頼し、処理終了後、処理結果をクライアントに返し、次のコマンドを受け付ける。クライアントから受領するコマンドが切断であれば、クライアントとの接続情報を破棄し、クライアントに処理を返した後、当該クライアントとの間のセッションを終了させる。また、本実施形態で採用するコマンド以外の既存のコマンドを受領した場合、従来どおりの処理を行い、処理終了後、処理結果をクライアントに返し、次のコマンドを受け付ける。
図3は、情報処理装置110下とクライアントがセッションを開始し、終了するまでの処理の概略的なフローチャートである。図3の処理はステップS300から開始し、ステップS301で、接続要求時に送付されるクライアントの言語を、CHARSETの値にセットし、DEFAULT_CHARSETには、説明する実施形態では、情報処理装置110に設定されたデフォルト言語環境である、英語を指定する言語識別値「en」の値を設定する。
ステップS302では、クライアントからのコマンドを受領し、ステップS303では、コマンドにSETコマンドとその引数を受領したか否かを判断し、SETコマンドを受領したと判断した場合(yes)、処理をステップS307に進め、言語設定部120に処理を依頼し、レジスタ処理部120aおよび言語識別レジスタ120bを呼び出して、SETコマンドの引数として設定されたCHARSETの値を言語識別レジスタ120bに設定する。また、ステップS303で、SETコマンドを受領しないと判断した場合(no)、ステップS304で、テーブルに対する操作を指令するコマンドであるか否かを判断し、テーブルに対する操作を指令するコマンドと判断した場合(yes)、ステップS308でテーブル処理部124を起動して、処理を実行させる。
また、ステップS304でテーブルに対する操作を指令しないと判断した場合(no)、ステップS305で、リソース・テーブルに対する操作であるか否かを判断する。ステップS305でリソース・テーブルに対する操作が要求されていると判断した場合(yes)、ステップS309で言語リソース処理部を起動して処理を実行させる。一方、ステップS305で、リソース・テーブルに対する操作も指令されていないと判断した場合(no)、ステップS306で、切断要求のコマンドであるか否かを判断し、切断要求ではないと判断した場合(no)、ステップS310で従来のRDB処理を実行させる。
また、ステップS306で切断要求と判断された場合(yes)ステップS311で当該クライアントの間のセッションを切断し、処理を終了させる。また、ステップS307、S308、S309、およびステップS310の処理が終了した後、情報処理装置110は、処理をステップS302に戻し、クライアントからの新たなコマンドの要求を受領する。
図4は、本実施形態で、実装される、リソース・テーブルに対する処理を指令するコマンドと判断した場合に、図3のステップS305で呼び出されるリソース作成処理の詳細なフローチャートを示す。図4の処理は、ステップS400から開始し、ステップS401で、受領したコマンドがリソース・テーブル作成を指令しているか否かを判断し、リソース・テーブルの作成を指令するコマンドであると判断した場合(yes)、ステップS406で図6の処理を呼び出して処理を実行させ、処理後、ステップS411で当該コマンドに対応する処理を終了させる
ステップS401で、リソース・テーブル作成を指令していないと判断された場合(no)、ステップS402で、リソース・テーブル削除を指令するか否かを判断し、リソース・テーブル削除と判断した場合(yes)、ステップS407で、指定したリソース・テーブルを参照しているカラムがあれば、エラーを返す。なければ、そのリソース・テーブルを除去し、ステップS411で処理を終了させる。リソース・テーブルの削除は、例えば下記式(1)で指令することができる。
また、ステップS402で、リソース・テーブル削除を指令するコマンドではないと判断した場合(no)、ステップS403で、リソース挿入を指令するコマンドであるか否かを判断し、リソース挿入と判断した場合(yes)、ステップS408で図8の処理を起動して、リソースの挿入を実行させ、ステップS411で処理を終了させる。
ステップS403で、リソース挿入ではないと判断した場合(no)、ステップS404でリソース更新を指令するコマンドであるか否かを判断し、リソース更新を指令するコマンドであると判断した場合(yes)、ステップS409で、図11の処理を起動し、処理後、ステップS411で処理を終了する。さらにステップS405でリソース削除が要求されていると判断した場合(yes)、ステップS410で図12の処理を起動し、リソース・データの削除を実行し、ステップS405でリソース・データの削除処理でもないと判断した場合(no)ステップS411で、当該リソース・テーブルへの処理要求を終了させる。
図5は、本実施形態で、テーブルに対する処理を実行するテーブル処理部124が実行する、図3のステップS304で呼び出される処理の詳細なフローチャートである。図5の処理は、ステップS500から開始し、ステップS501で、受領したコマンドがテーブル作成を指令しているか否かを判断し、テーブルの作成を指令するコマンドであると判断した場合(yes)、ステップS508で図7の処理を呼び出して処理を実行させ、ステップS516で当該コマンドに対応する処理を終了させる。
ステップS501で、リソース・テーブル作成を指令していないと判断された場合(no)、ステップS502で、テーブル変更を指令するか否かを判断し、テーブル変更と判断した場合(yes)、ステップS509でテーブルを変更する。なお、テーブルの変更で、リソース・カラムを追加する場合、テーブルの作成と同様な処理を行う。テーブルの変更処理において、リソース・カラムを追加する処理は、他のデータ・タイプのカラムを追加するのと同様に行うことができ、本実施形態で導入するリソース処理を指定するコードを含む、下記式(2)のコマンドを使用して実行することができる。
ステップS502で、テーブル変更ではないと判断した場合(no)、ステップS503で、テーブル除去を指令するコマンドか否かを判断し、テーブル除去を指令すると判断した場合(yes)ステップS510で、テーブルを除去する。カテゴリ付きリソース・カラムが定義されている場合、すべてのレコードのキーを順にチェックし、そのキーに対応するリソースの該当レコードの参照カウンタを1つ減らし、処理をステップS516に分岐させて、ステップS516で処理を終了する。
ステップS503で、テーブル除去ではないと判断した場合(no)、ステップS504でリソースの挿入を指令するコマンドか否かを判断し、リソースの挿入を指令すると判断した場合(yes)、ステップS512で、図14および図15の処理を起動し、該当するテーブルにデータを挿入し、データ挿入処理の後、ステップSS516で処理を終了させる。また、ステップS504で、データ挿入を指令するコマンドではないと判断した場合(no)、ステップS505で、データ更新を指令するコマンドであるか否かを判断し、データ更新と判断した場合(yes)、ステップS513で図16、図17の処理を起動して、データの更新処理を実行し、更新処理が終了した後、ステップS516で処理を終了させる。
ステップS505で、データ更新ではないと判断した場合(no)、ステップS506でデータ削除を指令するコマンドであるか否かを判断し、データ削除を指令するコマンドであると判断した場合(yes)、ステップS514で、図18、図19の処理を起動してデータ削除を実行させ、処理後、ステップS516で処理を終了する。さらにステップS507でコマンドが検索を指令しているか否かを判断し、データ検索が要求されていると判断した場合(yes)、ステップS515で、データの検索を実行させた後、ステップS516で処理を終了させる。データの検索については、より詳細に後述する。また、ステップS507で検索処理でもないと判断した場合(no)、ステップS516で、当該リソース・テーブルへの処理要求を終了させる。
図6は、本実施形態で、リソース・テーブルを作成する場合の概略的な処理のフローチャートである。図6の処理は、ステップS600から開始し、ステップS601で、リソース・データの作成を指令するコマンドを受領する。ステップS602で、リソース保存域を、多言語対応のXMLを保存するために確保し、ステップS603で、処理を終了させる。リソース保存域は、言語リソース情報を格納および検索可能とするために確保され、従来のデータベースのテーブルの機能を用いて格納してもよい。また、データベースの特定のスキーマをこの目的に利用してもよく、当該テーブル名をリソースのカテゴリ名としてもよい。以下、スキーマ名をRESOURCE、テーブル名をカテゴリ名とし、テーブルのカラムとして1つのXMLデータ・タイプを保持するカラムRESに言語リソース情報を保持した場合について説明する。リソース・テーブルの作成は、例えば下記式(3)で指令することができる。
図7は、図5のステップS508で、情報処理装置110が実行するテーブル作成処理の詳細なフローチャートを示す。図7の処理は、ステップS700から開始し、ステップS701で、テーブル作成を指令するコマンドを受領する。ステップS702では、対象とするカラムの第1番目の定義を検査し、ステップS703で、コマンドが、当該カラムについてリソース・カラムでのテーブル作成を指令しているか否かを判断する。
本実施形態で、SQL文を使用するスクリプトを作成する場合、リソース・カラムを保持するテーブルを作成するスクリプトは、下記式(4)や(5)で記述することができる。
なお、上記式(4A)は、リソースを他のテーブルと共有するために、テーブルとは別途管理する実施形態で、‘MTH’はリソースを識別するためのカテゴリ名である。リソースを別途管理する場合、下記式(5)で示されるように、リソース・テーブルのカテゴリ名を指定してリソース保管領域とそのデータを事前に確保することもできる。また、別途管理されたリソースをどのテーブルのどのカラムが参照しているかを保持し、参照情報格納部に格納される。これはデータベースのテーブルの機能を利用して保持してもよい。以下、テーブルのスキーマ名がRESREF、テーブル名がREFERENCEで、テーブルのカラムとして1つのXMLデータ・タイプを保持するカラムREFにリソース参照情報を保持した場合について説明する。以下、テーブルT1を、暦月の名称および当該暦月の日数を多言語に対応して登録するリソース・テーブルであるものとして説明する。
ステップS703の判断で作成するカラムがリソース・カラムではなく、従来のデータ・タイプのカラムの作成を指令していると判断した場合(no)、ステップS704で、従来方法を使用してカラム情報の保存およびデータ保存域を確保し、ステップS706で、すべてのカラムの定義を検査したか否かを判断し、ステップS706で、作成するべきカラムの処理が終了したと判断した場合(yes)、ステップS712で、処理を終了させる。また、ステップS706で、検査するべきカラムが残されていると判断した場合(no)、ステップS705で、次のカラムの検査を行い、再度ステップS703の判断を、対象カラムがなくなるまで継続する。
一方、ステップS703で、リソース・カラムの作成を指令するコマンドであると判断した場合(yes)ステップS707で、カラム定義情報として、従来のカラム定義情報に加え、カテゴリ名を保持する。カテゴリ名がない場合は、カテゴリ名にNULLをセットする。ステップS708で、カラムのデータ(XML)保存域を確保し、ステップS709で、カテゴリ名に有意な値が設定されている場合には(yes)、ステップS710で、当該カテゴリ名のリソースがすでに作成済みであるか否かを判断し、有意な値ではないNULLが登録されている場合(no)には、ステップS706に処理を分岐させ、さらに処理するべきカラムが残されているか否かの判断を行う。
一方、ステップS710で、当該カテゴリ名にリソースがすでに作成済みである場合(yes)、ステップS709で、さらに処理するべきカラムが残されているか否かについて判断し、当該判断に結果に応じて、テーブル作成終了またはさらなる検査を継続させる。また、ステップS710で、当該カテゴリのリソースが作成済みでない場合(no)、ステップS711で、当該カテゴリのリソース・テーブルを作成し、そのデータ(XML)保存域を確保し、ステップS706に処理を分岐させ、処理を反復させる。
図8は、図4のステップS408の処理の詳細なフローチャートを示す。挿入するデータは、リソースの値とその値を識別するためのキーを指定することができる。図8の処理は、言語リソース処理部126のリソース・データ挿入部が実行する処理である。図8の処理は、ステップS800から開始し、リソース・テーブルに構造化文書の挿入を指令するコマンドを受領して起動され、ステップS801で、コマンドに記述された各値(リソース名、キー名、値言語識別値(指定されている場合)を取得する。指定されていないなら、言語識別レジスタに設定されたCHARSETの値を使用する。構造化文書の追加を指令するコマンドは、種々の形式を採用することができるが、本実施形態における特定の態様では、下記式(6)としてコマンドを定義することができる。
上記式(6)では、RESOURCEの後に続くMTHはリソースのカテゴリ名、1カラム目のデータ’Jan’はキー、2カラム目のデータ‘1月’は値を表す。キーは、同一カテゴリ内の値を識別するために利用する。なお、ステップS801では、CHARSET
‘言語識別値’はオプションとして省略可能で、省略した場合、言語識別レジスタ122のCHARSETの値を言語識別値として使用する。言語識別値は、当該アクセス要求が要求する言語環境を指定するコードである。
ステップS802では、キーがリソース・テーブルに既登録か否かを判断する。ステップS802の判断で、キーが既登録ではないと判断した場合(no)、ステップS803で、キーと、指定された言語識別値でのデータをリソース・テーブルに挿入する。この際、言語識別値がデフォルト言語識別レジスタに設定されたDEFAULT_CHARSETと同じ場合、デフォルトの値としてもデータを登録する。
一方、ステップS802の判断で、キーが既登録であると判断された場合(yes)、ステップS804に処理を分岐させ、言語指定値に該当するデータが定義されているか否かを判断する。ステップS804ですでにデータが登録されていると判断された場合(yes)、ステップS806で対応する言語のデータが既登録であることをクライアントに通知するエラーメッセージを発行し、ステップS807で処理を終了する。また、ステップS804で、言語指定値に該当するデータが登録されていない場合(no)、ステップS805で、該当するレコードの子要素として、指定された言語識別値でデータを登録する。さらに言語識別値がデフォルト言語識別レジスタに設定されたDEFAULT_CHARSETと同じ場合、デフォルトの値としてもデータを登録し、処理をステップS807に戻し、終了する。
図9は、本実施形態に従い、リソース・テーブルに挿入されたデータ構造の実施形態を示す。データ構造910に示すように、各レコードのリソース・カラムは、言語環境の相違に対応するデータごとにvalueタグで識別され、さらに1つのレコードが、1つのキーに関する情報を保持し、resourceタグのkey属性で識別されて、階層構造を与えるようにして登録されている。また、データ構造910に示すように、クライアントにより指定された言語識別値は、charset=charset名(デフォルト値はdefault)で設定されている(charset名に言語識別値が設定される)。追加されるリソース・データは、<resource>タグで指定される構造化文書910のノードにおける子ノード912として追加される。また、値refcountは、参照カウンタで、リソース・テーブルの該当キーを参照しているテーブルのカラムのデータ数に相当する。参照カウンタの値の設定処理については、より詳細に後述する。
本実施形態では、図9に示すように、構造化文書が管理するべき値は、月などの単純な値ではなく、例えは、テーブルT2のカラムとして、NAME VARCHAR (10), DESCRIPTION RESOURCE (‘DESC’)を定義する場合、NAMEカラムに、“IBM”を登録しておき、DESCRIPTIONリソース・カラムには、英語とデフォルト用に “IBM stands for International Business Machines”などを登録することができる。
そして、DESCRIPTIONの対応する日本語データは、“IBMは、インターナショナル・ビジネス・マシーンズの略です”などの値をテーブルの更新処理や該当カテゴリのリソースに対する挿入処理により、子要素として登録することができる。さらに他の実施形態では、DESCRIPTIONの他、例えばブログのコンテンツ、またはその他ウェブのコンテンツとして提供するべきデータについても、それぞれ同一の翻訳値または翻訳文を同一のレコード内に登録しておくことで、多言語対応が可能となる。
図10は、本実施形態のリソース・テーブルに登録されたデータの更新処理のフローチャートを示す。リソース・テーブルに登録されたデータの更新処理は、「UPDATE RESOURCE]スクリプトを使用して行われる処理である。図10の処理は、クライアントからリソース・テーブルの構造化文書の更新を指令するUPDATE
RESOURCE文を受信することによって、ステップS1000で、リソース・データ更新部126bが呼び出されて開始する。説明する実施形態では、更新を指令するコマンドは、値の書換えを指令するものであり、下記式(7)で与えることができる。
ステップS1001では、スクリプトに記述された各値(リソース名、キー名、値、言語識別値(指定されている場合)を取得する。CHARSET ‘言語識別値’は省略可能で、省略した場合、言語識別レジスタ120bのCHARSETの値を言語識別値として使用する。ステップS1002で、キー値および言語識別値に一致するデータを検索する。ステップS1003では、該当するデータが存在するか否かを判断し、該当するデータが存在しない場合(no)、ステップS1005で、クライアント230にエラーを返し、ステップS1006で処理を終了させる。
一方、ステップS1003で、該当するデータが存在すると判断した場合(yes)、ステップS1004で該当するデータの値をコマンドで指定されたデータで書換える。書換え後の値がNULLである場合、対応するデータを削除する。言語識別値とデフォルト言語識別レジスタのDEFAULT_CHARSETの値とが一致する場合、デフォルトの値も更新し、ステップS1006で処理を終了する。図10の処理によって、一旦作成したデータを、クライアントからの指令に対応して書換えが可能となり、不要なデータの削除や値の更新などを行うことができる。
図11は、本実施形態に書換え処理の実施形態1110を、スクリプトおよび構造化文書で記述されたデータを使用して説明する図である。クライアント230から送付される書換えを指令するスクリプト1111は、「UPDATE RESOURCE カテゴリ名 SET VALUE=‘value’ WHERE KEY=‘key’CHARSET‘言語識別値’」である。クライアントから送信されるコマンドが「UPDATE RESOURCE」で始まる場合、リソース・カラムの値を書換えが指令されたと判断し、書換え処理を開始する。
より具体的には、既存のデータ1130の書換えのため、書換えを指令するスクリプト1120が、「UPDATE
RESOURCE MTH SET VALUE=‘睦月’ WHERE KEY=‘Jan’CHARSET‘ja’」を受領したものとして説明する。情報処理装置111は、まず、カテゴリ名MTH、キー値、言語識別値を照合し、対応するデータ1130を取得し、スクリプト1120で指定されたvalue=睦月で、データ1130の該当する値を、「睦月」に書換えたデータ1140として登録する。
図12は、本実施形態のリソース・テーブルに登録されたデータの削除処理のフローチャートを示す。リソース・テーブルに登録されたデータの削除処理は、本実施形態では「DELETE FROM RESOURCE」で始まるコマンドを受信した場合に行われる処理である。図12の処理は、クライアントからDELETE FROM RESOURCE文を受信することによって、ステップS1200で、リソース・データ削除部126呼ばれ、処理を開始する。本実施形態では、リソース・テーブルの構造化文書の削除を指令するコマンドおよびその引数は、下記式(8)のコマンドで与えることができる。
ステップS1201では、スクリプトに記述された各値(リソース名、キー名、値、言語識別値(指定されている場合)を取得する。CHARSET ‘言語識別値’は省略可能で、省略した場合、言語識別レジスタ120bのCHARSETの値を言語識別値として使用する。ステップS1202では、該当するデータを取得し、ステップS1203で該当するデータが存在しないと判断された場合(no)、ステップS1204で、クライアントにエラーを返し、ステップS1208で処理を終了させる。
一方、ステップS1203で、該当するデータが存在すると判断した場合(yes)、ステップS1205で参照カウンタの値が0か否かを検査し、その参照カウンタが0であれば、ステップS1206で該当するデータの値をキー単位ですべて削除する。削除後、その結果をクライアントに返し、ステップS1208で処理を終了する。参照カウンタが0でない場合(no)、ステップS1207でクライアントにエラーを返し、ステップS1208で処理を終了させる。図12の処理によって、一旦作成したデータを、クライアントからの指令に対応して削除することが可能となる。
次に、リソース・テーブルを除去するコマンドは、下記式(9)として実装することができる。
リソース・テーブルの削除は、リソース参照情報を参照し、指定したリソース・テーブルを参照しているカラムがあれば、エラーを返す。一方、指定したリソース・テーブルを参照しているカラムがなければ、そのリソース・テーブルを除去することにより実行することができる。
以上、リソース・カラムを保持するテーブルの作成、リソース・テーブルの作成、挿入、更新、削除処理について説明した。以下、さらに、リソース・カラムを保持するテーブルに対して、データを挿入、更新、削除する処理、および、各種データを参照する処理について説明する。
図13は、本実施形態の情報処理装置110において、リソース・カラムを保持するテーブルにデータを挿入するデータ挿入部124cが実行する処理のフローチャートを示す。当該コマンドは、種々の形式を採用することができるが、本実施形態における特定の形態では、下記式(10)としてコマンドを定義することができる。
上記式(10)は、Syntaxの変更例を示したものであり、CHARSET ‘言語識別値’は省略可能で、省略した場合、言語識別レジスタ120bのCHARSETの値を言語識別値として使用する。式(10)で示すように、リソース・カラムのデータの挿入方法として、値そのものを指定する以外にRESOURCE_SET()やRESOURCE_REF()といった関数を利用することができる。コマンド“RESOURCE_SET()”は、第1引数にキー名を、第2引数に値を設定することができ、各引数に基づいてデータが保存される。コマンド“RESOURCE_REF()”は、第1引数にキー名を設定することができ、そのキーの値を参照することを意味する。キーの値は、別途、上述したINSERT
INTO RESOURCE文で予め挿入しておくことができ、その値を参照する際にRESOURCE_REF()を利用することができる。
リソース・データの挿入処理は、ステップS1300で、挿入を指令するコマンドを受領してリソース・データ挿入部126cが呼び出されることにより開始する。ステップS1301でコマンド中に設定されている、テーブル名、各カラムのデータ、言語識別値(設定されている場合)を取得する。そして、ステップS1302で、1番目のカラムの定義と値を取り出す。
上述したように、オプション的にCHARSET ‘言語識別値’は省略可能で、省略した場合、言語識別レジスタ120bのCHARSETの値を言語識別値として使用する。各カラムのデータを1カラム目から処理する。ステップS1303で処理対象のカラムが、リソース・カラムか否かを判断し、処理対象のカラムがリソース・カラムでない場合(no)、ステップS1304で、従来通りの処理を実行するテーブル処理部を呼び出して既存の処理を使用してテーブルに対する処理を実行させ、ステップS1307でさらに処理するカラムが存在するか否かを判断する。ステップS1307の判断でさらに処理を行うべきカラムが存在する場合(yes)、処理をステップS1303に戻し、再度判断を繰り返す。また、ステップS1307で処理を行うべきカラムが残っていない場合(no)、ステップS1307で処理を終了する。
ステップS1303で処理対象のカラムが、リソース・カラムであると判断された場合(yes)、ステップS1305で、カテゴリ指定値は、NULLであるか否かを判断する。ステップS1305で、カテゴリ指定値がNULLであれば(yes)、ステップS1306で該当するカラムに言語リソースを与える構造化文書を記述する。言語識別値とデフォルト言語識別レジスタの値が一致する場合、デフォルト設定の言語の値も挿入する。一方、カテゴリ名がNULLでない場合(no)、ポイントAから図14の処理に分岐する。
図14の処理は、ポイントAで図13の処理から制御を渡されて開始し、ステップS1401で、カテゴリ名を取得し、ステップS1402で値のみが指定されているか否かを判断し、値のみが指定されている場合(yes)、ステップS1403でキーを自動生成し、登録されていないキーを得る。そして、ステップS1404で、上記式(8)で説明したと同様の処理を行う。この際、該当するリソースのキーの参照カウンタを1に設定する。一方、ステップS1402で、コマンド内で、RESOURCE_SET()が使用されており、ステップS1406でキー以外の値も含まれると判断した場合(no)、キー名と値とを取得し、ステップS1407で該当するカテゴリのリソースに該当するキーがすでに登録されているか否かの判断を行う。キーがすでに登録されている場合(yes)、ステップS1410でエラーを返し処理を終了させる。
一方、ステップS1407でキーが登録されていない場合(no)、処理をステップS1404に戻し、処理を反復させる。
また、ステップS1406の判断で、RESOURCE_SET()が含まれていない場合(no)、ステップS1408で、コマンドに、参照カウンタの変更を指令するコマンド、例えばRESOURCE_REF()が含まれているか否かを判断する。ステップS1408で参照カウンタ(refcount)を修正するコマンドが存在すると判断する場合(yes)、ステップS1409でリソース・テーブルにすでにキーが登録されているか否かを判断し、登録されていない場合(no)、ステップS1410で該当するキーが存在しないとしてエラーを返す。一方、キーが存在する場合(yes)、ステップS1411で、該当するキーの参照カウンタを1増分し、処理をステップS1412に戻す。
図15は、本実施形態の情報処理装置110において、リソース・カラムを保持するテーブルに登録されたデータの更新を行う、リソース・データ更新部126bの処理のフローチャートを示す。図15の処理は、ステップS1500で、更新を指令するコマンドを受領して呼び出されることにより起動され、ステップS1501で、コマンドに指定された言語識別値を取得する。言語識別値は省略可能で、省略した場合、言語識別レジスタ120bのCHARSETの値を言語識別値として使用する。ステップS1502では、WHERE節に記述されている1番目の条件のカラム名とその値を取得し、ステップS1503で、リソース・カラムを指定しているか否かを検査する。ステップS1503の判断で、リソース・カラム名が指定されていないと判断された場合(no)、ステップS1504で、従来の処理を使用して更新対象のレコードを取得する。
一方、ステップS1503でリソース・カラムが指定されていると判断した場合(yes)、ステップS1507で、当該リソース・データのカテゴリ名は、NULLか否かを検査し、NULLの場合(yes)、ステップS1508で、該当レコードの該当カラムのレコードを順に得る。その後、ステップS1509で、CHARSET名に該当する言語識別値を取得する。該当する値がなければデフォルトの値を取得する。また、ステップS1510では、取得した値を用いて条件を判断し、取得した値が、条件に指定されている値と一致する場合、更新または挿入の対象と設定して処理をステップS1505に分岐させる。
また、ステップS1507の判断でNULLではないと判断された場合(no)、ステップS1511で該当カラムに保存されているキー名から、該当するリソース・テーブルの該当データを得、ステップS1512で、該当するカテゴリのリソース情報を参照し、キーとCHARSET名に該当する値とを取得する。ない場合には、デフォルトの値を取得する。ステップS1513では、取得した値を用いて条件を判断し、取得した値が、条件に指定されている値と一致する場合、更新または挿入の対象と設定して処理をステップS1505に分岐させる。
ステップS1505では、WHERE節に続く条件があるか否かを判断し、条件がある場合(yes)、ステップS1506で、WHERE節に記述されている次の条件を取得し、処理をステップS1503に分岐させて処理を反復させる。一方、ステップS1505で、WHERE節に続く条件があるか否かを判断し、条件がないと判断した場合(no)、ポイントBから図16の処理を呼び出して、更新処理を実行させる。
図16は、図15の挿入処理に後続する処理のフローチャートを示す。図16の処理は、図ポイントCで、図15の処理から制御を渡されて開始する。ステップS1600では、更新対象レコードを処理対象としてセットし、ステップS1601では、更新を指令するコマンドで指定されている第1番目のカラム名と値とを取得する。ステップS1602では、現在判断対象としている当該カラムがリソース・カラムか否かを、リソース情報を参照して判断し、リソース・カラムでない場合(no)、ステップS1603で、従来の処理を適用してカラムへの更新を実行する。
一方、ステップS1602の判断でリソース・カラムであると判断された場合(yes)、ステップS1604で、当該リソースのカテゴリは、NULLか否かを判断し、NULLの場合(yes)、ステップS1605で、該当カラムの言語識別値の値が存在すれば、その値を置換する。ない場合は、挿入する。置換後の値がNULLであれば、言語識別値の値を削除する。言語識別値がデフォルト言語識別レジスタのDEFAULT_CHARSETの値と同じ場合、デフォルトの値についても置換する。
また、ステップS1604の判断でNULLでない場合(no)、ステップS1606で、該当テーブルの該当カラムに保存されているキーから、該当するリソース・テーブルの該当データを得、ステップS1607で、言語識別値の値が存在すれば、その値を置換する。ない場合は、挿入する。置換後の値がNULLであれば、言語識別値の値を削除する。言語識別値がデフォルト言語識別レジスタのDEFAULT_CHARSETの値と同じ場合、デフォルトの値についても置換し、処理をステップS1608に分岐させる。
ステップS1608では、次の更新するべきカラムが残っているかを判断し、残っていない場合(no)、ステップS1610で処理を終了させる。一方、残っている場合、ステップS1609で、次の更新するべきカラム名と値を取得し、処理をステップS1602に分岐させて処理を反復させる。
図17は、本実施形態でリソース・カラムを保持するテーブルに登録されたデータの削除を行う処理のフローチャートである。図17の処理は、図15の処理に比較し、更新を削除に置き換えた以外、カラムの検査を実行する点では共通するため詳細な説明は行わない。図17の処理は、ポイントCに達した時点で、制御を図18の処理に制御を渡し、削除の実体的処理を開始する。
図18は、図17に後続する削除処理のフローチャートである。図18の処理は、ポイントCで、図17の処理から制御を渡されて開始し、ステップS1800で、削除対象レコードを削除対象としてセットし、ステップS1801で、1番目のカラムをチェックする。ステップS1802では、当該カラムは、リソース・カラムか否かを判断し、リソース・カラムでない場合(no)、ステップS1806で、さらに処理するべきカラムが残っているか否かを判断し、残っている場合(yes)、ステップS1809で、次のカラムをチェックし、処理を反復させる。一方、ステップS1806で、次のカラムが残っていないと判断された場合(no)、ステップS1808で、従来のデータ削除部124dを呼び出して従来の処理を適用してカラムを削除し、ステップS1810で処理を終了する。
また、ステップS1802で、リソース・カラムであると判断した場合(yes)、ステップS1803で、当該リソースのカテゴリは、NULLか否かを判断し、NULLの場合(yes)、処理をステップS1806に分岐させ、さらに処理するべきカラムが存在しているか否かを判断し、処理を反復させる。一方、ステップS1803の判断で、当該リソースのカテゴリがNULLではないと判断された場合(no)、ステップS1804で、該当テーブルの該当カラムに保存されているキーを得、ステップS1805で、該当するカテゴリのリソース情報を参照し、キーの参照カウンタの値を1デクリメントさせ、ステップS1806に処理を分岐させ、処理を反復させ、対象とするカラムの処理を終了した後、ステップS1810で処理を終了する。
図19は、本実施形態にしたがって生成されるリソース・カラムを有するテーブルの実施形態を示す。図19に示したデータ構造は、RESOURCEデータ・タイプのカラムMONTHとINTEGERデータ・タイプのカラムNUM_OF_DAYSを保持するT1テーブル1900と、そのテーブル1900のカラムMONTH属性を定義するリソース情報テーブル1930とを示している。リソース・カラム1910には、説明する実施形態では、カラム名=MONTHがカテゴリ名なしのRESOURCEデータ・タイプのデータを記述する構造化文書を格納するリソース・カラムである。
また、説明する実施形態では、カラム名=NUM_OF_DAYSのカラム1920は、データ・タイプがINTEGERの値を登録する従来カラムであり、暦月の末日の数字を登録するカラムである。リソース・カラムのデータは、タグ<resource>で識別された範囲にタグ<value>で開始するXMLで記述されている。
クライアントからSELECT文などによりリソース・テーブル1900で表されるテーブルの”MONTH”のデータ取得要求を受領すると、SELECT文中に言語識別値が設定されていればその値を利用し、設定されていなければ言語識別レジスタのCHARSETの値を言語識別値として利用し、その言語識別値に該当する値がリソース・カラム1910から取得される。その言語識別値に該当する値がなければデフォルトとして格納されている値が取得される。
また、テーブルT1のカラムMONTHの定義情報1930は、テーブル1900のカラム情報としてテーブル1900を作成すると同時に作成され、従来から保持されている情報に加えカテゴリ名が追加されている。テーブルT1のカラムNUM_OF_DAYSについても、従来どおり定義情報が作成される。テーブル1900のカラム属性としてリソース・カラムに必要な情報を登録し、テーブル1900のリソース・カラムのデータ管理を可能とさせている。なお、図19に示した実施形態では、リソース・テーブル1900には、カテゴリ名が付されておらず、このため、リソース・カラムの保存域がそのまま言語リソースを格納するために利用されている。また、図19に示した実施形態では、キー値は登録されておらず、直接valueに設定された値の一致などを使用して適切なレコードに追加するべき構造化文書が追加されて行く。
なお、リソース・テーブル1900に登録される構造化文書には、データ作成・編集などの履歴をトレース可能とするため、作成および編集を受けた時刻のタイムスタンプが登録されている。各タイムスタンプは、データベース・システムの管理者などが、データ変更履歴を検査し、例えば、デフォルトや英語の値が更新された後に他の言語の値も更新されているかなどを検出するために利用される。
図20は、本実施形態で、テーブルを作成する際、RESOURCEデータ・タイプのカラム情報として、カテゴリ名=MTHを指定したものである。図20に示したデータ構造は、RESOURCEデータ・タイプのカラムMONTHとINTEGERデータ・タイプのカラムNUM_OF_DAYSを保持するT1のテーブル情報2030と、テーブル情報2030のカラムMONTHの属性を定義するリソース情報テーブル2020と、カテゴリMTHのリソース・テーブル2000を示している。図21の実施例の場合、リソース・カラムMONTH自体では、言語リソースを保持せず、キーを保持する。キーに対応する値は、そのカテゴリのリソース・テーブル2000が、カラム2010においてキーとともに保持する。
クライアント230からSELECT文などのより2030で表されるテーブルの”MONTH”のデータ取得要求を受領すると、SELECT文中に言語識別値が設定されていればその値を利用し、設定されていなければ言語識別レジスタのCHARSETの値を言語識別値として利用し、MONTHの保存域に格納されているキーに相当するデータを該当するカテゴリのリソース・テーブルから検出し、その言語識別値に該当する値を取得する。その言語識別値に該当する値がなければデフォルトとして格納されている値を取得する。
図21は、本実施形態で、リソース・カラムを保持するテーブルがリソース・テーブルを参照中であることを示す、リソース参照情報を格納するリソース参照テーブル2100の実施形態を示す。リソース参照テーブル2100は、カテゴリ名付きでリソース・カラムを定義した際、そのスキーマ名と、テーブル名と、カラム名とをカテゴリ名に関連付けた情報を保持するテーブルであり、リソース参照情報格納部に格納されるデータ構造体である。図21に示した実施形態では、リソース参照テーブル2100のREFカラムには、構造化文書<reference category =”MTH”>として、そのカテゴリを参照しているスキーマ名とテーブル名とカラム名とが登録されている。さらに、CITYカテゴリについては、2つのテーブル“CUSTINFO”および“SHOPINFO”の“CITY”カラムから参照されていることが示されている。
リソース・カラムを利用してデータを更新する処理を説明する。この場合のSQL文は、データの更新を実行するSQL文CHARSET ‘言語識別値’を付加することにより実装することができる。下記式(11)を使用して特定の実施形態について説明する。
上記式(11)中、CHARSET ‘言語識別値’は、オプションとして省略可能で、CHARSET節を省略した場合、言語識別レジスタ120bのCHARSETの値を言語識別値として使用する。式(11)の例では言語識別値としてイタリア語(it)を指定する実施形態である。式(11)で示すように、リソース・カラムのデータも、他のデータ・タイプのカラムと同様のフォーマットで、構造化文書として記述することができる。
図12〜図18の処理で、WHERE節にリソース・カラムが指定されている場合、言語識別値のデータを取り出して処理する。言語識別値のデータがない場合、デフォルトのデータを取り出して処理する。SET節にリソース・カラムが指定されている場合、言語識別値のデータとして保存される。すでに言語識別値のデータが保存されていれば置き換え、保存されていなければ挿入する。保存や挿入の方法は、リソース・カラムを保持するテーブルにデータを挿入する処理と同様な方法で行う。
なお、式(11)の更新処理を行う前の状態としてMONTHの値のデフォルト値として‘January’が登録されており、それに相当するイタリア語が登録されていない場合、式(11)の更新処理により、MONTHに設定された値のデフォルト値‘January’に相当するデータにイタリア語の’Gennaio’が登録される。一方、すでにMONTHの値として、デフォルト値‘January’に相当するイタリア語がすでに登録されている場合は、式(11)の更新処理では、MONTH=’January’に該当するレコードが見つからないため、データの更新は行われないこととなる。
また、リソース・カラムを利用してデータを削除する処理のSQL文は、更新と同様な処理で該当レコードを見つけることにより実装することができる。
式(12)の場合も同様に、CHARSETの‘言語識別値’は、オプションで省略可能で、省略した場合、言語識別レジスタ120bのCHARSETの値を言語識別値として使用する。式(12)の例は、言語識別値として日本語(ja)を指定する場合を例示している。WHERE節にリソース・カラムが指定されている場合、言語識別値のデータを取り出して処理する。言語識別値のデータがない場合、デフォルトのデータを取り出して処理する。上記式(12)では、MONTHの値の日本語データが‘1月’のレコードが削除される。削除されるレコードのカラムで、カテゴリ名付きのリソース・カラムが定義されている場合、そのカテゴリのリソースの該当キーの参照カウンタを1つ減らす。
データの照会処理は、SELECT文などを使用して実装することができ、リソース・カラムに対する処理は、挿入・更新・削除などと同様な処理で情報処理装置110に実装することができる。下記式(13)に、照会処理で使用するSQL文の実施形態を説明する。
上記式(13)中、CHARSET ‘言語識別値’は、オプションで省略可能で、省略した場合、言語識別レジスタ120bのCHARSETの値を言語識別値として使用する。式(13b)の例では言語識別値として日本語語(ja)を指定するものとして説明する。式(13b)で示したようにリソース・カラムのデータも、他のデータ・タイプのカラムと同様に記述することができる。リソース・カラムのデータを照会する処理は、言語識別値に対応するデータを抽出することにより実行することができる。式(13c)の例では、リソース・カラムの値を要求するSELECT文で、この場合も、他のデータ・タイプのカラムと同様に記述することができる。リソース・カラムの値の取得は、言語識別値の値を取得し、なければ、デフォルトの値を取得する。
以下、本実施形態のデータベース・システム100に対する検索処理の実施形態を説明する。検索処理は、図1に示したデータ照会部124eが実行し、例えばSQLなどを使用する場合には、SELECT文をコマンド処理部118が受領し、データ処理部124に対して処理を依頼することにより実行される。検索結果は、表として生成され、クライアントに検索結果として返される。なお、検索処理は、クライアントが情報検索を行う目的で情報処理装置110にアクセスする他、RDBの管理者がデータベースをメンテナンスするための目的でRDBの内容を抽出する目的でのアクセスに対応する検索処理を含む。
本実施形態においても、SELECT文などでデータを照会する際には、スカラ関数や表関数として参照されるSQL関数を指定することができる。スカラ関数や表関数を実行する関数モジュールは、予め登録されており、SELECT文で登録したスカラ関数や表関数が指定されている場合、該当する関数モジュールが呼ばれる。スカラ関数用モジュールは処理結果として値を返す。表関数モジュールは処理結果として表データ(カラム名と0個以上のレコード)を返す。本実施形態で言語リソース対応処理を呼び出すためのスカラ関数と表関数を、下記表2に示すが、下記関数に限定されるものではない。
図22は、本実施形態の検索処理で生成される、SELECT文および対応する検索結果のデータ構造の実施形態を示す。データ構造2200は、スキーマ「xxx」のテーブルT1のカラムMONTHが使用しているリソースのカテゴリ名を抽出するスカラ関数とそのレコードが保持するキー名を抽出するスカラ関数を含むSELECT文および検索結果を、図20のリソース・テーブル2030から抽出した場合の検索結果を示す。SELECT文は、カラムMONTHのカテゴリ名、カラムMONTHのキー名、カラムNUM_OF_DAYSの値(月の日数)をテーブルT1から抽出することを要求しており、検出結果には、それぞれの値がリストされているのが示されている。
図22に示す実施形態では、表2に示した表2中、(1)の、カテゴリ名を返すスカラ関数は、該当するスキーマ名、テーブル名、カラム名に定義されているカテゴリ名を返す。カテゴリ名がない場合、NULLを返す。また、表2中、(2)のキー名を返すスカラ関数についても、リソース・カラムのデータに格納されているキーを返し、カテゴリ名を使用していない場合はキーも使用しないので、NULLを返す。また、図22の実施形態では、表2中、(3)のリソース情報を返す表関数1は、該当するカテゴリのリソース情報を表形式で返し、図22の2210の実施形態では、カラムとして、キー、参照カウンタ値、言語、値、作成日、最終更新日を返しているが、説明する実施形態に限定されるものではない。
表2中、(4)のリソース情報を返す表関数2の処理を説明すると、関数2は、該当するリソース・カラムが含むリソース情報を表形式で返し、スキーマ名と、テーブル名と、カラム名とを引数とし、表2中の表関数1の値に加え、キーの値と、カテゴリ名とを抽出する。IDは、同一リソース・カラムに保存されているデータを関連付けるために動的に生成され、使用されている。なお、リソース・テーブルにカテゴリ名がない場合、カテゴリ名、キー名、および参照カウンタの値は、NULLの値が返される。
図23は、本実施形態のまた、表2中、(4)の関数を使用する検索結果の実施形態を示す。データ構造2300には、スキーマxxxのリソース・テーブルT1のカラムMONTHのリソース情報を抽出する表関数を含むSELECT文および検索結果を、図19に示すテーブルから抽出した場合の結果を示す。本実施形態で実装する、RESOURCE.RESOURCE_INFO(‘schema_name’,’table_name’,’column_name’) 表関数は、カテゴリ名、キー名、参照カウンタ値、値の言語、値、作成日時、最終更新日時を返しており、結果として、CATEGORY, KEY, REFCOUNT, CHARSET, VALUE, CREATED, LASTMODIFIEDカラムに対する値がリストされているのが示されている。図23に示したSELECT文では、テーブルのカラム名からリソース情報を抽出することができる。
さらに、図23には、表2中の(5)のリソース参照情報を返す関数、すなわち、どのテーブルのどのカラムが、どのカテゴリのリソースを参照しているかを返す表関数についての照会結果2310の実施形態を示す。検索結果2310の実施形態では、紹介対は、図21のリソース参照テーブル2100を対象としてその登録要素を抽出する実施形態である。
図23に示した検索処理は、データベースにアクセスしたクライアントが、RDBに登録されたデータを取得する目的で行うこともできる。また、図23に示した検索処理は、RDBの管理者が、言語間で対応付けられたデータが存在するか否かをチェックする目的で使用することができる。これにより、参照しているリソース・カラムを考慮しながら、リソース・テーブルをメンテナンスすることができる。
図22および図23に示されるように、本実施形態では、多言語で表現されたデータが、単一のカラムで管理されており、それぞれの言語の値を保持するため、同じ意味を持つレコードを複数作成したり、テーブルを分割して管理することなく、多言語データを効率的に管理することが可能となる。
図24は、本実施形態のリソース・テーブルの他の実施形態を示す。図24に示す実施形態は、リソース・テーブルとして、複数の言語表記に対応する社員情報を管理する場合の実施形態に相当する。データベース作成時には、リソース参照テーブル2410のみが存在し、以後の入力に対応してリソース・カラムを保持する社員情報テーブル2420の実体内容およびリソース・テーブルが作成される。
社員情報テーブルのカラムとして、社員の名前と勤務地を含め、社員の名前をカテゴリなしのリソース・カラム、社員の勤務地をカテゴリ名=CITYのリソース・カラム2430としている。社員情報テーブルの作成時、そのカラムで使用しているカテゴリCITY用のリソース・テーブルが存在していない場合、そのリソース・テーブルも作成され、リソース参照テーブルには、社員情報テーブルの勤務地カラムがカテゴリ名CITYのリソースを参照している情報を付加する。この場合、社員情報テーブルを作成するためのSQL文は、下記式(14)で与えられる。
さらに、図24の実施形態では、リソース・テーブル2430(カテゴリ名=CITY)を参照する顧客情報テーブル2440を作成する。図24の実施形態では、顧客情報テーブル2440のカラムとして、その居住地RESIDENCEをカテゴリ名=CITYのリソース・カラムとして定義する。CITY用のリソース・テーブル2430は、SQL文(12)によりすでに作成されているので、当該リソース・テーブルのカラムを参照することができる。この場合、対応するリソース参照テーブルには、顧客情報テーブル2440の居住地カラムがカテゴリ名CITYのリソースを参照している情報を付加する。この場合の例示的なSQL文は、下記式(15)で与えられ、顧客情報テーブル2440=SCHEMA.CUSTINFOが作成される。
図25は、社員情報テーブルにいくつかのレコードが挿入された後のリソース・カラムとして定義される名前カラムを含むリソース・テーブル2500を示す。例えば、名前=山田太郎について、デフォルトの値、英語の値、ドイツ語の値、日本語の値、フランス語の値、およびイタリア語の値がXMLとして記述されていることが示されている。また、次レコードには、同様に、名前=佐藤一郎の値が登録されている。また、名前カラムに続いて、作成された他のカラムのデータが保存されている。
社員情報テーブルの名前カラムの定義は、データ構造2510のように他のカラムと同様な形式で管理されており、カテゴリ名としてNULLが設定されている。また、社員情報テーブルの勤務地カラムの定義は、カテゴリ名としてCITYが設定されている。勤務地カラムは、カテゴリ名付きのリソース・カラムで、その場合のデータ構造を2520に示す。カテゴリ名付きのリソース・カラムでは、そのデータとしてキー名が保存され、値は、そのカテゴリのリソース・テーブルにキーと関連付けて保存される。また、顧客情報テーブルの居住地カラムの定義は、データ構造2520のように、カテゴリ名としてCITYが設定されており、その場合の参照構造を与えるデータ構造を2520に示す。
図26は、カテゴリCITYのリソース・テーブルのデータ構造を示す。カテゴリCITYが有するリソース・カラム2600では、リソース・テーブルの最初のレコードに、キー名=Tokyoに対する値が、デフォルト、英語、ドイツ語、日本語、フランス語で定義されていることが示されている。また、顧客情報テーブル2610の居住地カラムには、キー名Osaka、Tokyo、New Yorkが登録されている。
説明する実施形態では、リソース・テーブル2600のカテゴリCITYのリソース・カラムにおけるTokyoとNew Yorkの参照カウンタは、社員情報テーブルおよび顧客情報テーブルの両方から参照されていることを示し、refcount=2とされる一方、キー名=Osakaの参照カウンタは、refcount=1に保持され、それぞれrefcount属性の値として設定されている。図26の実施形態の場合に生成されるリソース参照情報テーブルのデータ構造を、テーブル2630に示す。リソース参照情報テーブル2630のでは、カテゴリCITYのリソース・テーブル2600がEMPINFOのWORKLOCカラムとCUSTINFOのRESIDENCEが参照していることが記述されている。また、データ構造2610に示すように、キーにより相互参照可能とされている。
上述したように、リソース・テーブルを使用することで、複数のカラムから同一リソースを参照することが可能となっている。
以上のように、本発明によれば、多言語対応することが必要なデータであっても、それぞれの言語の値を保持するために同じ意味を持つレコードを複数作成したり、テーブルを分割して管理するといったことをすることなく、多言語データを効率的に管理することが可能となる。
本発明は、例えば、全世界の人々が参加可能な、インターネット掲示板に掲載されるメッセージなどを管理するためのデータベースの他、ウェブ・サイトのコンテンツをクライアント230の言語環境に適合させて提供するためのデータベースなどに適用することができ、既存のDB2などのリレーショナル・データベースを拡張して実装することができる。
さらに本発明の上記機能処理部は、本発明を説明するための具体的な実施形態として説明したものであり、各機能は、特的の実装形式に対応し、情報処理装置のいかなる処理部の機能として実装されてもよい。
本実施形態の上記機能は、C++、Java(登録商標)、Java(登録商標)Beans、Java(登録商標)Applet、Java(登録商標)Script、Perl、Rubyなどのオブジェクト指向プログラミング言語などで記述された装置実行可能なプログラムにより実現でき、当該プログラムは、ハードディスク装置、CD−ROM、MO、フレキシブルディスク、EEPROM、EPROMなどの装置可読な記録媒体に格納して頒布することができ、また他装置が可能な形式でネットワークを介して伝送することができる。
これまで本実施形態につき説明してきたが、本発明は、上述した実施形態に限定されるものではなく、他の実施形態、追加、変更、削除など、当業者が想到することができる範囲内で変更することができ、いずれの態様においても本発明の作用・効果を奏する限り、本発明の範囲に含まれるものである。
100…データベース・システム、110…情報処理装置、112…ネットワーク、114…ネットワーク・アダプタ、116…クライアント接続処理部、118…コマンド処理部、120…言語設定部、120a…レジスタ処理部、120b…言語識別レジスタ、124…テーブル処理部、126…言語リソース処理部、128…他処理部、130…テーブル格納部、132…言語リソース・テーブル格納部