ユニバーサルエンコーディングサポート(UES)

このドキュメントでは、次のトピックについて説明します。


非ラテン文字セットのサポート

Adabas は、現在ラテンアルファベットに基づいた文字セット以外の文字セットを使用することが可能で、正しい照合順序でこれらの文字セットを使用するデータを検索することができます。

たいていの場合、アジアのテキスト文字は、単一バイトを使用してエンコードすることはできません。例えば、10,000 文字以上の日本語セットは、1 文字あたりに 2 バイト以上を使用してエンコードされます。大部分の西洋言語の特徴である 1 バイト文字セット(SBCS)に対して、これらは、要求されるエンコードに応じて、2 バイト文字セット(DBCS)またはマルチバイト文字セット(MBCS)と呼ばれます。

Unicode 規格では、Unicode コンソーシアムによってこれらの文字セットが標準化されています。詳細については、Unicode ホームページ(http://www.unicode.org/)を参照してください。DBCS の例は、UCS-2(Unicode バージョン 1.1 のすべての文字を含んでいる)であり、MBCS の例は、UTF-8(1~4 文字で現在の Unicode バージョンのすべての文字を表している)です。

下図では、日本語ひらがな(最初の 2 つ)および漢字(次の 2 つ)の文字を、さまざまなエンコードで示します。

graphics/wide_char_encoding.png

注意:

  1. いくつかの文字セット、例えば UTF-16 は、プラットフォーム依存です。したがって、プラットフォーム依存のエンコードが指定される場合、どの文字が使用されるかが保証されないため、UTF-16 の代わりに UTF-16BE(上位優先)または UTF-16LE(下位優先)を使用することを推奨します。
  2. フィールドの長さは、使用されるエンコードで変化します。つまり、1 つのエンコードのために指定されたフィールド長が、異なるエンコードでは足りないこともあり得ます。

ワイド文字エンコードのためのフィールドフォーマット W

Adabas の以前のバージョンでは、英数字フィールドに DBCS エンコードデータを格納しましたが、Adabas は、文字セットを認識していませんでした。アプリケーションは、どの文字セットが使われたかを認識する必要があり、それらが別の文字セットのデータを必要とした場合には、変換についての責任はアプリケーション自身にありました。これは、当然、まだ Adabas バージョン 5 でも考えられることですが、現在では、ワイド文字または Unicode(W)フィールドフォーマットの導入によってさらに適切に DBCS と MBCS を適応させています。

新しいフィールドフォーマット W は、2 バイト文字と複数バイト文字を扱うために作成されました。英数字フィールドのようなバイト単位の W フォーマットフィールドのサイズは、FDT に定義された標準長または可変長のどちらかです。W フォーマットフィールドは NV オプションを除いて英数字フィールドと同じフィールドオプションを指定することができます。

W フォーマットフィールドは、スーパーディスクリプタとサブディスクリプタの親として定義することができます。しかし、ハイパーディスクリプタまたはフォネティックディスクリプタの親として定義することはできません。

スーパーディスクリプタがワイド文字(W)フィールドを含んでいる場合、スーパーディスクリプタのフォーマットは A になります。

ワイド文字フォーマットフィールドのすべてのデータは、内部的に UTF-8 で格納されますが、Adabas ユーザーは、OP コマンドのレコードバッファ、または圧縮/圧縮解除ユーティリティ ADACMP/ADADCU でユーザーセッションの外部エンコードを指定することができます。

注意:

  1. Adabas は Unix および Windows 上で、ICU(International Components of Unicode)に基づいて Unicode をサポートします。ICU の詳細については、ICU ホームページ(https://www.ibm.com/software/globalization/icu)を参照してください。これまで、Adabas でサポートできる ICU バージョンは 1 つだけでした。もっと新しいバージョンも利用可能ですが、Adabas では長期に渡って UNIX および Windows で ICU バージョン 3.2(OpenVMS ではバージョン 3.6)をサポートしてきました。これは、照合ディスクリプタの照合キーの保存は永続的で、バージョンごとに照合キーが異なる可能性があることが理由です。Adabas バージョン 6.5 では、複数の ICU バージョンがサポートされるようになりました。Adabas バージョン 6.5 では、追加で ICU バージョン 5.4 もサポートされています。照合ディスクリプタがすでに存在する場合は、ADAINV REINVERT でディスクリプタが再作成されるまで、Adabas は引き続き古い ICU バージョンを使用します。新しい照合ディスクリプタは、常に新しい ICU バージョンで作成されます。将来のバージョンでは、次のように常に 2 つの ICU バージョンをサポートする予定です。新しい Adabas バージョンが新しい ICU バージョンをサポートしている場合、以前サポートされていた最も古い ICU バージョンはサポートされなくなります。必然的に、古い ICU バージョンを使用して、照合ディスクリプタの ICU バージョンをアップグレードすることが必要になります。これを行うには、新しい Adabas バージョンにアップグレードする前に、照合ディスクリプタを再インバートします。ディスクリプタの実際の ICU バージョンは、ADAREP FULL FDT で確認できます。
  2. ICU バージョン 3.2 および ICU バージョン 5.4 では、照合指定の構文や使用方法にいくつかの違いがあります。例えば、ICU バージョン 3.2 ではロケール "fr" は FRENCH オプションが暗黙的に指定されますが、ICU バージョン 5.4 では FRENCH オプションを明示的に指定する必要があります。このような変更が使用している照合ディスクリプタに影響するかどうかを確認してください。影響する場合は、ICU バージョン 5.4 の新しい指定(ICU バージョン 3.2 で使用されている旧指定に相当するもの)を使用して、影響を受ける照合ディスクリプタを再作成する必要があります。

ユニバーサルエンコーディングをサポートする照合ディスクリプタ

テキストフィールドの場合、照合順序がバイト順に従うケースはほとんどありません。必要な照合順序は言語に依存し、例えば、スペイン語の "LL" は、他の言語と異なり、1 文字とみなされます。また、同じ言語でも、さまざまな照合が存在する可能性があります。例えば、電話帳と本の索引では照合が異なる可能性があります。大文字/小文字、言葉に含まれるハイフン(例えば、"coop" と "co-op")、付加記号(例えば、ウムラウト記号、"resume" に対する "résumé" のようなアクセント記号)は、順序付けに影響することも、無視されることもあります。

各照合のための順序付けの規則は、各テキストフィールドの値に応じた照合キーを生成するルーチンに実装されます。これを行うために、Adabas は ICU を使用します。

照合ディスクリプタは、Unicode フィールドの照合に ICU 照合キーを使用するディスクリプタです。ICU 照合キーは、Unicode 照合アルゴリズムと言語特有のルールに従って、変換前の文字列から生成されたバイナリ文字列です。この方法で文字列から生成された照合キー同士をバイナリとして比較する場合、お使いの環境に応じた文字列の比較になります。

複数プラットフォームのサポート

ユニバーサルエンコーディングサポート(UES)は、Adabas が、ICU によってサポートされるエンコードに従ってテキストデータを処理し、このエンコードに従ってテキストデータを返すことを可能にします。Adabas の以前バージョンでは、1 つの固定変換テーブルを持つ各種マシンアーキテクチャ(ASCII、EBCDIC)間で Adabas バッファのデータを変換することだけが可能でした。複数の ASCII と 1 つの EBCDIC 派生文字セットの間で変換することはできませんでした。