Q 非標準文字のオーバーライド
この付録では、Oracle B2BインスタンスのXEngineエンジンで使用できる、デフォルトの文字をオーバーライドする方法について説明します。
この付録の内容は次のとおりです。
Q.1 概要
XEngineによって、Oracle B2Bは、EDI、X12およびHL7ドキュメントの、ネイティブ形式からXML形式への変換、およびXML形式からネイティブ形式への変換を実行できます。
特定のドキュメント標準でXEngineが使用できるシステム文字またはデフォルト文字は、$ORACLE_HOME/soa/thirdparty/soa-infra/edifecs/XEngine/config/charsetsにあります。たとえば、EDI X12の場合のファイル名はx12.csで、EDI EDIFACTの場合のファイル名はedifact.csです。
XEngineが提供するこれらのファイルは編集しないことをお薦めします。しかし、システムで使用されるデフォルト文字をオーバーライドするには、Oracle Document Editorを使用します。
Q.2 XEngineを使用した文字のオーバーライド
システムで使用されるデフォルト文字をオーバーライドするには、Oracle Document Editorを使用してuser.csファイルを作成する必要があります。
user.csファイルが作成されない場合、次のエラー・メッセージが表示されます。
Error Brief : A data element contains characters not listed in the allowed character set.
user.csファイルを作成するには:
-
Oracle Document Editorで、「ツール」タブの文字セット・レジストリにアクセスします。
-
オーバーライドする文字の標準/バージョン/DocTypeを選択し、「重複」ボタンをクリックして、標準/バージョン/DocTypeの複製を作成します。
-
この新しいエントリのコンテンツを編集して文字を追加し(EDI X12 V4010 850の
ÿ
など)、この新しいエントリをuser.csというファイルにエクスポートします。
user.csファイルを編集するには:
Q.3 オーバーライド: 例
これは非標準文字をオーバーライドする方法の例です。
例として、文字ÿ
を850.xml XDATAファイルに挿入します。デフォルトでは、この文字はデフォルトのx12.csファイルではサポートされません。「XEngineを使用した文字のオーバーライド」に示されているステップに従ってuser.csを生成し、これを$ORACLE_HOME/soa/thirdparty/soa-infra/edifecs/Commonに置く必要があります。
AQを使用するアウトバウンドの場合、プロパティ・ファイル内でencoding=ISO-8859-1
を使用することで、正しいエンコーディングが使用され、データベースへの送信でÿ
文字が保持されます。Oracle B2B UIでアプリケーション・メッセージ・ペイロードを表示し、文字ÿ
がランダム文字ではなく、正しく表示されるかどうかを調べることによって、これが正しく行われることを確認できます。
検証が有効で、user.csファイルがある場合、850.xmlが適切に処理されます。user.csがない場合、次のエラー・メッセージが表示されます。
"Error Brief : A data element contains characters not listed in the allowed character set."
最後に、b2b.encoding=ISO-8859-1
プロパティがFusion Middleware Enterprise Management Controlコンソールで設定されている場合、Emacsエディタで出力ファイルを表示すると、文字ÿ
が表示されます。b2b.encoding
が設定されていない場合、デフォルトのUTF-8文字セットが使用されます。この場合は、Emacsエディタを使用して、ÿ
ではなくÿ
という2つの文字が表示されます。これは、UTF-8コード・ページでは文字ÿ
が2バイトにエンコードされるためです。
850.xmlに挿入されたマルチバイトの文字セットでもテストできます(マルチバイト文字が正しくエンコードされないことを確認します)。さらに、データベースはマルチバイトの文字セットをサポートする必要があります。次のSQL問合せを発行して、データベースの文字セットを確認できます。
select value from NLS_DATABASE_PARAMETERS where parameter = 'NLS_CHARACTERSET';