uCosminexus Interschema　ユーザーズガイド

解説・手引・操作書

3020-3-J38-20

目　　次

前書き

変更内容

はじめに

1.　概要

1.1　Interschemaとは

1.1.1　Interschemaの目的

1.1.2　Interschemaの機能

1.2　Interschemaの特長

2.　データ変換の流れ

2.1　フォーマットの定義

2.1.1　フォーマットの種類

2.1.2　フォーマットの定義内容

2.1.3　フォーマットの定義手順

2.2　マッピング

2.3　データの変換

3.　FDLエディタの操作

3.1　操作の概要

3.1.1　FDLファイルの作成手順

3.1.2　FDLエディタの画面構成

3.1.3　FDLエディタのコマンド一覧

3.2　簡単なデータ構造のフォーマット定義例

3.2.1　フォーマット名の定義

3.2.2　型の定義

3.2.3　構造の定義

3.2.4　フォーマットの検証

3.2.5　FDLファイルの保存

3.3　複雑なデータ構造のフォーマット定義例

3.3.1　固定長形式フォーマットの定義

3.3.2　レングスタグ形式フォーマットの定義

3.3.3　セパレータ形式フォーマットの定義

3.3.4　条件式の定義

3.3.5　デフォルト式の定義

3.3.6　メッセージデータの例

3.4　FDLファイル作成時の注意事項

4.　MDLエディタの操作

4.1　操作の概要

4.1.1　MDLファイルの作成手順

4.1.2　MDLエディタの画面構成

4.1.3　MDLエディタのコマンド一覧

4.2　簡単なマッピング例

4.2.1　フォーマットの挿入

4.2.2　マップ式の定義

4.2.3　MDLの検証

4.2.4　MDLファイルの保存

4.3　複雑なマッピング例

4.3.1　構造を含んだマッピング

4.3.2　レングスタグフォーマットへのマッピング

4.3.3　値を持つ要素のマッピング

4.3.4　条件式とNULLを使用したマッピング

4.3.5　選択構造を持つフォーマットのマッピング

4.4　XMLデータのマッピング例

4.4.1　マップ式の定義（XMLデータの場合）

4.4.2　変換の結果（XMLデータの場合）

4.5　MDLファイル作成時の注意事項

5.　変換のコマンド

5.1　システム環境変数の設定（ワークステーションのOSの場合）

5.1.1　インストールディレクトリの設定

5.1.2　共用ライブラリ検索パスの設定

5.1.3　ロケールの設定

5.1.4　クラスパスの設定（ワークステーションのOSの場合）

5.2　システム環境変数の設定（Windowsの場合）

5.2.1　クラスパスの設定（Windowsの場合）

5.2.2　ライブラリ検索パスの設定

5.3　システムファイルの設定

5.4　トランスレータでのデータ変換

5.4.1　ettransコマンド

5.4.2　ettransコマンドの戻り値

5.4.3　システム情報ファイル「ettrans.ini」での実行時オプションの定義

6.　定義と変換の規則

6.1　定義内容と規則

6.1.1　FDLでの定義情報

6.1.2　MDLでの定義情報

6.2　属性

6.2.1　数値

6.2.2　文字列

6.2.3　バイト列

6.2.4　日付時刻

6.3　文字コード

6.3.1　トランスレータが扱う文字コード

6.3.2　文字コード使用時の注意点

6.4　変換処理の流れ

6.4.1　入力コンポーネントの制御

6.4.2　出力コンポーネントの制御

6.5　変換の規則

6.5.1　異なる属性型同士での変換

6.5.2　入力データに対する規則

6.5.3　出力データに対する規則

6.6　式

6.6.1　条件式

6.6.2　サイズ決定式

6.6.3　順序決定式

6.6.4　出現回数決定式

6.6.5　デフォルト式

6.6.6　マップ式

6.6.7　変数式

6.7　演算子及び関数

6.7.1　データ型

6.7.2　演算子

6.7.3　関数

6.7.4　定数

6.7.5　コンポーネント名

6.7.6　インデクスの指定

7.　ユティリティ

7.1　マージツール「etmerge」

7.1.1　マージツールとは

7.1.2　FDLマージ機能（/IFオプション）

7.1.3　DTDマージ機能（/IDオプション）

7.1.4　マップ式出力機能（/OTオプション）

7.1.5　マッピング機能（/ITオプション）

7.1.6　FDLフォーマット挿入機能（/AFオプション）

7.1.7　DTDフォーマット挿入機能（/ADオプション）

7.1.8　注意事項

7.1.9　戻り値

7.1.10　ヘルプの表示

8.　インタフェース

8.1　インタフェースの概要

8.1.1　データ変換処理APIの概要

8.1.2　ユーザ組み込み関数の出口関数の概要

8.2　C言語及びJava言語のインタフェースを混在させて使用する場合の注意事項

9.　データ変換処理API（C言語）

9.1　データ変換処理API（C言語）の概要

9.1.1　データ変換処理API（C言語）の機能概要

9.1.2　データ変換処理API（C言語）の実行順序

9.1.3　データ変換処理API（C言語）実行時の注意事項

9.2　データ変換処理API（C言語）の関数仕様

9.2.1　ETtrans2Init（トランスレータの初期化）

9.2.2　ETtrans2End（トランスレータの終了処理）

9.2.3　ETtrans2CreateMdlInfo（MDL情報の生成）

9.2.4　ETtrans2ReleaseMdlInfo（MDL情報の解放）

9.2.5　ETtrans2UpdateMdlInfo（MDL情報の更新）

9.2.6　ETtrans2CreateThreadContext（スレッド固有情報の生成）

9.2.7　ETtrans2ReleaseThreadContext（スレッド固有情報の解放）

9.2.8　ETtrans2UpdateThreadContext（スレッド固有情報の更新）

9.2.9　ETtrans2Exec（変換実行）

9.2.10　ETtrans2GetDlProperty（FDLファイル又はMDLファイルのプロパティ情報の取得）

9.2.11　ETtrans2ReleaseDlProperty（FDLファイル又はMDLファイルのプロパティ情報の解放）

9.3　データ変換処理API（C言語）の使用例

9.4　データ変換処理API（C言語）を使用したプログラムの作成

9.4.1　データ変換処理API（C言語）を使用したプログラムの作成（Windowsの場合）

9.4.2　データ変換処理API（C言語）を使用したプログラムの作成（ワークステーションのOSの場合）

10.　データ変換処理API（Java言語）

10.1　データ変換処理API（Java言語）の概要

10.1.1　データ変換処理API（Java言語）の機能概要

10.1.2　データ変換処理API（Java言語）のパッケージ構成

10.1.3　jp.co.Hitachi.soft.interschema2パッケージのクラスの概要

10.1.4　jp.co.Hitachi.soft.interschema2.exitfuncパッケージのクラスの概要

10.1.5　データ変換処理API（Java言語）使用時の注意事項

10.2　jp.co.Hitachi.soft.interschema2パッケージのクラスの仕様

10.2.1　Translatorクラス

10.2.2　MDLInfoクラス

10.2.3　DLPropertyクラス

10.2.4　Optionクラス

10.2.5　TranslateDataクラス

10.2.6　FileDataクラス

10.2.7　StringDataクラス

10.2.8　InputStreamDataクラス

10.2.9　OutputStreamDataクラス

10.2.10　TranslatorExceptionクラス

10.2.11　ExtraErrorDataクラス

10.2.12　UserExceptionクラス

10.3　jp.co.Hitachi.soft.interschema2.exitfuncパッケージのクラスの仕様

10.3.1　ENVStringクラス

10.3.2　DateTimeクラス

10.3.3　ExitFuncWarningクラス

10.3.4　ExitFuncExceptionクラス

10.4　データ変換処理API（Java言語）の使用例

11.　ユーザ組み込み関数

11.1　ユーザ組み込み関数の概要

11.2　ユーザ組み込み関数の設定手順

11.3　システム情報ファイル「ettrans.ini」の定義

11.3.1　［Userfunc_MaxId］セクション

11.3.2　［Userfunc_Mapfunc］セクション

11.3.3　［Userfunc_MapfuncGuide］セクション

11.3.4　［Userfunc_ExitfuncName］セクション

11.3.5　［Userfunc_DllPath］セクション

11.3.6　［Userfunc_SlPath］セクション

11.3.7　［Userfunc_JavaMethodName］セクション

11.3.8　［Userfunc_Option］セクション

11.4　C言語の出口関数の作成

11.4.1　C言語の出口関数の定義

11.4.2　ダイナミックリンクライブラリ（DLL）の作成（Windowsの場合）

11.4.3　共用ライブラリの作成（ワークステーションのOSの場合）

11.5　Java言語の出口関数の作成

11.5.1　Java言語の出口関数の定義

11.5.2　Java言語の出口関数へのオブジェクト渡し

11.5.3　Java言語の出口関数使用上の注意

12.　フォーマット作成時及びデータ変換時の注意事項

12.1　XMLデータ

12.1.1　DTDからMDLツリーへの変換

12.1.2　XML属性の扱い

12.1.3　EMPTY要素の扱い

12.1.4　ANY要素の扱い

12.1.5　再帰構造を含むDTD及びXML文書の扱い

12.1.6　混在内容構造の扱い

12.1.7　XMLデータの変換

12.1.8　未サポート項目

12.2　CSVフォーマット

12.2.1　CSVフォーマットの特徴

12.2.2　CSVフォーマットの作成

12.2.3　CSVフォーマットの変換の規則

12.3　CII3フォーマット

12.3.1　CII3フォーマットの特徴

12.3.2　CII3フォーマットの作成

12.3.3　CII3フォーマットの変換の規則

12.4　EDIFACT4フォーマット

12.4.1　EDIFACT4フォーマットの特徴

12.4.2　EDIFACT4フォーマットの作成

12.4.3　EDIFACT4フォーマットの変換の規則

12.5　Sea-NACCSフォーマット

12.5.1　Sea-NACCSフォーマットの特徴

12.5.2　Sea-NACCSフォーマットの作成

12.5.3　Sea-NACCSフォーマットの変換の規則

付録

付録A　トラブルシューティング

付録A.1　エラー発生時の処理

付録B　トランスレータのメッセージ

付録B.1　メッセージ形式

付録B.2　メッセージの見方

付録B.3　メッセージ

付録B.4　データ変換処理API（Java言語）の例外

付録C　トランスレータの機能差異と電子データ交換ツールからの移行上の注意

付録C.1　トランスレータの機能差異

付録C.2　電子データ交換ツールからの移行上の注意

付録C.3　出口関数移行上の注意点

付録C.4　デ－タ変換処理APIを使用したプログラムの移行上の注意

付録D　Interschemaバージョン1との互換API

付録D.1　ETtransInit（トランスレータの初期化）

付録D.2　ETtransLoadMap（MDLファイルのロード）

付録D.3　ETtransExec（トランスレータの起動）

付録D.4　ETtransUnLoadMap（MDLファイルのアンロード）

付録D.5　ETtransEnd（トランスレータの終了）

付録D.6　ETtransInitT（変換処理の初期化）

付録D.7　ETtransExecT（変換処理の実行）

付録D.8　ETtransEndT（変換処理の終了）

付録D.9　互換APIの使用例

付録E　Interschemaから出力される情報

付録E.1　マップ式ファイル

付録E.2　ツリー情報ファイル

付録E.3　フォーマット情報ファイル

付録E.4　差分情報ファイル

付録F　ファイルのバージョンとトランスレータのサポート範囲

付録F.1　ファイルのバージョンとInterschemaのバージョンとの対応

付録F.2　トランスレータのサポート範囲

付録G　CIIシンタックスルールのサポート範囲

付録G.1　対応するバージョン

付録G.2　サポート機能基準との比較

付録G.3　エラーコードの対応

付録G.4　トランスレータの対応

付録G.5　EIAJ標準メッセージの対応範囲

付録H　UN/EDIFACTのサポート範囲

付録H.1　対応するバージョン

付録H.2　サポート機能基準との比較

付録H.3　エラー情報

付録H.4　トランスレータの対応

付録I　JEDICOSのサポート範囲

付録I.1　対応するバージョン

付録I.2　サポート機能基準との比較

付録J　Sea-NACCSのサポート範囲

付録J.1　対応するバージョン

付録J.2　サポート機能基準との比較

付録J.3　エラー情報

付録J.4　トランスレータの対応

付録K　文字コード

付録K.1　文字コード一覧

付録K.2　文字種別

付録K.3　文字コード変換

付録K.4　EBCDIC／EBCDIKのコード表

付録L　用語解説

索引

[他社商品名称に関する表示]

All Rights Reserved, Copyright (C) 2000, Information-technology Promotion Agency, Japan.
All Rights Reserved. Copyright (C) 2005, 2008, Hitachi, Ltd.
All Rights Reserved, Copyright (C) 1985-1998, Microsoft Corporation.

前書き

■ 対象製品

●適用OS：AIX 5L V5.1，AIX 5L V5.2，AIX 5L V5.3

P-1M2C-BA31　 uCosminexus Interschema　 03-01

●適用OS：HP-UX 11.0，HP-UX 11i，HP-UX 11i V2 (PA-RISC)

P-1B2C-BA31　 uCosminexus Interschema　 03-01

●適用OS：HP-UX 11i V2 (IPF)，HP-UX 11i V3 (IPF)

P-1J2C-BA31　 uCosminexus Interschema　 03-01

●適用OS：Solaris 8，Solaris 9

P-9D2C-BA31　 uCosminexus Interschema　 03-01

●適用OS：Windows 2000，Windows XP，Windows Server 2003

P-262C-BS34　 uCosminexus Interschema Javaライセンス　 03-01
P-262C-BT34　 uCosminexus Interschema APIライセンス　 03-00
P-262C-BU34　 uCosminexus Interschema 海上貨物通関ライセンス　 03-00
P-262C-BV34　 uCosminexus Interschema EDIFACTライセンス　 03-00
P-262C-BW34　 uCosminexus Interschema CIIライセンス　 03-00
P-262C-BX34　 uCosminexus Interschema XMLライセンス　 03-00
P-262C-BY34　 uCosminexus Interschema GUIライセンス　 03-00
P-262C-BZ34　 uCosminexus Interschema　 03-01

これらのプログラムプロダクトのほかにもこのマニュアルをご利用になれる場合があります。詳細は「リリースノート」でご確認ください。

■ 輸出時の注意

本製品を輸出される場合には，外国為替および外国貿易法ならびに米国の輸出管理関連法規などの規制をご確認の上，必要な手続きをお取りください。
なお，ご不明な場合は，弊社担当営業にお問い合わせください。

■ 商標類

AIXは，米国における米国International Business Machines Corp.の登録商標です。
HP-UXは，米国Hewlett-Packard Companyのオペレーティングシステムの名称です。
IBMは，米国およびその他の国におけるInternational Business Machines Corporationの商標です。
Java及びすべてのJava関連の商標及びロゴは，米国及びその他の国における米国Sun Microsystems, Inc.の商標または登録商標です。
JEDICOSは，（財）流通システム開発センターの登録商標です。
Microsoftは，米国およびその他の国における米国Microsoft Corp.の登録商標です。
Sea-NACCSは，通関情報処理センターの登録商標です。
Solarisは，米国Sun Microsystems, Inc. の米国およびその他の国における商標または登録商標です。
Sun，Sun Microsystems，Javaは，米国Sun Microsystems, Inc. の米国およびその他の国における商標または登録商標です。
UNIXは，X/Open Company Limited が独占的にライセンスしている米国ならびに他の国における登録商標です。
Windowsは，米国およびその他の国における米国Microsoft Corp.の登録商標です。
Windows Serverは，米国Microsoft Corporationの米国及びその他の国における登録商標です。
プログラムプロダクト「P-9D2C-BA31」には，米国Sun Microsystems, Inc.が著作権を有している部分が含まれています。
プログラムプロダクト「P-9D2C-BA31」には，UNIX System Laboratories, Inc.が著作権を有している部分が含まれています。

■ 発行

2005年6月（第1版）3020-3-J38
2008年7月（第3版）3020-3-J38-20

■ 著作権

All Rights Reserved, Copyright (C) 2000, Information-technology Promotion Agency, Japan.
All Rights Reserved. Copyright (C) 2005, 2008, Hitachi, Ltd.
All Rights Reserved, Copyright (C) 1985-1998, Microsoft Corporation.

変更内容

変更内容（3020-3-J38-20）　uCosminexus Interschema　03-01

追加・変更内容
変更箇所

ettransコマンドに，実行時オプション「-SNCODE」を追加した。
5.4.1(3)(a)，付録J.4(2)，付録J.4(3)

演算子，関数の説明で使用するデータ型の注意事項を追加した。
6.7.1

次の関数を追加した。

条件：IFEXIST

XML操作：IFEXISTXML

表6-14

メッセージ番号に「78」を追加した。
表9-2，表D-2

HP-UXの場合の共用ライブラリを追加・変更した。
9.4.2

Optionクラスに，OPT_SNCODEフィールドを追加した。
10.2.4(1)，10.2.4(2)(q)

Sea-NACCSシステムの更改に伴い，システム更改後のSea-NACCSフォーマットをサポートした。
また，Sea-NACCSフォーマットについての説明を追加した。
12.5，表E-2，表F-1，付録J.1，付録J.2，付録J.4，付録L

メッセージを追加した。
KBET0078T-E
付録B.3

メッセージを変更した。
KBET0058T-E
付録B.3

「属性」の「n型」に，日時を表す場合の説明を追加した。
表J-2

「その他」に，「XML電文」を追加した。
表J-2

Sea-NACCS EDI電文長を最大500,000バイトに変更した。
付録J.2

適用OSに，HP-UX 11i V3 (IPF)を追加した。
－

単なる誤字・脱字などはお断りなく訂正しました。

変更内容（3020-3-J38-10）　uCosminexus Interschema　03-00

追加・変更内容

FDLエディタのリストビューを変更した。

MDLエディタのフォーマットツリーリストを変更した。

FDLエディタに外部出力コマンドを追加した。

MDLエディタで一度に複数のドキュメントを編集できるようにした。

ドラッグ&ドロップでフォーマット挿入する方法を追加した。

MDLエディタに次のコマンドを追加した。

マージコマンド

変数コマンド

外部出力コマンド

プロパティ表示コマンド

MDLエディタで追加・変更できる式及び値の説明を追加した。

ettransコマンドに次の実行時オプションを追加した。

-FDS

-RELVL

-XND

ettransコマンドに次の戻り値を追加した。

0x01000100

0x04000008

0x04000010

ettransコマンドのNEオプションに指定するモード値「3」を追加した。

WHILE関数を使用して，出現回数決定式を定義できるようにした。

文字コードの説明として，次の内容を追加した。

文字コード一覧

文字種別

文字コード変換

EBCDIC／EBCDIKのコード表

変換の処理についての説明を追加した。

演算子に「i_null1 == i_null2」及び「i_null1 != i_null2」を追加した。

次の関数を追加・変更した。

型変換
・TOSTRING
・HEXSTRTONUM
・HEXSTRTOSTREAM
・STREAMTOHEXSTR

XML操作
・GETTAGNAME
・GETANYTEXT
・EXISTXML
・EXISTCOUNTXML
・ARRAYREALSIZEXML
・GETCOMPXML
・GETCOMPIFXML

特殊
・EXISTWHILE
・WHILE

その他
・GETCOMP
・GETCOMPIF

リネームの規則を追加した。

次の情報を出力できるようにした。

ツリー情報ファイル

フォーマット情報ファイル

差分情報ファイル

また，出力情報としてマップ式ファイルを7章から付録へ移動した。

マージツールのオプション指定時の注意事項を追加した。

マージツールの戻り値に「802」を追加した。

次の関数に戻り値を追加した。

0x01000100
追加した関数
・ETtrans2Init

0x04000008
追加した関数
・ETtrans2CreateMdlInfo
・ETtrans2ReleaseMdlInfo
・ETtrans2UpdateMdlInfo
・ETtrans2ReleaseThreadContext
・ETtrans2UpdateThreadContext

0x04000010
追加した関数
・ETtrans2CreateMdlInfo
・ETtrans2UpdateMdlInfo

Optionクラスに次のオプションを追加した。

OPT_FDS

OPT_XND

一部の再帰構造及び混在内容構造を強制的にANY要素として取り込むことができるようになった。

混在内容構造の説明を追加した。

XMLデータの変換の説明を追加した。

メッセージを追加した。
KBET0068T-S，KBET0073T-S，KBET0026J-S

メッセージを変更した。
KBET0012T-W，KBET0033T-E，KBET0038T-E

互換APIに次の戻り値を追加した。

0x01000100

0x04000010

はじめに

このマニュアルは，次に示すプログラムプロダクトの使用方法を説明したものです。

P-1B2C-BA31　uCosminexus Interschema　03-01

P-1J2C-BA31　uCosminexus Interschema　03-01

P-1M2C-BA31　uCosminexus Interschema　03-01

P-262C-BS34　uCosminexus Interschema Javaライセンス　03-01

P-262C-BT34　uCosminexus Interschema APIライセンス　03-00

P-262C-BU34　uCosminexus Interschema 海上貨物通関ライセンス　03-00

P-262C-BV34　uCosminexus Interschema EDIFACTライセンス　03-00

P-262C-BW34　uCosminexus Interschema CIIライセンス　03-00

P-262C-BX34　uCosminexus Interschema XMLライセンス　03-00

P-262C-BY34　uCosminexus Interschema GUIライセンス　03-00

P-262C-BZ34　uCosminexus Interschema　03-01

P-9D2C-BA31　uCosminexus Interschema　03-01

対象読者

このマニュアルは，uCosminexus Interschemaを使用して，電子データを変換する方を対象としています。また，CII（産業情報化推進センター）シンタックスルール，UN/EDIFACT（行政，商業，運輸のための電子データ交換に関する国連規格），及びXMLについて理解されていることを前提としています。

マニュアルの構成

このマニュアルは，次に示す章と付録から構成されています。

第１章　概要

Interschemaの概要と特長について説明しています。

第２章　データ変換の流れ

電子データを変換するために必要な作業の手順について説明しています。

第３章　FDLエディタの操作

FDLエディタの操作の概要，具体例を使用したFDLエディタの操作方法について説明しています。

第４章　MDLエディタの操作

MDLエディタの操作の概要，具体例を使用したMDLエディタの操作方法について説明しています。

第５章　変換のコマンド

トランスレータを使用してデータを変換する場合のコマンドについて説明しています。

第６章　定義と変換の規則

Interschemaの定義と変換の規則について説明しています。

第７章　ユティリティ

Interschemaで提供しているユティリティプログラムについて説明しています。

第８章　インタフェース

Interschemaで提供しているインタフェースの概要，及び注意事項について説明しています。

第9章　データ変換処理API（C言語）

C言語の実行環境で使用するデータ変換処理APIについて説明しています。

第10章　データ変換処理API（Java言語）

Java言語の実行環境で使用するデータ変換処理APIについて説明しています。

第11章　ユーザ組み込み関数

ユーザ組み込み関数，及びユーザ組み込み関数が呼び出す出口関数について説明しています。

第12章　フォーマット作成時及びデータ変換時の注意事項

フォーマットを作成したり，データを変換したりする場合の注意事項を規格ごとに説明しています。

付録A　トラブルシューティング

トランスレータでエラーが発生したときの処理について説明しています。

付録B　トランスレータのメッセージ

トランスレータのメッセージの形式，見方，及び内容について説明しています。

付録C　トランスレータの機能差異と電子データ交換ツールからの移行上の注意

トランスレータの機能差異と電子データ交換ツールから移行する場合の注意について説明しています。

付録D　Interschemaバージョン1との互換API

Interschemaバージョン1との互換APIについて説明しています。

付録E　Interschemaから出力される情報

Interschemaから出力される情報について説明しています。

付録F　ファイルのバージョンとトランスレータのサポート範囲

ファイルのバージョンとトランスレータのサポート範囲について説明しています。

付録G　CIIシンタックスルールのサポート範囲

CIIシンタックスルールのサポート範囲について説明しています。

付録H　UN/EDIFACTのサポート範囲

UN/EDIFACTのサポート範囲について説明しています。

付録I　JEDICOSのサポート範囲

JEDICOSのサポート範囲について説明しています。

付録J　Sea-NACCSのサポート範囲

Sea-NACCSのサポート範囲について説明しています。

付録K　文字コード

文字コードについて説明しています。

付録L　用語解説

このマニュアルで使用している用語の意味を説明しています。

読書手順

このマニュアルは，次の手順でお読みいただくことをお勧めします。

このマニュアルで使用する略語

このマニュアルで使用する略語を次に示します。

略　語 | 正式名称
API | Application Programming Interface
CII | Center for the Informatization of Industry
CSV | Comma Separated Value
DLL | Dynamic Linking Library
DTD | Document Type Definition
EDI | Electronic Data Interchange
EIAJ | Electronic Industries Association of Japan
EJB | Enterprise Java Beans
Java VM | Java Virtual Machine
JEDICOS | Japan EDI for Commerce Systems
JNI | Java Native Interface
OS | Operating System
Sea-NACCS | Sea-Nippon Automated Cargo Clearance System
TFD | Transfer Form Data
UN/EDIFACT | United Nations Rules for Electronic Data Interchange for Administration, Commerce and Transport
XML | Extensible Markup Language

このマニュアルで使用する記号

このマニュアルで使用する記号を次のように定義します。

記号
記号の意味

［　］
ウィンドウ，メニュー，ダイアログ，キーボードのキー，及びタブの名称や項目を示します。

［Ａ］＋［Ｂ］
＋の前に示した［Ａ］キーを押しながら，＋の後ろに示した［Ｂ］キーを押すことを示します。

↑　↑
この記号で囲まれている計算式の値が小数点を含む場合，小数点以下を切り上げた整数値にすることを示します。
（例）　↑126.48↑=127

コマンドの説明で使用する記号を次のように定義します。

記号
記号の意味

［　］
この記号で囲まれている項目は省略できます。

｛　｝
この記号で囲まれている項目を1組として指定します。項目が記号|で区切られている場合は，そのうちの一つを指定します。

|
ストローク
複数の項目に対し，項目間の区切りを示し，「又は」の意味を示します。

　...
この記号がある直前の項目は繰り返し指定できます。

このマニュアルでの表記

このマニュアルでは，製品名称を次のように表記しています。

製品名称 | 表記
AIX 5L for POWER V5.1 | AIX | ワークステーションのOS
AIX 5L for POWER V5.2
AIX 5L for POWER V5.3
HP-UX 11.0 | HP-UX
HP-UX 11i
HP-UX 11i V2 (PA-RISC)
HP-UX 11i V2 (IPF)
HP-UX 11i V3 (IPF)
Solaris 8 | Solaris
Solaris 9
Java(TM) | Java
Microsoft(R) Windows(R) 2000 Server Operating System | Windows 2000 | Windows
Microsoft(R) Windows(R) 2000 Advanced Server Operating System
Microsoft(R) Windows(R) 2000 Datacenter Server Operating System
Microsoft(R) Windows(R) 2000 Professional Operating System
Microsoft(R) Windows(R) XP Home Edition Operating System | Windows XP
Microsoft(R) Windows(R) XP Professional Operating System
Microsoft(R) Windows Server(R) 2003, Standard Edition 日本語版 | Windows Server 2003
Microsoft(R) Windows Server(R) 2003, Enterprise Edition 日本語版
Microsoft(R) Windows Server(R) 2003, Standard x64 Edition Operating System
Microsoft(R) Windows Server(R) 2003, Enterprise x64 Edition Operating System
Microsoft(R) Windows Server(R) 2003 R2, Standard Edition Operating System
Microsoft(R) Windows Server(R) 2003 R2 Enterprise Edition Operating System
Microsoft(R) Windows Server(R) 2003 R2, Standard x64 Edition Operating System
Microsoft(R) Windows Server(R) 2003 R2, Enterprise x64 Edition Operating System
Cosminexus Interschema | トランスレータ | Interschema
uCosminexus Interschema
Cosminexus Interschema - Light
uCosminexus Interschema - Light
Cosminexus Interschema - Definer | FDLエディタ及びMDLエディタ
uCosminexus Interschema - Definer
uCosminexus Interschema

Windowsのフォルダの表記

このマニュアルでは，WindowsとワークステーションのOSで共通の操作の場合，Windows の「フォルダ」を「ディレクトリ」と表記しています。また，「¥」を「/」と表記しています。

Windowsの場合，「ディレクトリ」を「フォルダ」に，「/」を「¥」に置き換えてお読みください。

図中で使用する記号

ヘルプの紹介

WindowsのInterschemaでは，FDLエディタヘルプ，及びMDLエディタヘルプを提供しています。ヘルプでは，ダイアログ及びコマンドの詳細，属性及び文字コードの指定方法などを参照できます。

uCosminexus Interschemaを使用する場合に必要なライセンスについて

WindowsのInterschemaでは，FDLエディタ起動時，MDLエディタ起動時，及び変換実行時にライセンスが必要です。対応するライセンスを次に示します。

動作種別 | 規格種別 | 対応するライセンス
FDLエディタ起動時 | － | uCosminexus Interschema GUIライセンス
MDLエディタ起動時 | －
データ変換実行時 | CII又はCII3 | uCosminexus Interschema CIIライセンス
EDIFACT又はEDIFACT4 | uCosminexus Interschema EDIFACTライセンス
Sea-NACCS又はSea-NACCS用EDIFACT | uCosminexus Interschema 海上貨物通関ライセンス
XML | uCosminexus Interschema XMLライセンス
データ変換処理API（C言語）使用時 | － | uCosminexus Interschema APIライセンス
データ変換処理API（Java言語）使用時又は出口関数（Java）使用時 | － | uCosminexus Interschema Javaライセンス

（凡例）

－：該当しません。

常用漢字以外の漢字の使用について

このマニュアルでは，常用漢字を使用することを基本としていますが，次の用語については，常用漢字以外の漢字を使用しています。

溢れる（あふれる）　桁（けた）　汎用（はんよう）　必須（ひっす）

KB（キロバイト）などの単位表記について

1KB（キロバイト），1MB（メガバイト），1GB（ギガバイト），1TB（テラバイト）はそれぞれ1,024バイト，1,024²バイト，1,024³バイト，1,024⁴バイトです。

1.　概要

この章では，Interschemaの概要と特長について説明します。

＜この章の構成＞

1.1　Interschemaとは

1.2　Interschemaの特長

1.1　Interschemaとは

Interschemaとは，自社が使用している伝票や帳票などのユーザデータのフォーマットを，他社でも使用できるように標準規格のデータフォーマットや他社固有のデータフォーマットに相互変換するためのトランスレータです。

＜この節の構成＞

1.1.1　Interschemaの目的

1.1.2　Interschemaの機能

1.1.1　Interschemaの目的

Interschemaは，EDIの国内標準及び国際標準の規格に対応しているため，国内だけでなく国外に及ぶ電子商取引も支援できます。

Interschemaを利用した電子商取引の例を次に示します。

図1-1　Interschemaを利用した電子商取引の例

Interschemaでは，図1-1に示すように，ユーザ独自のフォーマットと，XMLやEDI標準規格フォーマット間のデータを相互に変換できます。また，自社や他社のユーザ独自のフォーマット間のデータも相互に変換できます。Interschemaを使用することで，「データフォーマットの違いを意識しない電子商取引」を実現できます。

1.1.2　Interschemaの機能

A社フォーマットの伝票データをB社フォーマットの伝票データに変換する場合を例にして，次にInterschemaを使用したデータ変換の流れを示します。この例では，A社及びB社は，どちらもユーザ独自のフォーマットを使用しているものとします。

図1-2　データ変換の流れ

各社の伝票のフォーマットを定義する
各社の伝票のフォーマットを定義したFDLファイルを作成します。FDLファイルは，FDLエディタで作成します。FDLエディタの操作方法については，「3.　FDLエディタの操作」を参照してください。

FDLファイル間を対応付ける
FDLファイル間を対応付けたMDLファイルを作成します。XMLデータを変換する場合は，FDLファイルの代わりにDTDファイルを用います。このFDLファイル又はDTDファイル間を対応付ける操作をマッピングと呼びます。マッピングは，MDLエディタで実行します。MDLエディタの操作方法については，「4.　MDLエディタの操作」を参照してください。

データを変換する
データを変換するときは，トランスレータの起動コマンドでMDLファイル名を指定して，トランスレータを起動します。起動コマンドについては「5.　変換のコマンド」を参照してください。
MDLファイルで定義されている内容に従って，A社のフォーマットが，B社のフォーマットに変換されます。変換の規則については「6.　定義と変換の規則」を参照してください。

ここでは，ユーザ独自のフォーマット間のデータ変換について説明しましたが，例えば，B社のデータのフォーマットがEDI標準規格のフォーマットである場合にも同様にデータを変換できます。

また，データ変換を実現するために，Interschemaは各種のユティリティ，API，及び関数を提供しています。ユティリティについては，「7.　ユティリティ」を参照してください。

API，及び関数の概要については，「8.　インタフェース」を参照してください。APIの詳細については，「9.　データ変換処理API（C言語）」，又は「10.　データ変換処理API（Java言語）」を参照してください。関数の詳細については，「11.　ユーザ組み込み関数」を参照してください。

1.2　Interschemaの特長

Interschemaの特長を次に示します。

＜この節の構成＞

(1)　XMLフォーマットのデータを変換できます

(2)　ユーザフォーマットのデータを変換できます

(3)　EDI標準規格フォーマットのデータを変換できます

(4)　フォーマットの構造をツリー構造で定義できます

(5)　フォーマットのマッピングはドラッグ&ドロップで定義できます

(6)　既存ユーザ業務にデータ変換処理を組み込めます

(7)　変換情報の定義時にユーザ作成の関数を使用できます

(1)　XMLフォーマットのデータを変換できます

Interschemaでは，ユーザ独自のフォーマットのデータとXMLフォーマットのデータを相互に変換できます。また，XMLフォーマット間でデータを相互に変換できます。汎用性の高いXMLフォーマットを適用することで，XMLを解析するアプリケーションを利用し，データを再活用できます。

XML文書を変換するための変換情報は，MDLエディタで，対応するDTDファイルをフォーマットとして取り込んで作成します。

(2)　ユーザフォーマットのデータを変換できます

Interschemaでは，ユーザ独自のフォーマット間でデータを相互に変換できます。

(3)　EDI標準規格フォーマットのデータを変換できます

Interschemaでは，ユーザ独自のフォーマットのデータとEDI標準規格フォーマットのデータを相互に変換できます。また，EDI標準規格のフォーマット間でデータを相互に変換できます。

EDI標準規格のフォーマットでデータを変換する場合は，電子データ交換ツール又はInterschemaが提供するEDI標準規格の辞書のフォーマットを使用できます。Interschemaが対応しているEDI標準規格を次に示します。

CII標準

EIAJ標準

UN/EDIFACT

JEDICOS

また，海上貨物通関情報処理システム（Sea-NACCS）のフォーマットにも対応しています。

それぞれの内容について説明します。

(a)　CII標準

CII標準は，財団法人 日本情報処理開発協会の産業情報化推進センターによって定められた国内でのEDIの標準規格です。

(b)　EIAJ標準

EIAJは，日本電子機械工業会によって定められたEDI標準規格です。CIIシンタックスルールの範囲内で，EIAJ標準のデータに変換できます。

(c)　UN/EDIFACT

UN/EDIFACT（行政，商業，運輸のための電子データ交換に関する国連規格）は，国際連合によって定められた国際的なEDIの標準規格です。

(d)　JEDICOS

JEDICOSは，財団法人 流通システム開発センターによって定められた国内流通業界でのEDIの標準規格です。EDIシンタックスルールはEDIFACTに従います。

(e)　Sea-NACCS

Sea-NACCSは，厚生労働省や財務省などの各省庁と輸出入関連の民間業界をネットワークで接続し，通関に関する一連の手続きを処理するシステムです。このシステムで扱う電文には次の2種類があります。

Sea-NACCS形式のEDI電文（Sea-NACCS EDI電文）

EDIFACT形式の電文（Sea-NACCS EDIFACT電文）

(4)　フォーマットの構造をツリー構造で定義できます

Interschemaでは，伝票や帳票などのデータのフォーマットをFDLエディタで定義します。FDLエディタでは，データ構造をツリー構造で表現します。ツリー構造でデータをドラッグ＆ドロップしたり，表示されるダイアログに定義内容を入力したりして構造を定義するため，複雑になりがちなデータ構造が分かりやすくなります。

フォーマットの定義例を，次に示します。

図1-3　フォーマットの定義例

(5)　フォーマットのマッピングはドラッグ&ドロップで定義できます

変換元のデータのフォーマットと変換後のデータのフォーマットとのマッピングは，MDLエディタで定義します。MDLエディタでは，画面上で要素をドラッグ＆ドロップして容易にマッピングできます。

データ要素のマッピングの例を，次に示します。

図1-4　データ要素のマッピングの例

(6)　既存ユーザ業務にデータ変換処理を組み込めます

Interschemaでは，データ変換処理のAPIを提供しているので，既存のユーザ業務プログラムにデータ変換処理を組み込むことができ，ユーザ業務プログラムの機能を向上できます。なお，APIを使用すると，ファイル化されているデータだけでなく，メモリ上にロードされているデータも変換できます。

(7)　変換情報の定義時にユーザ作成の関数を使用できます

変換情報（マッピング）の定義は式で記述できます。式には演算子や関数を使用できます。Interschemaでは，標準で提供している関数以外に，ユーザが定義した関数を組み込んで使用できるため，より複雑なデータ変換処理が実行できます。

2.　データ変換の流れ

この章では，電子データを変換するために必要な作業の手順について説明します。

＜この章の構成＞

2.1　フォーマットの定義

2.2　マッピング

2.3　データの変換

2.1　フォーマットの定義

この節では，具体的な例を使用して，データのフォーマット定義について説明します。フォーマットはFDLエディタで定義します。

＜この節の構成＞

2.1.1　フォーマットの種類

2.1.2　フォーマットの定義内容

2.1.3　フォーマットの定義手順

2.1.1　フォーマットの種類

伝票や帳票のデータを変換するには，変換するデータの構造に基づいてフォーマットを定義します。Interschemaでは，トランスレータで変換する前の変換元のデータを入力データ，変換後のデータを出力データと呼びます。

データを変換するためには，入力データ及び出力データのそれぞれのフォーマットを定義する必要があります。

FDLエディタでは，「入力専用」「出力専用」「入出力兼用」という3種類のフォーマットを作成できます。各フォーマットの用途について説明します。

入力専用
入力データ専用のフォーマットです。

出力専用
出力データ専用のフォーマットです。

入出力兼用
入力データと出力データどちらにも使用できるフォーマットです。

入力専用のフォーマット，又は出力専用のフォーマットは，データ構造の定義が簡単になります。また，入出力兼用フォーマットは入力データと出力データの構造にほとんど差がないような場合に使用すると便利です。作成するフォーマットの種類は，データの特性によって選択します。

2.1.2　フォーマットの定義内容

フォーマットに定義する内容は「型」「セパレータ」「構造」です。各内容について次に説明します。

型
型とは，「製品名」や「製品コード」などのデータ中の項目となる要素の属性や要素の受け取る値などを定義したものです。

セパレータ
セパレータとは，データを区切る記号です。セパレータには，コンマや改行などを使用します。

構造
構造とは，データの構成を表すもので，データの並び順になります。ツリー構造で階層的に表します。

コンポーネント

構造の構成要素をコンポーネントと呼び，コンポーネントを組み合わせて構造を作成します。階層の異なるコンポーネント間は親子関係に，階層の同じコンポーネント間は兄弟関係にあります。

型のコンポーネント

コンポーネントには，型と構造があります。型のコンポーネントとは，型を定義した要素を構造のコンポーネントとして使用したもので，構造の子コンポーネントになります。例えば，構造「分納」は，型を定義した要素「納入数」「納入番号」という子コンポーネントで構成されています。

構造のコンポーネント

構造のコンポーネントとは，子コンポーネントを持ち，その構造自体がコンポーネントとなっているものです。例えば，構造「分納」は，「納入数」「納入番号」という子コンポーネントで構成される構造ですが，構造「明細」の子コンポーネントでもあります。

ルート構造

構造にはデータの最上位で，フォーマット内に一つだけあるルート構造があります。

上の図では，構造「MSG2」がルート構造になります。データの順序と一致するように，コンポーネントを組み合わせてルート構造の下にデータの構造を定義します。

2.1.3　フォーマットの定義手順

FDLエディタでのフォーマット定義の手順を次に示します。

図2-1　フォーマット定義の手順

例を使用して，フォーマットの定義について説明します。なお，以下のフォーマット定義例は，フォーマット定義の流れを理解しやすくすることを意図したものなので，フォーマット定義の詳細説明は省略しています。フォーマット定義の詳細については，「3.　FDLエディタの操作」を参照してください。

この例では，ユーザ独自のフォーマット帳票「IN」のデータを，ユーザ独自のフォーマット帳票「OUT」のデータに変換します。入力データが帳票「IN」のデータ，出力データが帳票「OUT」のデータとなるので，まず，帳票「IN」と帳票「OUT」のデータのフォーマットを定義します。

＜この項の構成＞

(1)　帳票「IN」のフォーマット

(2)　帳票「OUT」のフォーマット

(1)　帳票「IN」のフォーマット

帳票「IN」を次に示します。

図2-2　帳票「IN」

帳票「IN」のレコードは，「製品コード」「単価」「個数」の三つの要素で構成されています。三つの要素はすべて固定長です。レコードの個数は不定です。

帳票「IN」のフォーマットを定義します。

(a)　フォーマット名の定義

フォーマットを新規作成します。フォーマット挿入コマンドを実行して，［フォーマットのプロパティ］ダイアログでフォーマット名と，フォーマット全体に対するプロパティを設定します。

フォーマットが作成されます。

次に，フォーマットに要素の型を定義します。

(b)　型の定義

帳票「IN」には，「製品コード」「単価」「個数」という三つの要素があります。型挿入コマンドで，フォーマットに型を挿入して，型を定義します。

「製品コード」の型を定義します。［型のプロパティ］ダイアログで要素の名前，属性や種別を定義します。

［型のプロパティ］ダイアログで［詳細］ボタンをクリックします。表示された［型の詳細］ダイアログで要素の使用する文字コードやサイズなどを定義します。

型の詳細定義が済んだら，ダイアログを閉じます。

定義した要素「製品コード」の型が作成されます。

ほかの要素「単価」「個数」も同様に定義します。

(c)　セパレータの定義

帳票「IN」ではセパレータを使用しないので，ここでは定義しません。

(d)　変数の定義

帳票「IN」では変数を使用しないので，ここでは定義しません。

次に，構造を定義します。

(e)　構造の定義

帳票「IN」のデータには，三つの要素で構成されるレコードが複数個あります。データの構造をツリーで表すと次のようになります。

レコードを表す構造「RECORD」の下に，型を定義した三つの要素を型コンポーネントとして配置します。「RECORD」はルート構造「ROOT」の子コンポーネントとします。

まず，ルート構造「ROOT」を定義します。構造の挿入コマンドを実行して，フォーマットに構造を挿入します。

プロパティを定義したらダイアログを閉じます。

構造「ROOT」が作成されます。

同様に構造「RECORD」を作成します。

構造「RECORD」の下に型を定義した三つの要素を配置します。要素の型を構造「RECORD」にドラッグ＆ドロップします。

［コンポーネントのプロパティ］ダイアログが表示されます。コンポーネントの出現回数などのプロパティを定義します。

プロパティを定義したらダイアログを閉じます。

「製品コード」が構造「RECORD」のコンポーネントとして配置されます。

「単価」「個数」も同様に構造「RECORD」にドラッグ＆ドロップします。

最後に，構造「RECORD」は構造「ROOT」の子コンポーネントとします。構造「RECORD」を構造「ROOT」にドラッグ＆ドロップし，［操作選択］ダイアログで構造「ROOT」の子コンポーネントとして定義します。

また，レコードの個数は不定なので，［コンポーネントのプロパティ］ダイアログで，コンポーネント最大出現数を省略して定義します。

以上で帳票「IN」のフォーマットは完成です。

(f)　フォーマットの検証

チェックコマンドを実行して，フォーマットの定義内容にエラーがないことを確認します。

(g)　FDLファイルの保存

FDLに名前を付けて保存します。ここでは，ファイル名は「IN」とします。

次に，帳票「OUT」を定義します。

(2)　帳票「OUT」のフォーマット

帳票「OUT」を次に示します。

図2-3　帳票「OUT」

帳票「OUT」のレコードは，「製品コード」「希望価格」「数量」「小計金額」の四つの要素で構成されています。四つの要素はすべて可変長です。レコード内の四つの要素間は「,」で区切り，レコードの終わりには改行コードを入れます。レコードの個数は不定です。

図2-3の帳票「OUT」のフォーマットを定義します。

(a)　フォーマット名の定義

帳票「IN」のフォーマット定義と同様に，フォーマットを新規作成して定義します。

(b)　型の定義

帳票「OUT」には，「製品コード」「希望価格」「数量」「小計金額」という四つの要素があります。帳票「IN」の型の定義と同様に，型を定義します。［型のプロパティ］ダイアログで型名や属性を，［型の詳細］ダイアログで使用する文字コードやサイズを定義します。

(c)　セパレータの定義

帳票「OUT」には，レコード内の要素を区切るセパレータと，レコードの終わりを表すセパレータの2種類のセパレータを使用しています。

セパレータ挿入コマンドを実行して，フォーマットにセパレータを挿入します。

［セパレータのプロパティ］ダイアログに，セパレータの名前や値を入力します。

セパレータの定義が済んだら，ダイアログを閉じます。

セパレータが作成されます。

(d)　変数の定義

帳票「OUT」では変数を使用しないので，ここでは定義しません。

次に，構造を定義します。

(e)　構造の定義

帳票「OUT」のデータの構造をツリーで表すと次のようになります。

構造は帳票「IN」と同様に作成します。次に，コンポーネントで使用するセパレータの設定について説明します。

帳票「OUT」で使用する2種類のセパレータは，どちらも構造「RECORD」に対して設定します。構造「RECORD」のプロパティで，［セパレータ指定］ダイアログを表示します。

ここでは，セパレータの名前や値を定義したので，セパレータ名を指定します。中間区切り文字として「,」のセパレータ，終了文字として改行コードのセパレータを指定します。

以上で帳票「OUT」のフォーマットは完成です。

チェックコマンドを実行して，フォーマットの定義内容にエラーがないことを確認し，FDLに名前を付けて保存します。ここでは，ファイル名は「OUT」とします。

以上で帳票「IN」と帳票「OUT」のデータのフォーマットを定義したFDLファイルが完成しました。

2.2　マッピング

この節では，FDLエディタで定義した入力データのフォーマットと出力データのフォーマットのコンポーネント間を対応付けるマッピングについて説明します。

コンポーネントをドラッグ＆ドロップしマッピングして，コンポーネント間を対応付ける式をMDLエディタ上で定義します。なお，この式を「マップ式」と呼びます。

MDLエディタでのマッピングの手順を次に示します。

図2-4　マッピングの手順

例を使用してマッピングについて説明します。なお，以下のマッピング定義例は，マッピングの流れを理解しやすくすることを意図したものなので，マッピング定義の詳細説明は省略しています。マッピング定義の詳細については，「4.　MDLエディタの操作」を参照してください。

「2.1.3　フォーマットの定義手順」で定義した帳票「IN」のフォーマットと帳票「OUT」のフォーマットをマッピングします。

(a)　フォーマットの挿入

マッピングする入力側と出力側のフォーマットを読み込みます。ここでは，入力側のフォーマットとして帳票「IN」のフォーマット「IN」を，出力側のフォーマットとして帳票「OUT」のフォーマット「OUT」を読み込みます。

フォーマット挿入コマンドを実行すると［フォーマット挿入］ダイアログが表示されます。

入力データ又は出力データのファイル名が決まっている場合は，このダイアログにデータファイル名を指定します。ファイル名が決まっていない場合は，データ変換時のコマンド引数に，ファイル名を指定することもできます。例では，データ変換時のコマンド引数にファイル名を指定するので，データファイル名を指定しません。

挿入したフォーマットは，ツリー構造でルート構造以下が表示されます。

(b)　変数の定義

この定義例では変数を使用しないため，変数の定義はしません。

(c)　マップ式の定義

入力データのコンポーネントと出力データのコンポーネント間をマッピングします。

帳票「IN」と帳票「OUT」のコンポーネントの対応関係は次のようになります。

帳票「OUT」の要素「RECORD」「製品コード」「希望価格」「数量」は，対応する帳票「IN」の要素の値を代入します。帳票「OUT」の要素「小計金額」は，帳票「IN」に対応する要素がないので，値を計算して出力するようにマップ式を定義します。

マッピングは，出力データのコンポーネントに対して定義します。出力データのコンポーネントに，対応する入力データのコンポーネントをドラッグ＆ドロップし，マップ式を定義します。

この例では，出力側のコンポーネント「RECORD」「製品コード」「希望価格」「数量」に，対応する入力側のコンポーネントをドラッグ＆ドロップして代入します。

マップビューには，選択している出力側のコンポーネントに定義されているマップ式が表示されます。コンポーネントをドラッグ＆ドロップすると，マップビューにマップ式の代入式が挿入されます。

マップ式には，コンポーネント名，演算子，関数及び記号を使用できます。出力側のコンポーネントを選択し，マップビューへコンポーネントをドラッグ＆ドロップすると，ドラッグ＆ドロップしたコンポーネント名がマップビューに記述されます。演算子，関数及び記号はダイアログで選択して使用できます。コンポーネント名，関数，演算子及び記号は，マップビューに直接テキストで入力することもできます。マップ式の詳細については，「6.6.6　マップ式」を参照してください。

出力側の要素「小計金額」は，入力側の二つの要素「単価」「個数」の乗算で求めるように演算子を使用してマップ式を定義します。コンポーネント「小計金額」を選択し，マップビューに二つの要素をドラッグ＆ドロップし，乗算の演算子を使用します。

これでマッピングの定義は完成です。

チェックコマンドを実行して，マッピングの内容にエラーがないことを確認し，MDLファイルに名前を付けて保存します。ここでのファイル名は「SAMPLE.mdl」とします。

2.3　データの変換

この節では，データの変換について説明します。

トランスレータがデータを変換するための情報を定義したMDLファイルを使用して，データを変換します。トランスレータでデータを変換するために必要なファイルは，変換する入力データのファイルとMDLファイルです。トランスレータでのデータの変換を次に示します。

図2-5　データの変換

トランスレータは，コマンド「ettrans」を実行して起動します。コマンドの引数として，MDLファイルを指定すると，MDLファイルのマッピング情報を基に入力データを変換し，出力データのファイルに出力します。MDLファイルに入力データ及び出力データのファイル名を定義していない場合，又は定義していないファイル名で変換したい場合は，コマンドの引数としてファイル名を指定できます。

また，トランスレータのデータの変換結果として，ログファイルに戻り値やエラーメッセージが出力されます。コマンドの引数として，ログファイル名を指定すれば，ユーザが指定したファイルにログを出力できます。

次に，これまでフォーマット及びマッピングを定義した帳票「IN」，並びに帳票「OUT」のデータを変換します。データの変換に必要なファイル名を次に示します。

MDLファイル名：SAMPLE.mdl

入力データのファイル名：input.data

出力データのファイル名：output.data

ログファイル名は指定しないので，トランスレータが設定する標準のファイル名（errlog.txt）となります。

ここでは，コマンド実行時に引数として入力データと出力データのファイル名を指定します。コマンドは次のようになります。

ettrans  SAMPLE.mdl -F IN input.data OUT output.data

「SAMPLE.mdl」に定義された変換情報に従って，「input.data」ファイルのデータが変換され，「output.data」ファイルに出力されます。また，「errlog.txt」にログが出力されます。コマンドの詳細については，「5.　変換のコマンド」を参照してください。

入力データがファイルではなくメモリ上にある場合，Interschemaが提供するデータ変換処理のAPIを使用したプログラムで，トランスレータを実行してデータを変換してください。データ変換処理APIの概要については，「8.　インタフェース」を参照してください。データ変換処理APIの詳細については，「9.　データ変換処理API（C言語）」，又は「10.　データ変換処理API（Java言語）」を参照してください。

3.　FDLエディタの操作

この章では，FDLエディタの操作の概要，具体例を使用したFDLエディタでの操作方法について説明します。

＜この章の構成＞

3.1　操作の概要

3.2　簡単なデータ構造のフォーマット定義例

3.3　複雑なデータ構造のフォーマット定義例

3.4　FDLファイル作成時の注意事項

3.1　操作の概要

この節では，FDLファイルを作成するためのFDLエディタの操作手順，FDLエディタの画面構成，FDLエディタのコマンドについて説明します。

＜この節の構成＞

3.1.1　FDLファイルの作成手順

3.1.2　FDLエディタの画面構成

3.1.3　FDLエディタのコマンド一覧

3.1.1　FDLファイルの作成手順

FDLエディタでは，入力データ，出力データのデータの構造に基づいてフォーマットを作成します。定義したフォーマットをファイルとして保存したものをFDLファイルと呼びます。

FDLファイルの作成手順を次に示します。

図3-1　FDLファイルの作成

手順について次に説明します。

フォーマット名の定義
作成するフォーマットの名前を付けたり，フォーマット全体に対するプロパティを定義したりします。一つのFDLファイルには，複数のフォーマットを定義できます。

型の定義
変換するデータの要素の属性やサイズを定義します。

セパレータの定義
構造内で使用するセパレータに名前を付けて値を定義します。構造内でセパレータを使用しないデータの場合，セパレータを作成する必要はありません。また，構造を定義する場合に直接セパレータの値を指定するときも，作成する必要はありません。

変数の定義
変換時に使用する変数の名前や値を定義します。変数を使用しないデータの場合，変数を定義する必要はありません。

構造の定義
変換するデータの構造やコンポーネントを定義します。

フォーマットの検証
チェックコマンドで，フォーマットの定義内容の正当性を検証します。MDLエディタにフォーマットを読み込んでマッピングする前に，チェックコマンドを実行してフォーマットの定義内容にエラーがないか確認する必要があります。

FDLファイルの保存
FDLに名前を付けて保存します。これでFDLファイルが作成できます。FDLファイルの拡張子は，「.fdl」です。

3.1.2　FDLエディタの画面構成

ここでは，FDLエディタの画面構成について説明します。FDLエディタは次の操作で起動できます。

［スタート］－［プログラム］－［Interschema］－［FDLエディタ］を選択します
FDLエディタが起動します。FDLエディタは，同時に複数のFDLファイルを開くことができます。

FDLエディタの画面構成を次に示します。図中の番号は，説明の番号と一致しています。

図3-2　FDLエディタの画面構成

＜この項の構成＞

(1)　FDLエディタウィンドウ

(2)　メニューバー

(3)　ツールバー

(4)　ドキュメントウィンドウ

(5)　フォーマット指定コンボボックス

(6)　ツリービュー

(7)　セレクト情報

(8)　リストビュー

(9)　ステータスバー

(1)　FDLエディタウィンドウ

FDLエディタのメインとなるフレームウィンドウです。

(2)　メニューバー

実行するコマンドを指定するためのメニューです。コマンドの詳細については，FDLエディタのヘルプを参照してください。

(3)　ツールバー

使用頻度の高いコマンドのボタンを集めたバーです。マウスでドラッグすると，任意の位置に移動できます。各ボタンの上にマウスカーソルを移動させると，ステータスバーにボタンの説明が表示されます。

(4)　ドキュメントウィンドウ

一つのFDLドキュメントに対応するウィンドウです。複数のドキュメントを編集できます。また，一つのドキュメントに対して複数のドキュメントウィンドウを開くことができます。ただし，FDLエディタで一度に編集できるドキュメントは20個までです。

(5)　フォーマット指定コンボボックス

FDL内に定義されているフォーマットのうち，編集中のフォーマットを表示するためのドロップダウンリスト形式のコンボボックスです。

図3-3　フォーマット指定コンボボックス

ドロップダウンボタンをクリックして，編集したいフォーマットを切り替えることができます。

(6)　ツリービュー

フォーマット内の型，セパレータ，変数，構造，コンポーネントのデータを階層的に表示するためのビューです。ツリーを構成する要素を「アイテム」と呼びます。データを定義すると定義フォルダアイテムの下に定義したデータのアイテムが作成されます。また，アイテムをドラッグ＆ドロップして，データのコピーや移動ができます。

図3-4　ツリービュー

ツリーは次の動作によって縮小・展開できます。

アイテムをダブルクリックする

アイテムの左側に表示されている「＋」マーク又は「－」マークをクリックする

(7)　セレクト情報

ツリービュー内で選択されているアイテム名を表示するエリアです。

(8)　リストビュー

ツリービュー内で選択されているアイテムの情報をリスト形式で表示するビューです。リストビュー内に表示されているアイテムを，ツリービューにドラッグ＆ドロップして，コンポーネントの作成，データのコピーや移動ができます。

(9)　ステータスバー

メニューバーやツールバーからコマンドを選択するときに，コマンドの説明を表示するエリアです。

3.1.3　FDLエディタのコマンド一覧

FDLエディタのコマンドの一覧を表3-1に示します。

表3-1　FDLエディタのコマンド一覧

メニュー名
メニュー
アイテム名
ショートカット
キー
説明

ファイル(F)
新規作成(N)
［Ctrl］＋［N］
FDLドキュメントを新規に作成します。

開く(O)...
［Ctrl］＋［O］
FDLファイルを読み込みます。

閉じる(C)
－
FDLドキュメントウィンドウを閉じます。

上書き保存(S)
［Ctrl］＋［S］
FDLドキュメントの内容を対応するFDLファイルに上書き保存します。

名前を付けて保存(A)...
－
FDLドキュメントに名前を付けて，FDLファイルとして保存します。

外部出力(E)...
－
フォーマット情報を出力します。

プロパティ(P)...
－
FDLドキュメントのプロパティを表示します。

（ファイル名）
－
最近使用したファイル（読み込んだファイル又は保存したファイル）を読み込みます。

FDLエディタの終了(X)
－
FDLエディタを終了します。

編集(E)
削除(D)
［Delete］
ツリービュー，リストビュー内で選択したデータを削除します。

検索(F)...
［Ctrl］＋［F］
ツリービュー内で指定したデータ又は式文字列を検索します。

表示(V)
ツールバー(T)
－
ツールバーの表示／非表示を切り替えます。

ステータスバー(S)
－
ステータスバーの表示／非表示を切り替えます。

挿入(I)
フォーマット(F)...
－
FDLドキュメントに新規フォーマットを追加します。

型(T)...
－
選択しているフォーマットに新規の型を追加します。

セパレータ(E)...
－
選択しているフォーマットに新規のセパレータを追加します。

変数(V)...
－
選択しているフォーマットに新規の変数を追加します。

構造(S)...
－
選択しているフォーマットに新規の構造を追加します。

ツール(T)
チェック(C)...
－
フォーマットの定義内容の正当性を検証します。

プロパティ(P)...
－
指定しているデータの詳細情報を表示します。

オプション(O)...
－
FDLエディタのオプションを設定します。

ウィンドウ(W)
新しいウィンドウを開く(N)
－
作業中のドキュメントのウィンドウをもう一つ開きます。

重ねて表示(C)
－
ドキュメントウィンドウのタイトルが重ならないように整列します。

上下に並べて表示(H)
－
ドキュメントウィンドウを上下に並べます。

左右に並べて表示(V)
－
ドキュメントウィンドウを左右に並べます。

（ドキュメント名）
－
指定したFDLドキュメントのウィンドウをアクティブにします。

ヘルプ(H)
目次(C)...
－
FDLエディタのヘルプの目次を表示します。

検索(S)...
－
FDLエディタのヘルプのトピック一覧を表示します。

バージョン情報(A)...
－
FDLエディタの形名，バージョンなどを表示します。

（凡例）

－：ショートカットキーはありません。

3.2　簡単なデータ構造のフォーマット定義例

この節では，簡単なデータ構造のフォーマットを定義しながら，FDLエディタの操作について説明します。

固定長形式のフォーマットの中でも，簡単なデータ構造のメッセージのフォーマットを定義します。メッセージのデータ構造を図3-5に示します。

図3-5　メッセージのデータ構造

このメッセージは，固定長の項目が連続して出現し，「単価」「個数」「金額」はそれぞれ3個ずつ連続して出現する注文メッセージです。作成するフォーマット名は，「FIX1」とします。

＜この節の構成＞

3.2.1　フォーマット名の定義

3.2.2　型の定義

3.2.3　構造の定義

3.2.4　フォーマットの検証

3.2.5　FDLファイルの保存

3.2.1　フォーマット名の定義

まず，定義したフォーマットを格納するためのドキュメントを作成します。

［ファイル］－［新規作成］を選択します
ドキュメントウィンドウが表示されます。

図3-6　ドキュメントウィンドウ

次に，ドキュメントウィンドウ内にフォーマットを新規作成して，フォーマット名などのプロパティを定義します。

［挿入］－［フォーマット］を選択します
［フォーマットのプロパティ］ダイアログが表示されます。作成するフォーマット全体に対するプロパティを定義します。

図3-7　［フォーマットのプロパティ］ダイアログ

ダイアログの設定内容は次のとおりです。

フォーマット名
作成するフォーマットの名前を入力します。ここでは「FIX1」とします。

入出力種別
フォーマットの入出力種別は，データの特性によって使い分けます。固定長データの場合は，入力データと出力データの構造にほとんど差がないので，ここでは「入出力兼用」を選択します。

コメント
フォーマットの対応するデータについて，簡単にコメントを記述します。コメントはデータに直接関係するものではありません。型及び構造のプロパティでのコメントについても同様です。

次に，フォーマットの全体の詳細内容を設定します。

［フォーマットのプロパティ］ダイアログで［詳細］ボタンをクリックします
［フォーマットの詳細］ダイアログが表示されます。このダイアログには，［データ属性］タブと［文字コード］タブの2種類のタブがあります。各タブの設定内容について次に説明します。

図3-8　［フォーマットの詳細］ダイアログの［データ属性］タブ

ダイアログの設定内容は次のとおりです。

データ格納形式
このメッセージで扱うデータのエンディアンの指定は，2進数やUnicodeの文字列のバイト順を示すものです。2進数を扱わないデータでは特に意識する必要はないので，ここでは「ビッグエンディアン」を指定します。

文字列サイズ指定方法
このメッセージで扱うデータはすべて固定サイズなので，サイズ計算方法は「バイト数」を指定します。

不正な文字コードをスペースに置換する
不正な文字コードがあった場合は常にエラーとするように，ここでは選択しません。選択した場合は，変換実行時のオプションで，エラーとするかどうか動的に変更できます。

データがサイズを超えたら一部を切り捨てる
出力時のデータが規定したサイズを超えた場合は常にエラーとなるように，ここでは選択しません。選択した場合は，変換実行時のオプションで，エラーとするかどうか動的に変更できます。

不要な文字を削除する
入力データに対しては埋め字をデータと見なされないようにするため，ここでは選択します。

図3-9　［フォーマットの詳細］ダイアログの［文字コード］タブ

ダイアログの設定内容は次のとおりです。

1バイト文字列
このメッセージでは，要素「品名」以外に使用する文字は１バイトコードなので，初期値の１バイト文字列には「8ビットJIS，カナあり」を指定します。各要素の文字コードの初期設定値がこのダイアログで指定した文字コードと同じであれば，後述する要素の型定義で文字コードを宣言する必要はありません。

上記以外は，初期設定のままとします。

文字コードを指定したら，［フォーマットの詳細］ダイアログで［OK］ボタンをクリックします
［フォーマットの詳細］ダイアログが閉じて，［フォーマットのプロパティ］ダイアログに戻ります。

［フォーマットのプロパティ］ダイアログで［OK］ボタンをクリックします
［フォーマットのプロパティ］ダイアログが閉じて，ツリービューに「FIX1」というアイテム名のフォーマットが作成されます。フォーマットのアイテムの下には，次に示す四つのフォルダアイテムが作成されます。

次に，型を定義します。

3.2.2　型の定義

メッセージ内で使用する型を定義します。メッセージデータの要素を見ると，数値要素と文字列要素があります。

＜この項の構成＞

(1)　数値要素「注文番号」「単価」「個数」の定義

(2)　文字列要素「単位」の定義

(3)　要素「金額」の定義

(4)　要素「注文日」の定義

(5)　要素「品名」の定義

(1)　数値要素「注文番号」「単価」「個数」の定義

まず，数値要素のうち，要素「注文番号」を定義します。

フォーマットに型を新規作成します。

［挿入］－［型］を選択します
［型のプロパティ］ダイアログが表示されます。

図3-10　［型のプロパティ］ダイアログ

ダイアログの設定内容は次のとおりです。

型名
作成する型の名前を入力します。ここでは「注文番号」とします。

データ種別
型のデータ種別を指定します。ここでは「数値」とします。

主属性
型の主属性を指定します。ここでは「整数」とします。

次に，型の詳細を設定します。

［型のプロパティ］ダイアログで［詳細］ボタンをクリックします
［型の詳細］ダイアログが表示されます。このダイアログは，［型のプロパティ］ダイアログの主属性に何を指定したかによって，表示されるタブの種類が異なります。ここでは，主属性に「整数」を指定したので，次のタブが表示されます。

図3-11　［型の詳細］ダイアログの［数値属性］タブ

ダイアログの設定内容は次のとおりです。

文字コード
ここでは，［フォーマットの詳細］ダイアログで指定した「8ビットJIS」を使用するので，「フォーマットの指示に従う」を指定します。

左右寄せ
データが要素のサイズに満たない場合に，要素のエリア内で左右どちらに詰めて出力するかを指定します。一般的に，数値要素はエリアに対して右詰めで出力します。ここでは「右寄せ」を指定します。

埋め字
データが要素のサイズに満たない場合に，余った部分を埋める文字を指定します。一般的に，数値要素はエリアに対して右詰めで，埋め字に「0」を使用します。ここでは「0」を指定します。

サイズ
「固定」，「5」バイト

桁数－全体
「5」桁

上記以外は，初期値のままとします。

型の詳細を設定したら，［OK］ボタンをクリックします
［型の詳細］ダイアログを閉じて［型のプロパティ］ダイアログに戻ります。

［型のプロパティ］ダイアログで［OK］ボタンをクリックします
［型のプロパティ］ダイアログが閉じて，型が作成されます。ツリービューの型定義フォルダの下に「注文番号」というアイテム名の型が作成されます。

ほかの数値要素「単価」「個数」も型を定義します。型名とコメント以外はすべて，要素「注文番号」と同じです。

(2)　文字列要素「単位」の定義

次に，文字列要素のうち，要素「単位」を定義します。

要素「単位」には，値とその意味が対応付けられているので，決まった文字だけをデータとして指定します。この場合，要素で扱う値をあらかじめ定義し，定義している値以外は扱わないように指定できます。要素「単位」の値は，1バイト文字列型とします。

［型のプロパティ］ダイアログで次のように設定します。

型名
「単位」

データ種別
「文字列」

主属性
「1バイト文字列」

［型の詳細］ダイアログで次のように設定します。

文字コード
「フォーマットの指示に従う」

左右寄せ
「左寄せ」

埋め字
「文字」を指定します。ここでは，埋め字にスペースを入力します。

サイズ
「固定」，「1」バイト

上記以外は，初期値のままとします。

次に，型で扱う値（単位）を定義します。

要素「単位」の［型のプロパティ］ダイアログで［値定義］ボタンをクリックします
［値定義］ダイアログが表示されます。このダイアログの値リストには，その要素で扱える値が一覧表示されます。ここでは，値を定義していないので値リストには何も表示されません。

図3-12　［値定義］ダイアログ

［値定義］ダイアログで［追加］ボタンをクリックします
［値追加］ダイアログが表示されます。

図3-13　［値追加］ダイアログ

要素で扱える値を定義します。この例では，値として「1」(個)，「2」(メートル)，「3」(キログラム)を定義します。この要素は１バイト文字列型とします。まず，値として「1」(個)を定義します。

値
「1」

値の属性
「文字列」

コメント
値の意味について簡単なコメントを記述します。ここでは「個」とします。

［OK］ボタンをクリックします
［値追加］ダイアログを閉じて，［値定義］ダイアログに戻ります。
定義した値が［値定義］ダイアログの値リストに表示されます。

図3-14　［値定義］ダイアログ（定義例）

同様に，ほかの値も追加します。追加した値が値リストのどこに追加されるかは，追加する前に選択していた値リストの場所によって異なります。定義した値を選択していたら，その値の一つ前に追加され，空行を選択していたらリストの最後に追加されます。次に，空行を選択して値を追加した場合の［値定義］ダイアログを示します。

［値定義］ダイアログの「他の値が現れてもエラーにしない」は選択しないままにします。こうしておくと，要素「単位」は，［値定義］ダイアログに定義されている値以外の値を扱いません。

値を定義したら，［値定義］ダイアログの［OK］ボタンをクリックします
［値定義］ダイアログを閉じて［型のプロパティ］ダイアログに戻ります。
［型のプロパティ］ダイアログで［OK］ボタンをクリックすると，ダイアログが閉じてツリービューに型が作成されます。

(3)　要素「金額」の定義

次に，要素「金額」を定義します。

［型のプロパティ］ダイアログで次のように設定します。

型名
「金額」

データ種別
「数値」

主属性
「整数」

［型の詳細］ダイアログで次のように設定します。

文字コード
「フォーマットの指示に従う」

左右寄せ
「右寄せ」

埋め字
「0」

サイズ
「固定」，「10」バイト

桁数－全体
「10」桁

上記以外は，初期値のままとします。

(4)　要素「注文日」の定義

次に，要素「注文日」を定義します。

［型のプロパティ］ダイアログで次のように設定します。

型名
「注文日」

データ種別
「日付時刻」

主属性
「日付」

［型の詳細］ダイアログで次のように設定します。この場合，表示されるタブは2種類あります。

［テキスト属性］タブ

文字コード
「フォーマットの指示に従う」

左右寄せ
「右寄せ」

埋め字
「文字」を指定します。ここでは，埋め字に「0」を指定します。

サイズ
「固定」，「6」バイト

［日付属性］タブ

形式
日付のデータ形式を指定します。ここでは，最大6桁の数字で日付を表す「YYMMDD」を指定します。

(5)　要素「品名」の定義

次に，要素「品名」を定義します。

［型のプロパティ］ダイアログで次のように設定します。

型名
「品名」

データ種別
「文字列」

主属性
要素「品名」は文字列中に漢字を含むので，文字列中に1バイト文字と2バイト文字を混在して使用できる「混在文字列」を指定します。

［型の詳細］ダイアログで次のように設定します。

文字コード
フォーマットに対して指定した文字コードと異なる文字コードを指定した場合，要素に対する指定が有効となります。ここでは，要素「品名」は漢字を含む文字列なので「シフトJIS」を指定します。

左右寄せ
「左寄せ」

埋め字
「文字」を指定します。ここでは，埋め字にスペースを入力します。

サイズ
「固定」，「80」バイト

上記以外は，初期値のままとします。

以上で各要素が定義できました。

各要素の定義内容を表3-2に示します。

表3-2　型の定義

型名
データ種別／主属性
文字
コード
左右寄せ／埋め字
サイズ
備考

注文番号
数値／整数
フォーマットの指示に従う
（8ビットJIS）
右
0
固定　5
桁数：5

単価

個数

単位
文字列／1バイト文字列型
左
スペース
固定　1
値の定義

1　コメント：個

2　コメント：メートル

3　コメント：キログラム

エラー検証なし
値の意味は文字列

金額
数値／整数
右
0
固定　10
－

注文日
日付時刻／日付
右
0
固定　6
データ形式：「YYMMDD」

品名
文字列／混在文字列
シフトJIS
左
スペース
固定　80
－

（凡例）

サイズ：サイズの単位はバイトです。

フォーマットの指示に従う：［フォーマットの詳細］ダイアログで設定した文字コードに従うという意味です。

3.2.3　構造の定義

次に，定義した要素の型を使用して，フォーマット「FIX1」の構造を定義します。フォーマット「FIX1」の構造を図3-15に示します。

図3-15　フォーマット「FIX1」の構造

メッセージ「MSG1」は７種類の要素から構成されています。要素は定義した順番に出現する逐次構造です。

まず，変換するデータの最上位のルート構造「MSG1」を定義します。

［挿入］－［構造］を選択します
［構造のプロパティ］ダイアログが表示されます。

図3-16　［構造のプロパティ］ダイアログ

ダイアログの設定内容は次のとおりです。

構造名
作成する構造の名前を入力します。ここでは「MSG1」とします。

構造の種類
「MSG1」は要素が定義順に現れる構造なので，ここでは「逐次構造」とします。

ルートに指定する
作成する構造をルート構造に指定する場合にチェックを入れます。ここでは，チェックを入れます。

［OK］ボタンをクリックします
［構造のプロパティ］ダイアログが閉じて，ツリービューの構造定義フォルダアイテムの下にルート構造「MSG1」が作成されます。

ルート構造を作成したら，ルート構造の下に要素をドラッグ＆ドロップします。ドラッグ元はツリービューでも，リストビューでもかまいません。逐次構造では，定義した順でコンポーネントが出現します。また，コンポーネントの並び順がデータの並び順になるので，順序を間違えないように注意してください。ここでは，次の構造のとおりにコンポーネントが出現するようにします。

各定義フォルダアイテムを選択すると，リストビューにフォルダ内のデータが表示されます。リストビューからツリービューへデータをドラッグ＆ドロップすると容易に定義できます。
ここでは，型定義フォルダアイテムから要素をドラッグ＆ドロップします。

ツリービューの型定義フォルダアイテムを選択します
リストビューに型を定義した要素が表示されます。

リストビューの要素を，ルート構造「MSG1」にドラッグ＆ドロップします。

リストビューの「注文番号」を，ツリービューの構造「MSG1」にドラッグ＆ドロップします

［コンポーネントのプロパティ］ダイアログが表示されます。

図3-17　［コンポーネントのプロパティ］ダイアログ

ダイアログ内の設定内容は次のとおりです。

出現数
データ中にコンポーネントが繰り返し出現する回数を指定します。この構造では，コンポーネント「注文番号」の出現回数は1回なので，最小及び最大は初期値（「1」）のままにします。

必須指定
MDLエディタでマッピングするときに，このコンポーネントのマップ式の定義を必須とするかどうかを指定します。マップ式定義は出力側コンポーネントに対して定義するため，フォーマットが入力専用の場合，指定しても機能しません。ここでは，入出力兼用フォーマットを定義するので「あり」を指定します。

上記以外は，初期値のままとします。

［OK］ボタンをクリックします
［コンポーネントのプロパティ］ダイアログを閉じて，構造「MSG1」アイテムの下にコンポーネントのアイテム「注文番号」が作成されます。

「注文番号」以外の要素も，同様に構造「MSG1」アイテムの下にドラッグ&ドロップして定義します。各コンポーネントの定義内容を表3-3に示します。

表3-3　構造の定義

コンポーネント名 | 出現数 | 必須指定
最小 | 最大
注文番号 | 1 | 1 | あり
単位 | 1 | 1
単価 | 3 | 3
個数 | 3 | 3
金額 | 3 | 3
注文日 | 1 | 1
品名 | 1 | 1

以上でフォーマット「FIX1」の構造が定義できました。

なお，型又は構造コンポーネントを子コンポーネントとして挿入する場合，親となるコンポーネントを選択した状態でドラッグ＆ドロップしたときは，その親の最後の子コンポーネントとして挿入されます。兄弟となるコンポーネントを選択した状態でドラッグ＆ドロップしたときは，その兄弟コンポーネントの一つ前に挿入されます。

3.2.4　フォーマットの検証

フォーマットをMDLエディタに読み込んでマッピングする前に，FDLエディタでチェックコマンドを実行し，フォーマットにエラーがないことを確認する必要があります。

［ツール］－［チェック］を選択します
アクティブになっているフォーマットの定義内容の正当性を検証します。検証結果は，［チェック結果］ダイアログに一覧表示されます。

図3-18　［チェック結果］ダイアログ

エラーがある場合，一覧でエラー内容をダブルクリック又は［ジャンプ］ボタンをクリックすると，エラーのあるデータがツリービュー内で選択状態になります。エラーを修正したら，再度検証を実行し，エラーがないことを確認してください。

エラーがなければ，［閉じる］ボタンをクリックして［チェック結果］ダイアログを閉じます

3.2.5　FDLファイルの保存

フォーマットの定義内容にエラーがないことを確認したら，FDLに名前を付けて保存します。

［ファイル］－［名前を付けて保存］を選択します
［名前を付けて保存］ダイアログが表示されるので，ファイル名を指定します。

［OK］ボタンをクリックします
以上で，FDLファイルが作成できました。

3.3　複雑なデータ構造のフォーマット定義例

この節では，複雑なデータ構造のフォーマットを作成するときの，構造や式の定義について説明します。説明する内容を次に示します。

固定長形式のフォーマット定義

レングスタグ形式のフォーマット定義

セパレータ形式のフォーマット定義

条件式の定義

デフォルト式の定義

メッセージデータの例

各内容について次に説明します。

＜この節の構成＞

3.3.1　固定長形式フォーマットの定義

3.3.2　レングスタグ形式フォーマットの定義

3.3.3　セパレータ形式フォーマットの定義

3.3.4　条件式の定義

3.3.5　デフォルト式の定義

3.3.6　メッセージデータの例

3.3.1　固定長形式フォーマットの定義

「3.2　簡単なデータ構造のフォーマット定義例」では，簡単な構造を持つ固定長形式のフォーマットを定義しました。ここでは少し複雑な構造を持つ固定長形式のフォーマット定義について説明します。説明するのは次の固定長フォーマットです。

繰り返し構造を持つメッセージ

複数種類のメッセージ

次に，各固定長形式のフォーマットの定義について説明します。

＜この項の構成＞

(1)　繰り返し構造を持つメッセージのフォーマット（フォーマット「FIX2」）

(2)　複数種類のメッセージを持つ固定長形式のフォーマット（フォーマット「FIX」）

(1)　繰り返し構造を持つメッセージのフォーマット（フォーマット「FIX2」）

ここでは，繰り返し構造を持つメッセージのフォーマットを定義します。複数でまとまった意味を持つ要素で構成された構造が，繰り返し現れます。また，繰り返し現れる構造の下にも構造がネストしています。メッセージのデータ構造を図3-19に示します。

図3-19　メッセージのデータ構造

「単価」「個数」「金額」は三つの要素でまとまって意味を持ち，「分納」と同様に，構造「明細」の子コンポーネントです。構造「明細」の子コンポーネントである「分納」は，1回のデータ中に2度出現します。そして，「分納」は「納入数」「納入番号」というコンポーネントの親の構造でもあります。

このメッセージデータのフォーマットを定義します。フォーマット名は，「FIX2」とします。ここでは，フォーマットの定義や型の定義についての説明を省略し，構造の定義について説明します。

(a)　構造の定義

構造を作成し，構造の下にコンポーネントをドラッグ＆ドロップし，構造を作成します。フォーマット「FIX2」の構造を図3-20に示します。

図3-20　フォーマット「FIX2」の構造

フォーマット「FIX2」の構造を定義します。

ルート構造「MSG2」を作成します

ルート構造「MSG2」は，「注文番号」「単位」「注文日」「注文総額」という四つの要素と，要素「単価」「個数」「金額」「分納」を持つ構造「明細」で構成されています。

ルート構造の下の構造「明細」を作成します
ルート構造「MSG2」下に構造「明細」を作成します。既にルート構造は定義してあるので，作成される構造「明細」は普通の構造になります。構造「明細」下のコンポーネントは，定義した順序で出現する逐次構造です。構造「明細」には特別な条件はないので，［構造のプロパティ］ダイアログ以外の設定は必要ありません。

次に，ルート構造「MSG2」の子コンポーネントを定義します。

要素「注文番号」をルート構造「MSG2」にドラッグ＆ドロップします
出現回数は，1を設定します。
型定義フォルダアイテムを選択し，リストビューからツリービューにデータをドラッグ＆ドロップすると容易に定義できます。

要素「単位」をルート構造「MSG2」にドラッグ＆ドロップします
出現回数は，1を設定します。

作成した構造「明細」をルート構造「MSG2」にドラッグ＆ドロップします
構造定義フォルダアイテムを選択し，リストビューからツリービューにデータをドラッグ＆ドロップすると容易に定義できます。

ドラッグ＆ドロップしたいアイテムの挿入位置を問い合わせる［操作選択］ダイアログが表示されます。

ここでは，構造「明細」をルート構造「MSG2」の子コンポーネントとして挿入したいので，「選択アイテムの最後の子アイテムとして挿入する」を選択します。また，出現回数は，3を設定します。

FDLファイルでは，定義した構造やコンポーネントをルート構造の下にドラッグ＆ドロップし，データの構造をツリーで作成します。ただし，構造の実体は，構造定義フォルダの直下にあります。構造の下の構造は，実体の構造を参照する構造（サブコンポーネントと呼びます）になります。例えば，構造「明細」はルート構造「MSG2」の下のサブコンポーネントです。

ルート構造の下の構造「明細」は，構造定義フォルダの下の実体の構造「明細」を参照しているサブコンポーネントです。コンポーネント間は，自コンポーネントの上位構造から下位構造までを数箇所で参照できます。
次に，ルート構造「MSG2」のほかの子コンポーネントを定義します。

要素「注文日」「注文総額」をルート構造「MSG2」にドラッグ＆ドロップします
出現回数は，すべて1を設定します。

以上でルート構造の子コンポーネントの定義が完成しました。
次に，構造「明細」の子コンポーネントを定義します。構造「明細」の下には三つの要素と，「納入数」と「納入番号」を構造化した構造があります。まず，子の構造である構造「分納」を作成します。

構造「分納」を作成します

構造の種類は，逐次構造とします。
次に，構造「分納」のコンポーネントを定義します。

「納入数」と「納入番号」を型定義からドラッグ＆ドロップします
出現回数は，すべて1を設定します。

次に，構造「明細」の子コンポーネントを定義します。

要素「単価」「個数」「金額」を構造「明細」にドラッグ＆ドロップします
出現回数は，すべて1を設定します。
最後に，構造「分納」を構造「明細」の子コンポーネントとして定義します。

構造「明細」の下に構造「分納」をドラッグ＆ドロップします
出現回数は，2を設定します。
これでフォーマット「FIX2」の定義が完成しました。

コンポーネントの作成順序には特に規定はありません。あらかじめ構造をすべて作成してから，最後に全体を組み立ててもかまいません。ただし，最終的にできたコンポーネントの順序が，実際のデータの順序と一致していることを確認してください。実際のデータの順序と一致していない場合は，ドラッグ＆ドロップでコンポーネントの順序を変更してください。

なお，サブコンポーネントには，直接ドラッグ＆ドロップして子コンポーネントを挿入できません。構造定義フォルダの直下にある実体の構造コンポーネントに子コンポーネントをドラッグ＆ドロップして挿入する必要があります。

次に，複数のメッセージデータが変換できるフォーマットの定義について説明します。

(2)　複数種類のメッセージを持つ固定長形式のフォーマット（フォーマット「FIX」）

これまでの例題のメッセージのフォーマット定義例では，1回の変換で1メッセージ中の1データしか変換できませんでした。ここでは，複数のメッセージデータが変換できるフォーマットの定義について説明します。

一般的にEDIデータのメッセージには，そのメッセージの意味を示すヘッダ情報が付けられます。あるメッセージに対して，ヘッダ情報として処理番号，メッセージの種類を表すメッセージ区分，発信者，受信者情報を追加します。ヘッダ情報を追加したメッセージの構造を図3-21に示します。

図3-21　複数種類のメッセージを持つフォーマットの構造

構造「MESSAGE」は，仮に配置したメッセージ用の構造で，メッセージ部分のルート構造に相当します。

ヘッダ情報を追加したメッセージの構造を使用して，複数種類のメッセージを持つフォーマットの定義について説明します。

(a)　複数データを変換するフォーマットの定義

ヘッダ情報が付けられたメッセージが複数連続しているデータのフォーマットを定義します。データの構造を図3-22に示します。

図3-22　複数データを変換するフォーマットの構造

ヘッダ情報を追加したメッセージが複数連続しているデータを変換するには，構造「TRANS」の階層を一つ下げて，ルート構造の下へ置きます。同時に，構造「TRANS」の出現回数は最小を１とし，最大を省略します。最大出現回数を省略すると出現回数はn回となるので，データ数が増えてもデータを変換できるようになります。最大出現回数を省略する構造の定義は，その構造をルート構造の直下に置いて，１単位の変換がｎ回実行される構造を定義する以外には使用しないようにしてください。

複数のメッセージを一つのフォーマットの中で定義し，データの値によって対応するメッセージ構造を選択するフォーマットの定義について説明します。

(b)　複数種類のメッセージを変換するフォーマットの定義（選択構造の定義）

構造中にメッセージ構造が二つあり，データの値によって，対応するメッセージ構造を選択してデータを変換するフォーマットを作成します。データの構造を図3-23に示します。フォーマット名は，「FIX」とします。

図3-23　フォーマット「FIX」の構造

構造「MESSAGE」下の二つのメッセージには，フォーマット「FIX1」で定義したメッセージ「MSG1」，フォーマット「FIX2」で定義したメッセージ「MSG2」を使用します。「MSG1」「MSG2」のデータ構造を図3-24に示します。

図3-24　「MSG1」「MSG2」のデータ構造

図3-24の定義について次に説明します。

データをコピーする場合
コンポーネント「MSG1」「MSG2」は，各フォーマットからドラッグ＆ドロップでコピーできます。

まず，「FIX1」から「MSG1」をコピーします。

型定義フォルダ内の要素の型をコピーします
「FIX1」の要素の型をすべてコピーします。

構造定義フォルダ内の構造をコピーします
「FIX1」から「MSG1」をコピーします。
次に，「FIX2」から「MSG2」をコピーします。

型定義フォルダ内の要素の型をコピーします
「FIX1」と同一名で定義の同じ要素の型はコピーしません。
「FIX2」だけで定義されている要素「納入数」「納入番号」「注文総額」をコピーします。また，要素「単位」は，「FIX1」の要素「単位」とは異なる値の定義を持つ型であるという想定でコピーします。ただし，同一名で異なる定義はできないので，「MSG2」の要素「単位」には異なる名前を付ける必要があります。「MSG1」の要素「単価」をコピーした後に，「MSG2」の要素「単位」をコピーしようとすると，コピー先の名前を指定するダイアログが表示されます。

図3-25　［コピー］ダイアログ

この例では，「MSG2」の要素「単位」には，新しい要素名「単位2」を付けてコピーします。

構造定義フォルダ内の構造をコピーします
「MSG2」をコピーします。コンポーネントとして使用されている「分納」「明細」も同時にコピーされます。
「MSG2」の要素「単位」に新しい要素名「単位2」を付けたことに伴い，「MSG2」の子コンポーネント「単位」もコンポーネント「単位2」とする必要があります。「MSG2」の子コンポーネント「単位」を削除してから，型定義フォルダから「単位2」を「MSG2」の下にドラッグ＆ドロップし，コンポーネントを「単位2」に置き換えてください。

以上でデータがコピーできました。

選択構造の定義
構造「MESSAGE」下のコンポーネント「MSG1」「MSG2」は，変換するデータの値によってどちらかのメッセージが選択されるように定義します。この場合，構造「MESSAGE」を選択構造として定義します。選択構造にすると，子コンポーネントとして定義したコンポーネントのどれかのデータがデータ中に出現するように定義できます。選択構造の子コンポーネントを定義する場合，最小の出現回数は１回以上に設定する必要があります。この例では，メッセージ「MSG1」「MSG2」の出現回数はどちらも１回固定を設定します。
次に，選択構造「MESSAGE」下のコンポーネント「MSG1」「MSG2」のうち，どちらかが出現できるように定義します。

出現するコンポーネントの選択条件の定義
トランスレータは，変換するデータの値が選択構造の子コンポーネントのうちどれと一致するかを判定します。選択構造だけを宣言した場合，コンポーネントが定義された順に，変換するデータとコンポーネントが適合するかどうかを評価し，最初に正当であると評価されたものを選択します。
この評価順序は，順序決定式を定義して変更できます。親の選択構造のコンポーネントには評価順序の条件を表す式（順序決定式）を記述し，子のコンポーネントには自コンポーネントを選択する場合の値（順序決定値）を指定します。このように定義しておくと，データを変換するときに式を評価し，同じ値を持つコンポーネントを優先的に評価します。順序決定式の詳細については，「6.6.3　順序決定式」を参照してください。
この例では，ヘッダ情報の中に，データがどのメッセージのものであるかを示すメッセージ区分があります。このメッセージ区分を使用して，選択構造の子コンポーネントが選択できるように定義します。
まず，選択構造「MESSAGE」に対して，メッセージを選択するための順序決定式を記述します。順序決定式は，［順序決定式］ダイアログに記述します。

構造「MESSAGE」の［構造のプロパティ］ダイアログで［順序決定式］ボタンをクリックします
［順序決定式］ダイアログが表示されます。

図3-26　［順序決定式］ダイアログ

順序決定式を記述します
ここでは，メッセージ区分の値によって振り分けるようにするので，メッセージ区分のコンポーネント名を記述します。コンポーネント名は，フォーマット名，ルート構造から対象コンポーネントまでを「@」でつないだもので指定します。

FIX@TRANS@HEAD@メッセージ区分

略記法を使用して上記の式を記述すると，次のようになります。

¥1@HEAD@メッセージ区分

「¥n」はn階層上のコンポーネントを意味する略記法です。「MESSAGE」の直接の親，つまり1階層上のコンポーネント「TRANS」を指定したいので「¥1」と記述します。

構造「TRANS」の下の構造「HEAD」の子コンポーネントである「メッセージ区分」の値によって，順序を決定することになります。
次に，コンポーネントに対して順序決定式に対応する値を定義します。コンポーネント「MSG1」「MSG2」に対して，メッセージ区分の値を設定します。
順序決定値は，［順序決定値］ダイアログに記述します。

各コンポーネントの［コンポーネントのプロパティ］ダイアログで［順序決定値］ボタンをクリックします
［順序決定値］ダイアログが表示されます。

順序決定式に対応する値を記述します

図3-27　［順序決定値］ダイアログ

順序決定式に対応する値と値の属性を設定します。選択構造の選択条件の値は，親の選択構造の順序決定式で記述した内容と同じ型の値を設定する必要があります。
この例では，「MSG1」に対しては「M1」，「MSG2」に対しては「M2」という，メッセージ区分の値を設定します。要素「メッセージ区分」と同じ型「文字列２バイト」として記述するので，値の属性に「文字列」を指定します。メッセージ区分の値が「M1」のときはメッセージ「MSG1」が，値が「M2」のときはメッセージ「MSG2」が選択されます。
これで，変換するデータの値によって，選択構造「MESSAGE」の子コンポーネント「MSG1」又は「MSG2」が選択できるようになりました。

以上で，複数種類のメッセージを持ち，複数データを変換できる固定長データのフォーマット「FIX」が定義できました。

次に，レングスタグ形式のフォーマットの定義について説明します。

3.3.2　レングスタグ形式フォーマットの定義

データの形式には，各要素のサイズと値を定義した形式があります。データサイズを表す要素があるので，一般的に「レングスタグ形式」と呼びます。レングスタグ形式は，CII標準で使用される形式です。

ここでは，これまでの例で定義した固定長フォーマットを使用して，レングスタグ形式のフォーマット定義について説明します。データ全体は，ヘッダとメッセージの繰り返しから構成されますが，ヘッダ部分は固定長フォーマットのままで，メッセージ本体の部分をレングスタグ方式としたフォーマットを定義します。

ここでは，次の例を使用してレングスタグ形式のフォーマット定義について説明します。

一つの要素に対するレングスタグ構造のフォーマット

固定長形式のメッセージ「MSG1」のレングスタグ構造化

固定長形式のメッセージ「MSG2」のレングスタグ構造化

複数種類のメッセージを持つレングスタグ形式のフォーマット

次に，各レングスタグ形式フォーマットの定義について説明します。

＜この項の構成＞

(1)　一つの要素に対するレングスタグ構造のフォーマット

(2)　固定長形式のメッセージ「MSG1」のレングスタグ構造化（フォーマット「LT1」）

(3)　固定長形式のメッセージ「MSG2」のレングスタグ構造化（フォーマット「LT2」）

(4)　複数種類のメッセージを持つレングスタグ形式のフォーマット（フォーマット「LT」）

(1)　一つの要素に対するレングスタグ構造のフォーマット

ここでは，一つの要素に対するレングスタグ構造のフォーマット定義について説明します。レングスタグは，データのサイズを表す要素とデータの実体である要素から構成されます。

「LEN」がサイズを表す要素，「DATA」が要素データの実体です。各要素の構造定義にこの構造を使用し，レングスタグ構造のフォーマットを作成します。

レングスタグの構造では，構造のデータが入力データの場合と，出力データの場合とではサイズの定義方法がやや異なります。各定義方法について次に説明します。

レングスタグ構造のデータを入力データとする場合
要素「DATA」のサイズは要素「LEN」が持っているため，要素のサイズが動的に決定されることになります。要素「DATA」に対しては，［型の詳細］ダイアログのサイズ定義で，要素のサイズは「可変」，「コンポーネントのサイズ決定式で動的に決定する」と指定します。

また，コンポーネント「DATA」には，サイズ決定式で，コンポーネント「LEN」によってサイズが決定することを記述します。

サイズ決定式は，［サイズ決定式］ダイアログで記述します。［サイズ決定式］ダイアログは，サイズ決定式を定義するコンポーネントの［コンポーネントのプロパティ］ダイアログで［サイズ決定式］ボタンをクリックすると表示されます。
サイズ決定式には要素のサイズを持つコンポーネント名を記述します。

図3-28　［サイズ決定式］ダイアログ

ここでは，コンポーネント「DATA」のサイズはコンポーネント「LEN」によって動的に決定されることになるので，サイズ決定式には「LEN」のコンポーネント名を記述します。コンポーネント名は，フォーマット名，ルート構造から対象コンポーネントまでを「@」でつないだもので指定します。ここでは，n階層上のコンポーネントを意味する略記法「¥n」を使用して次のように記述します。

¥1@LEN

「DATA」の1階層上のコンポーネント「LENGTHTAG」を指定したいので「¥1」と記述しています。これで「LENGTHTAG」の子コンポーネント「LEN」によって「DATA」のサイズが決定されます。
なお，一つのレングスタグ構造を複数箇所で使用する場合，要素サイズを持つコンポーネントのグローバル名は一意に決定できません。サイズ決定式は，略記法を使用して相対的な名前で記述するようにしてください。
動的にサイズを決定する指定と，コンポーネントのサイズ決定式は対で指定する必要があります。
サイズ決定式の詳細については，「6.6.2　サイズ決定式」を参照してください。

レングスタグ構造のデータを出力データとする場合
要素「DATA」のサイズは，マップ式によって代入される値などによって決まります。

サイズ定義で「可変」，「コンポーネントのサイズ決定式で動的に決定する」と指定します。なお，サイズ決定式は定義しないでかまいません。要素サイズが固定長の場合は，レングスタグ構造であっても，要素のサイズ定義は「固定」でバイト数を指定するだけです。

要素「LEN」に対しては，特別な定義は必要ないので普通に型を定義します。ここでは，データ種別に「数値，符号無2進整数」，サイズを「2」バイトとします。2進整数を使用する場合は，フォーマットのプロパティで定義するエンディアンに注意してください。

次に，これまで定義した固定長フォーマットの例を使用して，レングスタグ形式のフォーマットの定義について説明します。

(2)　固定長形式のメッセージ「MSG1」のレングスタグ構造化（フォーマット「LT1」）

ここでは，固定長フォーマット「FIX1」で定義したメッセージ「MSG1」をレングスタグ構造にしたフォーマットを定義します。

データの項目はフォーマット「FIX1」と同様ですが，個々の要素データの前にサイズを表す要素を挿入し，フォーマット「FIX1」で要素だったものは，この例では構造となります。フォーマット名は，「LT1」とします。

(a)　フォーマットの定義

フォーマットを作成し，プロパティを定義します。固定長フォーマット「FIX1」の場合と同様に，不要文字削除指定のチェックを入れ，文字列の後続スペースや数値の前後の0などの余分な文字を削除します。レングスタグ構造のサイズを表す要素「LEN」には2進数を使用するので，ここではビッグエンディアンを指定します。

(b)　型の定義

サイズの定義以外は，固定長フォーマット「FIX1」と同様に定義します。要素のサイズ定義は，「単位」「注文日」はサイズを可変とする必要がないため固定長のままとします。ほかの要素のサイズ定義は「1バイト以上の可変」，「コンポーネントのサイズ決定式で動的に決定する」と指定します。

(c)　構造の定義

「LEN」以外の各要素に対してレングスタグ構造を定義し，ルート構造の子コンポーネントとします。この例では，レングスタグ構造の名前は，各要素名に「S」を付けたものとします。フォーマット「LT1」の構造を図3-29に示します。

図3-29　フォーマット「LT1」の構造

「単位」と「注文日」はレングスタグ構造化しますが，固定長のためサイズ決定式は記述しません。

以上で，フォーマット「FIX1」のメッセージ「MSG1」をレングスタグ構造化したフォーマット「LT1」の定義が完成しました。

(3)　固定長形式のメッセージ「MSG2」のレングスタグ構造化（フォーマット「LT2」）

繰り返し構造を持つ固定長フォーマット「FIX2」のメッセージ「MSG2」をレングスタグ構造にしたフォーマットを定義します。レングスタグ構造化の方法は，「MSG1」の場合と同様です。要素「単位」と「注文日」を固定長，残りの要素はすべて可変長として定義し，構造を作成します。データの構造を図3-30に示します。フォーマット名は，「LT2」とします。

図3-30　フォーマット「LT2」の構造

(4)　複数種類のメッセージを持つレングスタグ形式のフォーマット（フォーマット「LT」）

ここでは，フォーマット「LT1」「LT2」で作成したレングスタグ形式のメッセージフォーマットにヘッダ部を追加し，一つのフォーマットにまとめます。複数データ及び複数メッセージに対応したレングスタグ形式のフォーマットを定義します。フォーマット名は，「LT」とします。

ヘッダ部は固定長のままで，構造「TRANS」「HEAD」「MESSAGE」はフォーマット「FIX」と同様に定義します。構造「MESSAGE」の子コンポーネント「MSG1」にはフォーマット「LT1」の構造「MSG1」を，「MSG2」にはフォーマット「LT2」の構造「MSG2」を使用します。「MSG1」及び「MSG2」は，各フォーマットから要素及び構造をドラッグ＆ドロップでコピーして使用できます。

以上でフォーマット「LT」の定義が完成しました。

3.3.3　セパレータ形式フォーマットの定義

セパレータ形式のフォーマットとは，個々の要素データをセパレータで区切った形式のフォーマットです。代表的なものにCSV（Comma Separated Value）があります。CSVとは，データベースやスプレッドシートのデータをコンマ「，」で区切ってテキストファイル形式にしたものです。EDI標準の中ではUN/EDIFACTがセパレータ形式のデータを扱っています。

固定長フォーマットのデータでは個々の要素サイズが決まっているため，どこまでが一つの要素のサイズか分かります。また，レングスタグでは要素のデータサイズはデータごとに異なりますが，サイズを表す要素があるのでデータのサイズが分かります。これに対して，サイズが規定されない可変長要素では，その要素の終わりを示すためにセパレータが必要になります。

ここでは，次の例を使用してセパレータ形式のフォーマット定義について説明します。

1種類のセパレータを使用したフォーマット

複数のセパレータと解放文字を使用したフォーマット

複数種類のメッセージを持つセパレータ形式のフォーマット

次に，各セパレータ形式フォーマットの定義について説明します。

＜この項の構成＞

(1)　1種類のセパレータを使用したフォーマット（フォーマット「SEPA1」）

(2)　複数のセパレータと解放文字を使用したフォーマット（フォーマット「SEPA2」）

(3)　複数種類のメッセージを持つセパレータ形式のフォーマット（フォーマット「SEPA」）

(1)　1種類のセパレータを使用したフォーマット（フォーマット「SEPA1」）

固定長フォーマット「FIX1」のメッセージ「MSG1」にセパレータを使用したフォーマットを定義します。データの構造を図3-31に示します。

図3-31　「MSG1」の構造

メッセージ「MSG1」は，7種類の要素が順番に合計13個現れます。要素は階層化されていないため，単純な区切り文字を使用します。フォーマット名は，「SEPA1」とします。

1種類のセパレータを使用したフォーマット「SEPA1」を定義します。

(a)　フォーマット名の定義

レングスタグ構造の場合と同様に，不要文字削除の指定はチェックを入れます。また，この例では，要素のサイズのカウント方法に「文字数」を指定します。文字数で数えた場合，2バイト文字の１文字のサイズは「1」として数えます。また，文字列中に解放文字があっても，文字数としては数えません。

(b)　型の定義

要素「単位」「注文日」を固定長，ほかの要素は可変長とします。セパレータを使用するフォーマットでは，レングスタグ構造の定義と異なり，「コンポーネントのサイズ決定式で動的に決定する」と指定する必要はありません。

(c)　セパレータの定義

セパレータの名前や値を定義します。セパレータを定義しておくと，セパレータを使用する構造は，セパレータの名前を指定するだけで，値を記述する必要はありません。複数の構造で同じ値をセパレータとして使用する場合などは，セパレータを定義しておくと便利です。セパレータの値を文字列で定義した場合，フォーマットのプロパティで定義したセパレータ文字コードが適用されます。

セパレータを新規作成します。

［挿入］－［セパレータ］を選択します
［セパレータのプロパティ］ダイアログが表示されます。

図3-32　［セパレータのプロパティ］ダイアログ

セパレータ名と値を指定します
この例では，セパレータ名として「SS」，その値としてコンマ「，」を定義します。

［OK］ボタンをクリックします
セパレータ定義フォルダアイテムの下にセパレータ「SS」が作成されます。

(d)　構造の定義

固定長フォーマット「FIX1」と同様にツリー構造を定義します。次に，構造に使用するセパレータの設定について説明します。

この例では，ルート構造「MSG1」に対して，セパレータ「SS」の値「，」を設定します。

ルート構造「MSG1」の［構造のプロパティ］ダイアログで［セパレータ］ボタンをクリックします
［セパレータ指定］ダイアログが表示されます。

図3-33　［セパレータ指定］ダイアログ

セパレータの種類やセパレータの指定方法などを指定します。この例では，要素間を区切るセパレータなので，「中間区切り文字」として指定します。
ダイアログの設定内容は次のとおりです。

指定方法
使用するセパレータを定義しているので，「定義済のセパレータから選択」を指定します。

中間区切り文字の位置
要素間を区切るセパレータを設定したいため，「各要素の間」を指定します。

次に，定義済のセパレータを指定します。

［セパレータ名］ボタンをクリックします
［セパレータ選択］ダイアログが表示されます。

図3-34　［セパレータ選択］ダイアログ

ダイアログの一覧には，選択している構造で指定できるセパレータ名が表示されます。

一覧からセパレータ名「SS」を選択して，［OK］ボタンをクリックします
［セパレータ指定］ダイアログの内容入力欄に，選択したセパレータ名「SS」が入力されます。

セパレータの設定が完成しました。

以上でフォーマット「SEPA1」の定義が完成しました。

メッセージ「MSG1」では，要素中の普通のデータにセパレータと同じ文字を使用した場合，その文字がセパレータか，要素のデータの一部かどうかを区別する解放文字を使用していません。したがって，各要素中にセパレータと同じ文字「,」がないようにしてください。「,」があった場合は，要素中のデータの一部である「,」の位置で，要素が終わったと認識されてしまうため，正しくデータを変換できなくなります。

次に，複数のセパレータと解放文字を使用したフォーマットの定義について説明します。

(2)　複数のセパレータと解放文字を使用したフォーマット（フォーマット「SEPA2」）

固定長形式のフォーマット「FIX2」のメッセージ「MSG2」に複数のセパレータと解放文字を使用したフォーマットを定義します。固定長形式とセパレータ形式のフォーマットの比較を図3-35に示します。

図3-35　固定長形式とセパレータ形式のフォーマットの比較

「単価」「個数」「金額」は三つの要素でまとまって意味を持ち，「分納」と同様に，構造「明細」の子コンポーネントです。構造「明細」の子コンポーネントである「分納」は，1回のデータ中に最大2回出現します。そして，「分納」は「納入数」「納入番号」というコンポーネントの親の構造でもあります。

固定長やレングスタグ構造のメッセージでは固定回出現だった構造「明細」「分納」を，可変回出現できるように変更します。データの構造を図3-36に示します。フォーマット名は，「SEPA2」とします。

図3-36　フォーマット「SEPA2」の構造

セパレータ形式のフォーマットでは，メッセージを3分割します。メッセージの先頭情報として「注文番号」と「単位」，メッセージ本体の情報として「明細構造」，終了情報として「注文日」と「注文総額」に分けます。さらに，構造「分納」を可変回出現できるようにするために，構造を1階層増やします。これは，構造「分納」の出現回数をセパレータで分かるようにするためです。

メッセージ「MSG2」に複数のセパレータと解放文字を使用したフォーマットを定義します。

(a)　フォーマット及び型の定義

フォーマット「SEPA1」の例と同様です。要素「単位」「注文日」を固定長，ほかの要素は可変長とします。

(b)　セパレータ名の定義

「MSG2」の子コンポーネントは，セパレータとして，開始文字「タグ名」，終了文字「改行」，各要素の前には中間区切り文字「+」を使用します。

構造「明細」の子である構造「分納」は，複数回出現するコンポーネントなので，構造「分納」間の区切り文字として「*」，構造「分納」の子コンポーネントの区切りには「:」を使用します。

また，文字列中にセパレータと同じ文字を使用できるようにするため，解放文字として「？」を使用します。セパレータは個々のコンポーネントのプロパティで使用する値などを定義しますが，解放文字はルート構造に対して指定します。

セパレータ及び解放文字の定義
タグ名とするセパレータを除く4種類のセパレータと解放文字を定義します。各セパレータ及び解放文字の定義内容を表3-4に示します。

表3-4　セパレータと解放文字の定義内容

名前 | 種別／値 | 備考
TS | バイト列／ 0x0d0a | 構造「MSG2」の子コンポーネントの終了文字
RS | 文字列／ * | 複数回出現する構造「分納」の中間区切り文字
CS | 文字列／ : | 構造「分納」の子コンポーネント間の中間区切り文字
ES | 文字列／ + | 構造「MSG2」の子コンポーネント間の中間区切り文字
RC | 文字列／ ? | 解放文字

セパレータ及び解放文字は，セパレータ文字コードの文字列又はバイト列として定義できます。終了文字としての改行は，バイト列として定義します（0x0D0A）。その他は文字列で定義します。
次に，セパレータの使用例について説明します。

セパレータの使用例
これらのセパレータを使用したデータは次のような形式になります。タグ名としては「MH」，「MD」，「MT」を使用します。ここでは，実際のデータ値の代わりに要素名を記述してあります。

構造「明細」は可変回数出現するので，「MD」で始まるデータは１行分だけでもかまいません。また，構造「分納」も1回又は2回の可変回出現として定義すれば，構造「分納」の2回目がないデータは次のような形式になります。

次に，解放文字の使用例について説明します。

解放文字の使用例
「MSG2」の要素の中間区切り文字として，セパレータ「+」を使用しているため，要素のデータとして「+」を使用する場合は，解放文字「?」を使用します。例えば，データの一部として「A＋B」というデータがある場合は，「A?+B」としてセパレータと区別する必要があります。このフォーマットでは要素サイズのカウント方法に文字列を指定しているので，「A?+B」として解放文字を挿入した場合でも文字列のサイズは「3」のままです（要素サイズのカウント方法にバイト数を指定した場合は4になります）。

次に，構造を定義します。

(c)　構造の定義

まず，「MSG2」の子コンポーネントを3分割します。

「注文番号」と「単位」を子コンポーネントとする構造「MH」，「注文日」と「注文総額」を子コンポーネントとする構造「MT」を作成します

構造「明細」の子コンポーネントとして構造「S分納」を作成します
出現回数は1とします。

構造「分納」を構造「S分納」の子コンポーネントとして定義します
出現回数は最小1，最大2とします。

ルート構造「MSG2」の下には子コンポーネントとして，「MH」「明細」「MT」を定義します
構造「明細」の出現回数は最小1，最大3とします。

構造で使用するセパレータを設定します
セパレータを設定する構造と設定内容を表3-5に示します。

表3-5　セパレータの設定

構造名 | セパレータ名／値 | セパレータの種類 | 備考
MSG2 | RC／ ? | 解放文字 | －
MH | MH | 開始文字 | 指定方法「文字列」
ES／ + | 中間区切り文字 | 中間区切り文字の位置「各要素の前」
TS／ 0x0d0a | 終了文字 | －
明細 | MD | 開始文字 | 指定方法「文字列」
ES／ + | 中間区切り文字 | 中間区切り文字の位置「各要素の前」
TS／ 0x0d0a | 終了文字 | －
S分納 | RS／ * | 中間区切り文字 | 中間区切り文字の位置「各要素の間」
分納 | CS／ : | 中間区切り文字 | 中間区切り文字の位置「各要素の間」
MT | MT | 開始文字 | 指定方法「文字列」
ES／ + | 中間区切り文字 | 中間区切り文字の位置「各要素の前」
TS／ 0x0d0a | 終了文字 | －

以上で複数セパレータを使用したメッセージフォーマット「SEPA2」の定義が完成しました。

(3)　複数種類のメッセージを持つセパレータ形式のフォーマット（フォーマット「SEPA」）

ここでは，フォーマット「SEPA1」と「SEPA2」で作成したセパレータ形式のメッセージフォーマットにヘッダ部を追加し，一つのフォーマットにまとめます。複数データ及び複数メッセージに対応したセパレータ形式のフォーマットを定義します。フォーマット名は，「SEPA」とします。

ヘッダ部は，メッセージ「SEPA2」と同様にセパレータを使用した構造にします。構造「MESSAGE」の子コンポーネント「MSG1」にはフォーマット「SEPA1」の構造「MSG1」を，「MSG2」にはフォーマット「SEPA2」の構造「MSG2」を使用します。「MSG1」及び「MSG2」は，各フォーマットから要素及び構造をドラッグ＆ドロップでコピーして使用できます。

この場合のデータ形式は次のような形式になります。

メッセージ本体を選択構造化する方法は，これまでの例と同様です。ただし，解放文字の使用を宣言するコンポーネントはルート構造である，ということに注意してください。フォーマット「SEPA2」では，解放文字は構造「MSG2」に対して定義しました。フォーマット「SEPA」では，解放文字は構造「ROOT」に対して定義し，「MSG2」に対する解放文字の定義を削除します。

以上でフォーマット「SEPA」の定義が完成しました。

3.3.4　条件式の定義

これまでの例では，データの構造を定義してきました。FDLエディタでは，データの構造を定義する以外に，データなどに対する条件を設定できます。データに対する条件を定義する式を「条件式」と呼びます。

フォーマット「FIX」を例にして，条件式について説明します。フォーマット「FIX」の構造を図3-37に示します。

図3-37　フォーマット「FIX」の構造

例えば，ヘッダ部の受信者の値が「HITACHI0」以外の場合は，データ不正としてエラー処理することとします。このような条件は，コンポーネントの条件として記述できます。

コンポーネント「受信者」の［コンポーネントのプロパティ］ダイアログで［条件式］ボタンをクリックします
［条件式］ダイアログが表示されます。

図3-38　［条件式］ダイアログ

コンポーネントに対する条件式を記述します
ここでは，コンポーネント「受信者」の値は「HITACHI0」である，という条件を定義します。条件式を定義するコンポーネント自身を指定する場合は，通常，自コンポーネントを表す略記法として記号「#」を使用します。記号は直接入力したり，ダイアログから選択したりできます。ここでは，ダイアログから選択します。

［記号］ボタンをクリックします
［特殊記号］ダイアログが表示されます。

図3-39　［特殊記号］ダイアログ

条件式に使用する記号を選択し，［OK］ボタンをクリックします。ここでは，自コンポーネントを表す「#」を選択します。選択した記号が条件式に挿入されます。
自コンポーネント「受信者」の値は「HITACHI0」である，という条件を定義します。文字列定数はダブルクォーテーションで囲んでください。条件式を次に示します。

# == "HITACHI0"

この場合，フォーマットの実際のデータで受信者の値が「HITACHI0」以外の場合は，トランスレータは評価規則が不正であるとして，エラー処理します。以上で条件式が定義できました。

3.3.5　デフォルト式の定義

FDLエディタではマップ式は記述しませんが，特定の要素に対してあらかじめ決まっている値を「デフォルト値」として定義できます。MDLエディタでは，この要素の値がデフォルト値のままで問題なければ，マップ式を記述して要素の値を定義する必要はありません。

フォーマット「FIX」を例にして，デフォルト値の設定について説明します。フォーマット「FIX」の構造を図3-40に示します。

図3-40　フォーマット「FIX」の構造

ヘッダ部の発信者に対して，デフォルト値として「HITACHI1」を定義します。

コンポーネント「発信者」の［コンポーネントのプロパティ］ダイアログで［デフォルト式］ボタンをクリックします
［デフォルト式］ダイアログが表示されます。

図3-41　［デフォルト式］ダイアログ

コンポーネントに対するデフォルト式を記述します
デフォルト式に記述できるのは，定数の代入式だけです。マップ式と同様に，デフォルト式の後尾にセミコロンを付けてください。ここでは，コンポーネント「発信者」のデフォルト値を「HITACHI1」と定義します。デフォルト式を次に示します。

= "HITACHI1" ;

この場合，デフォルト式を定義したフォーマットを出力フォーマットとして使用したときは，MDLエディタでコンポーネント「発信者」に対してマップ式を記述しなければ，値として常に「HITACHI1」が出力されます。マップ式を記述した場合は，デフォルト式よりもマップ式の定義が優先されます。
以上でデフォルト式が定義できました。

3.3.6　メッセージデータの例

ここでは，これまの例で定義してきた固定長，レングスタグ，セパレータの各形式のメッセージデータの例を示します。この例では，レングスタグ及びセパレータ形式のデータは，不要文字を削除しています。

メッセージ「MSG1」のデータの例を図3-42に示します。

図3-42　メッセージ「MSG1」のデータの例

メッセージ「MSG2」のデータの例を図3-43に示します。

図3-43　メッセージ「MSG2」のデータの例

3.4　FDLファイル作成時の注意事項

FDLファイルのツリー構造は，データの各要素の出現順序を表します。データ構造の作成方法は様々に考えられるので，「3.2　簡単なデータ構造のフォーマット定義例」以降で説明した構造の作成例は一つの例に過ぎません。変換するデータと照らし合せて，要求を満たす構造を作成してください。なお，構造を作成するときには，次の点に注意してください。

＜この節の構成＞

(1)　要素の定義

(2)　セパレータの定義

(3)　解放文字の定義

(4)　構造の定義

(1)　要素の定義

要素の型を定義するときの注意事項は，属性ごとに三つに分類されます。

整数，実数，暗黙的小数部付数値要素の場合

日付要素の場合

文字列要素の場合

次に，要素を定義するときの注意事項について属性ごとに説明します。

(a)　要素の属性が整数，実数，暗黙的小数部付数値の場合

要素サイズが固定長の場合は，符号・小数点・指数記号を桁数として数えます。

要素サイズが可変長の場合は，符号・小数点・指数記号は桁数として数えません。また，要素の最大サイズは設定されません。

最大桁数を指定した場合は，整数部の前に0を付けたりして，指定桁数分の数字が出力されます。

有効数字だけを出力したい場合は，フォーマットのプロパティで，不要な文字を削除して出力するように指定してください。

データ中で数値文字列内で使用されるような文字（例えば，「,」「+」など）をセパレータとして使用する場合，符号，同一文字の桁セパレータ及び指数記号は使用しないでください。また，CSVフォーマットの場合は，「"」も使用しないでください。

(b)　要素の属性が日付時刻の場合

YYMMDD型は6桁の数値で表しますが，上位2桁は西暦年を意味するため，数値へ変換した場合の値としては8桁の数値になります。したがって，YYMMDD型で読み込んだ要素の値をそのまま整数6桁の要素にマッピングすると，桁あふれが発生します。入力した日付型の要素の値を出力する場合は，出力側の要素も日付型を使用してください。

(c)　要素の属性が文字列の場合

文字列型の要素で，文字コードとして2バイト文字のコードを指定した場合は，埋め字は2バイト文字でなければなりません。埋め字をバイト列で指定する場合も2バイトの指定が必要です。2バイト文字以外の文字コードでは，埋め字は1バイト（文字）で指定します。

(2)　セパレータの定義

可変長の要素，可変回数出現するコンポーネントに対しては，原則的に要素の終わりを示したり，コンポーネントの出現の終了を示したりする，区切りとしてのセパレータが必要になります。セパレータを定義するときの注意事項について次に説明します。

可変長の要素コンポーネントの場合は，コンポーネント間の中間区切り文字や，終了文字のセパレータを定義します。

不特定回数出現するコンポーネントの場合は，次に現れるコンポーネントに開始文字のセパレータを定義します。ただし，そのコンポーネントが入出力データの最後尾にある場合，開始文字のセパレータは必要ありません。

セパレータの値は，文字又は16進数で定義します。文字の場合は，フォーマット内で使用する初期値のセパレータ文字コードになります。16進数で複数バイトの値を指定した場合は，その値はフォーマットのプロパティで指定したエンディアンに従う値として解釈されます。例えば，数値「1」を2バイトの16進数（2バイト）で表す場合は，ビッグエンディアンでは「0x0001」，リトルエンディアンでは「0x0100」と記述します。

(3)　解放文字の定義

要素の文字列中で，セパレータと同じ文字を使用する場合は，その文字が，要素の終わりを示すセパレータなのか，要素のデータの一部なのかを区別するために，解放文字を使用する必要があります。解放文字の直後の文字は，セパレータではなく，要素のデータの一部として解釈されます。

次に，セパレータとして「+」，解放文字として「?」を使用した場合の入力データの例を示します。

解放文字「?」の直後の文字「+」は，要素のデータの一部として扱われるので，要素は「ABC+DEF」と「+123」の二つあることになります。

要素の文字列中で，解放文字と同じ文字を使用する場合は，セパレータと同じように，文字の直前に解放文字を指定する必要があります。解放文字の定義方法はセパレータと同じですが，解放文字はルート構造に設定します。設定した解放文字は，そのフォーマット全体に対して適用されます。

(4)　構造の定義

構造を定義する場合の注意事項は，次の3種類あります。

コンポーネントの出現回数を省略する場合

選択構造を定義する場合

構造全体を定義する場合

次に，各内容について説明します。

(a)　コンポーネントの出現回数を省略する場合

コンポーネントの最大出現回数を省略すると，マップ式の記述に制限が発生します。コンポーネントがまとまって意味を持つ構造（例えば，単独であってもデータとして完結している構造）以外には，極力最大出現回数を省略しないでください。

(b)　選択構造を定義する場合

選択構造を使用する場合，できる限りコンポーネントの評価順序を指定してください。評価順序の指定は，構造に対して順序決定式を，子コンポーネントに対して順序決定値を定義します。コンポーネントの評価順序を指定するには，評価順序を指定する選択構造が現れる前に，子コンポーネントを選択するための条件値を持つ要素が必要です。順序決定式の詳細については，「6.6.3　順序決定式」を参照してください。

コンポーネントの評価順序が指定できない場合は，選択構造の子コンポーネントに対して，開始文字のセパレータを定義するか，又は正当性を示す条件式を定義して，コンポーネントを正しく選択できるようにしてください。また，選択構造の子コンポーネントの最小出現回数は1回以上を指定してください。

(c)　構造全体を定義する場合

フォーマットの構造は，入力側と出力側の階層の深さが，同程度になるように定義してください。階層の深さが著しく異なる場合は，マップ式が複雑になったり，記述できなくなる場合があります。

また，出力側のフォーマットで，レングスタグ構造のデータのように，先に出力されるコンポーネントの値が，後から出力されるコンポーネントによって決まる場合は，マップ式の評価を遅延させる指定でマップ式を定義する必要があります。

評価順序遅延を指定するコンポーネントのサイズは，固定長にしてください。評価順序遅延指定のマップ式の詳細については，「6.6.6(3)　評価順序遅延指定のマップ式」を参照してください。

4.　MDLエディタの操作

この章では，MDLエディタの操作の概要，具体例を使用したMDLエディタの操作方法について説明します。

＜この章の構成＞

4.1　操作の概要

4.2　簡単なマッピング例

4.3　複雑なマッピング例

4.4　XMLデータのマッピング例

4.5　MDLファイル作成時の注意事項

4.1　操作の概要

この節では，MDLファイルを作成するためのMDLエディタの操作手順，MDLエディタの画面構成，MDLエディタのコマンドについて説明します。

＜この節の構成＞

4.1.1　MDLファイルの作成手順

4.1.2　MDLエディタの画面構成

4.1.3　MDLエディタのコマンド一覧

4.1.1　MDLファイルの作成手順

MDLエディタでは，FDLエディタで定義した入力フォーマット，出力フォーマットのコンポーネント間を対応付けます。FDLファイルからフォーマットを読み込んで，マッピングします。また，XMLフォーマットを変換するMDLファイルの場合は，FDLファイルではなくDTDファイルを読み込んで，MDLファイルのフォーマットとしてマッピングします。フォーマット間のマッピング定義をファイルとして保存したものがMDLファイルです。

MDLファイルの作成手順を図4-1に示します。

図4-1　MDLファイルの作成

手順について次に説明します。

フォーマットの挿入
マッピングする入力側，出力側のフォーマットを読み込みます。フォーマットはFDLエディタで作成したFDLファイル，又はDTDファイルから取り込みます。読み込んだフォーマットに対応する入力データのファイル名，出力データのファイル名を設定します。フォーマットは複数読み込むことができるので，複数のフォーマット間でもマッピングできます。

変数の定義
変換時に使用する変数の名前や値を定義します。変数を使用しないデータ又はFDLエディタで設定済みの場合，変数を定義する必要はありません。

マップ式の定義
入力側，出力側のフォーマットのコンポーネント間を対応付け，マップ式を定義します。

MDLの検証
チェックコマンドでマッピングの定義内容の正当性を検証します。データを変換する前に，この検証を実行してエラーがないか確認する必要があります。

MDLファイルの保存
MDLに名前を付けて保存します。これでMDLファイルが作成できます。MDLファイルの拡張子は，「.mdl」です。

4.1.2　MDLエディタの画面構成

ここでは，MDLエディタの画面構成について説明します。MDLエディタは次の操作で起動できます。

［スタート］－［プログラム］－［Interschema］－［MDLエディタ］を選択します
MDLエディタが起動します。MDLエディタは，同時に複数のMDLファイルを開くことができます。

MDLエディタの画面構成図4-2に示します。

図4-2　MDLエディタの画面構成

画面内の各部分について次に説明します。図4-2の番号は，説明の番号と一致しています。

＜この項の構成＞

(1)　MDLエディタウィンドウ

(2)　メニューバー

(3)　ツールバー

(4)　ドキュメントビューウィンドウ

(5)　入力フォーマットビュー

(6)　出力フォーマットビュー

(7)　フォーマットセレクトタブ

(8)　ルートコンポーネント情報

(9)　フォーマットツリーリスト

(10)　マップビュー

(11)　ステータスバー

(1)　MDLエディタウィンドウ

MDLエディタのメインとなるフレームウィンドウです。

(2)　メニューバー

実行するコマンドを指定するためのメニューです。コマンドの詳細については，MDLエディタのヘルプを参照してください。

(3)　ツールバー

使用頻度の高いコマンドのボタンを集めたバーです。マウスでドラッグすると，任意の位置に移動できます。各ボタンの上にマウスカーソルを移動させると，ステータスバーにボタンの説明が表示されます。

(4)　ドキュメントビューウィンドウ

一つのドキュメントに対して複数個表示できるウィンドウです。一度に複数のドキュメントを編集できます。ただし，MDLエディタで一度に編集できるドキュメントは10個までです。

(5)　入力フォーマットビュー

入力側のフォーマットを表示するビューです。

(6)　出力フォーマットビュー

出力側のフォーマットを表示するビューです。

(7)　フォーマットセレクトタブ

複数のフォーマットの中から編集したいフォーマットを選択するタブです。タブをクリックすることで，編集したいフォーマットを切り換えられます。

(8)　ルートコンポーネント情報

現在，ツリーのルートとして表示されているコンポーネント名を表示するエリアです。

(9)　フォーマットツリーリスト

フォーマット内のコンポーネントの階層構造，属性，マッピング状況などを表示するコントロールです。

図4-3　フォーマットツリーリスト

フォーマットツリーリストのカラムについて，表4-1に説明します。

表4-1　フォーマットツリーリストのカラム

カラム名
意味

階層構造
ルート構造以下のコンポーネントをツリーで表示します。

必須
この欄にマークがあるコンポーネントに対して，必ずマップ式を定義する必要があることを表します。FDLエディタで，コンポーネントのプロパティにマップ式定義を必須とした場合はマークが表示され，必須としなかった場合マークは表示されません。
入力フォーマットツリーリストにこのカラムはありません。

デフォルト
この欄にマークがあるコンポーネントは，デフォルト式が指定されていることを表します。デフォルト式が指定されているコンポーネントに対してマップ式を定義すると，マップ式で定義した値が有効となります。
入力フォーマットツリーリストにこのカラムはありません。

変数式
この欄にマークがあるコンポーネントは，変数式が定義されていることを表します。

済
この欄にマークがあるコンポーネントに対してマップ式が定義済みであることを表します。マップ式が定義されているかどうかは，マップビューに表示されるテキスト文字の有無で判定されます。
入力フォーマットツリーリストにこのカラムはありません。

コメント
FDLエディタで型や構造に対して定義したコメントが表示されます。出力フォーマットツリーリストの場合，オプションの設定でコメントの代わりにマップ式を表示することもできます。

ツリーは次の動作によって縮小・展開できます。

ツリーアイテムをダブルクリックします

ツリーアイテムの左側に表示されている「＋」マーク又は「－」マークをクリックします

入力フォーマットツリーリストのアイテムを出力フォーマットツリーリストにドラッグ＆ドロップしたり，アイテムをマップビューにドラッグ＆ドロップしたりして，マッピングします。ただし，異なるMDLエディタ間でドラッグ&ドロップによるマッピングはできません。

(10)　マップビュー

出力側のフォーマット内で選択しているコンポーネントのマップ式を表示するビューです。ここでは，式を直接記述したり，ダイアログから演算子や関数を選択したりして，マップ式を編集します。

図4-4　マップビュー

また，フォーマットツリーリストのコンポーネントをマップビュー内にドラッグ＆ドロップすると，マップ式中にそのコンポーネント名を挿入できます。

(11)　ステータスバー

メニューバーやツールバーからコマンドを選択する際に，コマンドの説明を表示するエリアです。

4.1.3　MDLエディタのコマンド一覧

MDLエディタのコマンドの一覧を表4-2に示します。

表4-2　MDLエディタのコマンド一覧

メニュー名 | メニューアイテム名 | ショートカットキー | 説明
ファイル(F) | 新規作成(N) | ［Ctrl］＋［N］ | MDLドキュメントを新規に作成します。
開く(O)... | ［Ctrl］＋［O］ | MDLファイルを読み込みます。
閉じる(C) | － | MDLドキュメントウィンドウを閉じます。
上書き保存(S) | ［Ctrl］＋［S］ | MDLドキュメントの内容を対応するMDLファイルに上書き保存します。
名前を付けて保存(A)... | － | MDLドキュメントに名前を付けて，MDLファイルとして保存します。
外部出力(E)... | － | フォーマット情報又はマップ式情報をファイルに出力します。
プロパティ(P)... | － | MDLドキュメントのプロパティを表示します。
（ファイル名） | － | 最近使用したファイル（読み込んだファイル又は保存したファイル）を読み込みます。
MDLエディタの終了(X) | － | MDLエディタを終了します。
編集(E) | 削除(D) | フォーマット(F) | － | 入力又は出力フォーマットビュー内で選択したフォーマットを削除します。
変数(V)... | － | 変数を削除します。
マージ(M)... | － | FDLフォーマット，DTDフォーマット，又はマップ式をマージします。
検索(S)... | ［Ctrl］＋［F］ | データ名又は式文字列から，指定した文字列を検索します。
表示(V) | ツールバー(T) | － | ツールバーの表示／非表示を切り替えます。
ステータスバー(S) | － | ステータスバーの表示／非表示を切り替えます。
下位コンポーネントだけを表示(L) | － | 指定したコンポーネントより下位のコンポーネントだけをフォーマットツリーリストに表示します。
すべてのコンポーネントを表示(A) | － | すべてのコンポーネントをフォーマットツリーリストに表示します。
挿入(I) | フォーマット(F)... | － | 入力又は出力フォーマットビューに，フォーマットを追加します。
DTDフォーマット(D)... | － | 入力又は出力フォーマットビューに，DTDフォーマットを追加します。
変数(V)... | － | 入力又は出力フォーマットに，変数を追加します。
ツール(T) | マップ式(E)... | 演算子(O)... | － | ［演算子］ダイアログを表示します。
関数(F)... | － | ［関数］ダイアログを表示します。
特殊記号(S)... | － | ［特殊記号］ダイアログを表示します。
値マッピング(V)... | － | ［値マッピング］ダイアログを表示します。
チェック(C)... | － | MDLファイルの定義内容の正当性を検証します。
マッピング確認(M)... | － | 入出力フォーマット間でのコンポーネントのマッピング情報を確認します。
プロパティ(P) | フォーマット(F)... | － | 選択しているフォーマットの詳細情報を表示します。
入出力ファイル(I)... | － | 選択しているフォーマットに対応する入出力ファイルを表示したり変更したりします。
構造・型・属性(S)... | － | 選択している構造／型／XML属性の詳細情報を表示します。
コンポーネント(C)... | － | 選択しているコンポーネントの詳細情報を表示します。
変数(V)... | － | 変数の詳細情報を表示します。
プロパティ表示(L)... | － | 選択している要素のプロパティを一覧表示します。
オプション(O)... | － | MDLエディタのオプションを設定します。
ウィンドウ(W) | 下位コンポーネントを別ウィンドウに表示(N) | － | 選択したコンポーネントより下位のコンポーネントだけを別のドキュメントビューウィンドウのフォーマットツリーリストに表示します。
重ねて表示(C) | － | ドキュメントビューウィンドウのタイトルが重ならないように整列します。
上下に並べて表示(H) | － | ドキュメントビューウィンドウを上下に並べます。
左右に並べて表示(V) | － | ドキュメントビューウィンドウを左右に並べます。
（ドキュメント名） | － | 指定したドキュメントビューウィンドウをアクティブにします。
ヘルプ(H) | 目次(C)... | － | MDLエディタのヘルプの目次を表示します。
検索(S)... | － | MDLエディタのヘルプのトピック一覧を表示します。
バージョン情報(A)... | － | MDLエディタの形名，バージョンなどを表示します。

（凡例）

－：ショートカットキーはありません。

4.2　簡単なマッピング例

この節では，簡単なマッピングを定義しながら，MDLエディタの操作について説明します。

データの変換で一番多いのは，入力側の要素と出力側の要素とを1対1で対応付け，値を代入する方法です。FDLエディタの操作例で作成したフォーマットを使用して，値を代入するマッピングについて説明します。レングスタグ形式のフォーマット「SEPA1」のメッセージを，固定長形式のフォーマット「FIX1」のメッセージに変換するために，フォーマット間をマッピングし，MDLファイルを作成します。データの構造を図4-5に示します。

図4-5　フォーマットの構造

データの形式は異なりますが，要素名やツリー構造は同じです。

まず，フォーマットを読み込みます。

＜この節の構成＞

4.2.1　フォーマットの挿入

4.2.2　マップ式の定義

4.2.3　MDLの検証

4.2.4　MDLファイルの保存

4.2.1　フォーマットの挿入

マッピングするフォーマットを読み込むMDLドキュメントウィンドウを表示します。

［ファイル］－［新規作成］を選択します
MDLドキュメントウィンドウが表示されます。ドキュメントウィンドウ内に，マッピングする入力側，出力側のフォーマットを読み込みます。

まず，入力側のフォーマットを読み込みます。

入力フォーマットビューを選択します

［挿入］－［フォーマット］を選択します
［フォーマット挿入：入力］ダイアログが表示されます。なお，Windowsエクスプローラを開き，挿入したいFDLファイルをフォーマットビューにドラッグ&ドロップして挿入することもできます。

図4-6　［フォーマット挿入：入力］ダイアログ

読み込むフォーマットを定義しているFDLファイル名，読み込むフォーマット名，入力データのファイル名を指定するダイアログです。

入力側のフォーマットのFDLファイル名を指定します
FDLファイル名は直接入力できますが，［参照］ボタンをクリックすると，FDLファイルを参照して指定できます。選択できるフォーマットが一つだけの場合は，フォーマット欄にフォーマット名が自動的に入力されます。その他の場合は，［フォーマット選択］ダイアログが表示されます。

図4-7　［フォーマット選択］ダイアログ

このダイアログには，指定したFDLファイルに定義されているフォーマットが表示されます。ここでは，入力フォーマットビューにフォーマットを挿入するので，入力側のフォーマットだけが表示されます。

フォーマットを選択して［OK］ボタンをクリックします
ここでは，入力フォーマットとして「SEPA1」を指定します。
選択したフォーマット名が［フォーマット挿入：入力］ダイアログのフォーマット名に挿入されます。

入力データファイル名を指定します
指定したフォーマットに対応する入力データのファイル名を指定します。入力データファイル名は直接入力できますが，［参照］ボタンをクリックすると既存のファイル名を参照して指定できます。入力データファイル名は，データを変換するときのコマンドの引数で指定できるので，このダイアログでは未指定でもかまいません。

［OK］ボタンをクリックします
入力フォーマットビューに，選択したフォーマットが挿入されます。

次に，出力フォーマットを読み込みます。

出力フォーマットビューを選択します

［挿入］－［フォーマット］を選択します
なお，Windowsエクスプローラを開き，挿入したいFDLファイルをフォーマットビューにドラッグ&ドロップして挿入することもできます。
どちらの場合も［フォーマット挿入：出力］ダイアログが表示されます。このダイアログに，出力側のフォーマットのFDLファイル名，フォーマット名，出力データファイル名を設定します。指定方法は入力側のフォーマットの指定と同様です。出力データファイル名も，データを変換するときのコマンドの引数で指定できるので，このダイアログでは未指定でもかまいません。なお，出力データに入力データと同じファイル名を指定するとエラーになるので，入力データと異なるファイル名を指定してください。
ここでは，出力フォーマットとして「FIX1」を指定します。

［OK］ボタンをクリックします
出力フォーマットビューに，選択したフォーマットが挿入されます。

入力，出力それぞれのフォーマットビューには，ルート構造以下のコンポーネントがツリーで表示されます。フォーマットの各コンポーネントの内容は，プロパティダイアログで確認できます。以上でマッピングのための環境が整いました。

次に，入力側と出力側のコンポーネントを対応付け，出力側のコンポーネントに対してマップ式を定義します。

4.2.2　マップ式の定義

マップ式を定義する必要があるのは，出力フォーマットビューで，マップ式の定義が必須であることを示すマークが表示されているコンポーネント，可変回出現コンポーネント，及び省略できない型コンポーネントです。

ここでは，出力側のルート構造「MSG1」の子コポーネントすべてにマップ式を定義する必要があります。フォーマット「SEPA1」とフォーマット「FIX1」のコンポーネント間の対応を次に示します。

フォーマット「FIX1」の「注文日」以外の要素は，入力側のフォーマット「SEPA1」のコンポーネントを，出力側のフォーマット「FIX1」の同じ名前のコンポーネントに代入するマップ式を記述します。「注文日」は，入力側の同じ名前のコンポーネントを代入するのではなく，データ変換時の日付が出力されるように設定したいので，関数を使用したマップ式を記述します。

要素ごとにマップ式の記述について説明します。

＜この項の構成＞

(1)　要素「注文番号」「単位」「品名」のマップ式

(2)　要素「単価」「個数」「金額」のマップ式

(3)　要素「注文日」のマップ式

(1)　要素「注文番号」「単位」「品名」のマップ式

出力フォーマットのコンポーネントに，対応する入力フォーマットのコンポーネントをドラッグ＆ドロップし，代入のマップ式を定義します。

まず，要素「注文番号」に代入のマップ式を記述します。

出力フォーマットの「注文番号」をクリックして選択します

入力フォーマットの「注文番号」をクリックして選択し，「注文番号」を出力フォーマットの「注文番号」へドラッグ＆ドロップします

出力フォーマットの「注文番号」にはマップ式が定義済みであることを示すマークが付き，マップビューには出力フォーマットの「注文番号」のマップ式が表示されます。マップ式を次に示します。

= SEPA1@MSG1@注文番号 ;

代入のマップ式には，ドラッグ＆ドロップしたコンポーネント名が表示されます。コンポーネント名は，フォーマット名，ルート構造から目的のコンポーネントまでを「@」でつないだグローバル名で表します。ここでは，出力フォーマットの「注文番号」には，入力フォーマット「SEPA1」のルート構造「MSG1」の子コンポーネント「注文番号」を代入する，という意味のマップ式です。

「単位」及び「品名」のマップ式を記述します
「注文番号」と同様に，対応する入力フォーマットのコンポーネントをドラッグ＆ドロップし，代入のマップ式を記述します。

(2)　要素「単価」「個数」「金額」のマップ式

要素「単価」「個数」「金額」は複数回出現するコンポーネントです。入力側と出力側のコンポーネントを対応付けて代入のマップ式を記述するときに，出現順序を対応付けるINDEX関数を使用します。

INDEX関数を使用したマップ式

INDEX関数は，引数で指定したコンポーネントの現在の出現番号（インデクスと呼びます）を取り出し，コンポーネント間の出現順序を1対1で対応付けます。例えば，互いに4回出現する入力側のコンポーネント「A」と出力側のコンポーネント「D」を対応付けたいとします。

1回目に出現した「A」の値は1回目に出現した「D」の値として代入し，2回目に出現した「A」の値は2回目に出現した「D」の値に代入する，というようにコンポーネント間の値の代入を出現回数で対応付けます。

この場合，コンポーネント「D」に対してINDEX関数を使用したマップ式を記述します。入力側のコンポーネント「A」を出力側のコンポーネント「D」にドラッグ＆ドロップで代入すると，次のようなマップ式が表示されます。

=IN@ROOT@A[INDEX(  )] ;

INDEX関数の括弧内の引数は，式が記述されているコンポーネントの位置を起点として階層数を表すもので，インデクス値の参照先となるコンポーネントを指定します。「0」はマップ式を記述する自コンポーネント，「n」はマップ式を記述するコンポーネントからn階層分，上位に位置するコンポーネントを表します。INDEX関数の引数の指定例を図4-8に示します。

図4-8　INDEX関数の引数の指定例

コンポーネント「D」は自コンポーネントに複数回の出現回数が定義されているので，引数で「0」を指定して自コンポーネントのインデクスを取り出し，その同じインデクスのコンポーネント「A」の値を代入します。マップ式を次に示します。

=IN@ROOT@A[INDEX(0)] ;

INDEX関数で，自コンポーネントである「D」のインデクスを取り出します。インデクスが「1」の場合は，1回目に出現したコンポーネント「A」の値が1回目に出現したコンポーネント「D」に代入されます。同様に，インデクスに対応した値が代入されます。

「INDEX(0)」と記述する代わりに，入力側と出力側の出現順序を対応付ける略記法「?」も使用できます。その場合のマップ式を次に示します。

=IN@ROOT@A[?] ;

では，実際にINDEX関数を使用したマップ式を記述します。

まず，要素「単価」のマップ式を記述します。

出力フォーマットの「単価」を選択し，入力フォーマットの「単価」をドラッグ＆ドロップします
マップビューに次のマップ式が表示されます。

= SEPA1@MSG1@単価 [INDEX(  )] ;

「単価」は，3回出現するコンポーネントなので，マップ式にはINDEX関数を使用します。入力側のコンポーネント「単価」と出力側のコンポーネント「単価」を1対1で出現順序を対応付けます。

ここでは，自コンポーネントである出力側のコンポーネント「単価」を指定したいので，INDEX関数の引数に「0」を記述します。出力側のコンポーネント「単価」のインデクスを取り出し，入力側と出力側の「単価」の出現順序を対応付けるように指定します。

カーソルがINDEX関数の括弧内に位置づけられているので，括弧内に「0」と入力します
マップ式を次に示します。

= SEPA1@MSG1@単価 [INDEX(0)] ;

これで，入力側と出力側の「単価」の出現順序が対応付けられました。

「個数」及び「金額」のマップ式を記述します
「単価」と同様に，INDEX関数を使用したマップ式を記述します。

(3)　要素「注文日」のマップ式

要素「注文日」は，入力フォーマットの「注文日」を代入するのではなく，データを変換したときの日付が出力されるように，関数を使用してマップ式を記述します。

出力フォーマットの「注文日」を選択します
ここでは，コンポーネントをドラッグ＆ドロップするのではなく，マップビューに式を直接記述します。マップ式で使用する演算子，関数，及び特殊記号は直接入力できますが，ダイアログからも選択できます。ダイアログから選択した演算子や関数は，マップビュー内のカーソル位置に挿入されます。

マップ式の左辺には，マップ式を定義するコンポーネント名が表示されます。
ここでは，日付を設定するために関数を使用します。

［関数］ボタンをクリックします
［関数名］ダイアログが表示されます。

図4-9　［関数名］ダイアログ

一覧から関数を選択します
ここでは，データを変換するときの日付を「注文日」に出力したいので，現在の日付を返す関数「CURRENTDATE」を選択します。

［OK］ボタンをクリックします
マップビューに選択した関数が挿入されます。

要素「注文日」のマップ式を次に示します。

= CURRENTDATE();

CURRENTDATE関数には引数は必要ないので，ここではこれ以上記述する必要はありません。要素「注文日」には，データを変換するときの日付が出力されるようになりました。

以上ですべての要素にマップ式が定義できました。

マップ式の記述法として，マップ式左辺の先頭に代入式のイコール「=」，マップ式の最後にセミコロン「;」が必要です。マップ式を直接入力して記述する場合は，「=」，「;」の記述もれがないように注意してください。

各コンポーネントのマップ式を表4-3に示します。

表4-3　各コンポーネントのマップ式（簡単なマッピング例）

要素 | マップ式
注文番号 | = SEPA1@MSG1@注文番号 ;
単位 | = SEPA1@MSG1@単位 ;
単価 [3] | = SEPA1@MSG1@単価 [INDEX(0)] ;
個数 [3] | = SEPA1@MSG1@個数 [INDEX(0)] ;
金額 [3] | = SEPA1@MSG1@金額 [INDEX(0)] ;
注文日 | = CURRENTDATE() ;
品名 | = SEPA1@MSG1@品名 ;

4.2.3　MDLの検証

データを変換する前に，チェックコマンドを実行し，マップ式などの定義内容にエラーがないことを確認する必要があります。

［ツール］－［チェック］を選択します
マップ式などの定義内容の正当性を検証します。検証結果は，［結果］ダイアログに一覧表示されます。

図4-10　［結果］ダイアログ

エラーがある場合は，一覧でエラー内容をダブルクリックすると，エラーのあるデータがツリービュー内で選択状態になります。エラーを修正したら，再度検証を実行し，エラーがないことを確認してください。

エラーがなければ，［閉じる］ボタンをクリックして［結果］ダイアログを閉じます

4.2.4　MDLファイルの保存

マップ式の定義内容にエラーがないことを確認したら，MDLに名前を付けて保存します。

［ファイル］－［名前を付けて保存］を選択します
［名前を付けて保存］ダイアログが表示されるので，ファイル名を指定します。

［OK］ボタンをクリックします
以上で入出力フォーマット間をマッピングしたMDLファイルが作成できました。

4.3　複雑なマッピング例

この節では，複雑なマッピングを定義するときの，マップ式の定義について説明します。説明する内容を次に示します。

構造を含んだマッピング

レングスタグフォーマットへのマッピング

値を持つ要素のマッピング

条件式とNULLを使用したマッピング

選択構造を持つフォーマットのマッピング

各内容について次に説明します。

＜この節の構成＞

4.3.1　構造を含んだマッピング

4.3.2　レングスタグフォーマットへのマッピング

4.3.3　値を持つ要素のマッピング

4.3.4　条件式とNULLを使用したマッピング

4.3.5　選択構造を持つフォーマットのマッピング

4.3.1　構造を含んだマッピング

ここでは，レングスタグ形式のフォーマットから固定長形式のフォーマットへマッピングする例を使用し，構造が階層化されたデータのマッピングについて説明します。

レングスタグ形式のフォーマットとして「LT2」，固定長形式のフォーマットとして「FIX2」を使用します。データの構造を図4-11に示します。

図4-11　フォーマット「LT2」「FIX2」のデータの構造

入力側のデータのレングスタグ構造には，各要素のサイズを表す要素「LEN」がありますが，出力側のデータにはこの要素は必要ありません。したがって，マップ式は，レングスタグ構造の実際の値を持つ要素だけを取り出すマップ式を記述します。

要素ごとにマップ式の定義について説明します。

＜この項の構成＞

(1)　要素「注文番号」「単位」のマップ式

(2)　構造「明細」のマップ式

(3)　構造「明細」の子コンポーネントのマップ式

(4)　構造「分納」の子コンポーネントのマップ式

(5)　要素「注文日」のマップ式

(6)　要素「注文総額」のマップ式

(1)　要素「注文番号」「単位」のマップ式

入力フォーマットの「注文番号」を出力フォーマットの「注文番号」にドラッグ＆ドロップし，代入のマップ式を記述します。

マップ式を次に示します。

= LT2@MSG2@S注文番号@注文番号 ;

要素「単位」も要素「注文番号」と同様に代入のマップ式を記述します。

(2)　構造「明細」のマップ式

マップ式は，構造に対しても記述できます。構造に対するマップ式は，入力側と出力側それぞれの出現順序の関係を対応付けます。要素のマップ式と同様に，入力側の構造を出力側の構造へドラッグ＆ドロップして記述できます。複数回出現する構造には，複数回出現する要素のマップ式の記述と同様に，INDEX関数を使用したマップ式を記述します。

構造「明細」のマップ式を記述します。出力側の構造「明細」は，入力側の構造「明細」とマッピングします。

出力側の構造「明細」を選択し，入力側の構造「明細」をドラッグ＆ドロップします
マップ式を次に示します。

= LT2@MSG2@明細[INDEX(  )] ;

構造「明細」は，複数回出現するので，INDEX関数を使用します。出力側の構造「明細」自身を指定したいので，引数には自コンポーネントを表す「0」を指定します。

INDEX関数の括弧内に引数として「0」を記述します
これで入力側の構造「明細」と出力側の構造「明細」が対応付けられました。

(3)　構造「明細」の子コンポーネントのマップ式

構造「明細」の子コンポーネントのマップ式を記述します。

親の構造「明細」のマップ式で入出力の関係が定義されているので，子コンポーネントの式には構造「明細」のマップ式を引き継ぐ形のマップ式を記述します。

まず，要素「単価」は，入力側の構造「明細」の子コンポーネント「単価」を代入するので「入力側の単価要素を代入する」という意味の式を記述します。

出力フォーマットの「単価」を選択します
入力側の「単価」を選択して，出力側の「単価」へドラッグ＆ドロップします。
この場合のマップ式を次に示します。

= $@S単価@単価 ;

「$」は親コンポーネントの構造で定義してあるマップ式を引き継ぐための記述法です。ここでは，親コンポーネントの構造「明細」は，入力側の構造「明細」と対応付けられています。したがって，マップ式は，入力側の構造「明細」の孫コンポーネント「単価」の値を代入する，という意味になります。既に親コンポーネントの構造同士でインデクスが対応付けられているので，ここではインデクスについて記述する必要はありません。
なお，ドラッグ＆ドロップで親コンポーネントのマップ式を引き継ぐ場合，親（先祖）のコンポーネントのマップ式が正しく記述されている必要があります。親（先祖）のコンポーネントのマップ式が記述されていない，又は誤りがある場合は，$を使用して引き継ぐ形のマップ式は記述しません。

「単価」と同様に，要素「個数」「金額」，構造「分納」も親コンポーネントのマップ式を引き継ぐマップ式を記述します
構造「分納」は複数回出現するので，INDEX関数を使用してインデクスを対応付けます。

= $@分納[INDEX(0)] ;

引数には自コンポーネントを表す「0」を指定します。

(4)　構造「分納」の子コンポーネントのマップ式

分納構造の子コンポーネント「納入数」「納入番号」は「$」を使用して，親コンポーネントの構造「分納」のマップ式を引き継ぐ形式のマップ式を記述します。

= $@S納入数@納入数;

(5)　要素「注文日」のマップ式

要素「注文日」は，「4.2　簡単なマッピング例」での例と同様に，データ変換時の日付を出力するようにしたいので，CURRENTDATE関数のマップ式を記述します。

= CURRENTDATE();

(6)　要素「注文総額」のマップ式

要素「注文総額」は，出力した構造「明細」の「金額」の合計を出力する要素です。したがって，出力した構造「明細」の「金額」の合計を計算するマップ式を記述します。ここでは関数を使用します。

出力側の「注文金額」を選択します

［関数］ボタンをクリックして［関数］ダイアログを表示します

一覧から，要素の合計値を計算するSUM関数を選択します
マップ式を次に示します。

= SUM(  ) ;

SUM関数の引数として，合計値を計算する要素のグローバル名を記述します
ここでは，出力側の「金額」の合計を計算するので，引数に「FIX2@MSG2@明細[*]@金額」と記述します。インデクス「*」は，すべての構造の出現を意味する記述法です。ここでは，すべての構造「明細」の出現を意味します。つまり，明細[1]，明細[2]及び明細[3]の「金額」をすべて合計する，という意味になります。なお，インデクス「*」は，SUM関数などの特定の関数の引数だけで使用できる略記法です。
「注文総額」のマップ式を次に示します。

= SUM( FIX2@MSG2@明細[*]@金額 ) ;

また，要素「金額」は3回しか現れないので，四則演算でマップ式を記述してもかまいません。四則演算を使用した要素「金額」マップ式を次に示します。

= FIX2@MSG2@明細[1]@金額 + FIX2@MSG2@明細[2]@金額 + FIX2@MSG2@明細[3]@金額 ;

SUM関数のマップ式と同じ結果が得られます。
以上で，レングスタグ形式のフォーマット「LT2」と，固定長形式のフォーマット「FIX2」のマッピングが定義できました。
各コンポーネントのマップ式を表4-4に示します。

表4-4　各コンポーネントのマップ式（構造を含んだマッピング例）

構造／要素 | マップ式
注文番号 | = LT2@MSG2@S注文番号@注文番号;
単位 | = LT2@MSG2@S単位@単位 ;
明細 | = LT2@MSG2@明細[INDEX(0)] ;
| 単価 | = $@S単価@単価 ;
個数 | = $@S個数@個数 ;
金額 | = $@S金額@金額 ;
分納 | = $@分納[INDEX(0)] ;
| 納入数 | = $@S納入数@納入数 ;
納入番号 | = $@S納入番号@納入番号 ;
注文日 | = CURRENTDATE() ;
注文総額 | = SUM(FIX2@MSG2@明細[*]@金額) ;

4.3.2　レングスタグフォーマットへのマッピング

ここでは，固定長形式のフォーマットからレングスタグ形式のフォーマットへのマッピングについて説明します。

固定長形式のフォーマットとして「FIX1」，レングスタグ形式のフォーマットとして「LT1」を使用します。データの構造を図4-12に示します。

図4-12　フォーマット「FIX1」「LT1」のデータの構造

レングスタグ形式の構造は，要素サイズを表す要素（ここでは要素「LEN」）があります。要素「LEN」には，直接対応する要素が入力側にありません。入力データの形式が固定長の場合は，入力側の要素のサイズは決まっているので，レングスタグのサイズを表す要素に対して，固定値を代入することでマップ式を定義できます。

しかし，注意点として，入力側の要素のデータから不要なスペースなどを削除してデータを出力する場合は，データの内容によって出力される要素のサイズが異なってしまいます。また，入力側の要素が可変長の場合も同様の問題が発生します。

この対策として，レングスタグ構造の要素サイズを表す要素には，実際に出力要素として代入された要素のサイズを代入するマップ式を記述する必要があります。ここでは，マップ式の評価を遅延（待機）させる指定「%delay」とコンポーネントのサイズを計算する関数「LENGTH」を使用します。

＜この項の構成＞

(1)　評価順序を遅延（待機）させるマップ式

(2)　代入のマップ式

(3)　%delayのマップ式

(1)　評価順序を遅延（待機）させるマップ式

普通，マップ式は出力側の要素の出現順に評価されます。また，前提として，マップ式が評価される時点では，式中に現れるすべてのコンポーネントの値が決まっていなければいけません。この場合，式に記述するコンポーネントが入力側の要素であれば問題ありませんが，レングスタグ構造では出力側の要素を指定する必要があります。

例えば，要素「LEN」に対する式を評価する時点では，まだ要素「DATA」の値は決まっていないため，単純にマップ式中に要素「DATA」を記述すると，式の評価結果はエラーになってしまいます。

要素「DATA」の値が決まるまで，要素「LEN」のマップ式評価を待機させる必要があります。このために，評価順序を遅延（待機）させる「%delay」を利用します。評価順序遅延指定には次の2種類があります。

自コンポーネントの次のコンポーネントが評価されるまでマップ式の評価を待機させる指定（%delay %next）。

n階層上の親の子コンポーネントがすべて評価されるまでマップ式の評価を待機させる指定（%delay n）。%delayを指定するコンポーネントの位置を起点として，階層数を指定します。INDEX関数のときと同様「0」は自コンポーネントを表し，「n」はn階層分，上位に位置するコンポーネントを表します。

要素「LEN」の次のコンポーネントである「DATA」が評価されるまで，要素「LEN」のマップ式評価を遅延（待機）させるには，「%delay %next」を指定します。同時に，LENGTH関数を使用してサイズを計算します。LENGTH関数は，引数で指定されたコンポーネントのサイズを計算する関数です。レングスタグ構造の下の要素で，実際の値を持つ要素を指定します。ここでは，実際の値を持つ要素として「DATA」を指定します。

要素「LEN」に対するマップ式を次に示します。

%delay %next =LENGTH(OUT@ROOT@LENGTHTAG@DATA);

要素「DATA」のサイズが計算されるまで，要素「LEN」のマップ式定義を遅延させる，という指定になります。

評価順序遅延指定は，同じ親コンポーネントを持つ兄弟コンポーネントの中で複数指定できません。また，評価順序遅延指定に誤りがあると，重大なエラーの原因となるおそれがあるので注意してください。

(2)　代入のマップ式

レングスタグ構造の実際のデータを持つ要素は，対応する入力側のコンポーネントをドラッグ＆ドロップし，代入のマップ式を記述します。構造「S注文番号」の子コンポーネント「注文番号」のマップ式を次に示します。

= FIX1@MSG1@注文番号;

また，複数回出現する構造の子コンポーネントの場合は，INDEX関数を使用した代入のマップ式を記述します。構造「S単価」の子コンポーネント「単価」は3回出現するコンポーネントですが，複数回出現は親コンポーネントに定義されています。

したがって，コンポーネント「S単価」のインデクスを取り出して，出現順序を対応付ける必要があります。INDEX関数の引数に，出力側のコンポーネント「単価」の1階層上のコンポーネントを表す「1」を記述し「S単価」を指定します。この場合のマップ式を次に示します。

= FIX1@MSG1@単価[INDEX(1)] ;

(3)　%delayのマップ式

次に，要素「LEN」マップ式を記述します。

ここでは，構造「S注文番号」の子コンポーネント「LEN」のマップ式を記述します。「LEN」は次のコンポーネント「注文番号」の値を代入するので，「注文番号」の値が決まるまでマップ式評価を遅延させる必要があります。

そこで，評価順序を遅延させる「%delay」を指定します。

構造「S注文番号」の子コンポーネント「LEN」を選択します
マップビューに式を記述します。

マップ式に評価遅延指定「%delay %next」を記述します
「%delay %next」はテキストに直接記述するか又は［特殊記号］ダイアログで選択してマップ式に挿入します。

マップ式にLENGTH関数を記述します
テキストに直接記述するか又は［関数］ダイアログで選択してマップ式に挿入します。マップ式を次に示します。

%delay %next = LENGTH(  ) ;

LENGTH関数の引数として，括弧内に実際の値を持つ要素を指定します
構造「S注文番号」の子コンポーネント「注文番号」を指定します。

出力側の「注文番号」をマップ式の括弧内にドラッグ＆ドロップします

すると，次のマップ式が表示されます。

%delay %next = LENGTH(LT1@MSG1@S注文番号@注文番号 ) ;

また，複数出現する構造の子コンポーネントのマップ式定義では，INDEX関数を使用します。構造「S単価」の子コンポーネント「LEN」のマップ式を次に示します。

%delay %next = LENGTH( LT1@MSG1@S単価[INDEX(1)]@単価 ) ;

INDEX関数の引数には，構造「S単価」を指定したいので，1階層上のコンポーネントを表す「1」を指定します。
また，略記法を用いると，構造「S単価」の子コンポーネント「LEN」のマップ式は次のようになります。

%delay %next = LENGTH( ¥1@単価 ) ;

「¥n」はn階層上の親の構造を表すので，この場合「¥1」は「注文番号」の親構造「S注文番号」になります。

以上で，固定長形式のフォーマット「FIX1」とレングスタグ形式のフォーマット「LT1」のマップ式が定義できました。

各コンポーネントのマップ式を表4-5に示します。

表4-5　各コンポーネントのマップ式（レングスタグフォーマットへのマッピング例）

構造／要素 | マップ式
S注文番号 | LEN | %delay %next | = LENGTH(¥1@注文番号);
注文番号 |  | = FIX1@MSG1@注文番号;
S単位 | LEN | %delay %next | = LENGTH(¥1@単位);
単位 |  | = FIX1@MSG1@単位;
S単価 [3] | LEN | %delay %next | = LENGTH(¥1@単価);
単価 |  | = FIX1@MSG1@単価[INDEX(1)];
S個数 [3] | LEN | %delay %next | = LENGTH(¥1@個数);
個数 |  | = FIX1@MSG1@個数[INDEX(1)];
S金額 [3] | LEN | %delay %next | = LENGTH(¥1@金額);
金額 |  | = FIX1@MSG1@金額[INDEX(1)];
S注文日 | LEN | %delay %next | = LENGTH(¥1@注文日);
注文日 |  | = FIX1@MSG1@注文日;
S品名 | LEN | %delay %next | = LENGTH(¥1@品名);
品名 |  | = FIX1@MSG1@品名;

4.3.3　値を持つ要素のマッピング

ここでは，データの要素の値によって，出力先の要素の値を変えてマッピングする方法について説明します。

これまでの例では，値を持つ要素「単位」は，入力側の要素「単位」を出力側の要素「単位」にそのまま代入するマップ式を定義しました。ここでは，メッセージの要素「単位」の値によって，出力先のメッセージの要素「単位」の値に変えてマッピングする例について説明します。固定長形式のフォーマット「FIX2」からセパレータ形式のフォーマット「SEPA2」へマッピングします。データの構造を図4-13に示します。

図4-13　フォーマット「FIX2」「SEPA2」のデータの構造

固定長形式のフォーマット「FIX2」及びセパレータ形式のフォーマット「SEPA2」の要素「単位」は，値とその意味はすべて同じです。値とその意味を次に示します。

値「PC」，意味「個」

値「KG」，意味「キログラム」

値「M」，意味「メートル」

要素の値同士を対応付けるには，値をマッピングします。

入力側及び出力側のコンポーネント「単位」を選択します

［ツール］－［マップ式］－［値マッピング］を選択します
「単位」は値を定義した要素なので，［値マッピング］ダイアログが表示されます。

図4-14　［値マッピング］ダイアログ

要素に定義した値が一覧表示されます。このダイアログで，入力要素のどの値を出力要素のどの値として出力するかを対応付けます。
この例ではまず，値「PC」をマッピングします。

入力側の値「PC」と出力側の値「PC」を選択し，［＜＜］ボタンをクリックします
値を選択する場合は「#」欄でインデクスを選択します。

入力側の一覧の出力値欄にマッピングしたことを示すインデクスが表示されます。このインデクス番号は，出力側の値のインデクスを表しています。この欄にインデクス番号が表示されていない値は，出力側の値がマッピングされていないことになります。
ここでは，出力側のインデクス1の値「PC」をマッピングしたので，入力側の値「PC」の出力値欄には，インデクス「1」が表示されます。
同様に，入力側の値「KG」と出力側の値「KG」，入力側の値「M」と出力側の値「M」をマッピングします。
値のマッピングは，入力側の値すべてがマッピングされていないとエラーになるので，必ず各値をマッピングしてください。また，この例では値の内容が一致しているため，同じ値同士をマッピングしましたが，異なる値同士でもマッピングできます。ただし，複数の入力要素の値は一つの出力要素の値へマッピングできても，一つの入力要素の値を複数の出力要素の値へマッピングできません。また，入力側又は出力側のどちらかの値をダブルクリックすると，相手側の対応する値が選択されます。

値のマッピングが済んだら，［OK］ボタンをクリックします
［値マッピング］ダイアログが閉じると，マップビューには値のマッピング結果が表示されます。

= VALUEMAP(FIX2@MSG2@単位,#,1,1,2,2,3,3);

VALUEMAP関数は，要素の値同士をマッピングする関数です。VALUEMAP関数の引数について説明します。

第1引数
入力側の要素名

第2引数
出力側の要素名（通常はマップ式を定義した自コンポーネント「#」を表します）

第3引数以降
入力値と出力値のインデクスを対応する組ごとに記述したもの

以上で値同士のマッピングが定義できました。

4.3.4　条件式とNULLを使用したマッピング

ここでは，コンポーネントに対する条件を定義する条件式を使用したマップ式の記述について説明します。値のマッピングと同様，この例でも固定長形式のフォーマット「FIX2」とセパレータ形式のフォーマット「SEPA2」をマッピングします。データの構造を図4-15に示します。

図4-15　フォーマット「FIX2」「SEPA2」のデータの構造

この例では，構造「分納」の子コンポーネント「納入数」に次の二つの規則があると想定して，マップ式を記述します。

要素「個数」の値が50を超える値nの場合は，1番目の「納入数」の値は50，2番目の「納入数」の値はnから50を減算した残りとする

「個数」の値が50以内の場合は，構造「分納」は1番目だけ出力する

この規則では，1番目の要素「納入数」の値は最大50であり，要素「個数」の値でもあります。2番目の要素「納入数」は，1番目の要素の残りを値として出力するか又は出力されません。以上の規則に従って，マップ式を記述します。

まず，「個数」の値によって2番目の「分納」を出力するかしないかを，「分納」に対してマップ式で記述します。ここでは，IF関数を使用して条件式を記述します。IF関数には引数が三つあります。IF関数の引数に記述する内容について次に説明します。

第1引数＝条件式

第2引数＝条件式が真のときに実行される式や代入される値

第3引数＝条件式が偽のときに実行される式や代入される値

「分納」に対するマップ式を次に示します。

= IF((INDEX(0) == 1 | ¥2@個数 > 50), $, NULL);

「¥n」は式を定義するコンポーネントからn階層上のコンポーネントを表すので，「¥2」は「分納」から2階層上のコンポーネント，つまり出現中の「明細」を示します。「$」は親コンポーネントのマップ式を引き継ぐための指定で，ここではコンポーネントの出力を意味します。「NULL」はコンポーネントを出力しない指定です。

「分納」の出現番号と構造「明細」の子コンポーネント「個数」の値を条件とし，「分納」を出力するかしないかを定義しています。

次に，「納入数」に対するマップ式を示します。

= IF (INDEX(1) == 1, IF(¥3@個数 > 50, 50, ¥3@個数), ¥3@個数 - 50);

上記マップ式では，IF関数を二つ使用しています。「¥3」は「納入数」から3階層上のコンポーネント，つまり出現中の「明細」を示します。

「分納」の出現番号と「個数」の値を条件とし，「納入数」の値を定義しています。

次に，「納入番号」に対するマップ式を次に示します。

= IF(INDEX(1) == 1, "FIRST  ", "SECOND ");

「FIRST」及び「SECOND」は，出現番号を表すために仮に使用した文字列です。

「分納」の出現番号を条件とし，何番目の「納入数」に対応する納入番号として出力するかを定義しています。

以上で，条件式にNULLを使用したマップ式が定義できました。なお，親のマップ式を引き継ぐ記述法「$」をマップ式で使用する場合は，親階層以上のコンポーネントにマップ式を定義しておく必要があります。また，必ず出現しなければならないコンポーネントに対して「NULL」のマップ式を記述すると，データを変換するときにエラーとなるので注意してください。

各コンポーネントのマップ式を表4-6に示します。

表4-6　各コンポーネントのマップ式（条件式とNULLを使用したマッピング例）

構造／要素 | マップ式
MH | 注文番号 | = FIX2@MSG2@注文番号;
単位 | = VALUEMAP( FIX2@MSG2@単位, #, 1, 1, 2, 2, 3, 3 ) ;
明細 | = FIX2@MSG2@明細[INDEX(0)];
| 単価 | = $@単価;
個数 | = $@個数;
金額 | = $@金額;
S分納 | なし
| 分納 | = IF((INDEX(0) == 1 | ¥2@個数 > 50), $, NULL);
| 納入数 | = IF (INDEX(1) == 1, IF(¥3@個数 > 50, 50, ¥3@個数), ¥3@個数 - 50);
納入番号 | = IF(INDEX(1) == 1, "FIRST ", "SECOND ");
MT | 注文日 | =CURRENTDATE( );
注文総額 | =SUM(SEPA2@MSG2@明細[*]@金額);

4.3.5　選択構造を持つフォーマットのマッピング

3章のフォーマット定義例で作成したフォーマット「FIX」「LT」「SEPA」は，2種類のメッセージを選択構造の下に配置し，ヘッダ部の値によってメッセージが選択できるようにしました。フォーマット「FIX」「LT」「SEPA」のような選択構造の場合，特別な指定は必要ありません。しかし，メッセージ数が多く，直接メッセージを選択できる条件がない場合，トランスレータは，選択構造の子コンポーネントに対して，データと適合するかどうかを順番に調べていきます。このため，メッセージ数が増えるほど，変換の効率が悪くなります。

そこで，あらかじめ入出力データとして現れないメッセージが分かれば，MDLエディタで「このメッセージ構造は出現しない」を指定できます。この指定をすると，FDLファイルで定義されていたメッセージ構造は，MDLファイル上では定義されていないものとして扱われます。したがって，データと適合しないメッセージを調べる必要がなくなり，トランスレータの処理速度が向上します。

フォーマット「FIX」を使用し，メッセージの未使用の定義について説明します。ここでは，メッセージ「MSG1」に対して未使用の定義をします。

メッセージ「MSG1」の［コンポーネントのプロパティ］ダイアログで，「このコンポーネントを使用しない」を選択します。これで未使用の定義が完成しました。

4.4　XMLデータのマッピング例

この節では，XML形式のフォーマットのMDLファイルを定義する方法について説明します。

ここでは，可変長形式のフォーマットから，XML形式のフォーマットへマッピングする例を使用します。

可変長形式のフォーマットとして「RLOCAL」，XML形式のフォーマットとして「RXML」を使用します。「RLOCAL」と「RXML」のデータ構造を次に示します。

図4-16　フォーマット「RLOCAL」「RXML」のデータ構造

挿入するフォーマットの読み込み方法については，「4.2.1　フォーマットの挿入」を参照してください。

次に，出力フォーマット「RXML」の読み込み方法について説明します。

出力フォーマットビューを選択し，［挿入］－［DTDフォーマット］を選択します
［DTDフォーマット挿入：出力］ダイアログが表示されます。なお，Windowsエクスプローラを開き，挿入したいDTDファイルをフォーマットビューにドラッグ&ドロップして挿入することもできます。

図4-17　［DTDフォーマット挿入：出力］ダイアログ

出力側のフォーマットのDTDファイル名，フォーマット名，ルート要素名，出力データのファイル名を指定するダイアログです。

出力側のフォーマットのDTDファイル名を指定します
DTDファイル名は直接入力できますが，［参照］ボタンをクリックすると，DTDファイルを参照して指定できます。
ここでは，出力フォーマットに「ryohi.dtd」を指定します。

フォーマット名を指定します
フォーマット名は，DTDファイル名を指定すると，自動的に生成されます。ここで，任意の名称に変更できます。

ルート要素名を指定します
DTDファイル中にルートが一つの場合は，ルート要素名が自動的に挿入されます。ルートが複数ある場合は，DTDファイルを指定したときに表示されるか，［選択］ボタンを押して表示される［ルート要素選択］ダイアログから，ルート要素名を選択してください。

出力データファイル名を指定します
出力データファイル名は，データを変換するときのコマンドの引数で指定できるので，このダイアログでは未指定でもかまいません。なお，出力データに入力データと同じファイル名を指定するとエラーになるので，異なるファイル名を指定してください。
次に，出力するXML文書の書式を指定します。

［DTDフォーマット挿入：出力］ダイアログの［詳細］ボタンを押します
［フォーマットの詳細］ダイアログが表示されます。

図4-18　［フォーマットの詳細］ダイアログ

ここでは，次のように指定します。

出力文字コード：Shift-JIS

DOCTYPE宣言を出力する

タグの後に改行を入れる

インデント：タブ

追加する処理命令又はコメント：これはXMLデータの国内旅費精算です。※
注※　この項目は，テキストで記述しますが，XML 1.0の規則に従って，記述してください。

次のように［フォーマットの詳細］ダイアログを表示する方法もあります。

出力フォーマットを選択した状態で，［ツール］－［プロパティ］－［フォーマット］を選択する
［フォーマットのプロパティ］ダイアログが表示されます。

［フォーマットのプロパティ］ダイアログの［詳細］ボタンを押す※
［フォーマットのプロパティ］ダイアログが表示されます。
注※　入力フォーマットを選択していた場合は，［詳細］ボタンは非活性となります。DTDフォーマットの詳細は，出力フォーマットに対してだけ有効です。

［フォーマットの詳細］ダイアログの［OK］ボタンをクリックします
［フォーマットの詳細］ダイアログが閉じて，［DTDフォーマット挿入：出力］ダイアログに戻ります。

［DTDフォーマット挿入：出力］ダイアログで［OK］ボタンをクリックします
出力フォーマットビューに，選択したフォーマットが挿入されます。

指定したDTDフォーマットに再帰構造が含まれている場合は，［展開ネスト数指定］ダイアログが表示されるので，再帰構造の展開ネスト数を指定してください。
次に，入力側と出力側のコンポーネントを対応付け，出力側のコンポーネントに対してマップ式を定義します。

＜この節の構成＞

4.4.1　マップ式の定義（XMLデータの場合）

4.4.2　変換の結果（XMLデータの場合）

4.4.1　マップ式の定義（XMLデータの場合）

XML要素に加え，XML属性もコンポーネントとして扱われます。通常の型コンポーネントと同様に，ドラッグ＆ドロップでマップ式を定義して出力する値を決めたり，入力されたXML属性の値を通常の型コンポーネントの値としてマッピングしたりできます。

マッピングの操作方法については，「4.2.2　マップ式の定義」を参照してください。また，MDLファイルの検証と保存方法については，「4.2.3　MDLの検証」及び「4.2.4　MDLファイルの保存」を参照してください。

XMLデータのマッピング例の各コンポーネントのマップ式を次に示します。

表4-7　各コンポーネントのマップ式（XMLデータの場合）

要素 | マップ式
国内旅費精算 | －
精算番号 | = RLOCAL@国内旅費精算@人員データ@精算番号;
部名 | = RLOCAL@国内旅費精算@人員データ@部名;
課名 | = RLOCAL@国内旅費精算@人員データ@課名;
氏名コード | = RLOCAL@国内旅費精算@人員データ@氏名コード;
氏名 | = RLOCAL@国内旅費精算@人員データ@氏名;
勤務地 | = RLOCAL@国内旅費精算@人員データ@勤務地;
旅費区分 | = RLOCAL@国内旅費精算@人員データ@旅費区分;
振先 | －
振区 | = RLOCAL@国内旅費精算@人員データ@振区;
振替NO | = RLOCAL@国内旅費精算@人員データ@振替NO;
出張リスト | －
出張 [1:] | = RLOCAL@国内旅費精算@出張[INDEX(0)];
区分 | = $@出張区分;
年月日 | = $@年月日;
時間 | －
開始時間 | = $@開始時間;
終了時間 | = $@終了時間;
行先 | = $@行先;
地区名 | = $@地区名;
用件 | = $@用件;
明細 | －
電車 | = $@明細@電車;
バス | = $@明細@バス;
タクシー | = $@明細@タクシー;
日当 | = $@明細@日当;
合計 | = $@明細@合計;
備考 | = $@備考;

（凡例）

－：該当しません。

4.4.2　変換の結果（XMLデータの場合）

XMLデータのマッピング例に従って変換した結果を次に示します。

図4-19　変換の結果

4.5　MDLファイル作成時の注意事項

この節では，MDLファイルを作成するときの注意事項について説明します。

＜この節の構成＞

(1)　フォーマット挿入時の検証

(2)　マップ式

(3)　グループ単位出力指定

(4)　FDLファイルを変更した場合

(5)　MDLエディタでの追加・変更

(1)　フォーマット挿入時の検証

新規にフォーマットを挿入する場合，セパレータが正しく設定されているかなどが自動的に検証されます。この検証でエラーが発生した場合は，FDLエディタでエラーを修正後，再度フォーマットを挿入してください。

(2)　マップ式

出力側のコンポーネントに対しては，マップ式を記述する必要があります。構造を表すコンポーネントに対しては，要素を代入するマップ式は記述できません。

(a)　定義方法

マップ式は上位の構造から順番に記述するようにしてください。また，子コンポーネントは，親コンポーネントのマップ式を引き継ぐための記述法「$」を使用して記述するようにしてください。

まず，入出力フォーマット間の最上位の構造同士を対応付けるマップ式を記述します。次に，その子コンポーネント間で対応するもの同士の式に，先頭に「$」を付けて，親コンポーネントのマップ式を引き継ぐ形にします。同様に，子コンポーネントに対しては親コンポーネントのマップ式を引き継ぐ形式で記述していってください。

(b)　省略できるコンポーネントのマップ式

親構造の最小出現回数に0が指定されていて省略できる場合，その構造にマップ式が記述されていなかったときは，子コンポーネントにマップ式が記述されていても出力されません。構造全体が省略できる場合に，その構造の内容を出力したいときは，構造のコンポーネントにマップ式を記述してください。

(c)　出現回数が不定のコンポーネントのマップ式

出現回数が不定のコンポーネントに対してもマップ式を記述する必要があります。マップ式を記述する対象が無限に出現できるコンポーネントの場合，INDEX関数を使用し，入力側の構造コンポーネントとの対応を表すマップ式を記述する必要があります。

(d)　評価を遅延させるマップ式

マップ式を評価する時点で，マップ式の中に値が決まっていないコンポーネントが含まれている場合は，式の評価結果はエラーになってしまいます。この場合，マップ式に出てくるコンポーネントの値が決まるまで，マップ式の評価を遅延させる「%delay」を指定したマップ式を記述する必要があります。

(e)　EMPTY要素のマップ式

DTDフォーマットのEMPTY要素に対するマップ式は，この要素が1回だけ出現する場合には必要ありません。省略できない，可変回出現する要素の場合は，通常のコンポーネントと同様のマップ式の記述が必要です。

(f)　再帰構造の末端にあるダミー要素のマップ式

DTDフォーマットの再帰構造の末端にあるダミー要素（EMPTY要素）に対しては，マップ式を記述できません。また，再帰構造の末端にあるダミー要素の構造パス名を，ほかのコンポーネントのマップ式に記述できません。

(3)　グループ単位出力指定

一度に変換する入力データのサイズが大規模な場合，意味のあるデータの1単位ごとに出力するよう指定（グループ単位出力指定）できます。グループ単位出力指定がない場合，変換に必要な空きメモリ容量が不足してしまい，変換できないことがあります。また，空きメモリ容量が足りていても，1か所以上エラーが発生すると変換全体が失敗することになり，変換結果として何も出力されません。

グループ単位出力指定は，入力側と出力側のフォーマットを対応させて，それぞれでグループ単位出力を指定します。上位にある無限の出現回数のコンポーネントが，グループ単位出力指定の設定対象です。なお，グループ単位出力の指定をした場合，グループ1回分の出力データは対応する入力データ1回分の中ですべて決まらなければならないことに注意してください。グループ単位出力指定の詳細については，「6.1.2(1)　グループ単位出力指定」を参照してください。

(4)　FDLファイルを変更した場合

MDLファイル作成後にFDLファイルのフォーマットを変更した場合は，MDLファイルから変更前のフォーマットを削除し，変更後のフォーマットを読み込んでMDLファイルを作成し直す必要があります。

入力側のフォーマットを変更した場合は，記述済のマップ式は保存されているので，コンポーネント名やツリー構造を変更していなければ，そのまま使用できます。しかし，出力側のフォーマットを変更した場合は，既存のマップ式は削除されているので，再マッピングする作業が発生します。

このような場合に，Interschemaで提供するMDLエディタのマージコマンド，又はマージツールを使用すると，出力側のフォーマットを変更した場合でも，既存のマップ式を保持しながらフォーマットの変更内容をMDLに反映するため，再マッピングの作業を最小限に抑えることができます。マージツールについては，「7.　ユティリティ」を参照してください。

(5)　MDLエディタでの追加・変更

次の式や値は，MDLエディタ上で追加・変更できます。

順序決定式

順序決定値

条件式

デフォルト式

サイズ決定式

出現回数決定式

変数式

ただし，FDLエディタ上での定義とは異なり，式や値を直接指定したコンポーネントに対してだけ設定が有効になります。同じ構造やコンポーネントが，別の箇所で使用されている場合，その式や値には反映されません。また，サイズ決定式及び出現回数決定式は，コンポーネントのサイズや出現回数に動的に決定する指定がある場合だけ，編集できます。これらの式が入力コンポーネントの場合は，削除できません。

5.　変換のコマンド

この章では，トランスレータを使用してデータを変換する場合のコマンドについて説明します。

＜この章の構成＞

5.1　システム環境変数の設定（ワークステーションのOSの場合）

5.2　システム環境変数の設定（Windowsの場合）

5.3　システムファイルの設定

5.4　トランスレータでのデータ変換

5.1　システム環境変数の設定（ワークステーションのOSの場合）

ワークステーションのOSでInterschemaを使用するには，次のシステム環境変数を設定しておく必要があります。

INTERSCHEMA：インストールディレクトリの設定

SHLIB_PATH（HP-UXの場合），LIBPATH（AIXの場合），LD_LIBRARY_PATH（Solarisの場合）：共用ライブラリ検索パスの設定

LANG：ロケールの設定

また，データ変換処理API（Java言語）を使用する場合は，次のシステム環境変数を設定しておく必要があります。

CLASSPATH：クラスパスの設定

＜この節の構成＞

5.1.1　インストールディレクトリの設定

5.1.2　共用ライブラリ検索パスの設定

5.1.3　ロケールの設定

5.1.4　クラスパスの設定（ワークステーションのOSの場合）

5.1.1　インストールディレクトリの設定

Interschemaのインストールディレクトリは「/opt/hitachi/interschema」です。インストール後にディレクトリを変更する場合は，環境変数「INTERSCHEMA」を使用して設定します。

（例）csh（Cシェル）で，環境変数「INTERSCHEMA」にディレクトリ「/users/interschema」を設定する

setenv INTERSCHEMA /users/interschema

環境変数「INTERSCHEMA」を設定していない場合は，「/opt/hitachi/interschema」が仮定されます。

5.1.2　共用ライブラリ検索パスの設定

Interschemaの共用ライブラリ検索パスを設定します。OSごとの環境変数名を次に示します。

表5-1　共用ライブラリ検索パスの環境変数名

OS | 環境変数名
HP-UX | SHLIB_PATH
AIX | LIBPATH
Solaris | LD_LIBRARY_PATH

（例）OSがHP-UXの場合，csh（Cシェル）で，環境変数「SHLIB_PATH」にディレクトリ「/opt/hitachi/interschema/lib」を設定する

setenv SHLIB_PATH /opt/hitachi/interschema/lib

5.1.3　ロケールの設定

Interschemaのシステム環境で使用するロケールを設定します。設定例を次に示します。

（例）csh（Cシェル）で，文字コードにシフトJISを設定する

setenv LANG ja_JP.SJIS

環境変数「 LANG」に設定できる値について説明します。

次に示す場合の文字コードは，OSのロケールに対応した文字コードになります。

コマンドラインから入力する引数

APIの各関数をコールするときの引数

ログファイルに出力されるメッセージ

システム情報ファイルの内容

ただし，MDLファイル内のフォーマット名やコンポート名には，OSのロケール種別にかかわらずシフトJISコードが使用されます。サポート対象外のロケール種別が指定された場合，ロケール種別は「C」（英語）になります。

Interschemaがサポートするロケールは，シフトJIS，日本語EUC，及びC（英語）です。

ロケールと文字コードの対応関係を次に示します。

表5-2　ロケールと文字コードの対応関係

OS | ロケール | 文字コード
HP-UX | ja_JP.SJIS | シフトJIS
ja_JP.eucJP | 日本語EUC
C | C（英語）
AIX | Ja_JP | シフトJIS
ja_JP | 日本語EUC
C | C（英語）
Solaris | ja_JP.PCK | シフトJIS
ja | 日本語EUC
C | C（英語）

データ変換処理API（C言語）を使用してプログラムを作成する場合，環境変数「LANG」の設定を有効にするには，main関数の冒頭でsetlocale(LC_CTYPE,“”);又はsetlocale(LC_ALL, “”);を実行して，プログラムのロケールを環境変数に合わせる必要があります。setlocaleを実行しない場合のロケールは，「C」（英語）になります。データ変換処理API（C言語）の呼び出しの前にロケールを設定している場合は，そのロケールに従います。ただし，表5-2に示したロケール以外の無効なロケールが設定されている場合は，「C」（英語）が仮定されます。

5.1.4　クラスパスの設定（ワークステーションのOSの場合）

Java言語のデータ変換処理APIを使用する場合，環境変数「CLASSPATH」に，Jarファイル「ETtransJ2.jar」のパスを設定する必要があります。設定例を次に示します。

（例）csh（Cシェル）で，環境変数「CLASSPATH」に，「/opt/hitachi/interschema/classes/」に格納されている「ETtransJ2.jar」を設定する

setenv CLASSPATH /opt/hitachi/interschema/classes/ETtransJ2.jar

5.2　システム環境変数の設定（Windowsの場合）

WindowsでInterschemaを使用する場合，データ変換処理API（Java言語）を使用するためには，次のシステム環境変数を設定する必要があります。

CLASSPATH：クラスパスの設定

PATH：ライブラリ検索パスの設定

＜この節の構成＞

5.2.1　クラスパスの設定（Windowsの場合）

5.2.2　ライブラリ検索パスの設定

5.2.1　クラスパスの設定（Windowsの場合）

環境変数「CLASSPATH」に，Jarファイル「ETtransJ2.jar」のパスを設定します。設定例を次に示します。

（例）環境変数「CLASSPATH」に，

「C:¥Program Files¥HITACHI¥Interschema2¥classes」に格納されている「ETtransJ2.jar」を設定する（1行で記述します）

set CLASSPATH=C:¥Program Files¥HITACHI¥Interschema2¥classes¥ETtransJ2.jar

5.2.2　ライブラリ検索パスの設定

環境変数「PATH」に，Interschemaが提供するライブラリの検索パスを設定します。設定例を次に示します。

（例）環境変数「PATH」に，「C:¥Program Files¥HITACHI¥Interschema2¥bin」を設定する

set PATH=C:¥Program Files¥HITACHI¥Interschema2¥bin

5.3　システムファイルの設定

Interschemaが使用するシステムファイルは，次の三つです。

システム情報ファイル「ettrans.ini」

CIIデータタグファイル「etciitag.ini」

EIAJハッシュ用ファイル「ethash.ini」

システムファイルを設定するには，トランスレータをインストールした後に，各システムファイルをテキストエディタなどで開いて設定してください。各システムファイルは，次のディレクトリ下に格納されています。

Interschemaのインストールディレクトリ/bin

次に，システムファイルごとに設定内容及び設定方法について説明します。

＜この節の構成＞

(1)　システム情報ファイル「ettrans.ini」の設定

(2)　CIIデータタグファイル「etciitag.ini」の設定

(3)　EIAJハッシュ用ファイル「ethash.ini」の設定

(1)　システム情報ファイル「ettrans.ini」の設定

システム情報ファイル「ettrans.ini」には，Interschemaの動作条件などを設定します。システム情報ファイルの設定内容と設定方法を次に示します。

(a)　ログファイルサイズの変更

Interschemaのログファイルは，データの変換結果の戻り値やエラーメッセージなどのログを出力するファイルです。トランスレータは，指定された最大サイズの範囲内でログをファイルへ追加して出力します。ログファイルが最大サイズを超えた場合，古いログ情報から削除します。ログファイルの最大サイズは，システム情報ファイルで変更できます。

システム情報ファイルの記述形式について説明します。

ログファイルの最大サイズの変更は，[Log]セクションに設定します。

Sizeキー
「1」から「10,000」までの範囲で「Size」の値を変更します。単位はキロバイトです。初期値で設定されている最大サイズは，1,000キロバイトです。

システム情報ファイル「ettrans.ini」の記述例を次に示します。

;ettrans.ini

[Log]
Size = 1000
 ・
 ・

(b)　ユーザ組み込み関数の定義

Interschemaが標準で提供している関数以外に，ユーザが独自に定義した関数（ユーザ組み込み関数）を使用するためには，システム情報ファイルにユーザ組み込み関数の情報を定義します。詳細については，「11.3　システム情報ファイル「ettrans.ini」の定義」を参照してください。

(c)　実行時オプションの定義

Interschemaの実行時オプションは，固定的に使用するか使用しないかをあらかじめシステム情報ファイルで定義できます。詳細については，「5.4.3　システム情報ファイル「ettrans.ini」での実行時オプションの定義」を参照してください。

(d)　出力エリアサイズの初期値の指定

APIによるメモリデータの出力変換での，システムが自動的に確保する出力エリアサイズの初期値を指定します。このセクションでの指定は，API引数のアドレスリストでの指定がなかった場合だけ適用されます。アドレスリストとこのセクションにも指定がない場合は，初期値が適用されます。関連するAPIは，ETtrans2Execです。

出力エリアサイズの初期値は，[MemoryData]セクションに設定します。

InitSizeキー
出力エリア初期割り当てサイズ（バイト）
初期値=1,024

IncrementSizeキー
出力エリア割り当て増分サイズ（バイト）
初期値=1,024

システム情報ファイル「ettrans.ini」の記述例を次に示します。

;ettrans.ini
 ・
 ・
[MemoryData]
InitSize = 1024
IncrementSize = 1024

(2)　CIIデータタグファイル「etciitag.ini」の設定

CIIデータタグファイル「etciitag.ini」は，Interschemaの実行時オプション「-CIIT」を指定してCII標準データを出力する場合に使用します。ただし，CII3フォーマットの場合，このファイルは必要ありません。

Interschemaの実行時オプション「-CIIT」を指定してCII標準データを出力する場合，省略の対象となるTFD項目は出力しません。省略の対象となるTFD項目については，「付録G.4(4)　TFD項目の省略」を参照してください。省略の対象となるTFD項目は，項目の属性とデータタグ番号の対応を，CIIデータタグファイルに設定しておく必要があります。なお，トランスレータでは，EIAJのバージョン2H版のメッセージに対応するファイルを提供していますので，2H版のEIAJ標準メッセージと異なるメッセージを変換する場合だけ，TFD項目の設定を変更してください。

CIIデータタグファイルの記述形式について説明します。

項目の属性ごとにデータタグ番号を指定します。

［X］セクション
省略の対象となるX属性のデータタグ番号を指定します。

［K］セクション
省略の対象となるK属性のデータタグ番号を指定します。

［9］セクション
省略の対象となる9属性／N属性／Y属性のデータタグ番号を指定します。

［B］セクション
省略の対象となるB属性のデータタグ番号を指定します。

データタグ番号
セクションごとに10進数でデータタグ番号を指定します。データタグ番号は，1行に1形式だけ指定できます。データタグ番号の指定形式は次の2種類です。

nn

タグ番号「nn」を意味します。

nn-mm

タグ番号「nn，nn+1，…，mm」までを意味します（nn < mm）。

CIIデータタグファイル「etciitag.ini」の記述例を次に示します。

;etciitag.ini

[X]
2
4-10

[K]
260-280

[9]
1
3
11

[B]

(3)　EIAJハッシュ用ファイル「ethash.ini」の設定

EIAJハッシュ用ファイル「ethash.ini」は，EIAJ標準の方式でハッシュトータルチェックをする場合に使用します。ただし，CII3フォーマットの場合，このファイルは必要ありません。

変換するメッセージデータがEIAJ標準に従うと見なす場合は，EIAJ標準の計算方式でハッシュトータルチェックを実施します（詳細については，「付録G.4(3)　ハッシュトータルチェック」を参照してください）。EIAJ標準方式で値をチェックするには，EIAJ標準メッセージで使用する数値属性と小数部桁数の対応を，EIAJハッシュ用ファイルに設定しておく必要があります。なお，トランスレータでは，EIAJのバージョン1D版のメッセージに対応するファイルを提供していますので，1D版のEIAJ標準メッセージと異なるメッセージを変換する場合だけ，設定を変更してください。

EIAJハッシュ用ファイルの記述形式について説明します。

数値属性項目のTFDデータタグ番号と小数部桁数を[EIAJ]セクションに設定します。

［EIAJ］セクション
EIAJ標準メッセージで定義する項目のうち，小数部を含む項目を定義します。
キー名として項目番号（3桁で指定）を指定します。右辺には，項目の小数部桁数を指定します。

EIAJハッシュ用ファイル「ethash.ini」の記述例を次に示します。

;ethash.ini

[EIAJ]
013=3
015=3
 ・
 ・
 ・
190=3

5.4　トランスレータでのデータ変換

データファイルの変換を実行するトランスレータのコマンド「ettrans」について説明します。

＜この節の構成＞

5.4.1　ettransコマンド

5.4.2　ettransコマンドの戻り値

5.4.3　システム情報ファイル「ettrans.ini」での実行時オプションの定義

5.4.1　ettransコマンド

ettransコマンドは，次のディレクトリ下に格納されています。

Interschemaのインストールディレクトリ/bin

＜この項の構成＞

(1)　機能

(2)　形式

(3)　引数

(4)　実行例

(5)　注意事項

(1)　機能

指定されたMDLファイル内の定義内容に従って，入力データを出力データへ変換します。

コマンド名とオプションを逐次，入力指定する形式と，指定したオプションを定義したパラメタファイルを指定する形式があります。

パラメタファイルとは，ettransコマンドの実行時に指定できるオプションを記述したテキストファイルです。トランスレータの引数をパラメタファイルに記述しておけば，定常的に指定するオプションを定義しておけるので，コマンド入力の省力化を図ることができます。

(2)　形式

形式1

ettrans
    MDLファイル名
    [-F {フォーマット名　入力データファイル | 出力データファイル名}...]
    [-FN フォーマット名...]
    [-E ログファイル名]
    [実行時オプション]

形式2

ettrans -file  パラメタファイル名

形式3

ettrans -prop  FDLファイル名 | MDLファイル名

(3)　引数

(a)　形式1で指定できる引数

MDLファイル名

変換したいデータの変換情報を定義したMDLファイルを指定します。

-F

MDLファイル内で定義された入力データ，出力データのファイル名を無視して，引数に指定したファイル名を変換するオプションです。

MDLファイルに定義されていないファイルを変換したい場合，このオプションを指定してください。また，MDLファイル内で入力データ，出力データのファイル名の設定を省略した場合にも，このオプションを指定してください。

フォーマット名

変換対象となるデータファイルに対応するフォーマット名を指定します。MDLファイル内で定義されているフォーマット名を指定してください。

入出力データファイル名

指定したフォーマット名に対応する入力データ又は出力データのファイル名を指定します。

-FN

MDLで定義されたフォーマットのうち，指定したフォーマットのデータだけを変換するオプションです。このオプションを指定した場合，指定されなかったフォーマットは，MDL中にないものとして扱われ，対応するデータは変換されません。

フォーマット名

変換対象となるデータファイルに対応するフォーマット名を指定します。フォーマット名は，MDLファイル内で定義されているフォーマット名を指定してください。

-E ログファイル名

Interschemaのエラー情報などを出力するログファイル名を指定します。この指定を省略した場合は，デフォルトのファイル名「errlog.txt」でログファイルを出力します。ログファイルの格納先は，「Interschemaのインストールディレクトリ/log」下です。ただし，システム情報ファイルの[Option]セクションにログの出力を抑止する設定（NE=1）がある場合，ログファイルは出力されません。ログファイルの出力を抑止する場合は，「5.4.3　システム情報ファイル「ettrans.ini」での実行時オプションの定義」を参照してください。

実行時オプション

複数のオプションを指定する場合は，オプション間をスペースで区切ってください。

実行時オプションを次に示します。

-CIIE 出力ファイル名

CII標準形式の入力データを変換する場合，出力データと同時にCII標準のエラー情報メッセージを出力したいときに指定します。

-CIIR 出力ファイル名

CII標準形式の入力データを変換する場合，CII標準の受信確認メッセージを出力したいときに指定します。出力データと同時に出力されます。

-CIIT

CIIフォーマットのデータを出力する場合，省略の対象となるTFD項目の出力を抑止したいときに指定します。

省略の対象となるTFD項目については，「付録G.4(4)　TFD項目の省略」を参照してください。省略の対象となるTFD項目は，属性とデータタグ番号の対応を，CIIデータタグファイル「etciitag.ini」で設定しておく必要があります。CIIデータタグファイルの設定については，「5.3(2)　CIIデータタグファイル「etciitag.ini」の設定」を参照してください。

CII3フォーマット出力時に指定した場合は，縮小モードで出力できるマルチ明細が，番号なしマルチ明細として出力されます。CII3フォーマットでは，「-CIIT」オプションを指定していなくても，省略できるTFDは常に省略されます。

-CSV

CSVフォーマットのデータを出力する場合，CSVデータ項目をダブルクォーテーション「"」で囲みたいときに指定します。このオプションは，出力するデータがCSVフォーマットの場合だけ有効です。CSVデータ項目と見なされないデータ（バイト列など）は，ダブルクォーテーション「"」で囲まれません。

-DEFMAP

コンポーネントにデフォルト式が設定されていて，コンポーネントのマップ式の評価がエラーになった場合，デフォルト式によって値（デフォルト値）を出力したいときに指定します。デフォルト値が適用される対象項目は次のとおりです。

要素のマップ式の評価がエラーになった場合のその要素

構造のマップ式の評価がエラーになった場合の子コンポーネントすべて

デフォルト値は，該当するコンポーネントの最小出現回数分だけ出力されます。ただし，NULLマップ式を記述した結果，コンポーネントの出現回数が不足する場合はエラーになり，デフォルト値は出力されません。

なお，マップ式の評価結果の代わりにデフォルト式の値が出力されても，ログファイルにメッセージは出力されません。

-DSEPA

セパレータを持つコンポーネントデータ（構造データ）を出力する場合に，不要と見なされるセパレータを出力したくないときに指定します。

不要なセパレータとは，構造コンポーネントの中間区切り文字で，自分自身より後に構造の子コンポーネントデータがないものを指します。

ある構造のセパレータとして，開始文字「SEG」，中間区切り文字（位置は各要素の前）「+」，終了文字「'」が定義されている場合は次のように出力されます。ここで，「e1」及び「e3」は要素データを表します。

-DSEPA指定なし：SEG+e1++e3+++'

-DSEPA指定あり：SEG+e1++e3'

なお，出力対象フォーマットがEDIFACTシンタックスに従う場合，このオプションの指定がなくても不要なセパレータは出力しません。

-DTM

日付，時刻，日付時刻型の各パート値に対して範囲を検証したい場合に指定します。各パート値の範囲は「6.2.4　日付時刻」を参照してください。ただし，ssパート(秒)の小数部については，検証されません。

なお，このオプションで日付，時刻としての正当性は検証されないので注意してください。

-EIAJHASH

出力変換するメッセージデータがEIAJ標準に従うと見なす場合，EIAJ標準の方式でハッシュトータル値を計算したいときに指定します。このオプションは，出力するデータがCII標準又はEIAJ標準に従っている場合だけ有効です。

EIAJ標準に従うと見なす条件は，メッセージグループ・ヘッダ（MGH）のBPID版の値が「1x」（xは任意）となっていることです。EIAJ標準に従ったハッシュトータル値を計算する場合，数値属性と小数部桁数の対応を，EIAJハッシュ用ファイル「ethash.ini」で設定しておく必要があります。EIAJハッシュ用ファイルの設定については，「5.3(3)　EIAJハッシュ用ファイル「ethash.ini」の設定」を参照してください。ただし，出力するデータがCII3フォーマットの場合は，EIAJハッシュ用ファイル「ethash.ini」を設定する必要はありません。

-ESEPA

EDIFACTフォーマットのデータを変換する場合，UNAセグメントで定義されたセパレータ，又はデフォルトのセパレータを，一律に判定するオプションです。このオプションは，従来の処理では望む変換結果が得られない場合に指定してください。

なお，このオプションを指定する場合，変換対象となる入力又は出力EDIFACTフォーマットデータ内に，UNAセグメントが複数個あってはいけません。1回の変換では，1交換単位分の変換だけとしてください。

-FDS

ゾーン形式数値のEBCDIK文字コードでの正符号として，0xFを出力したい場合に指定します。

-IERR

変換データ中に不正文字コードがあった場合，エラーとして処理したいときに指定します。

このオプションを指定しない場合は，MDLの指定に従います。

-RELVL

ettransコマンドの戻り値としてエラーレベルを返します。エラーレベルと戻り値の対応を表5-3に示します。なお，ログファイルに出力する戻り値，及び各APIの戻り値は，「5.4.2　ettransコマンドの戻り値」の値を返します。

このオプションは，APIのパラメタとして指定できません。

表5-3　エラーレベルと戻り値の対応

エラーレベル | 対応する戻り値 | 意味
0x00 | 0x00ZZZZZZ | インフォメーション
0x01 | 0x01ZZZZZZ | ワーニング
0x02 | 0x02ZZZZZZ | エラー
0x04 | 0x04ZZZZZZ | システムエラー

（凡例）

ZZZZZZは任意の数字です。

-SERR

変換データ中にサイズエラー（小数部を持つ実数値を整数型要素に代入する場合なども含みます）があった場合，エラーとして処理したいときに指定します。

このオプションを指定しない場合は，MDLの指定に従います。

-SNCODE

Sea-NACCSで規定する文字集合による文字コードチェックを実施します。

このオプションは，Sea-NACCS EDI電文又はSea-NACCS EDIFACT電文の出力変換の場合だけ有効です。

なお，Interschema 03-00までのSea-NACCS電文変換では，常に文字コードチェックを実施しています。旧バージョンと同じ変換をしたい場合は，このオプションを指定してください。

-XDOC 外部サブセットURL

DOCTYPE宣言を出力する場合に指定します。

このオプションを指定した場合，MDLファイルでの指定に関係なく，出力XML文書に指定外部サブセットURLでDOCTYPE宣言を出力します。

-XND

XML出力変換時に，DOMを作成しない場合に指定します。

このオプションを指定した場合，メモリの使用量を抑制できます。なお，エラーが発生した場合のデータの出力状況，及びデータの変換時間は，オプションを指定しないときと異なります。

-XVC

XML文書構造を検証する場合に指定します。

-XWS

入力するXML文書のwhite space削除を抑止したい場合に指定します。

このオプションが指定された場合，入力XMLデータのwhite spaceは削除されないで，データの一部として扱われます。

実行時オプションは，システム情報ファイルを使って暗黙指定できます。詳細については，「5.4.3　システム情報ファイル「ettrans.ini」での実行時オプションの定義」を参照してください。

(b)　形式2で指定できる引数

-file パラメタファイル名

パラメタファイルを指定します。

パラメタファイルには，1行に1オプション，又は1引数を記述します。 したがって，-Fオプションに，フォーマット名と入力データファイルや出力データファイルを2組指定する場合は，記述例に示すとおり5行で表現します。

次にパラメタファイルの記述例を示します。

BBB.mdl
-F
INformat
input.data
OUTformat
output.data
-IERR
-SERR

記述できる引数は，次のとおりです。先頭行にはMDLファイル名を指定します。引数の詳細については，「5.4.1(3)(a)　形式1で指定できる引数」を参照してください。

MDLファイル名

-F

-FN

フォーマット名

入出力データファイル名

-E

ログファイル名

実行時オプション

(c)　形式3で指定できる引数

-prop FDL | MDLファイル名

FDLファイル又はMDLファイルを指定します。指定したファイルのプロパティが表示されます。表示されるプロパティを次に示します。

ユーザバージョン

ユーザコメント

作成日時※

作成製品バージョン※

更新日時

更新製品バージョン※

FDLファイル又はMDLファイルのバージョン

注※

FDLファイル又はMDLファイルが，Interschemaバージョン1のFDLエディタ又はMDLエディタで作成されていた場合，作成日時，作成製品バージョン及び更新製品バージョンの情報は表示されません。

表示形式は，オプションを実行した時のLANGによって決まります。Windows又はLANG Cでプロパティを表示するオプションを実行した場合，シフトJIS形式でプロパティが表示されます。プロパティの表示例を次に示します。

UserVersion=V0.1
UserComment=Test Model
SysCreatedDate=2002/10/01 10:00:00
SysCreatedPpVersion=0200
SysLastUpdatedDate=2002/10/10 12:00:00
SysLastUpdatedPpVersion=0200
SysDlVersion=16

(4)　実行例

ettransコマンドの実行例を次に示します。なお，実行例1～3は形式1に従った例です。また，実行例4は形式2に，実行例5は形式3に従った例です。

実行例1

MDLファイル「AAA」内で指定されている入力データファイルを，出力データファイルに変換します。

ettrans AAA.mdl

実行例2

MDLファイル「BBB」で指定された変換情報に従って，入力データファイル「input.data」を出力データファイル「output.data」に変換します。不正文字，サイズエラーを検証するオプションを指定します。

ettrans BBB.mdl -F INformat input.data OUTformat output.data
    -IERR -SERR

実行例３

MDLファイル「CCC」内で指定されているフォーマットのうち，INI及びOUT1だけを変換します。入力データファイル及び出力データファイルは「CCC」内で定義されているものとします。

ettrans CCC.mdl -FN INI OUT1

実行例4

指定したパラメタファイル「param.txt」の設定に従って，変換を実行します。

ettrans -file param.txt

実行例5

指定したMDLファイル「DDD」のプロパティ情報を表示します。

ettrans -prop DDD.mdl

(5)　注意事項

空白を含むファイル名や，ディレクトリ名を引数として指定する場合，項目全体をダブルクォーテーション「"」で囲んでください。ただし，コマンドの引数を記述するパラメタファイル内で指定する場合，1行分で指定された内容が1項目として認識されるため，ダブルクォーテーションで囲まずに，引数名をそのまま記述してください。パラメタファイルについては，「5.4.1　ettransコマンド」を参照してください。

入力データのファイル名と出力データのファイル名が同じ場合は，データ変換時にエラーになります。また，MDLファイル内に定義されている入出力データと同じファイル名を-Fオプションの引数に指定すると，データ変換時にエラーとなります。

ワークステーションのOSの場合，ファイル名に「"」及び「¥」を含むとき，エスケープ文字「¥」を先頭に追加してください。

例

ファイル名，コマンドの１引数，パラメタファイルの１行などは，256バイト以内で指定してください。

エラーが発生した場合は，エラー内容をログファイルに出力します。詳細については，「付録A.1　エラー発生時の処理」を参照してください。

5.4.2　ettransコマンドの戻り値

トランスレータは，戻り値（整数）を返します。この変換処理の終了後に出力する戻り値によって変換結果やエラー内容などを調べることができます。戻り値の内容や注意事項を次に示します。

＜この項の構成＞

(1)　戻り値の内容

(2)　注意事項

(1)　戻り値の内容

戻り値

0xYYZZZZZZ

表5-4　ettransコマンドの戻り値

エラー
レベル
YY
ZZZZZZ
意味

I
00
000000
正常に終了しました。

000008
テスト用のデータを入力しました。変換は正常に終了しました。

W
01
000001
不正文字コードを検出し，スペースに置き換えました。

000002
要素サイズをオーバーしたためデータをカットしました。

000004
エラーが発生したが，正常変換できたグループだけ出力しました。

000008
テスト用のデータを入力しました。

000010
ログファイルを開けなかったため，デフォルトのログファイル又は標準出力にログを出力しました。

000020
CII標準又はEIAJ標準のハッシュトータル値がメッセージグループ・トレーラ（MGT）の値と一致しません。

000040
出口関数の定義に不正があります。

000080
入力フォーマット以降に入力データがあります。

000100
「ettrans.ini」の定義に不正があります。

000000
その他のワーニングエラーです。

E
02
000001
不正文字を検出しました。

000002
要素サイズをオーバーしました。

000004
エラーが発生したが，正常変換できたグループだけ出力しました。

000008
テスト用のデータでエラーが発生しました。

000000
その他のエラーです。

S
04
000001
ファイル入出力エラーです。

000002
メモリ不足です。

000004
出力データのサイズが出力できるメモリアドレスを超えました。

000008
データ変換処理APIのスレッド固有情報又はMDL情報に不正があります。

000010
変換できないMDLファイルです（対応ライセンスがありません）。

000000
その他のシステムエラーです。

（凡例）

I（インフォメーション）：正常に終了しました。

W（ワーニング）：変換中にワーニングレベルのエラーが発生しましたが，データ変換は終了しました。

E（エラー）：変換中に続行できないレベルのエラーが発生し，データは最後まで変換されないまま途中で終了しました。

S（システムエラー）：トランスレータ内部で致命的エラーが発生し，データは最後まで変換されないまま途中で終了しました。

(2)　注意事項

トランスレータの戻り値の注意事項を次に示します。

同じレベルのエラーが複数発生した場合，それぞれの値の論理和が出力されます。
例えば，不正文字コードと要素サイズオーバーの両方のワーニングが発生した場合の戻り値は，「0x01000001」と「0x01000002」の下2桁の論理和となる「0x01000003」が出力されます。

異なるレベルのエラーが複数発生した場合，原則として，論理和は取らずに上位エラーの戻り値が出力されます。エラーレベルの優先順位を次に示します。
S：システムエラー＞E：エラー＞W：ワーニング＞I：インフォメーション
ただし，下2桁に「0x00000008」（テスト用データを入力した）が含まれる場合は「0x00000008」との論理和を取った値になります。

システムレベルのエラー（0x04ZZZZZZ）が発生した場合，下6桁の値についてはほかの値との論理和は取りません。

戻り値として「0x01000008」又は「0x02000008」を出力するのは，テスト用の入力データとして，CII標準又はUN/EDIFACTのデータを入力した場合だけです。

戻り値「0x04000008」は，APIによる変換実行時だけ出力されます。

実行時オプション「-RELVL」を指定した場合，ettransコマンドは，戻り値の代わりにエラーレベルを返します。エラーレベルについては，「表5-3　エラーレベルと戻り値の対応」を参照してください。

5.4.3　システム情報ファイル「ettrans.ini」での実行時オプションの定義

実行時オプションを暗黙的に指定したい場合，システム情報ファイル「ettrans.ini」を利用できます。暗黙的に指定する実行時オプションには「有効」，指定しないオプションには「無効」と定義します。

＜この項の構成＞

(1)　定義できる実行時オプション

(2)　形式

(3)　記述例

(1)　定義できる実行時オプション

実行時オプションに加え，「NE」が指定できます。「NE」について説明します。

「NE」はシステム情報ファイルでだけ定義できる実行時オプションです。コマンドのオプションとして直接指定できないので注意してください。

NEオプションは，ログファイルの出力を抑止したい場合に指定します。指定するモード値によって，抑止のレベルが異なります。NEオプションで指定できるモード値とその意味を次に示します。

NEに指定するモード値

0：

ログファイルの出力を抑止しません。初期値では0が指定されています。

1：

すべてのログファイルの出力を抑止します。NEオプションに1を指定した場合は，-Eオプションによるログファイルの指定があってもログファイルは出力されません。

2：

グループ単位出力指定のインフォメーションメッセージ「KBET0006T-I」の出力を抑止します。そのほかのメッセージは出力されます。NEオプションに2が指定されている場合にエラーが発生すると，グループ単位出力指定のワーニングメッセージ「KBET0009T-W」の付加情報として出力済みのグループ数が出力されます。

3：

正常変換時のログファイルの出力を抑止します。ここでの正常変換とは，戻り値が「0x00000000」の場合です。

システム情報ファイルで有効又は無効を定義した実行時オプションについては，トランスレータ起動時，又はAPI関数でのデータ変換時にそのオプションを指定しても，システム情報ファイルの定義内容が優先されます。例えば，指定した実行時オプションがシステム情報ファイルで無効と定義されている場合には，そのオプションは指定されなかったことになります。

システム情報ファイルで有効又は無効を定義していない実行時オプションについては，トランスレータ起動時，又はAPI関数でのデータ変換時の指定に従います。

実行時オプションの有効又は無効は，システム情報ファイルの［Option］セクションに定義します。[Option]セクションでの記述形式を次に示します。

(2)　形式

オプション = 有効又は無効の指定

キー名としてオプション名を記述します（実行時オプションの「-」は除きます）。右辺にはオプションの有効，無効を指定します。右辺の指定方法を次に示します。

モード値を指定するオプションの場合
オプションを有効とする場合は，モード値を指定します。モード値は，整数値で指定してください。

ファイル名又はURLを指定するオプションの場合
オプションを有効とする場合は，ファイル名又はURLを指定します。ファイル名又はURLは，255バイト以内で指定してください。「__ET_DEFAULT__」は指定できません。
無効とする場合は，「=」の右辺に何も指定しないでください。

それ以外の実行時オプションの場合
オプションを有効とする場合は「1」を指定，無効とする場合は「0」を指定します。

なお，Interschemaで提供するシステム情報ファイルには，[Option]セクションの記述はありません。実行時オプションを定義する場合には，セクション名[Option]から記述してください。

(3)　記述例

システム情報ファイル「ettrans.ini」の記述例を次に示します。

;ettrans.ini
 ・
 ・
[Option]
CIIE = error_info_file.cii※1
CIIR = ※1
 ・
IERR = 0※2
CIIT = 1※2
 ・
 ・

注※1

有効とするオプションにはファイル名（「XDOC」の場合はURL）を指定，無効とするオプションには何も指定しません。

注※2

有効とするオプションには「1」を指定，無効とするオプションには「0」を指定します。

6.　定義と変換の規則

この章では，Interschemaの定義と変換の規則について説明します。

＜この章の構成＞

6.1　定義内容と規則

6.2　属性

6.3　文字コード

6.4　変換処理の流れ

6.5　変換の規則

6.6　式

6.7　演算子及び関数

6.1　定義内容と規則

トランスレータは，FDLファイル及びMDLファイルに記述された変換情報に従って動作するため，FDLファイル及びMDLファイルにトランスレータの変換情報を記述する必要があります。

FDLファイル及びMDLファイルで定義する内容と規則について説明します。

＜この節の構成＞

6.1.1　FDLでの定義情報

6.1.2　MDLでの定義情報

6.1.1　FDLでの定義情報

FDLで定義する内容について説明します。

＜この項の構成＞

(1)　フォーマット情報

(2)　型定義情報

(3)　セパレータ定義情報

(4)　変数定義情報

(5)　構造定義情報

(6)　コンポーネント定義情報

(1)　フォーマット情報

フォーマット情報は変換データの構造を定義するもので，型，セパレータ，変数，構造から構成されます。また，フォーマット全体にかかわる情報を，フォーマット情報として定義します。

フォーマット情報を次に示します。

表6-1　フォーマット情報

フォーマット情報
定義箇所
定義する内容

規格指定
フォーマット全体
フォーマットが従うEDI標準などの情報を指定します。

データ格納形式
フォーマット全体
データの格納形式（ビッグエンディアン又はリトルエンディアン）を指定します。初期値は，ビッグエンディアンです。

不正文字コード置換指定
フォーマット情報と型※
不正な文字コードをスペースに置換するか，エラーにするかを指定します。

桁あふれ時の指定
フォーマット全体
データが最大サイズを超えたらエラーにするか，桁あふれの部分を切り捨てるかを指定します。

不要文字削除指定
フォーマットと型※
入力文字列の埋め字をデータと見なすか（OFF指定），データから除外して扱うか（ON指定）を指定します。

文字コード指定
フォーマット全体
フォーマット全体で適用する文字コードを指定します。
ここで指定した文字コードが，フォーマットの初期値の文字コードとなります。

サイズ系指定
フォーマットと型※
文字列型のサイズを数える方法（バイト数又は文字数）を指定します。初期値はバイト数です。

注※

フォーマットと型の両方で定義した場合は，型の定義が優先されます。フォーマットの定義は，指定をしていない型だけに適用されます。

各フォーマット情報の詳細について説明します。

(a)　規格指定

トランスレータは，規格指定に従った処理をします。CSV形式でデータを処理したい場合は，FDLエディタでフォーマットのプロパティを設定するときに，規格指定の項目で「CSV」を選択します。指定する規格がない場合は「なし」を選択します。

ここで選択できるのは，「CSV」か「なし」だけです。その他の規格（CIIやEDIFACTなど）で作成した辞書のプロパティを編集する場合は，対応する規格の名称が表示されますが，規格指定を編集することはできません。

なお，XMLのDTDフォーマットの指定には，MDLエディタを使用します。

(b)　データ格納形式

入出力データで扱う2進数のバイトオーダ（ビッグエンディアン又はリトルエンディアン）を，フォーマットごとに定義します。

バイトオーダマークを持たないUnicode文字列のエンディアンも，この指定に従います。

(c)　不正文字コード置換指定

入出力データに不正な文字コードがある場合，スペースに置換するか，エラーにするかを指定します。スペースに置換する場合，トランスレータは，ワーニングエラーを出力します。

(d)　桁あふれ時の指定

出力フォーマット中の要素にデータを代入するとき，データの値によっては，桁あふれ又はサイズオーバーとなる場合があります。このとき，エラーにするか，あふれ部分を切り捨てて出力するかを指定します。

トランスレータは，桁あふれ時の指定がある場合，桁あふれ部分を切り捨てて出力側要素に代入し，変換処理を続行します。このとき，トランスレータは，ワーニングエラーを出力します。桁あふれ切り捨て指定がない場合は，エラーメッセージを出力して，変換処理を途中で終了します。

桁あふれ切り捨て指定の詳細については，「6.5.3(3)　桁あふれ時の処理」を参照してください。

(e)　不要文字削除指定

入力文字列データ要素の埋め字をデータとして見なすか（OFF指定），データから除外するか（ON指定）を指定します。フォーマットがXMLの場合は，指定できません。入力XMLの不要文字の扱いは，実行時オプションの-XWSで指定してください。

出力データ要素に対しては，不要な文字列の後続スペース，数値の前0，小数部の下位桁の0（有効数字以外の0）を削除して出力するか（ON指定），削除しないでそのまま出力するか（OFF指定）の指定になります。

日付時刻型に対して不要文字の削除を指定する場合は，型全体に対する指定と秒の部分に対する指定を分けて定義できます。

(f)　文字コード指定

フォーマット全体で適用する文字コードを指定します。ここで指定した文字コードが，フォーマットの初期値の文字コードになります。文字コードの種類，適用範囲，及び初期値について次の表に示します。

表6-2　文字コード一覧

文字コード
適用範囲
初期値

1バイト文字コード
1バイト文字列
JIS8

2バイト文字コード
2バイト文字列
JISK

混在文字コード
混在文字列
日付時刻型※1
SJIS

数値文字コード※2
文字列型数値属性
JIS8

セパレータ文字コード※2
セパレータ文字
JIS8

注※1

2バイト文字コードは使用できません。

注※2

Interschemaバージョン1で作成されたフォーマットに対しては，1バイト文字コードと同じ文字コードが設定されます。

入力データ中に指定された文字コードで許されていない文字があった場合，トランスレータはエラーにするか，不正文字部分を対応する文字コードのスペースに置き換え，ワーニングエラーを出力します。ただし，EDI標準に従って変換する場合，ヘッダ情報などで使用できる文字コードが規定されている場合があります。この場合，規定外の文字が指定された場合は，エラーになります。

(g)　サイズ系指定

文字列型のサイズを数える方法として，バイト数又は文字数が指定できます。

バイト数を指定した場合，データ中のシフトコード，解放文字などもサイズとして数えます。文字数を指定した場合，シフトコードと解放文字は文字数として数えません。

(2)　型定義情報

トランスレータが扱うことができる要素の型は，数値（文字列型，バイト列型），文字列，バイト列，日付時刻です。

要素の型属性の定義には，数値，文字列などの主属性の指定，右寄せ・左寄せと埋め字の指定，要素サイズの指定，文字コードの指定，及びトランスレータへの指示項目（桁あふれ時の処理など）があります。また，要素データの離散値を定義できます。

文字コード指定，不要文字削除指定，サイズ系指定については，「(1)　フォーマット情報」の該当項目を参照してください。

型定義情報を次に示します。

表6-3　型定義情報

型定義情報 | 定義箇所 | 指定する内容
右寄せ・左寄せと埋め字の指定 | 型 | 要素データが指定されたサイズに満たない場合，要素エリアのどちら側に詰めて表現するかを指定します。また，不足サイズ部分の埋め字を指定できます。※
サイズ定義 | 型 | 要素の固定サイズを指定するか，可変長にするかを指定します。
値定義 | 型 | 要素が取る値を指定します。

注※

数値属性は右寄せして埋め字：０，文字列属性は左寄せして埋め字：スペースが一般的です。

各型定義情報の詳細について説明します。

(a)　右寄せ・左寄せと埋め字の指定

要素データが指定されたサイズに満たない場合，要素エリアのどちら側に詰めて表現するかを指定します。また，不足サイズ部分の埋め字も指定できます。ただし，2バイト文字コードの文字列の埋め字は2バイト文字，その他の属性に対する埋め字は1バイト文字を指定してください。また，文字コードがEUC又はUTF8の場合，埋め字に半角仮名は指定できません。

数値に対する埋め字は，０又はスペースが指定できます。ただし，桁セパレータを使用する場合の埋め字は，スペースだけが指定できます。

埋め字は，文字（シフトJIS）又はバイト列で指定できます。

(b)　サイズ定義

要素の固定サイズを指定するか，最大・最小サイズを指定して可変長にするかを指定します。要素サイズを可変長にした場合，サイズを動的に決める指定をするか，セパレータを使用して要素の終端を明確にします。

サイズを動的に決める指定は，その要素が使われている構造内で，サイズをサイズ決定式として宣言します※1。例えば，入力データがレングスタグ構造を持つ場合，データのサイズは，その前にあるレングスを表す要素の値となります。サイズ決定式については，「6.6.2　サイズ決定式」を参照してください。

文字列以外の要素のサイズは，バイト数で指定します。文字列要素のサイズは，バイト数又は文字数で指定します。詳細については，「6.1.1(1)(g)　サイズ系指定」を参照してください）。数値型の要素のサイズは，符号や指数記号などを桁数に含めるかどうか，主属性の定義内で指定できます※2。

注※1

出力フォーマットの場合は，要素データサイズは出力内容（結果）で決まるため，サイズ決定式は定義しなくてもかまいません。

注※2

FDLエディタでの定義では，固定長要素の場合は，符号や指数記号などを，桁数に含めます。可変長要素の場合は桁数に含めません。

(c)　値定義

要素が取る値を定義します。値定義された要素に対して，定義されていない値が入出力データ中に現れた場合，トランスレータはエラーとして処理します。入力値をそのまま出力側へ代入したい場合などは，値エラー検証の解除を指定することもできます。

また，マップ式でVALUEMAP関数を使用して，入力要素と出力要素の値同士をマッピングして変換できます。

日付時刻型の要素に対しては，値定義できません。

(3)　セパレータ定義情報

セパレータ定義情報を次に示します。

表6-4　セパレータ定義方法

セパレータ定義方法 | 指定する内容
セパレータ名による指定 | 要素の型属性定義のように，構造内で使用するセパレータに名前を付けて指定します。※1
セパレータ値の直接指定 | 構造のプロパティとして，セパレータの値を直接指定します。※2

注※1

セパレータを使用する構造は，このセパレータ名称を用いてセパレータの定義ができます。

注※2

セパレータを文字で指定する場合は，初期値のセパレータ文字コードを使用します。ただし，シフトコードを含む文字は指定できません。使用できない文字を次に示します。なお，JISKSはJISK，KEISSはKEISとして扱います。

JISE：

2バイト文字，1バイト仮名文字

ISOJP，KEIS_EBCDIC_MIX，KEIS_EBCDIK_MIX，IBM_EBCDIC_MIX，IBM_EBCDIK_MIX，JEF_EBCDIC_MIX，JEF_EBCDIK_MIX：

2バイト文字

セパレータは，出現する位置によって意味が異なります。セパレータの出現位置には，次の四つの種類があります。

構造の前に出現
セパレータの出現で，構造であることが認識されます。データタグなどに適用できます。

構造の後に出現
セパレータの出現で，構造の終了が認識されます。

各要素の前に出現※
セパレータの出現で，要素の区切りと認識されます。

各要素間に出現※
セパレータの出現で，要素の区切りと認識されます。

注※

各要素の前に出現と各要素間に出現する場合は，構造の定義方法によって使い分ける必要があります。

セパレータ定義情報の例を次に示します。

TAG+DATA1+DATA2+DATA3'
（TAG＝構造の前に出現， '＝構造の後に出現，＋＝各要素の前に出現）
A1，A2，A3，A4，A5
（，＝各要素間に出現）

また，解放文字もセパレータと同じく，名称及び固定の値を定義できます。これは，構造に対するセパレータの定義と同レベルで設定します。ただし，セパレータとは異なり，解放文字をネストして定義できません。解放文字は最上位のルート構造でだけ宣言できます。

セパレータを「+」，解放文字を「？」とした例を，次に示します。

ABC?+DEF+?+123

「ABC+DEF」と「+123」というデータを表します。

次に，個別に定義するセパレータとは別に，トランスレータが提供するセパレータについて説明します。トランスレータが提供するセパレータを次に示します。

#Comma

#Linefeed

「#Comma」は，1バイト文字のコンマ「,」を表します。Windowsの場合，「#Linefeed」はCR/LF（復帰・改行）を表します。ワークステーションのOSの場合，「#Linefeed」はLF（改行）を表します。それぞれの値は，セパレータの文字コードに従います。

(4)　変数定義情報

フォーマットの型コンポーネントとは別に，データを保持できます。グループ単位出力指定によってデータが破棄される前に，コンポーネントの値を保存する場合などに変数定義情報を利用します。

変数は，名前を付けて設定します。変数の初期値は数値，文字列，バイト列のどれかです。

変数の値は，マップ式で参照できます。また，変数式によって変数の値を更新することもできます。変数式については，「6.6.7　変数式」を参照してください。

(5)　構造定義情報

変換対象となるデータの構造を，任意に指定できます。構造定義は，要素の出現順序と出現回数を定義するものです（Ｃ言語の構造体に相当します）。定義する情報は，構造の名称，種類，コンポーネント（構成要素）の情報，評価規則，セパレータなどです。セパレータについては，「(3)　セパレータ定義情報」を参照してください。

構造の種類には，逐次構造と選択構造があります。逐次構造は，構成メンバが定義された順序に出現する構造，選択構造は，構成メンバのどれか一つが出現する構造を表します。構成メンバには，型属性定義されている要素か，同じフォーマット内で定義される構造を設定できます。

逐次構造と選択構造の例を次に示します。

逐次構造の場合は，ツリーのとおりに出現します。選択構造の場合は，構造Ｓの子コンポーネントの出現順序は不定で，特に条件式などが定義されていなければ先頭に定義されたコンポーネントが選択されます。子コンポーネントを選択するための条件は，選択構造に対して定義する評価順序決定式と，子コンポーネントに対して定義する順序決定値のセットで指定できます。順序決定値はコンポーネント情報として定義します。

構造定義情報を次に示します。

表6-5　構造定義情報

構造定義情報 | 定義箇所 | 指定する内容
順序決定式～順序決定値 | 構造（親コンポーネント） | 選択する条件が決まっている場合に，選択順序の変更を指定します。
条件式 | 構造及びコンポーネント | 構造やコンポーネントに対して，その値や出現状態の条件を記述します。

各構造定義情報の詳細について説明します。

(a)　順序決定式～順序決定値

選択構造を持つコンポーネントのメンバは，FDLファイル及びMDLファイルに記述された順序で評価され，最初に正当であると評価されたものが選ばれます。これに対して，メンバを選択する条件が決まっている場合，選択順序を変更できます。

評価順序指定があって，指定条件が値のどれにも合致しなかった場合は，順序決定値が定義されていない子コンポーネントについて，従来のメンバの定義順に従って評価します。値が合致した選択構造の子コンポーネントとデータが不整合の場合は，エラーとして処理します。

(b)　条件式

評価規則として条件式が定義されていた場合，入出力データに対して評価した結果が偽と判定した場合，トランスレータはエラーとして処理します。

構造に対して定義した条件式は，その構造の子コンポーネントがすべて正当なときに評価されます。コンポーネントに対して定義した条件式は，該当するコンポーネント自身（構造コンポーネントならば，その子コンポーネントすべて）が正当であったときに評価されます。

(6)　コンポーネント定義情報

コンポーネント情報は，型や構造などをどのように使用するかを定義するものです。型や構造の出現順序，出現回数など，データ構造の枠組みを規定する情報や，順序決定値，サイズ決定式など，コンポーネント独自の性質を決める情報などがあります。また，コンポーネントの正当性を評価するための評価規則なども，コンポーネント定義情報です。

コンポーネントは構造の子として定義します。型属性定義されている要素か，同じフォーマット内で定義される構造です。実際のデータの並びに合わせて，コンポーネントの順序を定義します。同時に，出現回数（繰り返し数）を定義する必要があります。

出現回数は最小数，最大数を指定して表します。最小数に０を指定すると，そのコンポーネントは入出力データ中に現れなくてもかまいません。最小数と最大数を同じにした場合，そのコンポーネントは指定された数だけ出現しなければなりません。出現数が不足する場合，トランスレータはエラーとして処理します。

コンポーネントの出現回数を動的に決定する定義もできます。選択構造の子コンポーネントの最小出現回数は，原則として１以上にしてください。

各コンポーネント定義情報の詳細について説明します。

表6-6　コンポーネント定義情報

コンポーネント定義情報 | 指定する内容
必須項目の指定 | コンポーネントが必須項目であることを指定します。※
カウンタの指定 | コンポーネントの出現回数を取得するカウンタを指定します。
出現回数決定式 | 可変回出現コンポーネントの出現数を動的に決める指定をします。出現数を動的に決める指定と出現回数決定式（算術式）を組にして指定します。出力フォーマットに対しては，出現数を動的に決める指定だけでもかまいません。
サイズ決定式 | 可変長でサイズを動的に決定する定義の型コンポーネントのサイズを，算術式として指定します。出力フォーマットに対しては，指定しなくてもかまいません。
デフォルト式 | 型コンポーネントの初期値を指定します。
変数式 | 変数の値の変更を指定します。

注※

MDLエディタ上でマップ式定義を促すためのものです。

各構造定義情報の詳細について説明します。

(a)　必須項目の指定

必須項目が指定されたコンポーネントに対しては，マップ式（又はデフォルト式）が定義されないとMDLのエラーになります（ただし，親コンポーネントにマップ式定義などがある場合）。省略できる子孫の位置づけにあるコンポーネントは，エラーになりません。

ただし，トランスレータでの変換では，この指定は意味を持ちません。必須項目の指定をしたコンポーネントの最小出現回数が０の場合，変換実行時に該当するコンポーネントが出現しなくても，トランスレータはエラーにしません。エラーにしたい場合は，別途条件式などで記述してください。

(b)　カウンタの指定

カウンタの指定は，すべての種類のコンポーネントが対象となります。初期値は0です。カウンタの指定には，次の2種類があります。

カウンタを初期化する

カウンタをインクリメントする

カウンタを初期化する定義情報を持つコンポーネントが出現すると，カウンタは0になります。その後，カウンタをインクリメントする定義情報を持つコンポーネントが出現するごとに，カウンタが一つずつ増えていきます。カウンタの初期化及びインクリメントは，マップ式などの評価後，コンポーネントが正当に出現したと判定された時に開始されます。

カウンタは，フォーマットごとに設定されます。複数のフォーマットにわたってカウントすることはできません。カウンタの値を取り出すGETCOUNT関数については，「6.7.3　関数」を参照してください。

(c)　出現回数決定式

トランスレータは，出現回数決定式を評価した結果の値を，コンポーネントの固定の出現数と見なします。出力フォーマットで出現回数決定式がないか，評価結果が不正である場合は，従来のコンポーネントの出現回数の定義が有効になります。

入力フォーマットに対して，EXISTWHILE関数又はWHILE関数を使用した出現回数決定式を記述できます。この場合，EXISTWHILE関数又はWHILE関数で指定した条件が満たされる間，コンポーネントが出現すると見なされます。EXISTWHILE関数又はWHILE関数については，「6.7.3　関数」を参照してください。

(d)　サイズ決定式

トランスレータは，サイズ決定式を評価した結果の値を，型の固定のサイズと見なします。出力フォーマットでサイズ決定式がないか，評価結果が不正である場合は，型定義での最小／最大サイズの定義が有効となります。

(e)　デフォルト式

通常，出力側フォーマットの１回以上出現するコンポーネントに対してマップ式が定義されていなければなりません。これに対して，あらかじめコンポーネントの初期値を設定できます。

初期値が設定されたコンポーネントにマップ式が定義されなかった場合，トランスレータはエラーにしないで，初期値として設定されている固定の値を出力します。

デフォルト式はマップ式と同様に，個別に指定できます。

(f)　変数式

変数式は，変数の値を更新するときに使用します。一つのコンポーネントに対して複数の変数式を定義できます。変数式は，コンポーネントが1回出現した時点で評価されます。指定方法はマップ式と同様で，全体指定と個別指定の2種類があります。

6.1.2　MDLでの定義情報

MDLでは，マップ式以外にもグループ単位出力と未使用コンポーネントについて定義できます。ここでは，グループ単位出力指定と未使用コンポーネント指定について説明します。

＜この項の構成＞

(1)　グループ単位出力指定

(2)　未使用コンポーネント指定

(1)　グループ単位出力指定

MDLエディタで指定できるグループ単位出力の指定について説明します。

通常，トランスレータは，入力データをすべて読み込んでから変換処理を実行し，最後に変換結果を出力します。この場合，1か所でもデータに不正があると，変換全体が失敗することになります。また，入力データを一括して読み込むため，データのサイズが大きくなると，メモリが不足するおそれがあります。しかし，グループ単位での変換の実行を指定すると，変換途中でエラーが発生しても，それまでに正常に変換されたグループの出力データは保証されます。したがって，エラー原因を修正した後は，正常に出力できたグループ以降のグループから変換処理を続行できます。このような指定を「グループ単位出力指定」と呼びます。グループ単位出力指定では，CII標準形式のメッセージグループのように，意味を持つグループ単位でデータを変換できます。さらに，1グループ単位で入力や出力をするため，メモリ使用量を抑えられます。

グループ単位出力指定は，MDLエディタで入力フォーマットのグループを表すコンポーネントと，出力フォーマットのグループを表すコンポーネントとを対応付けて，対で指定します。以上のように指定しておくと，トランスレータは入力側の1グループのデータを読み込んで変換処理を実行し，出力側の1グループのデータを出力します。

次のような構造のフォーマットがあります。

図6-1　グループ単位出力指定の構造の例

入力側のコンポーネント「RECORD」と出力側のコンポーネント「MG」に対して，グループ単位出力を指定すると，入力側のコンポーネント「RECORD」が1回出現するごとにデータが変換されます。「図6-1　グループ単位出力指定の構造の例」のフォーマットのデータ変換処理を次に示します。

図6-2　グループ単位出力指定のデータ変換の例

グループ単位出力指定を入力側のフォーマットだけに対して指定した場合は機能しません。出力側のフォーマット，又は入力フォーマットと出力のフォーマットを組にして指定してください。グループ単位出力指定を出力側のフォーマットだけに対して指定した場合は，入力データを一括して読み込み，指定されたコンポーネントごとに変換結果をファイル（又はメモリ）に出力します。

グループ単位出力指定は，［コンポーネントのプロパティ］ダイアログで「グループ単位出力指定」をチェックして指定します。

グループ単位出力指定は，ラベルを付けて複数階層に指定できます。ラベルを使用する場合は，［コンポーネントのプロパティ］ダイアログで「グループ単位出力指定」をチェックし，ラベルの値を入力します。ラベルの値は1から指定し，対応する入力側と出力側のコンポーネントには同じ値を入力してください。

ラベルを使用する場合，次の二つの条件を満たす必要があります。

データを出力するグループは，最上位に指定されたコンポーネントに対応する。

上位のグループから下位のグループまでが包含関係にある。

ラベルを使用したグループ単位出力指定の例を次に示します。

図6-3　グループ単位出力指定のラベルを使用した例

グループ単位出力指定は，大量のデータを一括変換する場合に有効な指定です。グループとして指定するコンポーネントは，可変回出現する最上位のコンポーネントを目安にしてください。なお，グループ単位出力を指定した出力側のコンポーネントにある要素の値が，1回分のグループの入力ですべて決まらない場合はエラーになるので注意してください。

グループ単位出力指定には，次の制限事項があります。

ラベル1のグループより上位の階層（親又は先祖のコンポーネント）に複数回出現するコンポーネントがある場合は指定できません。最上位の階層にラベル1を指定してください。

グループ内で評価順序遅延指定のマップ式（％delay n）があり，グループより上位の階層にあるコンポーネントが含まれる場合は，指定できません。

MDL内に複数の入力フォーマット（又は出力フォーマット）がある場合でも，グループ単位出力指定を指定できる入力フォーマット（又は出力フォーマット）は一つだけです。
グループ単位出力指定が指定されていない入力フォーマットは，最初のグループよりも前にデータがあると見なされます。また，グループ単位出力指定が指定されていない出力フォーマットは，最後のグループよりも後にデータを出力すると見なされます。

最初のグループより前にデータがあるコンポーネントを，グループ内のコンポーネントにマッピングして値を参照することはできますが，グループ内のコンポーネントを，そのグループより後に現れるコンポーネントにマッピングして値を参照することはできません。

(2)　未使用コンポーネント指定

MDLエディタで指定できる未使用コンポーネントについて説明します。

選択構造の不要なメンバなどMDL内で使用しないコンポーネントがある場合は，未使用コンポーネントとして指定します。未使用コンポーネントに指定されたコンポーネントは，MDL内に存在しないと見なされます。使用しないコンポーネントをあらかじめ指定しておくと，トランスレータの処理効率が向上します。未使用コンポーネントの指定方法については，「4.3.5　選択構造を持つフォーマットのマッピング」を参照してください。

なお，未使用コンポーネントとして指定できるのは，選択構造のメンバであるコンポーネントだけです。選択構造のメンバ以外のコンポーネントは，未使用コンポーネントとして指定できません。

6.2　属性

FDLエディタで要素の型を定義するときに指定する属性には，数値，文字列，バイト列，日付時刻があります。属性の指定方法については，FDLエディタのヘルプを参照してください。

各属性について次に説明します。

＜この節の構成＞

6.2.1　数値

6.2.2　文字列

6.2.3　バイト列

6.2.4　日付時刻

6.2.1　数値

数値型属性には，文字列型数値属性（整数，実数，及び暗黙的小数部付数値）と，バイト列型数値属性（整数，実数，及び暗黙的小数部付数値以外）があります。文字列型数値属性の符号は省略できます。

符号の出現位置として，数字列の前後どちらかを選択できます。符号と数字列の間にスペースがあってもかまいません（トランスレータが出力する場合，スペースは挿入されません）。入力データが負符号だけを使用する指定でも，＋符号が入力できます。入力データに数字が一つも出現しない場合は，0と見なします。なお，埋め字は，0又はスペースを使用できますが，左寄せ指定や桁セパレータを使用する場合は，スペースだけ使用できます。

どの数値属性も，トランスレータでは，10進数として扱います。扱える10進数としての最大桁（整数部と小数部の桁数の合計）は，30桁です。

それぞれの属性について説明します。

＜この項の構成＞

(1)　整数

(2)　実数

(3)　暗黙的小数部付数値

(4)　ゾーン形式(アンパック形式)数値

(5)　パック形式数値

(6)　符号付2進整数

(7)　符号無2進整数

(1)　整数

「数字」「符号」「桁セパレータ」から構成される数値属性です。数値は最大30桁で小数部を持ちません。例を次に示します。

1234567890

-1,234,567,890

1234567890+

(2)　実数

「数字」「符号」「小数点」「桁セパレータ」「指数記号」から構成される，一般的な形式の数値属性です。数値は最大30桁（小数部，指数部桁数を含む），小数部は最大29桁，指数部は最大2桁です。入力データ中に数字がなく，小数点だけある場合や，指数部の指定だけがある場合はエラーになります。指数記号文字は，実数型が従う文字コードの中から指定してください。例えば，JIS7Aコードの場合，小文字の「e」は使用できません。

次に例を示します。

1234567890

1,234,567,890+

-123.456

1.23E3　　(= 1230)

(3)　暗黙的小数部付数値

小数点が暗黙的に指定される数値で，「符号」「数字」から構成されます。数値は最大30桁（小数部を含む），小数部は最大29桁です。次に小数部が4桁の場合の例を示します。

1234567890　　(= 123456.789)

+123　　(= 0.0123)

1230000-　　(= -123)

(4)　ゾーン形式(アンパック形式)数値

最大16桁（16バイト）のゾーン形式数値です。小数点は暗黙的に示されます。符号は項目の最終バイトのゾーン部で表します。ゾーン形式数値の内容を次に示します。

表6-7　ゾーン形式数値の内容

文字コード | 正符号 ＋ | 負符号 －
JIS8 | 0x3 | 0x7
EBCDIK | 0xC又は0xF | 0xD

最終バイト以外のゾーン部は各コードの正符号で表し，数値は各バイトの下位4ビットで表します（0x0～0x9）。次にJISコードの例を示します。

0x31323334　　(= 1234 小数部なしの場合) (＝ 12.34 小数部2桁の場合)

0x31323374　　(= -1234 小数部なしの場合)

EBCDIKコードの場合，トランスレータは正符号として0xCを出力します。ただし，実行時オプション「-FDS」の指定がある場合，0xFを出力します。

この属性型に対しては，数値の桁数を指定するとサイズも指定されます。サイズ＝桁数になります。

(5)　パック形式数値

最大30桁（16バイト）のパック形式数値です。小数点は暗黙的に示されます。符号は項目データの最終バイトの下位4ビットで表します。正符号は0xC又は0xF，負符号は0xDで表し，数値は4ビットで表します（0x0～0x9）。桁数が偶数の場合，最上位バイトの上4ビットは0でなければなりません。なお，トランスレータは正符号として0xCを出力します。

0x01234F　　（= 1234 小数部なしの場合）（＝ 12.34 小数部2桁の場合）

0x01234D　　（= -1234 小数部なしの場合）

この属性型に対しては，数値の桁数を指定するとサイズも指定されます。サイズ＝↑(桁数＋1)／2↑です。

(6)　符号付2進整数

1～4バイトまでの符号付きの2進数です。エンディアンは，フォーマットの情報に従います。次にビッグエンディアンの場合の例を示します。

0x0100　　(= 256)

0xFEFF　　(= -257)

(7)　符号無2進整数

1～4バイトまでの符号なしの2進数です。次に，2バイトでビッグエンディアンの場合の例を示します。

0x0100　　(= 256)

0xFEFF　　(= 65279)

6.2.2　文字列

文字列型は，任意の埋め字文字を指定できます。この型が属する文字コードの文字として認識されない値でもかまいません。通常，埋め字はスペース文字で，データとしては扱いません。また，出力する文字列データの末尾スペース文字は，不要文字の扱いとなります。埋め字，不要文字の扱いは，「6.1.1(1)　フォーマット情報」及び「6.1.1(2)　型定義情報」を参照してください。

データのサイズは，バイト数又は文字数を指定できます。文字数には，シフトコードや解放文字を含みません。

＜この項の構成＞

(1)　混在文字列

(2)　1バイト文字列

(3)　2バイト文字列

(1)　混在文字列

1バイト／2バイト文字コード又は混在文字コードで表される文字列です。次にシフトJISコード（SJIS）の例を示します。

123漢字ABC

(2)　1バイト文字列

1バイト文字コードで表される文字列です。次に8ビットJISコード（JIS8）の例を示します。

(3)　2バイト文字列

2バイト文字コードで表される文字列です。次にJIS漢字コード（JISK）の例を示します。

１２３漢字ＡＢＣ

6.2.3　バイト列

プラットフォーム間でビットパターンが保存されるバイト列です。

出力データが要素の最小サイズに満たない場合，トランスレータはデータを左寄せで出力し，余りを0x00で埋めます。

6.2.4　日付時刻

年，月，日，時，分，秒のパートの組み合わせで構成する型です。パート部分は数値ですが，型全体としては文字列と同じ扱いとなり，左右寄せ，埋め字が任意に指定できます。ただし，パート値として使用できるのは１バイト文字で，文字コードとして２バイト文字コードは使用できません。文字コードとして初期値が指定された場合は，フォーマットの混在型文字列の文字コードに従います。

パートについては，「(3)　日付時刻型」を参照してください。

＜この項の構成＞

(1)　日付

(2)　時刻

(3)　日付時刻型

(1)　日付

8桁（CCYYMMDD），6桁（YYMMDD）の数字によって，年月日を表します。MMは01～12，DDは01～31の範囲です。

パート間の区切り文字がなく，パート値の前0ありで構成された日付時刻型の一形態です。

CCYYMMDD

最大8桁の数字によって，日付を表す形式です。上位桁が省略された場合は，その桁は0と見なします。次に例を示します。

19980520　（＝1998年5月20日）

YYMMDD

最大6桁の数字によって，1951年～2050年の間の日付を表す形式です。上位2桁「YY」が00～50の場合は2000年から2050年までを表し，51～99の場合は1951年から1999年までを表します。上位桁が省略された場合は，その桁は0と見なします。次に例を示します。

010907　　（＝2001年9月7日）

980520　　（＝1998年5月20日）

(2)　時刻

最大6桁の数字によって，24時間制の時刻（時分秒）を表します。数字は6桁（hhmmss）です。hhは00～23，mmは00～59，ssは00～59の範囲です。上位桁が省略された場合は，その桁は0と見なします。

パート間の区切り文字がなく，パート値の前0あり，秒小数部なしで構成された日付時刻型の一形態です。次に例を示します。

133000　　（＝13時30分0秒）

(3)　日付時刻型

日付時刻型は，数値を表すパート，各パート間を区切る文字，ゾーン部から構成されています。秒を表すパートは，小数部を持つことができます。パートの順序構成は任意です。ただし，ゾーン部は型の末尾です。個々のパートは数値で，前０の有無が指定できます。

「CC」を使用しないで「YY」だけを使用したとき，「YY」が00～50の場合は2000年～2050年までを表し，「YY」が51～99の場合は1951年～1999年までを表します。

トランスレータは，通常はパート値の検証をしません。各パートの値の妥当性は実行時オプション「-DTM」が指定された場合だけ実行します。ただし，実行時オプションの指定があっても，日時としての妥当性は検証しません。

日付型，時刻型を含め，日付時刻型には，次の制限事項があります。

パート間の区切り文字，ゾーン部の先頭文字として数字文字（小数点文字を含む）は使用できません。

小数点として認識する文字は「.」と「,」だけです。

「CCYY」と，「CC」又は「YY」は同時に使用できません。

型の文字コードとして，２バイト文字コードは使用できません。

値定義はできません。

日付時刻型のパートを次に示します。

表6-8　日付時刻型のパート

パート | 意味 | 備考
CCYY | 西暦年（0～9999）※ | 1～4桁
CC | 西暦年上位2桁（0～99）※ | 最大2桁
YY | 年（西暦年下2桁）（0～99）※ | 最大2桁
MM | 月（1～12） | 最大2桁
DD | 日（1～31） | 最大2桁
hh | 時（0～23） | 最大2桁
mm | 分（0～59） | 最大2桁
ss | 秒（0～59，小数部可） | 整数部最大2桁，小数部最大28桁

注※

日付型の「YYMMDD」形式の場合は，西暦年換算で1951年～2050年になります。

次に例を示します。

20010124　　（＝2001年1月24日）
'01/01/24　 （＝2001年1月24日）
2001-01-24T13:20:00+09:30※（＝2001年1月24日13時20分00秒）

注※

「+09:30」がゾーン部文字列です。

6.3　文字コード

トランスレータで扱う文字コードと，文字コード使用時の注意事項について説明します。変換するデータの文字コードは，フォーマットに対して指定する（デフォルト）か，各要素の型属性定義内で個別に指定します。

文字コードの指定方法については，FDLエディタのヘルプを参照してください。

＜この節の構成＞

6.3.1　トランスレータが扱う文字コード

6.3.2　文字コード使用時の注意点

6.3.1　トランスレータが扱う文字コード

トランスレータが扱う文字コードには，次の種別があります。

1バイト文字コード

2バイト文字コード

1バイト／2バイト混在文字コード

次にこれらの文字コードについて説明します。なお，文字コードの詳細な説明については，「付録K.1　文字コード一覧」を参照してください。

表6-9　文字コード一覧

コード指定子
文字コード
種別
備考

EBCDIC
日立EBCDICコード
1バイト
－

EBCDIK
日立EBCDIKコード
1バイト
－

IBM_EBCDIC
IBM EBCDICコード
1バイト
－

IBM_EBCDIK
IBM EBCDIKコード
1バイト
－

ISO8859
ISO 8859対応コード
1バイト
0x00～0x7FはJIS7として扱われます。0xA0～0xFFの値はほかの文字コードに変換できません。

JIS8
8bit JIS X 0201(ISO646)，カナあり
1バイト
－

JIS7
7bit JIS X0201(ISO646)，カナなし
1バイト
JIS8のサブセット

JIS7A
7bit JIS X0201(ISO646)，英小文字と制御コードを除く
1バイト
JIS7のサブセット

CJIS
CII用漢字コード（JIS X 0208 + JIS X 0212の組み合わせ）
2バイト
CII 2.1以降

IBM
IBM漢字コード
2バイト
IBM83

JEF
富士通漢字コード
2バイト
－

JISK
JIS X 0208
2バイト
－

JISKS
JIS X 0208開始コード,終了コード付き
開始コード：0x1B2442，終了コード：0x1B284A
2バイト（後続1バイトスペースだけ指定できます）
－

KEIS
KEISコード
2バイト
KEIS83
(0x4040, 0xA1A1はスペース扱い)

KEISS
KEISコード 開始コード,終了コード付き
開始コード：0x0A42
終了コード：0x0A41
2バイト（後続1バイトスペースだけ指定できます）
KEIS83
(0x4040, 0xA1A1はスペース扱い)

SJISK
シフトJISコード2バイトだけ
2バイト
－

EUC
Extended UNIXコード
混在
日本語

IBM_EBCDIC_MIX
IBM+IBM_EBCDIC混在 シフトIN,OUT付き
シフトIN：0x0F
シフトOUT：0x0E
混在
－

IBM_EBCDIK_MIX
IBM+IBM_EBCDIK混在 シフトIN,OUT付き
シフトIN：0x0F
シフトOUT：0x0E
混在
－

ISOJP
ISO2022-JP(拡張手法JIS X 0202による
ASCII+JIS X0208の組み合わせ)
混在
－

JEF_EBCDIC_MIX
JEF+IBM_EBCDIC混在 シフトIN,OUT付き
シフトIN：0x29
シフトOUT：0x28
混在
－

JEF_EBCDIK_MIX
JEF+IBM_EBCDIK混在 シフトIN,OUT付き
シフトIN：0x29
シフトOUT：0x28
混在
－

JISE
拡張手法JIS X 0202によるJIS X0201+JIS X0208+JIS X0212の組み合わせ
混在
JEDICOS対応

KEIS_EBCDIC_MIX
KEIS+EBCDIC混在 シフトIN,OUT付き
シフトIN：0x0A41
シフトOUT：0x0A42
混在
－

KEIS_EBCDIK_MIX
KEIS+EBCDIK混在 シフトIN,OUT付き
シフトIN：0x0A41
シフトOUT：0x0A42
混在
－

UCS4
UniCode (UCS-4)
混在
－

UNIC
UniCode (UCS-2)
混在
－

UTF16
UniCode (UTF-16)
混在
－

UTF8
UniCode (UTF-8)
混在
－

SJIS
シフトJISコード
混在
－

（凡例）

1バイト：1バイト文字コードです。

2バイト：2バイト文字コードです。

混在：1バイト／2バイト混在文字コードです。

－：該当しません。

要素が混在文字列型の場合は，表6-9のすべてのコードを使用できます。1バイト文字列，2バイト文字列の場合は，対応するコードだけ指定できます。文字列型数値属性の場合は，表6-9の1バイト文字列コード，UNIC，UTF16，又はUCS4を指定できます。セパレータに対する文字コードは，表6-9のすべてのコードを指定できます。ただし，シフトコードを伴う文字をセパレータとして定義することはできません。

6.3.2　文字コード使用時の注意点

各文字コード間では，基本的に同じ種別間だけで変換できます。次に文字コード間での変換可否を示します。

表6-10　文字コード間での変換可否

入力側／出力側 | 1バイト文字コード | 2バイト文字コード | １バイト／２バイト混在文字コード
1バイト文字コード | ○ | × | ○
2バイト文字コード | × | ○ | ○
1バイト／2バイト混在文字コード | △ | △ | ○

（凡例）

○：変換できます。

×：変換できません。

△：条件によって変換できます。

1バイト／2バイト混在文字コード型から1バイト文字コード型への変換は，文字列の内容がすべて1バイト文字の場合だけ変換できます。1バイト／2バイト混在文字コード型から2バイト文字コード型への変換についても同様です。

対象文字列中にユーザ定義文字（外字）がある場合で，コード変換が発生しないとき（入出力とも同じ文字コードのとき）は，そのままの値を受け付けます。文字コード変換が発生する場合は，不正文字の扱いとなります。なお，入出力がXMLの場合，トランスレータ内部ではUTF-16の扱いとなります。例えば，XML文書とローカルフォーマットが共にSJISである場合も，トランスレータ内部では文字コード変換が発生します。そのため，入出力がXMLの場合は注意してください。

また，EDI標準規格などと対応させて文字コードを使用する場合の注意事項について説明します。

＜この項の構成＞

(1)　XML

(2)　CII

(3)　UN/EDIFACT

(4)　Sea-NACCS

(5)　JEDICOS

(1)　XML

XML文書として使用できる文字コードを次に示します。

シフトJIS

UTF-8

UTF-16

ISO-10646-UCS-4

ISO-10646-UCS-2

EUC-JP

ISO-2022-JP

US-ASCII

XMLデータを変換する場合，XML文書のエンコーディングに関係なく，UTF-16へ変換してデータ変換されます。

(2)　CII

CIIのバージョンによって，使用する文字コードが異なります。トランスレータは，CII1.51，CII2.10，及びCII3.00に対応しています。

(a)　CII1.51

原則としてJIS8，JISKを使用します。メッセージグループ・ヘッダ（MGH），メッセージグループ・トレーラ（MGT）は「JIS7A」を使用します。

CIIデータの送受信者間でローカルな協定が結ばれている場合だけ，その他の1バイト，2バイト文字コードが使用できます。

(b)　CII2.10

原則として，X属性に対してはJIS8を，K属性に対してはCJISを使用します。オプションとして，X属性に対してSJISを，K属性に対してUNICを使用できます。

CIIデータの送受信者間でローカルな協定が結ばれている場合だけ，その他の1バイト，2バイト文字コードが使用できます。

(c)　CII3.00

原則として，X属性に対してはJIS8を，K属性に対してはCJISを使用します。オプションとして，X属性に対してSJISを，K属性に対してSJISK又はUNICを使用できます。

CIIデータの送受信者間でローカルな協定が結ばれている場合だけ，その他の1バイト，2バイト文字コードが使用できます。

(3)　UN/EDIFACT

トランスレータが対応するUN/EDIFACTの文字セットと，文字セットに対応する文字コードは次のとおりです。

文字セット「UNOA」を使用する場合は「JIS7A」

文字セット「UNOB」を使用する場合は「JIS7」

文字セット「UNOX」を使用する場合は「ISOJP」

上記以外のラテン文字，日本語以外の2バイト文字コードなどのUN/EDIFACTの文字セットには，トランスレータは対応しません。

(4)　Sea-NACCS

日本語（2バイト文字）を使用する項目を除き，Sea-NACCS EDI電文，Sea-NACCS EDIFACT電文ともに「JIS7A」を使用します。日本語（2バイト文字）を使用する項目は「EUC」を使用します。

(5)　JEDICOS

必ず「JISE」を使用します。EDIFACTの文字セットはUNOXになります。

6.4　変換処理の流れ

通常トランスレータは，入力データをすべてメモリへ展開した後，出力データを作成して，ファイルやメモリに出力します。グループ単位出力指定をした場合は，ラベルが指定されたコンポーネントの繰り返しと，その前後のコンポーネントに分けて，入力データのメモリ展開及び出力処理が行われます。

グループ単位出力指定をした場合の変換処理の流れを図6-4に示します。

図6-4　グループ単位出力指定をした場合の変換処理の流れ

図6-4の「Before」は，グループ単位出力指定コンポーネントより前に位置するコンポーネント群です。

入力フォーマットが複数ある場合は，グループ単位出力指定をしていないフォーマットも「Before」に含まれます。「After」は，グループ単位出力指定コンポーネントより後に位置するコンポーネント群です。出力フォーマットが複数ある場合は，グループ単位出力指定をしていないフォーマットも「After」に含まれます。

グループ単位出力指定コンポーネントは，1回出現するごとにデータが変換され，処理が繰り返されます。

グループ単位出力指定を複数のラベルに設定した場合も，同様に処理されます。上位のラベルで1回に処理されるデータに対して，下位のラベルでは，Beforeコンポーネント，グループ単位出力指定コンポーネント，Afterコンポーネントの順に変換処理されます。

図6-4の3.，6.，9.は，出力ファイルやメモリデータへの実際の出力を示しています。なお，下位ラベルのグループ単位出力指定コンポーネントの場合は，ワークファイルに出力され，最上位のグループのデータが出力される時点で，併せて出力先のファイルやメモリに出力されます。

入力データのメモリ展開及び出力データの作成では，トランスレータが各コンポーネントのデータ解析や個々の型変換をして，ツリーテーブルを作成します。ツリーテーブルは，MDLに定義されたツリーの順序でコンポーネント単位に処理されます。

＜この節の構成＞

6.4.1　入力コンポーネントの制御

6.4.2　出力コンポーネントの制御

6.4.1　入力コンポーネントの制御

コンポーネントの出現数によって，コンポーネントの出現判定及びコンポーネントデータの作成が繰り返されます。通常は，指定した出現回数又は出現回数決定式で定義した出現回数が，コンポーネントの出現数となります。可変回出現を定義した場合は，区切りとなるセパレータが現れるまで繰り返されます。EXISTWHILE関数，WHILE関数などの特殊ケースで出現回数を指定した場合は，条件が満たされる間，繰り返されます。

入力コンポーネントの制御の流れを図6-5に示します。

図6-5　入力コンポーネントの制御の流れ

まず，出現判定でコンポーネントが1回出現したと判定された場合，構造のコンポーネント及び型のコンポーネントが解析されます。

逐次構造のコンポーネントでは，構造に定義した子の順番に従って，子コンポーネントが処理されます。

選択構造のコンポーネントでは，順序決定式を定義した場合，対応する順序決定値を持つ子コンポーネントが処理されます。順序決定式を定義していない場合，子コンポーネントが順番に評価され，最初に処理対象に該当した子コンポーネントが処理されます。

構造の子コンポーネントの処理が完了した時点で，構造の条件式が判定されます。

型コンポーネントでは，型のサイズ分のデータを読み込んで，「6.7.1　データ型」で示すデータ型へ変換されます。可変長のデータの場合は，該当するセパレータが現れるまでのデータ長が型のサイズとなります。サイズ決定式を定義した場合は，サイズ決定式が評価された結果の値が型サイズとなります。データを読み込んだ後，値をチェックする場合は，値定義が判定されます。

構造のコンポーネント及び型のコンポーネントの処理が完了したら，コンポーネントに定義した条件式の判定，変数式の評価，及びカウンタの指定が開始されます。

6.4.2　出力コンポーネントの制御

コンポーネントの出現数によって，コンポーネントデータの作成が繰り返されます。固定回出現のコンポーネントを除いて，通常は，マップ式の評価結果で出現の有無が判定されます。マップ式の評価結果が%UNDEFとなった時点で終了となります。マップ式を定義していない場合は，最大出現数まで繰り返されます。出現回数決定式を定義した場合は，出現回数決定式が評価された結果の値が出現数となります。

出力コンポーネントの制御の流れを図6-6に示します。

図6-6　出力コンポーネントの制御の流れ

まず，出現判定でコンポーネントが1回出現したと判定された場合，構造のコンポーネント及び型のコンポーネントが作成されます。

逐次構造のコンポーネントでは，コンポーネントに定義したマップ式，及び構造下のXML属性を評価します。マップ式の評価結果が%UNDEFの場合，XML属性の評価以降は処理されません。評価した後，構造に定義した子の順番に従って，子コンポーネントが評価及び作成されます。評価遅延（%delay）を指定した場合，子コンポーネントは評価されません。%delay %nextを指定した場合は，次の兄弟コンポーネントが処理された後に評価されます。%delay nを指定した場合は，ここでは評価されないで，nが指すコンポーネントの評価後に評価されます。

選択構造のコンポーネントでは，コンポーネントに定義したマップ式，及び構造下のXML属性を評価します。順序決定式を定義した場合は，評価された後，対応する順序決定値を持つ子コンポーネントが処理されます。順序決定式を定義していない場合，子コンポーネントが順番に評価され，最初に処理対象に該当した子コンポーネントが処理されます。

構造の子コンポーネントの処理が完了した時点で，構造の条件式が判定されます。

型コンポーネントでは，コンポーネントに定義したマップ式が評価され，コンポーネントのデータ型（「6.7.1　データ型」で示すデータ型）が求められます。値をチェックする場合は，値定義が判定されます。サイズ決定式を定義した場合は，サイズ決定式が評価された結果の値が型のサイズとなります。その後，出力データの形式に整形されます。出力データの整形後，型の下のXML属性が評価されます。

構造のコンポーネント及び型のコンポーネントの処理が完了したら，コンポーネントに定義した条件式の判定，変数式の評価，%delay nの指定で遅延されているコンポーネントの処理，及びカウンタの指定が処理されます。

6.5　変換の規則

トランスレータが要素の値を入力や出力する場合，実際のデータとMDLで定義されたサイズに過不足があったり，ある数値型の要素の値を異なる数値型の要素へ代入したりする場合など，扱うデータ型によってトランスレータの処理が異なります。この節では，個々の場合でのトランスレータの対応について説明します。

＜この節の構成＞

6.5.1　異なる属性型同士での変換

6.5.2　入力データに対する規則

6.5.3　出力データに対する規則

6.5.1　異なる属性型同士での変換

基本的には，数値，文字列，バイト列，日付時刻の同じ分類の属性の型同士で変換できます。異なる分類の型に変換する場合の規則と注意事項を次に示します。

表6-11　異なる分類の属性の型同士での変換可否

入力
出力
変換規則

数値
文字列
±n.m形式で変換（有効数字だけ。正符号は付けない）します。結果は１バイト文字コードとなります。

バイト列
整数部だけ２進整数化します。符号は常に正符号の扱いとなります。

日付時刻
CCYYMMDDhhmmss形式と見なして日付時刻化，ゾーン部はありません。ただし，変換先が出力フォーマットの日付型コンポーネントの場合は，CCYYMMDD，時刻型コンポーネントの場合は，hhmmssと見なして変換します。
桁が不足する場合は，該当する桁を0と見なします。
桁あふれ部分は無視します。

文字列
数値
±n.m形式又は0xで始まる（16進表記）場合に数値化します。スペースは０の扱いとなります。
整数部の桁セパレータは使用できます（ただし16進表記以外の場合，3桁ごとのコンマだけを認識します）。
16進表記の場合，英大文字/英小文字の使用は任意で，文字列のバイト数は奇数でもかまいません。
数値として認識できない場合はエラーとなります。

バイト列
文字列をそのままバイト列化します。

日付時刻
CCTT-MM-DDThh:mm:ss，CCYYMMDDThhmmss，CCYYMMDDzzの場合に，日付時刻化します（zz：ゾーン部，ss：小数部可，ss以降の文字列はゾーン部と見なします）。
その他で，CCYY-MM-DD，CCYYMMDDならば日付型，hh:mm:ssならば時刻型に変換します。認識できない場合は，エラーとなります。

バイト列
数値
データエンディアン※に従って２進整数化します。最大60桁です。桁あふれのときはエラーとなります。

文字列
出力側要素の文字コードとして認識できる場合に文字列化します。認識できない場合はエラーとなります。

日付時刻
数値型に変換した上で，日付時刻型に変換します。

日付時刻
数値

日付型の場合：

CCYYMMDD形式の10進数化（整数8桁）に変換します。

時刻型の場合：

hhmmss形式の10進数化（整数6桁）に変換します。

日付時刻型の場合：

CCYYMMDDhhmmss形式の10進数化に変換します（整数14桁，SS値に応じて小数部があり，ゾーン部は無視します）。

文字列

日付型の場合：

CCYY-MM-DD形式に変換します。

時刻型の場合：

hh：mm：ss形式に変換します。

日付時刻型の場合：

CCYY-MM-DDThh：mm：ss形式に変換します。

バイト列
数値に変換した上で，バイト列型に変換します。

日付時刻
2項演算，比較演算子に対する処理の場合だけ，日付時刻形式での数値型に変換します。

注※

式中に16進定数で記述されたものはビッグエンディアンの扱いになります。その他は，データが属するフォーマットのエンディアンになります。

次に，変換時に発生するエラーについて説明します。

変換途中でエラーが発生した場合
データ型を変換するのは，評価する式の各項へ値を当てはめる時点，及び出力するコンポーネントの属性型に当てはめる時点です。そのため，データ型を変換した時点では正常でも，最終的に出力要素型へ変換する段階でエラーになることがあります。例えば，数値から文字列へ変換する時点では正常でも，出力先要素が2バイト文字コードであった場合，最終的に文字列変換ができずにエラーになります。

変換対象の数値の有効桁数が異なる場合
数値型同士の変換で，入力（マップ式を評価した結果の属性型）と出力（出力コンポーネントの属性型）の有効桁数が異なるときの処理については，「6.5.3　出力データに対する規則」を参照してください。例えば，小数部を持つ数値を整数型要素へ出力する場合，あふれ部分の切り捨てを指定していなければエラーになります。なお，数値演算中の桁数は，トランスレータの最大範囲で保たれます。

6.5.2　入力データに対する規則

入力データに対する規則について説明します。

トランスレータはMDLファイルで宣言された通りに入力データを解析し，指定された属性型の値と認識します。

入力データ中である要素として認識されるのは，MDLファイル内のサイズ指定でされた範囲内に記述されている内容です。例えば，入力データが「0123456789...」であるとき，先頭の要素が3バイト整数であれば，この要素は「012」＝12となります。数値型属性の場合は，MDLファイル内でその数値が取ることができる最大桁数が指定されています。省略時の最大桁数は，30桁です。入力データを解析した結果，数値が最大桁数を超える場合はエラーになります。

＜この項の構成＞

(1)　文字列型属性の埋め字

(2)　文字列型数値属性の埋め字

(3)　日付時刻属性の埋め字

(4)　文字列型数値属性の入力形式

(5)　開始／終了シフトコードを使用する文字列型

(6)　日付時刻型の規則

(7)　その他の属性の規則

(1)　文字列型属性の埋め字

文字列型に対して，不要文字削除指定がある場合は，埋め字部分はこの要素の値として認識しません。要素が占めるエリア内で，右寄せ／左寄せ指定がされたものとは反対側から，埋め字以外の文字が出現するまでを埋め字として認識します。次に例を示します。

入力データ          △△漢字△漢字△△
左寄せ指定時の値    △△漢字△漢字
右寄せ指定時の値    漢字△漢字△△

（凡例）

△：埋め字のスペースです。

開始／終了シフトコードを使用する文字列型（JISKS，KEISS）の場合，指定された埋め字は開始から終了シフトコード内で使用されます。例外的にシフトコード外で使用できる埋め字については「(5)　開始／終了シフトコードを使用する文字列型」を参照してください。上記の例では，入力データが次のようになります。

(S)△△漢字△漢字△△(E)

（凡例）

(S)：開始シフトコードです。

(E)：終了シフトコードです。

なお，2バイト文字列の場合は，埋め字も2バイトコードにしてください。

(2)　文字列型数値属性の埋め字

文字列型数値属性の場合，埋め字部分は，０又はスペースだけ使用できます。埋め字部分は，数値の有効桁として認識されません。ただし，左寄せの場合の埋め字はスペースだけです。数値型属性の場合は，右寄せにすることをお勧めします。

例として「123.456」という値を暗黙的小数部付数値型（8バイト，小数部3桁）で表すと次のようになります。

左寄せ・埋め字△　　123456△△
右寄せ・埋め字0　　00123456

数字列が省略され埋め字だけとなった場合，トランスレータは値を０と認識します。

(3)　日付時刻属性の埋め字

文字列型と同じです。パート部分で使用する文字を埋め字とすると，不正な結果となることがあるので，注意してください。

(4)　文字列型数値属性の入力形式

埋め字の指定にかかわらず，符号の外側（要素エリアの空き部分），符号と数字列の間にスペース文字があってもかまいません（トランスレータはスペース文字を無視するか，０として認識します）。数字列の途中でスペースなどの数字以外の文字が出現した場合はエラーになります。ただし，整数型，実数型で桁セパレータを使う指定がある場合，桁セパレータ文字は除きます。桁セパレータは整数部だけで，3桁ごとに出現しなければなりません。また，数字列の先頭が桁セパレータであってはなりません。

(5)　開始／終了シフトコードを使用する文字列型

文字列で開始・終了シフトコードを使用する文字コード型データの場合，シフトコードのほかに，1バイトのスペース文字があってもかまいません。該当する文字コードは，JISKSとKEISSです。左寄せの例を次に示します。

(S)漢字△△漢字△△(E)▼▼

（凡例）

(S)：開始シフトコードです。

(E)：終了シフトコードです。

△：埋め字として指定された文字（２バイト文字）です。

▼：１バイトのスペース文字です。

KEISシフト付（KEISS）の場合：EBCDIKスペース文字（0x40）

JISシフト付（JISKS）の場合：JISスペース文字（0x20）

(6)　日付時刻型の規則

最終パートの後続文字列の次（後続文字列がない場合は最終パートの数値文字の次）以降を，ゾーン部文字列と見なします。数値の桁数，パート間の区切り文字，ゾーン部について，型定義とのマッチングします。秒ssパートの小数部については，指定桁数以内で連続する数字列を小数部と見なします。各パート値について，通常は範囲を検証しません。実行時オプション「-DTM」の指定がある場合，「6.2.4(3)　日付時刻型」の「表6-8　日付時刻型のパート」に示す範囲内であるかを検証します。省略されたパートは，値０を仮定します。

(7)　その他の属性の規則

ゾーン形式数値，パック形式数値の場合，符号として使用する値（４ビット数値）が決まっています。使用できない数値が入力データ中に現れた場合はエラーになります。符号の値については「6.2.1　数値」を参照してください。

2進整数の場合，トランスレータはフォーマットで宣言されているエンディアンに基づいて値を解釈します。初期値は，ビッグエンディアンです。

バイト列に対しては，トランスレータはサイズだけを意識し，ビットパターンは解析しません。

6.5.3　出力データに対する規則

MDL（FDL）で出力先のコンポーネントに対してサイズあふれ時の対応や，不要文字の削除が指定できます。通常，入力データを基に出力データのマップ式を評価した結果の値が，MDLで定義されている出力側の要素の型と不一致，又はサイズが超過する場合，トランスレータでエラーになります。

＜この項の構成＞

(1)　通常の出力形式

(2)　不要文字削除指定時の処理

(3)　桁あふれ時の処理

(4)　日付時刻型出力時の規則

(5)　その他出力時の規則

(1)　通常の出力形式

トランスレータは，不足サイズ分を出力側要素の型定義で指定されている埋め字で補います。

基本的にトランスレータは，文字列型数値属性で埋め字が０の場合は，前符号と数字列の間に埋め字を置きます。その他の属性は，出力エリアの端からデータ部分までの間に埋め字を置きます。数値は有効桁部分を出力します。ただし，最大桁数指定がある場合は，数字列部分に前０を付け，桁数をそろえて出力します。

最大桁数指定ありで最大桁数に満たない数値を有効桁以降だけを出力したい場合には，不要文字削除指定が必要です。

小数点は小数部桁数に含めません。

不要文字削除指定なしで，入力データ中に埋め字がある文字列を出力する場合，入力データの埋め字部分も文字列として出力します。

(2)　不要文字削除指定時の処理

不要文字削除指定をした場合，データ中から不要な文字を削除して出力します。また，数値の場合は，桁数合わせのための０を付けないで出力します。不要文字削除指定が有効になる属性は，文字列型数値，文字列型，及び日付時刻型です。

不要文字として削除されるのは，最小出力サイズを超える部分のスペース文字（数値型文字列，文字列，日付時刻型），又は０（数値型文字列，日付時刻型の秒パート小数部）です。日付，時刻を文字列型数値と見なした場合の上位桁の０も不要文字と見なします。

暗黙的小数部付数値型の場合，この指定があっても小数部の下位桁の０は必ず出力します。

(3)　桁あふれ時の処理

出力するデータが指定されているサイズより大きくてもエラーにしない場合や，小数部があるデータを整数型要素に出力する場合などに指定します。原則的に，数値は小数部から切り捨て，次に上位の桁からカットします。暗黙的小数部付数値の小数部桁は残します。文字列やバイト列は，データの末尾から切り捨てます。日付時刻は，文字列に組み立てた状態のデータを末尾から切り捨てます。

データの切り捨てをした場合，トランスレータはワーニングを出力します。

(4)　日付時刻型出力時の規則

ゾーン部の指定（文字列）があれば，指定されたゾーン部文字列を出力します。ゾーン部出力指定があり，ゾーン文字列の定義がない場合，入力値がゾーン部を持つ日付時刻型であれば，入力値のゾーン部文字列を出力します。その他はゾーン部なしで出力します。

各パート値については，通常は範囲を検証しません。実行時オプション「-DTM」の指定がある場合，「6.2.4(3)　日付時刻型」の「表6-8　日付時刻型のパート」に示す範囲内であるかを検証します。

(5)　その他出力時の規則

埋め字，不要文字削除，桁あふれ切り捨ての処理の優先順序を次に示します。

不要文字削除＞桁あふれ切り捨て＞埋め字

6.6　式

FDLエディタ及びMDLエディタで定義する式及び式中で使用できる定数とコンポーネント名について説明します。式中で使用できるのは，定数，コンポーネント名のほかに，演算子，関数などがあります。式中で使用できる演算子及び関数については「6.7　演算子及び関数」を参照してください。

FDLエディタ及びMDLエディタで定義する式のうち，条件式，サイズ決定式，順序決定式，出現回数決定式，デフォルト式，マップ式，及び変数式について説明します。

＜この節の構成＞

6.6.1　条件式

6.6.2　サイズ決定式

6.6.3　順序決定式

6.6.4　出現回数決定式

6.6.5　デフォルト式

6.6.6　マップ式

6.6.7　変数式

6.6.1　条件式

条件式は，式が定義された構造又はコンポーネントの正当性を評価するための評価規則式です。条件式は，入力又は出力側の構造又はコンポーネントに対して定義する式で，FDLエディタの［条件式］ダイアログに記述します。コンポーネントの条件式は，MDLエディタでも定義できます。［条件式］ダイアログは，式を定義する［構造のプロパティ］ダイアログ，又はコンポーネントの［コンポーネントのプロパティ］ダイアログで，［条件式］ボタンをクリックすると表示されます。

図6-7　［条件式］ダイアログ

条件式は，テキストを直接入力したり，ダイアログから演算子，関数などを選択したりして記述します。

トランスレータは定義された条件式で，変換する入力データ又は出力データを評価します。条件式を評価した結果が不当な場合は，エラーになります。

構造に対して定義した条件式は，その構造がどこで使用されても必ず評価されます。一方，コンポーネントに対して定義した条件式は，そのコンポーネントに対してだけ評価されます。

次に例を示します。

図6-8　条件式の例

構造STRUCT自身の構造の条件式として「#@a＞0」（子コンポーネントaの値が正であること），及びその子コンポーネントxに対して，コンポーネントの条件式 「# == 1」（自身の値が１であること）を定義しておきます。さらに，ROOT以下のツリーの2.のコンポーネント部分に，構造STRUCTに対してコンポーネントの条件式「#@a == #@b」（子のaとbの値が一致すること）を定義します。

この場合，1.の構造STRUCTのデータに対しては，「x == 1」と「a＞0」の二つの条件が評価されます。一方，2.の構造STRUCTのデータに対しては，更に「a == b」の条件を合わせて，三つの条件が評価されます。

6.6.2　サイズ決定式

サイズ決定式は，型コンポーネントのサイズが動的に決まる場合に，コンポーネントのサイズを定義する式です。サイズ決定式の評価結果によって，対応するコンポーネントのサイズが決まります。レングスタグ構造を持つデータなどに適用されます。サイズ決定式を評価した値は，正の整数でなければなりません。

サイズ決定式は通常入力側のコンポーネントに用いる式で，［サイズ決定式］ダイアログに記述します。［サイズ決定式］ダイアログは，式を定義するコンポーネントの［コンポーネントのプロパティ］ダイアログで［サイズ決定式］ボタンをクリックすると表示されます。

図6-9　［サイズ決定式］ダイアログ

サイズ決定式は，テキストを直接入力したり，ダイアログから演算子，関数などを選択したりして記述します。

次に例を示します。

図6-10　サイズ決定式の例

入力フォーマットである場合，トランスレータはコンポーネントLENの値をコンポーネントDATAのサイズと認識します。逆に，出力フォーマットの場合，LENの値をDATAの固定サイズとして処理します。出力フォーマットでDATAのサイズ決定式がない場合は，コンポーネントDATAのサイズは代入される値によって決まります。

出力フォーマットでは，可変長コンポーネントのサイズは，代入元のデータのサイズに従うのが一般的です。レングスタグ構造の長さコンポーネントは，評価順序遅延指定のマップ式でデータ長を代入します。図6-10の例では，マップ式は次のようになります。

LENの式　　 %delay %next = LENGTH(¥1@DATA);
DATAの式　　(任意の式);

6.6.3　順序決定式

選択構造の子コンポーネントは，定義された順に変換するデータとコンポーネントが合うかどうかを評価します。

例えば，選択構造「DATA」があります。この構造は，「MSG1」「MSG2」「MSG3」という子コンポーネントを持っています。

コンポーネントをMSG1，MSG2，MSG3の順に定義した場合，まず，コンポーネント「MSG1」を評価して正当であれば「MSG1」を選択し，不当であれば「MSG2」を評価します。コンポーネント「MSG2」が正当であれば「MSG2」を選択し，不当であれば「MSG3」を評価します。つまり，選択構造のコンポーネントは定義順に評価され，最初に正当なものが選択されます。

この評価順序は，順序決定式を定義して変更できます。データの値によって選択するコンポーネントが決まっている場合，直接そのコンポーネントを選択する指定ができます。親の選択構造のコンポーネントには評価順序の条件を表す式（順序決定式）を記述し，子コンポーネントには自コンポーネントを選択する場合の値（順序決定値）を指定します。以上のように定義しておくと，データ変換時に式を評価し，同じ値を持つコンポーネントを優先的に評価します。

評価順序を決定する式は，［順序決定式］ダイアログに記述します。［順序決定式］ダイアログは，式を定義する選択構造の［構造のプロパティ］ダイアログで［順序決定式］ボタンをクリックすると表示されます。

図6-11　［順序決定式］ダイアログ

順序決定式は，テキストを直接入力したり，ダイアログから演算子，関数などを選択したりして記述します。

評価順序を決定する値は，［順序決定値］ダイアログに記述します。［順序決定値］ダイアログは，値を定義するコンポーネントの［コンポーネントのプロパティ］ダイアログで［順序決定値］ボタンをクリックすると表示されます。

図6-12　［順序決定値］ダイアログ

順序決定値は，値の属性を指定して，値を直接入力します。

評価順序は対で指定するので，選択構造に対して順序決定式を定義したら，子コンポーネントに対して順序決定値を定義します（一つの選択構造に対して複数の子コンポーネントに値を定義します）。

「MSG1」「MSG2」「MSG3」というコンポーネントを持つ選択構造「DATA」の場合の例を次に示します。

図6-13　順序決定式の例

この構造に対して，選択構造「DATA」の子コンポーネントを選択する順序決定式を定義します。

要素「メッセージ番号」の値によって子コンポーネントを選択するので，構造「DATA」に対してメッセージ番号のコンポーネント名を記述します。

ROOT@HEAD@メッセージ番号

コンポーネント名は，ルート構造から対象コンポーネントまでを「@」で連結して指定します。

また，n階層上のコンポーネントを指定する略記法「¥n」を使用した順序決定式を次に示します。「¥1」で「DATA」の1階層上の構造「ROOT」を示します。

¥1@HEAD@メッセージ番号

また，子コンポーネントには順序決定式に対応する値として，メッセージ番号の値を定義します。「MSG1」に対しては「1」，「MSG2」に対しては「2」，「MSG3」に対しては「3」を定義します。以上のように定義しておくと，変換するデータのメッセージ番号が「2」の場合は，コンポーネント「MSG2」が優先的に選択されて評価されることになります。なお，選択構造の順序決定式の指定条件が，子コンポーネントの順序決定値のどれにも合わなかった場合は，次のように処理されます。

順序決定値が定義されていない子コンポーネントがある場合，そのコンポーネントとデータが合うかどうかを調べます。合わない場合は，エラーになります。

順序決定値が定義されていない子コンポーネントがない場合，選択できるものがないので，エラーになります。

次に，ORDEROFFSET関数を使用して順序決定式を定義する方法について説明します。

通常，順序決定式では，式を定義する選択構造よりも前に出現するコンポーネントを指定します。しかし，入力フォーマットの場合，ORDEROFFSET関数を使用して，選択条件の値にしたいコンポーネントが出現していない状態で，選択条件を指定できます。ORDEROFFSET関数の使用例を次に示します。

図6-14　ORDEROFFSET関数の使用例

図6-14の例では，選択構造の子の先頭から10バイトの位置に，メッセージを識別するための区分があります。メッセージMSG2は，「M2」という区分で識別されています。

ORDEROFFSET関数で順序決定式を指定する場合の規則を次に示します。

入力フォーマットで使用する。

順序決定式を単独の項として指定する。

対応する順序決定値は，バイト列として指定する。

ORDEROFFSET関数で指定した位置にデータが存在しない場合は，エラーになります。ORDEROFFSET関数については，「6.7.3　関数」を参照してください。

6.6.4　出現回数決定式

出現回数決定式は，可変回出現コンポーネントの出現数を動的に決める場合に定義します。EXISTWHILE関数又はWHILE関数による式以外は，値が必ず整数値になる式を記述してください。ただし，サイズ決定式と異なり式の値は０でもかまいません。

型コンポーネントのサイズ決定式と同様に，入力フォーマット内では，コンポーネント出現数を動的に決める指定と，出現回数決定式を組にして定義します。出力フォーマットでは，出現数を動的に決める指定だけでもかまいません。

図6-15　出現回数決定式の例

入力フォーマットで指定された場合，出現数を動的に決める指定がされたコンポーネントは，出現回数決定式の評価結果の値数だけデータがあるものとして処理します。上記の例では，Sの出現数はnumの値です。

出力フォーマットで出現数を動的に決める指定がされた場合，コンポーネントが出現回数決定式を持ち，そのコンポーネント評価時点で同式の値が決まるときは，このコンポーネントは出現回数決定式の評価値を出現数とします。出現回数決定式がないか，コンポーネント評価時に式の値が決まらない場合は，マップ式の評価結果に従って出力を制御します。

出力フォーマットでは出現数を動的に決める指定だけを実行し，コンポーネントの出現数はマップ式で制御するのが一般的です。この場合，コンポーネントの出現数を表す型コンポーネントには，評価順序遅延指定のマップ式で出力数を代入するようにします。

図6-15の例では，次のようにマップ式を記述します。

numの式：%delay %next = ARRAYSIZE(¥1@S);
Sの式：= ...@X[INDEX(0)];

次に，EXISTWHILE関数又はWHILE関数を使用して出現回数決定式を定義する方法について説明します。

入力フォーマットの場合は，EXISTWHILE関数又はWHILE関数を使用して，条件が満たされる間コンポーネントが出現する指定ができます。EXISTWHILE関数を使用した場合，まだ出現していないデータの値を利用して，コンポーネントの出現の有無を決定できます。コンポーネントの出現の有無は，コンポーネントが評価される時に決定されます。

＜この項の構成＞

(1)　EXISTWHILE関数の使用例

(2)　WHILE関数の使用例

(3)　EXISTWHILE関数とWHILE関数を組み合わせた使用例

(4)　EXISTWHILE関数又はWHILE関数で出現回数決定式を指定する場合の規則

(1)　EXISTWHILE関数の使用例

EXISTWHILE関数の使用例を次に示します。

図6-16　EXISTWHILE関数の使用例

図6-16の例は，「Data1」「Data21」「Data22」の出現がコンポーネント中の特定位置のデータで切り替わる例です。「Data1」「Data21」「Data22」の内容は，次のようになっています。

「Data1」の出現回数決定式は，データの先頭4バイト目からの2バイトが0x4431（"D1"）である間をData1の出現と見なす，という意味になります。同様に「Data21」の場合は，データの先頭4バイト目からの2バイトが0x4432（"D2"）で，かつ10バイト目からの3バイトが0x232323（"###"）である間をData21の出現と見なします。「Data22」の場合は，データの先頭4バイト目からの2バイトが0x4432（"D2"）で，かつ10バイト目からの3バイトが0x232323（"###"）でない場合をData22の出現と見なします。

EXISTWHILE関数の条件には，固定されたデータ位置を指定する必要があります。ただし，1コンポーネントのデータ長は任意です。

(2)　WHILE関数の使用例

WHILE関数の使用例を次に示します。

図6-17　WHILE関数の使用例

図6-17は，レングスタグ構造「ITEM」の可変回繰り返しが，「RECORD」直下のコンポーネント「length」で定義したサイズによって制御される例です。「RECORD」の1出現のサイズは，このコンポーネント「length」で決定されます。ここでは，型コンポーネント「length」のサイズを「4」とします。WHILE関数の条件式の判定で，これまでに読み込んだデータのサイズが「RECORD」のサイズ以内である間，「RECORD」の子コンポーネント「ITEM」が出現すると見なします。

(3)　EXISTWHILE関数とWHILE関数を組み合わせた使用例

EXISTWHILE関数とWHILE関数を組み合わせた使用例を次に示します。

図6-18　EXISTWHILE関数とWHILE関数を組み合わせた使用例

図6-18は，同一構成（ヘッダ部「HEAD」とメッセージ部「M1」～「Mn」）を持つ「MESSAGE」の繰り返しで，「HEAD」の情報が前回と異なる場合に，親コンポーネント「GROUP」が切り替わる例です。初回の条件はWHILE関数，2回目以降はEXISTWHILE関数によって判定されます。なお，EXISTWHILE関数の第4パラメタはバイト列であるため，図6-18の「mno」「name」が文字列の場合，不要文字削除指定を「OFF」にしてください。不要文字削除指定については，「6.1.1(1)(e)　不要文字削除指定」を参照してください。

(4)　EXISTWHILE関数又はWHILE関数で出現回数決定式を指定する場合の規則

EXISTWHILE関数又はWHILE関数で出現回数決定式を指定する場合の規則を次に示します。

入力フォーマットで使用する。

出現回数決定式を単独の項として指定するか，又は複数のEXISTWHILE関数又はWHILE関数を「&」又は「|」で結ぶ。

EXISTWHILE関数で指定した位置にデータが存在しない場合は，関数の指定条件が満たされないため，コンポーネントの出現が終了したと見なされます。また，EXISTWHILE関数の第4パラメタ（判定する値）又はWHILE関数の第1パラメタ（条件式）による評価は，コンポーネントが出現するごとに行われます。EXISTWHILE関数及びWHILE関数については，「6.7.3　関数」を参照してください。

6.6.5　デフォルト式

デフォルト式は，型コンポーネントの初期値を定義する定数の代入式です。

デフォルト式を定義したコンポーネントにマップ式が定義されなかった場合に評価されます。又は，実行時オプション「-DEFMAP」が指定されていて，このコンポーネントのマップ式評価エラーになった場合，又はマップ式評価結果が%DEFAULT定数となった場合に評価されます。

デフォルト式として記述する定数に，予約定数は使用しないでください。

デフォルト式は，マップ式と同様に個別指定ができます。詳細については，「6.6.6(8)　全体式と個別式」を参照してください。

6.6.6　マップ式

出力フォーマットのコンポーネントの値を定義するための式です。マップ式は，MDLエディタのマップビューに記述します。マップビューを次に示します。

図6-19　マップビュー

マップ式の左辺には，出力フォーマットリストで選択しているコンポーネントの名前が表示されます。マップ式の右辺には，左辺のコンポーネントに対するマップ式を記述します。マップ式を記述するための規則について次に説明します。

一つのマップ式は，複数行にわたって記述できます。途中に改行が入ってもかまいません。

一つのコンポーネントに対して合計が30,000バイトまで記述できます。改行コードは2バイトとして数えます。

1行当たりのバイト数と行数の制限はありません。

コンポーネントが複数回出現する場合，一つのコンポーネントに対して，複数のマップ式を定義できます。ただし，一つの式の末端には，必ずセミコロン「;」を付けてください。

式中で使用するコンポーネント名は，グローバル名（フォーマット名から対象コンポーネントまでを「@」で連結したもの）で入力してください。

マップ式左辺の先頭に代入式の等号「=」を記述してください（評価順序遅延指定，配列コンポーネントの複数マップ式を除きます）。ただし，コンポーネントをマップビューにドラッグ＆ドロップして初めて式を定義した場合は，自動的に等号が挿入されます。左辺が配列コンポーネントの場合は，括弧を含めたインデクス部分の後に等号を記述し，その後に右辺を記述してください。

マップ式には，複数の種類があります。

各マップ式の記述方法について次に説明します。

＜この項の構成＞

(1)　要素のマップ式

(2)　構造のマップ式

(3)　評価順序遅延指定のマップ式

(4)　NULLマップ式

(5)　UNDEFマップ式

(6)　XML属性のマップ式評価

(7)　無限回出現コンポーネントのマップ式

(8)　全体式と個別式

(9)　式表記と出力規則

(1)　要素のマップ式

出力側のフォーマットの型コンポーネントに対して定義し，そのコンポーネントの値を決める式です。マップ式を記述するコンポーネントがDTDフォーマットのEMPTY要素の場合，この式はEMPTY要素の出力の有無を決めるために使用され，値そのものは無視されます。

次に例を示します。

図6-20　要素のマップ式の例

Xの値としてA，Yの値としてB+Cの結果が出力されます。

(2)　構造のマップ式

型コンポーネントだけでなく，構造コンポーネントに対してもマップ式が定義できます。CII標準のマルチ明細のように，構造が複数回出現する場合に構造のマップ式を記述します。この場合，対応付けをする親コンポーネントの構造同士でマップ式を記述し，その子コンポーネントのマップ式に「$」を用いて親コンポーネントのマップ式を引き継ぐ形で記述します。この記述方法によって，親コンポーネントの構造間では構造としての出現を対応付け，その構造の個々の子コンポーネントの対応を決めることができます。

トランスレータでは，複数回出現する構造に対して構造のマップ式を定義し，その子コンポーネントのマップ式に「$」を用いて親コンポーネントのマップ式を引き継ぐ方法を推奨しています。ただし，無限回出現できる構造に対しては，原則として「INDEX(0)」を使用した1コンポーネントの代入式でなければいけません。

次の構造を例に，構造のマップ式について説明します。

図6-21　構造のマップ式の例

入力側の構造「MM」と出力側の構造「SS」の間でマップ式を定義しています。この場合，「SS[i]@X = MM[i]@A（i = 1, 2, 3）」の意味になり，構造「MM」と構造「SS」の持つコンポーネント同士が対応付けられます。

(3)　評価順序遅延指定のマップ式

マップ式の評価順序を変更する指定です。通常のマップ式では，フォーマットに定義されたコンポーネントの順序に従い，コンポーネントが出現した時点で値を決定します。しかし，コンポーネントのサイズが次に出現するコンポーネントによって決まるような場合，次のコンポーネントが評価されていない時点では値を決定できません。

このようなとき，マップ式の評価順序を遅延させるために，評価順序遅延（%delay）を指定します。評価順序遅延の指定には，次の2種類があります。

評価するコンポーネントの直後の兄弟コンポーネント（次のコンポーネント）が評価されるまで待機するように指定（%delay %next）します。

評価するコンポーネントのn階層上の親の子コンポーネントがすべて決まるまで待機するように指定（%delay n）します。評価順序遅延を指定するコンポーネントの位置を起点とした階層数「n」を「%delay」後に指定します。

評価順序遅延の指定は，マップビュー内にテキスト記入するか，又は記号として選択して指定できます。

次の構造を例に，評価順序遅延の指定について説明します。

図6-22　評価順序遅延指定のマップ式の例

この例では，コンポーネント「B」「C」は可変長のサイズを持ち，コンポーネント「A」は構造「ROOT」のサイズを表す固定長要素とします。この例でコンポーネント「B」に対して評価順序遅延の指定をする場合の例を示します。なお，マップ式で使用する「LENGTH」は，引数で指定されたコンポーネントのサイズを計算する関数です。

構造「ROOT」がコンポーネント「C」を持たない場合
コンポーネント「A」の値はコンポーネント「B」を評価すれば決まるので，コンポーネント「A」のマップ式は，直後の兄弟コンポーネントが決まったら評価する，という指定（%delay %next）になります。マップ式は，次のように記述します。

%delay%next = LENGTH(OUT@ROOT);

構造「ROOT」がコンポーネント「C」を持つ場合
コンポーネント「A」の値はコンポーネント「C」まで評価しないと決まらないので，コンポーネント「A」のマップ式は，1階層上のコンポーネントが決まったら評価する，という指定（%delay n）になります。マップ式は，次のように記述します。

%delay 1 = LENGTH(OUT@ROOT);

評価順序遅延の指定の注意事項

評価順序遅延の指定は，マップ式の左辺に記述してください。

評価順序遅延の指定は，選択構造のコンポーネントに対しては指定できません。

「%delay %next」を指定する場合，「%next」が指す次のコンポーネントには「%delay」を含んだマップ式は定義できません。

構造全体のマップ式評価を遅延させる場合は，構造に対して「%delay %next;」又は「%delay n;」と記述してマップ式を定義します。

親（先祖）コンポーネントの階層数を指定した場合，階層数が示すコンポーネントから，評価順序遅延マップ式を指定したコンポーネントが出現するまでの間に，選択構造のコンポーネントがあってはいけません。

マップ式の評価順序遅延の指定は，同じ親コンポーネントを持つ兄弟コンポーネントの中で複数指定できません。

評価順序遅延を指定するコンポーネントのサイズは固定です（可変長要素，及び可変回数出現するコンポーネントを含む構造などには，評価順序遅延を指定してはいけません）。

(4)　NULLマップ式

ある条件によってコンポーネントを出力するかどうかを指定したい場合，定数「NULL」をマップ式の値として記述できます。「NULL」を指定した場合，そのコンポーネントに対してはマップ式を定義していないことになり，そのコンポーネントは出力されません。

次に例を示します。

= IF(EXIST(A), "aaa", NULL);

この場合，コンポーネント「A」がある場合は，"aaa"を代入します。ない場合は，マップ式を記述したコンポーネントを出力しません。

Sea-NACCS EDI電文フォーマットのコンポーネントに対してNULLマップ式が記述された場合は，スペース文字を出力します。XML要素に対してNULLマップ式が記述された場合は，EMPTY要素と見なし，タグだけを出力します。

NULLマップ式の注意事項

コンポーネントが省略できない場合に「NULL」をマップ式の値として記述すると変換時にエラーになります。

(5)　UNDEFマップ式

コンポーネント未定義を表すマップ式を記述する場合，%UNDEF定数を使用します。主に次の二つの用法があります。

選択構造の子コンポーネントを，意図的に選択しない

可変回出現コンポーネントの出力を終了させる

1.は，特に出力XMLフォーマットに対して有効です。XMLフォーマットの場合，通常は選択構造の順序決定式と順序決定値は設定されないため，選択構造の２番目以降の子コンポーネントを出力するためには，1番目の子コンポーネントのマップ式としてエラーになるような式を記述する必要があります。このような式としてUNDEFマップ式を記述できます。

なお，省略できる子コンポーネントに%UNDEF定数をマッピングした場合，ほかに妥当な子コンポーネントがないときは，選択構造の子コンポーネントが省略されることになります。このような場合は，%UNDEF定数をマッピングするのではなく，未使用のコンポーネントを指定して，コンポーネントを除外してください。

UNDEFマップ式の例を示します。

図6-23　UNDEFマップ式の例

2.は，可変回出現コンポーネントの出力数を，入力コンポーネント数に関係なく決めたい場合に適用する方法です。通常，可変回出現コンポーネントには，入力コンポーネントを代入する式を記述します。さらに，INDEX関数を使用することで，入力コンポーネントの数だけ出力するのが一般的です。しかし，場合によっては，固定数分だけ出力したい場合もあります。このような場合は，IF文のマップ式と%UNDEF定数を使用して，意図した数量分を出力できるようにします。

Xは入力コンポーネントAの数だけ出力されます。Yは最大2回出力されます。

%UNDEFは，INDEX関数を含むパスの代入式を評価した結果，入力コンポーネントが終了したときと同じ状態と表すものです。なお，XML要素に対して%UNDEFマップ式が記述された場合は，タグを含めてデータを出力しません。

(6)　XML属性のマップ式評価

トランスレータは，XML属性を，構造又は型の下位にあるものとして扱います。式の評価規則は次のとおりです。

属性のパスは「属するコンポーネントのグローバル名@@属性名」として表記します。

パス上で属性自身はインデクスを持ちませんが（１固定），INDEX関数を使用できます（...@@attr[INDEX(0)]など）。

属性が属するコンポーネントの式評価後に，属性リストの順序（MDLエディタでの表示順）に従ってマップ式を評価します。

属性が属するコンポーネントの式に評価順序遅延指定がある場合，上記に従った結果として，属性の式の評価も同時に遅延されます。

属性のマップ式に対して，評価順序遅延指定%delayは指定できません。

マップ式が未定義の場合，DTDで定義されたデフォルト値を設定します。

属性のマップ式で使用する階層指定（¥n，INDEX関数引数など）は，属性が属するコンポーネントを基点とします。

#は属性が属するコンポーネントを表します。

属性のマップ式とデフォルト値の出力の関係を次に示します。

列挙型（デフォルト値有り）

マップ式の評価結果を出力します。マップ式がない場合はデフォルト値を出力します。

マップ式の評価結果がUNDEFの場合は，値を出力しません。

マップ式の評価結果（UNDEF以外）に対しては，列挙された値との合致を検証します。

#REQUIRED属性

マップ式の評価結果を出力します。評価結果がNULLの場合は，NULL文字を出力します。

評価結果がUNDEF又はマップ式がない場合は，結果としてエラーになります。

#IMPLIED属性

マップ式の評価結果を出力します。NULLの場合は，NULL文字を出力します。

評価結果がUNDEF又はマップ式がない場合は，値を出力しません。

#FIXED属性

マップ式の評価結果を出力します。マップ式がない場合は，デフォルト値を出力します。

マップ式の評価結果がUNDEFの場合は，値を出力しません。

マップ式の評価結果（UNDEF以外）に対しては，デフォルト値との合致を検証します。

属性のマップ式の例を次に示します。「e」はコンポーネント，「attri」はXML属性を表します。

図6-24　属性のマップ式の例

コンポーネントの代入式

入力側のコンポーネントの値を属性値として代入，インデクスはeに対応する

eの入力元コンポーネント（XMLとして）の属性attrの値を代入する

現在のeコンポーネント値に従って属性値を決定する

eのコンポーネント値に従って属性値の出力有無を決定する

eのコンポーネント値に従って1番目のeの属性値と同じ値を代入する

(7)　無限回出現コンポーネントのマップ式

無限回出現コンポーネントに対しては，出力の終了が明確に判明するマップ式を記述する必要があります。通常は，INDEX(0)を含むパスの代入式で，特殊な例として%UNDEF定数による出力終了を宣言する式です。

許容されるマップ式の形態は全体式であり，次のどれかになります。

= xxx[INDEX(0)];          ・・・1.
= %UNDEF;                 ・・・2.
= IF (条件, <A>, <B>);    ・・・3.

<A><B>は，IF文の条件によって有限回数以内の評価と見なされる場合は任意です※。その他の場合は，1.～3.でなければなりません。IF文がネストしてもかまいません。

注※　例えば，= IF（INDEX（0）＜10，（任意の式），%UNDEF）；のようなケースです。ただし，条件はINDEX（0）と定数の比較でなければなりません。

(8)　全体式と個別式

マップ式とデフォルト式には，コンポーネントの全出現に対して一つの式を定義する全体式と，個々の出現に対して式を定義する個別式があります。MDLエディタのドラッグ＆ドロップで作成される式は，全体式です。

個別式は，個々の出現ごとに別々の値や，コンポーネントを代入したい場合に使用します。全体式と個別式が両方指定された場合は，個別式が優先されます。

全体式の形式： = 式;
個別式の形式： [インデクス] = 式1; [インデクス] = 式2;...

次に例を示します。コンポーネントＡには全体式，コンポーネントＢには個別式，コンポーネントＣには全体式と個別式を記述しています。

図6-25　全体式と個別式の例

(9)　式表記と出力規則

マップ式として次のように記述した場合について説明します。

= IN@xxx[INDEX(0)];   ・・・1.
= %NULL;              ・・・2.
= %UNDEF;             ・・・3.

マップ先がXMLの型コンポーネントの場合

入力側xxxの出現数分データを出力し，途中にNULLがある場合は空要素として出力します。

空要素として出力します。

タグを含めて出力しません（コンポーネントが省略できなければ，結果としてエラーになります）。

マップ先がXMLの構造コンポーネントの場合

入力側xxxの出現数分データ出力，途中のNULLは出力しません。

タグを含めて出力しません。

タグを含めて出力しません（コンポーネントが省略できなければ，結果としてエラーになります）。

マップ先がXML以外のコンポーネントの場合

入力側xxxの出現数分データ出力します。

出力しません（コンポーネントが省略できなければ，結果としてエラーになります）。

出力しません（コンポーネントが省略できなければ，結果としてエラーになります）。

6.6.7　変数式

あるコンポーネントが出現した時の変数の値を更新する式です。要素のマップ式と同じ内容を定義できます。要素のマップ式については，「6.6.6(1)　要素のマップ式」を参照してください。一つのコンポーネントに対して，複数の変数式を指定できます。ただし，変数式で定義する変数は省略できないコンポーネントと同様に扱われ，出現回数は1回だけになります。

変数式の評価規則は次のとおりです。

変数式は，式を定義したコンポーネントが1回出現した時に評価されます。

変数式を定義したコンポーネントが省略された場合は，変数式は評価されません。

変数式は，式を定義したコンポーネントが出現した回数の分だけ評価されます。

変数のパスは，「フォーマット名@変数名」で表記します。

変数自体は，インデクスを持ちません。

一つのコンポーネントの中では，変数式は式定義順序に従って評価されます。

変数式に対しては，評価順序遅延（%delay）を指定できません。ただし，変数式を定義したコンポーネントに対して評価順序遅延（%delay）が指定されている場合は，変数式の評価順序も遅延します。

「¥n」やINDEX関数の引数など，変数式で使用する階層指定は，変数が所属するコンポーネントに基づいて決定されます。

「#」は，変数が所属するコンポーネントを表します。

変数式を定義したコンポーネントの親又は先祖のマップ式を引き継ぐ場合は，$パスを使用します。

6.7　演算子及び関数

FDLエディタ及びMDLエディタで記述する式中には，四則演算，関数及び演算子を記述できます。この節では，FDLエディタ及びMDLエディタで記述する式に使用できる演算子及び関数について説明します。

また，式中で使用する定数，コンポーネント名について説明します。

＜この節の構成＞

6.7.1　データ型

6.7.2　演算子

6.7.3　関数

6.7.4　定数

6.7.5　コンポーネント名

6.7.6　インデクスの指定

6.7.1　データ型

演算子，関数の説明で使用するデータ型を次に示します。

なお，変数はグローバル名で表しますが，扱いは数値，文字列，又はバイト列の値になります。EXIST関数やLENGTH関数などのグローバル名としては，使用できません。

表6-12　演算子及び関数の説明で使用するデータ型

データ型名
対応する要素の主属性
説明

i_num
整数
数値
暗黙的小数部付数値
ゾーン形式数値
パック形式数値
符号付2進整数
符号無2進整数
数値を扱うデータ型です。

定数の主属性

数字列

浮動小数文字列

バイト列（16進表記数値）

i_string
1バイトコード文字列
2バイトコード文字列
1バイト／2バイト混在文字列
文字列を扱うデータ型です。

定数の主属性

文字列

i_stream
バイトストリーム
バイト列を扱うデータ型です。

定数の主属性

バイト列

i_dtm
日付
時刻
日付時刻
日付，時刻を扱うデータ型です。

i_bool
－
EXIST関数や比較式の評価結果などのブール型です。

i_null
－
データがないことを表す型です。
マップ式で使用する定数%NULLなどに対応します。

any
（特に制限なし）
任意の型です。

－
グローバル名
パス名
式中で使用するコンポーネント（XML属性を含む）の名称です。
グローバル名は，フォーマットから親と子の名称を＠で連結したものです。

Format@Root@Data@Item

（対象となるコンポーネント名称はItem）

XML属性を表す場合は，属性を持つコンポーネント名＋@@＋属性名として表します。

Format@Root@Data@Item@@Attr

（対象となるXML属性名称はAttr）

変数を表す場合は，フォーマット名+@+変数名として表します。

Format@Variable

（対象となる変数はVariable）

パス名は略記法も含めた総称です。

（凡例）

－：該当しません。

6.7.2　演算子

FDL及びMDLエディタで記述する式中に使用できる演算子について説明します。演算子の書式と意味を次に示します。二項演算子の結合規則はすべて左結合です。

表6-13　演算子一覧

名前
書式
結果型
意味
優先順位

|
i_bool1 | i_bool2
i_bool
i_bool1とi_bool2のどちらかがTRUEのときTRUEを，それ以外はFALSEを返す。
7

&
i_bool1 & i_bool2
i_bool
i_bool1とi_bool2が共にTRUEのときTRUEを，それ以外はFALSEを返す。
6

==
i_num1 == i_num2
i_bool
i_num1とi_num2が10進数の値として等しいときTRUEを，それ以外はFALSEを返す。
5

i_string1 == i_string2

文字コード種別が同じ場合：
長さ及びバイト内容が等しいときTRUEを，それ以外はFALSEを返す。

文字コード種別が異なる場合：
i_string2をi_string1の文字コードに変換してから1を適用する。

i_stream1 == i_stream2
長さとバイト内容が等しいときTRUEを，それ以外はFALSEを返す。

i_null1 == i_null2
i_null1とi_null2が共にi_null型のときTRUEを，どちらか一方だけがi_null型のときFALSEを返す。

!=
i_num1 != i_num2
i_bool
i_num1とi_num2が10進数の値として等しいときFALSEを，それ以外はTRUEを返す。
5

i_string1 != i_string2

文字コード種別が同じ場合：
長さ及びバイト内容が等しいときFALSEを，それ以外はTRUEを返す。

文字コード種別が異なる場合：
i_string2をi_string1の文字コードに変換してから1を適用する。

i_stream1 != i_stream2
長さとバイト内容が等しいときFALSEを，それ以外はTRUEを返す。

i_null1 != i_null2
i_null1とi_null2が共にi_null型のときFALSEを，どちらか一方だけがi_null型のときTRUEを返す。

<
i_num1 < i_num2
i_bool
i_num1 < i_num2のときTRUEを，それ以外はFALSEを返す。
5

<=
i_num1 <= i_num2
i_bool
i_num1 <= i_num2のときTRUEを，それ以外はFALSEを返す。
5

>
i_num1 > i_num2
i_bool
i_num1 > i_num2のときTRUEを，それ以外はFALSEを返す。
5

>=
i_num1 >= i_num2
i_bool
i_num1 >= i_num2のときTRUEを，それ以外はFALSEを返す。
5

+
i_num1 + i_ num2
i_num
i_num1にi_num2を加算した値を返す。
4

-
i_num1 - i_num2
i_num
i_num1からi_num2を減算した値を返す。
4

*
i_num1 * i_num2
i_num
i_num1にi_num2を乗算した値を返す。
3

/
i_num1 / i_num2
i_num
i_num1をi_num2で除算した値を返す。
3

単項
+
+i_num1
i_num
i_num1に1を乗算した値を返す。
2

単項
-
-i_num1
i_num
i_num1に-1を乗算した値を返す。
2

!
! i_bool
i_bool
i_boolがTRUEのときFALSEを，FALSEのときTRUEを返す。
2

( )
( any1 )
any1の型
any1の評価結果を返す（優先順位※）。
1

注※

優先順位とは，式中で演算子が複数使用されたときの優先順位を示します。

表中の書式の第1子と第2子を逆に指定することもできます。また，書式のi_num型の代わりに，i_string，i_stream，i_dtmも指定できます。この場合は，i_num型に変換してから演算子を適用します。変換の詳細は，「6.5.1　異なる属性型同士での変換」の「表6-11　異なる分類の属性の型同士での変換可否」を参照してください。ただし，「==」「!=」演算のi_string型同士や，i_stream型同士が適用される場合を除きます。

6.7.3　関数

FDLエディタ及びMDLエディタの式中に使用できる関数について説明します。FDLエディタ及びMDLエディタで記述する式中には，Interschemaが標準で提供している関数以外に，ユーザが定義した関数を組み込んで使用できます。ここでは，標準で提供している関数について説明します。ユーザが定義した関数を組み込む方法については，「11.　ユーザ組み込み関数」を参照してください。

FDLエディタ及びMDLエディタで記述する式中で使用できる関数の一覧を次に示します。

表6-14　関数一覧

関数種別
関数の書式
戻り値型
説明

数字操作
ROUND (i_num1, 整数定数i)
i_num
i_num1を指定桁で四捨五入した値を返します。

i >= 0のとき，小数点以下第i+1桁を四捨五入

i < 0のとき，整数部第-i桁を四捨五入

FLOOR (i_num1, 整数定数i)
i_num
i_num1を指定桁で切り捨てた値を返します。

i >= 0のとき，小数点以下第i+1桁を切り捨てる

i < 0のとき，整数部第-i桁を切り捨てる

CEIL (i_num1, 整数定数i)
i_num
i_num1を指定桁で切り上げた値を返します。

i >= 0のとき，小数点以下第i+1桁を切り上げる

i < 0のとき，整数部第-i桁を切り上げる

SUM (i_num1, ...)※１
i_num
i_num1...の和を返す。

文字列
操作
LEFT (i_string1, i_num1)
i_string
※２
i_string1の左端（先頭）からINT(i_num1)文字目までの文字列を取り出します。i_string1の文字数がINT(i_num1)文字より小さい場合，i_string1全体を返します。

RIGHT (i_string1, i_num1)
i_string1の右端（末尾）からINT(i_num1)文字目までの文字列を取り出します。i_string1の文字数がINT(i_num1)文字より小さい場合，i_string1全体を返します。

MID (i_string1, i_num1, i_num2)
i_string1の左端（先頭）のINT(i_num1)文字目からINT(i_num2)文字目までの文字列を取り出します。INT(i_num1)が0の場合，文字列の先頭からINT(i_num2)文字目までの文字列を取り出します。INT(i_num2)が0の場合，INT(i_num1)文字目以降のすべての文字列を取り出します。

STRLEN (i_string1)
i_num
i_string1の文字数を返します。

ADDSTRING (i_string1, ...)※１
i_string
i_string1...を指定された順序で連結します。※３

バイト列
操作
ADDSTREAM (i_stream1, ...)※１
i_stream
i_stream1...を指定された順序で連結します。

CUTSTREAM (i_stream1, i_num1. i_num2)
i_stream
※２
i_stream1の先頭INT(i_num1)バイト目からINT(i_num2)バイト目までのバイト列を取り出します。INT(i_num1)が0の場合，バイト列先頭からINT(i_num2)バイトのバイト列を取り出します。INT(i_num2)が0の場合，INT(i_num1)バイト目以降のすべてのバイト列を取り出します。

日時操作
CURRENTDATE ( )
i_dtm
現在の日付を返します。

CURRENTTIME ( )
現在の時刻を返します。

CURRENTDTM ( )
現在の日付時刻を返します。

SETDATETIME (CC,YY,MM,DD,hh,mm,ss,zz)
CC～ss：i_num
zz：i_string or i_null
日付時刻型の値を設定します。パラメタの意味は，次のとおりです。

CC＝西暦年上位2桁，YY＝西暦年下位2桁，MM＝月，DD＝日，hh＝時，mm＝分，ss＝秒，zz＝ゾーン

ゾーン部なしとする場合は，zzに%NULLを指定します。

GETDATETIME (整数定数i, i_dtm)
i_num
整数定数iの値に応じて次のパート値を返します。
　i = 0　CCYY (西暦年)
　i = 1　CC (西暦年上位2桁)
　i = 2　YY (年)
　i = 3　MM (月)
　i = 4　DD (日)
　i = 5　hh (時)
　i = 6　mm (分)
　i = 7　ss (秒)

GETDTMZONE (i_dtm)
i_string
日付時刻型のゾーン部文字列を返す。ゾーン部がない場合はi_nullを返します。

型変換
TOSTRING (i_num1, i_string1)
i_string
i_num1を書式文字列i_string1に従ってi_string型に変換します。変換結果の文字列の文字コードはJIS8になります。
書式文字列の形式は次のとおりです。形式に従って1バイト文字で指定します。[ ]内は省略できます。符号は，先頭又は末尾のどちらかにだけ指定できます。

書式1

形式：

[I] [符号] [整数部桁数] [.[小数部桁数]] [符号]

符号：
「*」は必ず付けます。「-」は負の場合だけ付けます。

桁数の指定がない場合は有効数字だけ出力します。指定された桁数が実際の桁数より小さい場合，整数部は上位桁，小数部は下位桁が切り捨てられます（エラーにはなりません）。指定された桁数が実際の桁数より大きい場合，不足桁分には0を補います。桁数に0を指定した場合は，その整数部又は小数部の数値を出力しません（0も出力しません）。符号指定がない場合は負の値であっても符号を付けません。

書式の先頭に「I」を指定した場合は，小数点文字を出力しません。書式の先頭に「I」を指定する場合は，小数部桁数の指定は省略できません。

前負符号，整数部2桁，小数部1桁を指定する書式文字列は，“-2.1”となります。

書式2

形式：H[0][X] 又は h[0][x]

0：
偶数バイトで出力します。奇数バイトになるデータの場合は，前に「0」が付加されます。

x／X：
先頭に「0x」が付加されます。

H：
英大文字で文字列化されます。

h：
英小文字で文字列化されます。

16進表記文字列に変換します。小数部及び負符号は無視されます。

HEXSTRTONUM (i_string1)
i_num
16進表記文字列i_string1をi_num型に変換します。文字列先頭の「0x」の有無，及び英大文字/英小文字の使用は任意です。また，文字列は奇数バイトでも使用できます。

HEXSTRTOSTREAM (i_string1)
i_stream
16進表記文字列i_string1をi_stream型に変換します。文字列先頭の「0x」の有無，及び英大文字/英小文字の使用は任意です。また，文字列は奇数バイトでも使用できます。

STREAMTOHEXSTR (i_stream1)
i_string
i_stream1を16進表記文字列に変換します。文字列先頭の「0x」は付加されません。英小文字で文字列化されます。変換結果文字列の文字コードはJIS7です。出力文字列は偶数バイトになります。

条件
IF (条件式, any1, any2)
any1
又は
any2
条件式の評価結果がTRUEならany1，FALSEならany2を評価して返します。戻り値型は評価結果に依存します。

IFEXIST (グローバル名, any)
any
グローバル名が指すコンポーネントがあれば該当するコンポーネント，なければanyを返します。
対象が型要素の場合は，値がある場合にあると見なします。対象が構造の場合は，子コンポーネント以下の要素のどれかに値があればあると見なします。セパレータしか現れない場合は，ないと見なします。
コンポーネントがあるかないかの判定は，「その他」のEXIST関数と同じです。

XML操作
GETTAGNAME (グローバル名)
i_string
グローバル名がXML要素を表す場合，対応するXMLタグ名を返します。グローバル名がXML属性を表す場合，該当する属性名を返します。その他の場合はi_nullを返します。

GETANYTEXT (ANY型グローバル名, 整数定数i)
i_string
ANY型のコンポーネントのデータから，タグ間テキストだけを抽出して連結したデータを返します。指定したコンポーネントがANY型でないなどの不正時はi_nullを返します。最上位要素（ANY型自身）のテキストデータのwhite spaceの扱いは，実行時オプション「-XWS」に従った結果に対して処理します。
テキスト連結方法は，整数定数iの指定に従います。

i =0の場合
タグ間テキストをそのまま連結します。

i =1の場合
タグごとに前後のwhite spaceを削除して連結します。

i =2の場合
文字列中のwhite spaceをスペース文字に置換し，連結後の文字列前後のwhite spaceを削除します。また，連続するスペースを1スペース文字に置換します。

EXISTXML (グローバル名)
i_bool
評価済みのコンポーネントがあればTRUE，なければFALSEを返します。
対象が型要素の場合は，値がある場合にあると見なします。対象が構造の場合は，子コンポーネント以下の要素のどれかに値があればあると見なします。セパレータしか現れない場合は，ないと見なします。対象がXML要素又はXML属性の場合は，タグ又は属性名が出現すれば，データがなくてもあると見なします（空要素をあると見なします）。
EXISTXML関数は，XML要素又はXML属性に対しての判定以外は，「その他」のEXIST関数と同じです。

EXISTCOUNTXML (グローバル名, ...)※１
i_num
引数すべてにEXISTXML関数を適用して，TRUEになった数を返します。
対象がXML要素又はXML属性の場合は，タグ又は属性名が出現すれば，データがなくてもあると見なします（空要素をあると見なします）。
EXISTCOUNTXML関数は，XML要素又はXML属性に対しての判定以外は，「その他」のEXISTCOUNT関数と同じです。

ARRAYREALSIZEXML (グローバル名)
i_num
評価済みのコンポーネントの配列要素数を返します（空の要素はカウントしません，XMLの空要素はカウントします）。
対象がXML要素又はXML属性の場合は，タグ又は属性名が出現すれば，データがなくてもあると見なします（空要素をあると見なします）。
ARRAYREALSIZEXML関数は，XML要素又はXML属性に対しての判定以外は，「その他」のARRAYREALSIZE関数と同じです。

GETCOMPXML (整数定数i, グローバル名, ...)※１
整数定数は1以上
any
グローバル名で指定されたコンポーネントの中から，整数定数i番目に出現したコンポーネントを返します。
対象がXML要素又はXML属性の場合は，タグ又は属性名が出現すれば，データがなくてもあると見なします（空要素をあると見なします）。
GETCOMPXML関数は，XML要素又はXML属性に対しての判定以外は，「その他」のGETCOMP関数と同じです。

GETCOMPIFXML (基点パス名, 条件式,整数定数i, 連結パス名, ...)※１
整数定数は1以上
any
連結パス名で指定されたコンポーネントで指定条件式を満たすもののうち，整数定数i番目に出現したコンポーネントを返します。
対象がXML要素又はXML属性の場合は，タグ又は属性名が出現すれば，データがなくてもあると見なします（空要素をあると見なします）。
GETCOMPIFXML関数は，XML要素又はXML属性に対しての判定以外は，「その他」のGETCOMPIF関数と同じです。

IFEXISTXML (グローバル名, any)
any
グローバル名が指すコンポーネントがあれば該当するコンポーネント，なければanyを返します。
対象が型要素の場合は，値がある場合にあると見なします。対象が構造の場合は，子コンポーネント以下の要素のどれかに値があればあると見なします。セパレータしか現れない場合は，ないと見なします。対象がXML要素又はXML属性の場合は，タグ又は属性名が出現すれば，データがなくてもあると見なします（空要素をあると見なします）。
コンポーネントがあるかないかの判定は，「XML操作」のEXISTXML関数と同じです。

特殊
ORDEROFFSET (i_num1, i_num2)
－
現在の位置からi_num1相対オフセット位置にあるi_num2長のバイト列を，順序決定式の値とします。
順序決定式を定義する場合だけ使用できます。

EXISTWHILE (i_num1, i_num2, i_bool1, i_stream1)
－
現在の位置からi_num1相対オフセット位置にあるi_num2長のバイト列を，関数引数として指定されたi_stream1バイト列と比較します。
条件i_bool1が%TRUEの場合，比較した結果が一致する間，コンポーネントが出現すると見なします。
条件i_bool1が%FALSEの場合は，比較した結果が不一致の間，コンポーネントが出現すると見なします。
第4パラメタi_stream1は，コンポーネントの出現を判定するごとに毎回評価されます。
出現回数決定式を定義する場合だけ使用できます。

WHILE (条件式)
－
条件式が満たされる間，コンポーネントが出現すると見なします。条件式は，コンポーネントの出現を判定するごとに毎回評価されます。
出現回数決定式を定義する場合だけ使用できます。

その他
LENGTH (グローバル名)
i_num
グローバル名が指すコンポーネントのバイト長を返します。ただし，対象がXML要素（含む属性）の場合は，常に0を返します。
グローバル名で指定されたコンポーネントの子孫がグループ単位出力指定で処理済みの場合，そのコンポーネント分のサイズは0として計算します。

INDEX (整数定数)
整数定数は0以上
i_num
対象コンポーネント（現在評価中の式が定義されているコンポーネント）の整数定数で指定された分だけ上の階層にあるコンポーネントの，現在のインデクスを返します。
構造に対する評価規則中のINDEX関数は，その構造がコンポーネントとして使われている場所を0として適用します。

ARRAYSIZE (グローバル名)
i_num
評価済みのコンポーネントの配列要素数を返します（空の要素もカウントします）。

ARRAYREALSIZE (グローバル名)
i_num
評価済みのコンポーネントの配列要素数を返します（空の要素はカウントしません）。

EXIST (グローバル名)
i_bool
評価済みのコンポーネントがあればTRUE，なければFALSEを返します。
対象が型要素の場合は，値がある場合にあると見なします。対象が構造の場合は，子コンポーネント以下の要素のどれかに値があればあると見なします。セパレータしか現れない場合は，ないと見なします。
対象がXML要素で，データを持たない場合（EMPTY要素などタグだけ出現するもの）は，FALSEを返します。

EXISTCOUNT (グローバル名,...) ※１
i_num
引数すべてにEXIST関数を適用して，TRUEになった数を返します。

VALUEMAP(入力側要素グローバル名, 出力側要素グローバル名, {入力側項目番号, 出力側項目番号}, ...)
出力要素の型
値定義を持つ要素間で，値を対応付けます。対応付ける値の項目番号（値定義での出現順）を組にして複数指定します。項目番号「0」は，値定義に現れない値を意味します。

GETCOUNT( )
i_num
システムが持っているカウンタの値を返します。FDL又はMDLの中でカウンタが指定されていない場合は，何も返しません。

GETCOMP(整数定数i, グローバル名, ...)※１
整数定数は1以上
any
グローバル名で指定されたコンポーネントの中から，整数定数i番目に出現したコンポーネントを返します。GETCOMP関数は，ほかの関数（GETCOMPIF関数,GETCOMPIFXML関数を除く）の引数のグローバル名として使用できます。

GETCOMPIF(基点パス名, 条件式,整数定数i, 連結パス名, ...)※１
整数定数は1以上
any
連結パス名で指定されたコンポーネントで指定条件式を満たすもののうち，整数定数i番目に出現したコンポーネントを返します。GETCOMPIF関数はGETCOMPIF関数，GETCOMPIFXML関数
を除いたほかの関数の引数のグローバル名として使用できます。また，GETCOMPIF関数の引数にGETCOMP関数，GETCOMPXML関数，GETCOMPIF関数，及びGETCOMPIFXML関数は使用できません。

（凡例）

－：戻り値はありません。

注※１

引数のインデクスに「*」を使用できる関数です。

注※２

取り出す文字列（又はバイト列）がない場合はi_null型を返します。なお，文字列（又はバイト列）の先頭の文字数（又はバイト数）は1です。

注※３

文字コードが異なる文字列を連結する場合，文字セットとして大きい側の文字コードへ変換します。

VALUEMAP関数，GETCOMP関数，及びGETCOMPIF関数については，例を挙げて次に説明します。

＜この項の構成＞

(1)　VALUEMAP関数

(2)　GETCOMP関数

(3)　GETCOMPIF関数

(1)　VALUEMAP関数

VALUEMAP関数を使用した，要素の値同士のマッピング例を次に示します。

入力側要素：IN@A

値リスト：{"AAA", "BBB", "CCC" } 値定義のエラー検証なし

出力側要素：OUT@X

値リスト：{"XX", "YY", "ZZ" } 値定義のエラー検証なし

マップ式を次のように記述します。

= VALUEMAP(IN@A, #, 1, 2, 2, 3, 3, 1, 0, 0);

この場合のマッピング関係を次に示します。「その他」は，値定義されていない値を意味し，入力された値をそのまま出力する指定になります。

図6-26　VALUEMAP関数を使用した値のマッピング例

(2)　GETCOMP関数

GETCOMP関数は，入力側にある選択構造の子コンポーネントで，何番目に出現するか分からないコンポーネントを取り出す場合などに使用します。

GETCOMPの例を次に説明します。

図6-27　GETCOMP関数を使用した例

入力側フォーマット「IN」は，選択構造「TFD」の要素「x1」から「xn」が順不同で現れ，出力側フォーマット「OUT」は，要素「y1」から「yn」を順番に出力すると仮定します。また，入力側の要素「xi」を出力側の要素「yi」へマッピングすると仮定します。

この場合，要素「yi」に対するマップ式は次のようになります。

= GETCOMP( 1, IN@...@MSG@TFD[*]@xi) ;

入力側の構造「TFD」の子コンポーネントのうち，1番目に現れた「xi」を「yi」へ代入する」意味になります。

(3)　GETCOMPIF関数

GETCOMPIF関数は，GETCOMP関数によって取り出されるコンポーネントに対する条件を追加したものです。例えば，入力側で繰り返し出現する構造コンポーネントがコードを表す子コンポーネントと値を表すコンポーネントを持つ場合に，その構造コンポーネントが特定のコードを持つときの値（要素）を取り出すために使用します。

基点パス名には検索対象のコンポーネントを指定します。連結パス名は実際に取り出す対象のコンポーネントを指定します。条件式内のパス名及び連結パス名では，基点パスで指定したコンポーネントの子に対して，基点パス部分を「&」とし，パス名を「&@xxx」と記述できます。基点パスコンポーネントそのものを表す場合は「&&」と指定します。基点パス名及び連結パス名ではインデクスに「*」を使用できますが，条件式内では使用できません。

GETCOMPIF関数の使用例を次に示します。

図6-28　GETCOMPIF関数を使用した例

例のように，入力側フォーマット「IN」の構造「SEG」から，codeが「1」であるときのvalueをOUTフォーマットのdata1へ，codeが「2」のときのvalueをOUTフォーマットのdata2へ出力する場合，data1及びdata2のマップ式は次のようになります。

data1 = GETCOMPIF(IN@...@MSG@SEG[*], &@code == 1, 1, &@value);
data2 = GETCOMPIF(IN@...@MSG@SEG[*], &@code == 2, 1, &@value);

6.7.4　定数

式の中で固定の値として使用するものです。定数には，文字列，数字列，浮動小数文字列，バイト列，予約定数があります。各定数について次に説明します。

＜この項の構成＞

(1)　文字列

(2)　数字列

(3)　浮動小数文字列

(4)　バイト列

(5)　予約定数

(1)　文字列

文字列をダブルクォーテーション「"」で囲んでください。次に例を示します。

"ABC漢字"

なお，文字列中にダブルクォーテーション「"」を使用する場合，次のように「"」を二つ連続で記述してください。

指定したい文字列：a"b

実際に指定する文字列："a""b"

(2)　数字列

0～9の数字で構成されます。先頭に0があってもかまいません。負の値を表す場合は先頭に単項演算子の「-」を使用します。また，先頭に「0x」を付けた16進数字で記述することもできます。ただし，符号なしの扱いで，表現はビッグエンディアンの形式と見なします。

次に例を示します。

01234567890

-1234567890

0x0100　　（＝256）

(3)　浮動小数文字列

「数字」「小数点」「符号」「指数記号」から構成されます。小数部を持つ数字や，指数表現のある数値を表します。指数記号は，「E」又は「e」だけを使用できます。負の値を表す場合は数字列と同じように，単項演算子の「-」を使用します。次に例を示します。

123.45

-6789.0

1.2E+5

(4)　バイト列

先頭に「0x」を付けた16進数字です。記述する値は，フォーマットのエンディアンの指定に従う必要があります。また，複数バイトを占める定数の場合は，バイト数分指定してください。次に例を示します。

0xFEFF003C003F

(5)　予約定数

NULL（又は%NULL）

「NULL」と「%NULL」の意味はどちらも同じです。

マップ式内だけで使用できます。例外として，Sea-NACCSのフォーマットとして，デフォルト式に記述できます（スペース文字の埋め込みの意味）。

DTDフォーマットの型コンポーネントに対して「NULL」又は「%NULL」を指定した場合，そのコンポーネントは，XMLのタグだけを出力します。その他のコンポーネントに対しては，マップ式を定義していないことになります。

%TRUE

BOOLEAN定数を表します。真を表します。

%FALSE

BOOLEAN定数を表します。偽を表します。

%DEFAULT

型コンポーネントのデフォルト式を表します。マップ式内でだけ使用できます。

マップ式の評価結果がこの定数になった場合，デフォルト式の値が出力されます。

%UNDEF

コンポーネント未定義を表します。マップ式内でだけ使用できます。

DTDフォーマットの型コンポーネントに対して「%UNDEF」を指定した場合，XMLのタグを含めて出力しません。その他のコンポーネントの場合は，「NULL」が指定された場合と同じです。

「%UNDEF」は「NULL」と似た機能を持ちますが，「NULL」はコンポーネントの1出現に対する未定義を表し，「%UNDEF」はコンポーネントの出現終了を表します。無限回出現コンポーネントの出力を終了させる場合などに使用できます。

6.7.5　コンポーネント名

式中に記述するコンポーネント名について説明します。

＜この項の構成＞

(1)　グローバル名

(2)　要素名称の規則

(3)　コンポーネント名の略記方法

(1)　グローバル名

コンポーネント名はグローバル名で指定します。グローバル名とは，フォーマット名から対象コンポーネントまでを「@」で連結したものです。コンポーネントがXML属性を表す場合，属性コンポーネントの前は，「@@」でつなぎます。また，変数名を表す場合は，フォーマット名と変数名を「@」でつなぎます。次に，グローバル名の例を示します。

グローバル名の例（XML属性を表す場合）：

EXAMPLE@ROOT@A@@B

XML属性「B」のグローバル名を表しています。グローバル名から，フォーマット名は「EXAMPLE」，ルート構造「ROOT」の子のコンポーネントが「A」であることが分かります。

グローバル名の例（変数を表す場合）：

EXAMPLE@VARIABLE

変数「VARIABLE」のグローバル名を表しています。グローバル名から，フォーマット名は「EXAMPLE」であることが分かります。

FDLファイルのフォーマット内では，同一のコンポーネント名を共有できるので，一つのコンポーネントは構造中の異なる複数のコンポーネントの子のコンポーネントとしても使用できます。ただし，MDLファイルでは，すべてのコンポーネントは，それぞれ独自でなければなりません。このため，FDLファイル内で共用されていたコンポーネント名は，MDLファイルに読み込むと自動的に，フォーマット内で一意の名称に付け替えられます。名称が付け替えられるときは，そのコンポーネントのMDL内での出現位置が基になります。名称が付け替えられても，構造の内容は変わりません。FDLファイル内のコンポーネント名を「ローカル名」，MDLファイル内のコンポーネント名を「グローバル名」と呼びます。

なお，式中で指定できるコンポーネントは，式を記述したコンポーネントを評価する以前に内容が決定されているものでなければなりません。まだ出現していないコンポーネントの値を参照した場合は，エラーになるので注意してください。

(2)　要素名称の規則

要素名称とは，FDLファイル内のコンポーネントの名称です。ローカル名とも呼びます。

ここでは，FDLで定義する要素名称の規則について説明します。要素名称として使用できる文字は，次のとおりです。

１バイトの片仮名

２バイトの数字文字

XML 1.0で名前として使用できる文字※
注※
アルファベット，平仮名，片仮名（２バイト），数字，結合文字（アクセント記号，ウムラウトなど），「_」(アンダースコア)，「:」(コロン)，「.」（ピリオド），「-」（ハイフン）のことです。

ただし，２バイト文字はシフトJISで表示できるものに限ります。また，XML 1.0では，先頭文字として使用できない文字を定めていますが，Interschemaでは区別しません。

定義できる名前の長さは，フォーマット名は256バイト以内，その他の名前は4,096バイト以内です。

特殊な名前や，数字で始まったり，記号文字が含まれたりする名前

Interschemaが自動的に生成するXMLダミー構造などの名称には，特殊文字を使用する場合もあります。このような特殊な名前や，数字で始まったり，記号文字が含まれたりする名前に対しては，名前の前後にシングルクォーテーションを付けて表示します。条件式やマップ式などで名称を記述する場合にも，シングルクォーテーションが必要です。

特殊な名前の例：

'0123'
'ABC-DEF'

特殊な名前を含むコンポーネントのグローバル名の例：

Format@Root@'0123'
Format@Root@Msg@'ABC-DEF'@element

シングルクォーテーションを必要としない名前は，1バイト英数字，1バイト片仮名，アンダースコア，及び2バイト文字で構成される名前です。ただし，先頭は1バイト数字文字以外の名前となります。

リネーム前後の名前

FDLでは同名の兄弟コンポーネントが定義できます。これらはMDLへ取り込む時点で，ローカル名に相当する部分がリネームされ，ユニークな名称に置き換わります。リネーム後の名称は，上記に示すような特殊な名前になります。

リネームでは，ローカル名に「~n」が付加されます。nは兄弟コンポーネント間の順序番号（n>1）です。ただし，同名の１番目のコンポーネントには「~n」が付加されません。また，リネーム前の名称が特殊な名前の場合は，シングルクォーテーションの内側に「~n」が付加されます。

リネームの例：

(3)　コンポーネント名の略記方法

コンポーネント名には，次のような略記方法があります。

「#」

式が記述されているコンポーネント，つまり自コンポーネントを表します。ただし，式を記述するコンポーネントがXML属性の場合は，その属性が属するコンポーネントを表します。変数式の場合は，式を定義したコンポーネントを表します。

条件式で使用した例：

＃ == 1（自身の値が1）

「¥n」

自コンポーネントの親（先祖）のコンポーネントを表します。ｎは，自コンポーネントのn階層上のコンポーネントを表す番号です。自コンポーネントの親コンポーネントは1階層上のコンポーネントなので「¥1」と表します。ただし，式を記述するコンポーネントがXML属性の場合は，属性が属するコンポーネントの階層を０として数えます。XML属性自身に対しては，階層を数えません。変数式の場合は，式を定義したコンポーネントの階層を0として数えます。

レングスタグ構造でデータ長を持つ要素を表す場合など，親コンポーネントの構造を示すときに使用できます。

サイズ決定式で使用した例：

¥1@LEN　（自身のデータサイズは，兄弟コンポーネントのLENの値）

「$」

マップ式及び変数式の中でだけ記述できます。マップ式で使用した場合，式が記述されているコンポーネントの親（先祖）のコンポーネントで，マップ式の評価結果が表すコンポーネントを表し，親（先祖）のコンポーネントのマップ式の評価結果を引き継ぐコンポーネントであることを示します。変数式で使用した場合は，式を定義したコンポーネントの親（先祖）のマップ式を引き継ぐことを示します。

構造コンポーネントのマップ式では，そのコンポーネントを出力するという意味として「=$;」の形でも使用できます。ただし，親（先祖）のコンポーネントにマップ式が定義されていなければなりません。

マップ式で使用した例：

= $@data ;（親コンポーネントにマッピングされたコンポーネントの子コンポーネントに位置するdataを代入する）

「&」

GETCOMPIF関数又はGETCOMPIFXML関数のパラメタの中で使用し，第1パラメタの基点パスに連結するパス名を表します。詳細は，「6.7.3　関数」を参照してください。

6.7.6　インデクスの指定

コンポーネント名を指定する場合，又はルート構造から自コンポーネントまでに複数回出現するコンポーネントがある場合は，式中でインデクスを指定する必要があります。ただし，変数はインデクスを持っていないため，変数のグローバル名に対してはインデクスを指定できません。

インデクスの指定方法には次の4種類があります。

固定の値を指定して何番目に出現するコンポーネントかを示します。

算術式などを使用して特定します（例えば，INDEX関数による指定）。

ワイルドカード「*」を使用します。ワイルドカードは，複数回出現するコンポーネントの出現すべてを指定する意味になります。
なお，「*」が指定できる関数は限定されています。Interschemaが提供する関数については，「6.7.3　関数」の「表6-14　関数一覧」を参照してください。ユーザ組み込み関数の場合は，可変個の引数を持つ関数で「*」が使用できます。

「?」を使用します。「?」は，マップ式が記述されたコンポーネントの現在の出現のインデクスを表します。複数回出現するコンポーネントのマップ式で使用すると，入力側のコンポーネントと式を定義している出力側のコンポーネントを1対1に同じ順序で対応付けます。現在の出現インデクスを表します。INDEX関数で「INDEX(0)」と記述するのと同じ意味です。マップ式の左辺では使用できません。

7.　ユティリティ

この章では，Interschemaが提供しているユティリティプログラムについて説明します。

＜この章の構成＞

7.1　マージツール「etmerge」

7.1　マージツール「etmerge」

マージツールはWindowsのInterschemaが提供するユティリティプログラムです。この節では，マージツールはどのような場合に使用するのか，又その使用方法について説明します。

＜この節の構成＞

7.1.1　マージツールとは

7.1.2　FDLマージ機能（/IFオプション）

7.1.3　DTDマージ機能（/IDオプション）

7.1.4　マップ式出力機能（/OTオプション）

7.1.5　マッピング機能（/ITオプション）

7.1.6　FDLフォーマット挿入機能（/AFオプション）

7.1.7　DTDフォーマット挿入機能（/ADオプション）

7.1.8　注意事項

7.1.9　戻り値

7.1.10　ヘルプの表示

7.1.1　マージツールとは

マージツールは，FDLファイル又はDTDファイルの変更内容をMDLファイルにマージできます。

マージツールには四つの機能があります。

次に，各機能について説明します。

＜この項の構成＞

(1)　マージ機能とは

(2)　マップ式出力機能とは

(3)　マッピング機能とは

(4)　フォーマット挿入機能とは

(1)　マージ機能とは

MDLファイル中の既存のマップ式を保持しながら，FDLファイル又はDTDファイルの変更内容をMDLファイルにマージする機能です。マージ機能を使用することで，再マッピングの作業を最小限に抑えることができます。

マージ機能は，MDLエディタの［編集］－［マージ］コマンドでも実行できます。

MDLファイルを作成した後に要素のサイズや出現回数などを変更する場合は，FDLファイル又はDTDファイルでフォーマットを変更してから，MDLファイル内で変更前のフォーマットを削除して，変更後のフォーマットを読み込んでMDLファイルを作成し直す必要があります。

入力側のフォーマットを変更した場合は，変更前のフォーマットを削除して変更後のフォーマットを読み込んでも，既存のマップ式は保持されるため，コンポーネント名やツリー構造を変更していなければそのまま使用できます。しかし，出力側のフォーマットを変更した場合は，変更前のフォーマットを削除すると既存のマップ式も削除されてしまうため，変更後のフォーマットを読み込んで再マッピングする作業が発生します。

図7-1　マージ機能を使用しない場合

このような場合にマージ機能を使用すると，名前やツリー構造を変更していないコンポーネントの既存のマップ式を保持しながら，FDLファイル又はDTDファイルの変更内容をMDLファイルにマージできます。この結果，再マッピングする必要があるのは，コンポーネント名やツリー構造を変更した箇所だけになり，再マッピングの作業を最小限に抑えることができます。

図7-2　マージ機能を使用した場合

(2)　マップ式出力機能とは

MDLファイル中のマップ式をテキスト形式で記述したファイル「マップ式ファイル」に出力する機能です。

マップ式出力機能は，MDLエディタの［ファイル］－［外部出力］コマンドでも実行できます。

マップ式ファイルには，任意のコンポーネント以下のマップ式を出力できます。マップ式ファイルの形式については，「付録E.1　マップ式ファイル」を参照してください。

出力したマップ式は，マップ式ファイル上で直接編集できます。マップ式ファイルの編集内容は，マッピング機能を使用してMDLファイルに反映できます。

(3)　マッピング機能とは

マップ式ファイルの内容をMDLファイルに反映する機能です。マップ式ファイルの編集内容をMDLファイルに反映できます。

マッピング機能は，MDLエディタの［編集］－［マージ］コマンドでも実行できます。

(4)　フォーマット挿入機能とは

指定したFDLフォーマット，又は指定したDTDフォーマットをMDLファイルに挿入する機能です。

フォーマット挿入機能は，MDLエディタの［挿入］－［フォーマット］コマンド又は［挿入］－［DTDフォーマット］でも実行できます。

以上の四つの機能を実行するには，コマンド「etmerge」でマージツールを起動して，実行したい機能の引数を指定します。

次に，マージツールのコマンド「etmerge」について機能ごとに説明します。コマンド「etmerge」は，次のディレクトリ下に格納されています。

Interschemaのインストールディレクトリ¥bin

7.1.2　FDLマージ機能（/IFオプション）

マージ機能を実行して，FDLファイルの変更内容をMDLファイルにマージするには，コマンド「etmerge」の引数として「/IF」オプションを指定します。

＜この項の構成＞

(1)　形式

(2)　引数

(3)　/IFオプション指定時の注意事項

(4)　実行例

(1)　形式

etmerge  /IF  旧MDLファイル  新MDLファイル  FDLファイル  フォーマット名  
     [マップ式ファイル]

(2)　引数

/IF

MDLファイルの既存のマップ式，変数式，コンポーネント未使用情報，グループ単位出力指定情報，MDL上で編集された式，及び順序決定値を保持しながら，FDLファイルの変更内容をMDLファイルにマージする機能を実行するオプションです。

旧MDLファイル

変更前のMDLファイル名を指定します。種別は入力です。

新MDLファイル

FDLファイルをマージした後のMDLファイル名を指定します。旧MDLファイルと同じファイルを指定してもかまいません。種別は出力です。

FDLファイル

MDLファイルにマージするFDLファイル名を指定します。種別は入力です。

フォーマット名

MDLファイルにマージするFDLファイル中のフォーマット名を指定します。種別は入力です。

マップ式ファイル

旧MDLファイルに定義されているすべてのマップ式を出力するマップ式ファイル名を指定します。種別は出力です。この指定は省略できます。省略した場合は，「MAPEXP.txt」ファイル（Interschemaのインストールディレクトリ¥bin下に格納）にマップ式を出力します。

(3)　/IFオプション指定時の注意事項

マップ式などの保持は，コンポーネントのグローバル名をキーにして行います。したがって，グローバル名が変更された場合は，そのコンポーネントに定義されていたマップ式は保持されません。また，コンポーネントの削除や名前の変更があっても，そのコンポーネントを参照する式の内容は更新されないで元の文字列のまま引き継がれます。

保持した式で記述されているコンポーネントのパス名の正当性は，検証されません。FDLファイルのツリー構造やコンポーネント名を変更した場合などは，式を確認して再マッピングしてください。

マップ式ファイルに記述されているコンポーネントのうち，MDLファイル中になかったコンポーネントは，該当するテキスト部分がマージログファイル「MERGELOG.txt」（Interschemaのインストールディレクトリ¥bin下に格納）に出力されます。MDLファイルにマージするコンポーネントがある場合で，そのコンポーネントの変数式で定義した変数が，マージ後のフォーマットにないときは，コンポーネントのグローバル名及び変数式がマージログファイルに出力されます。

FDLファイル中のグループ単位出力指定に変更があっても，その変更内容はMDLファイルにマージされません（変更前の指定内容を保持します）。このような場合は，MDLエディタでMDLファイル中のグループ単位出力指定の内容を変更してから，マージツールを実行してください。

変数式は，コンポーネント単位で扱われます。そのため，マージ元に複数の変数の変数式が定義されていても，マージ後のフォーマットで一つの変数の変数式だけ定義した場合は，定義しなかった変数に対する変数式は消えてしまいます。また，マージ後のフォーマットに存在しない変数に対する変数式は，設定されません。

MDLエディタ上で直接編集した，又はマージツールの/ITオプションで設定した，順序決定式，順序決定値，デフォルト式，条件式，出現回数決定式，及びサイズ決定式の内容は，マージするコンポーネントがマージ先のフォーマットにある場合に保持されます。ただし，順序決定式を定義したコンポーネントが逐次構造になる場合など，コンポーネントの種別又は状態が，マージ先で式や値を定義できない状態に変換される場合は保持されません。

(4)　実行例

FDLマージ機能の実行例を次に示します。

FDLファイル「UPDATE.fdl」中のフォーマット「Format1」の内容を，旧MDLファイル「OLD.mdl」にマージして，新MDLファイル「NEW.mdl」に出力します。旧MDLファイル「OLD.mdl」に定義されていたマップ式は，マップ式ファイル「MAPFILE.txt」に出力します。

etmerge  /IF  OLD.mdl  NEW.mdl  UPDATE.fdl  Format1  MAPFILE.txt

7.1.3　DTDマージ機能（/IDオプション）

マージ機能を実行して，DTDファイルの変更内容をMDLファイルにマージするには，コマンド「etmerge」の引数として「/ID」オプションを指定します。

＜この項の構成＞

(1)　形式

(2)　引数

(3)　/IDオプション指定時の注意事項

(4)　実行例

(1)　形式

etmerge  /ID  旧MDLファイル  新MDLファイル  DTDファイル  フォーマット名  
     [マップ式ファイル]

(2)　引数

/ID

MDLファイルの既存のマップ式，コンポーネント未使用情報，グループ単位出力指定情報，MDL上で編集された式及び順序決定値を保持しながら，DTDファイルの変更内容をMDLファイルにマージする機能を実行するオプションです。

旧MDLファイル

変更前のMDLファイル名を指定します。種別は入力です。

新MDLファイル

DTDファイルをマージした後のMDLファイル名を指定します。旧MDLファイルと同じファイルを指定してもかまいません。種別は出力です。

DTDファイル

MDLファイルにマージするDTDファイル名を指定します。種別は入力です。

フォーマット名

MDLファイルにマージするDTDフォーマット名を指定します。種別は入力です。

マップ式ファイル

旧MDLファイルに定義されているすべてのマップ式を出力するマップ式ファイル名を指定します。種別は出力です。この指定は省略できます。省略した場合は，「MAPEXP.txt」ファイル（Interschemaのインストールディレクトリ¥bin下に格納）にマップ式を出力します。

(3)　/IDオプション指定時の注意事項

マップ式などの保持は，コンポーネントのグローバル名をキーにして行います。したがって，グローバル名が変更された場合は，そのコンポーネントに定義されていたマップ式は保持されません。また，コンポーネントの削除や名前の変更があっても，そのコンポーネントを参照する式の内容は更新されないで元の文字列のまま引き継がれます。

保持した式で記述されているコンポーネントのパス名の正当性は，検証されません。DTDファイルのツリー構造やコンポーネント名を変更した場合などは，式を確認して再マッピングしてください。

マップ式ファイルに記述されているコンポーネントのうち，MDLファイル中になかったコンポーネントは，該当するテキスト部分がマージログファイル「MERGELOG.txt」（Interschemaのインストールディレクトリ¥bin下に格納）に出力されます。MDLファイル中にマージするコンポーネントがある場合で，そのコンポーネントの変数式で定義した変数がマージ後のフォーマットにないときは，コンポーネントのグローバル名及び変数式がマージログファイルに出力されます。

変数式は，マージ先に対応する変数がある場合だけ保持されるため，DTDマージでは結果として削除されます。

マージするDTDフォーマットが再帰構造を含む場合，マージ前の展開ネスト数で再帰構造が展開されます。
マージ前に再帰構造がなかった場合の展開ネスト数は１となります。
マージ後のDTDフォーマットのルートとする要素の候補が複数存在する場合，マージ前と同じ名前の要素があれば，これがルートとして選択されます。同じ名前の要素がない場合は，自動的にルートとする要素が選択されます。マージ後のルートとする要素の候補が一つだけである場合は，マージ前と異なる名前であってもルートとして選択されます。

対象となるDTDフォーマットが再帰構造を含む場合，再帰構造を展開するときの最大コンポーネント数は100,000として処理されます。コンポーネント数が100,000を超える場合は，MDLエディタを使用してください。

MDLエディタ上で直接編集した，又はマージツールの/ITオプションで設定した，順序決定式，順序決定値，デフォルト式，条件式，出現回数決定式，及びサイズ決定式の内容は，マージするコンポーネントがマージ先のフォーマットにある場合に保持されます。ただし，順序決定式を定義したコンポーネントが逐次構造になる場合など，コンポーネントの種別又は状態が，マージ先で式や値を定義できない状態に変換される場合は保持されません。

(4)　実行例

DTDマージ機能の実行例を次に示します。

旧MDLファイル「OLD.mdl」のDTDフォーマット「Format1」の内容を，DTDファイル「UPDATE.dtd」の内容にマージして，新MDLファイル「NEW.mdl」に出力します。旧MDLファイル「OLD.mdl」に定義されていたマップ式は，マップ式ファイル「MAPFILE.txt」に出力します。

etmerge  /ID  OLD.mdl  NEW.mdl  UPDATE.dtd  Format1  MAPFILE.txt

7.1.4　マップ式出力機能（/OTオプション）

マップ式出力機能を実行するには，コマンド「etmerge」の引数として「/OT」オプションを指定します。

＜この項の構成＞

(1)　形式

(2)　引数

(3)　実行例

(1)　形式

etmerge  /OT  MDLファイル  マップ式ファイル  [コンポーネント名]

(2)　引数

/OT

MDLファイル中のマップ式，変数式，コンポーネント未使用情報，グループ単位出力指定情報，MDL上で編集された式及び順序決定値をマップ式ファイルに出力する機能を実行するオプションです。任意のコンポーネント以下のマップ式を出力できます。

MDLファイル

マップ式ファイルを出力するMDLファイル名を指定します。種別は入力です。

マップ式ファイル

MDLファイル中のマップ式を出力するマップ式ファイル名を指定します。種別は出力です。

コンポーネント名

マップ式ファイルにマップ式を出力するコンポーネント名を指定します。ただし，グローバル名にはインデクスを含めないで指定します。子を持つコンポーネントを指定した場合は，その子孫コンポーネントのマップ式も出力対象となります。この指定は省略できます。省略した場合は，MDLファイル中にあるすべてのコンポーネントのマップ式が出力対象になります。種別は入力です。

(3)　実行例

マップ式出力機能の実行例を次に示します。

マップ式ファイル「MAPFILE.txt」に，MDLファイル「REFER.mdl」中のコンポーネント「Format1@Struct1」以下のすべてのコンポーネントのマップ式を出力します。

etmerge  /OT  REFER.mdl  MAPFILE.txt  Format1@Struct1

7.1.5　マッピング機能（/ITオプション）

マッピング機能を実行するには，コマンド「etmerge」の引数として「/IT」オプションを指定します。

＜この項の構成＞

(1)　形式

(2)　引数

(3)　/ITオプション指定時の注意事項

(4)　実行例

(1)　形式

etmerge  /IT  旧MDLファイル  新MDLファイル  マップ式ファイル

(2)　引数

/IT

マップ式ファイルの内容をMDLファイルに反映する機能を実行するオプションです。

旧MDLファイル

変更前のMDLファイル名を指定します。種別は入力です。

新MDLファイル

マップ式ファイルの内容を反映した後のMDLファイル名を指定します。旧MDLファイルと同じファイルを指定してもかまいません。種別は出力です。

マップ式ファイル

MDLファイルに反映するマップ式を記述したマップ式ファイル名を指定します。種別は入力です。

(3)　/ITオプション指定時の注意事項

マップ式ファイルに記述されているコンポーネントのうち，MDLファイル中になかったコンポーネントについては，該当するテキスト部分がマージログファイル「MERGELOG.txt」（Interschemaのインストールディレクトリ¥bin下に格納）に出力されます。MDLファイルにマージするコンポーネントがある場合で，そのコンポーネントの変数式で定義した変数がマージ後のフォーマットにないときは，コンポーネントのグローバル名及び変数式がマージログファイルに出力されます。

マッピングしたマップ式などで記述されているコンポーネントのパス名は，正当性をチェックしません。ツリー構造又はコンポーネント名を変更した場合は，式を確認して再定義してください。

変数式は，コンポーネント単位で扱われます。そのため，マージ元に複数の変数の変数式が定義されていても，マージ後のマップ式ファイルで一つの変数の変数式だけ定義した場合は，定義しなかった変数に対する変数式は消えてしまいます。また，マージ後のフォーマットに存在しない変数に対する変数式は，設定されません。

マップ式ファイルに記述された順序決定式，順序決定値，デフォルト式，条件式，出現回数決定式，及びサイズ決定式の内容は，マッピング対象のコンポーネントがマッピング先のフォーマットにある場合に設定されます。ただし，順序決定式を定義した構造のコンポーネントが逐次構造である場合など，式又は値がマッピングできないときは無視されます。

(4)　実行例

マッピング機能の実行例を次に示します。

マップ式ファイル「MAPFILE.txt」の内容を旧MDLファイル「OLD.mdl」に反映して，新MDLファイル「NEW.mdl」として出力します。

etmerge  /IT  OLD.mdl  NEW.mdl  MAPFILE.txt

7.1.6　FDLフォーマット挿入機能（/AFオプション）

フォーマット挿入機能を実行して，指定したFDLフォーマットをMDLファイルに挿入するには，コマンド「etmerge」の引数として「/AF」オプションを指定します。

＜この項の構成＞

(1)　形式

(2)　引数

(3)　/AFオプション指定時の注意事項

(4)　実行例

(1)　形式

etmerge  /AF  旧MDLファイル  新MDLファイル  FDLファイル  
                   [{/IN フォーマット名｜/OUT フォーマット名}..．]

(2)　引数

/AF

指定したFDLフォーマットをMDLファイルに挿入する機能を実行するオプションです。

旧MDLファイル

変更前のMDLファイル名を指定します。種別は入力です。

新MDLファイル

FDLファイルを挿入した後のMDLファイル名を指定します。旧MDLファイルと同じファイルを指定してもかまいません。種別は出力です。

FDLファイル

MDLファイルに挿入するFDLファイル名を指定します。種別は入力です。

フォーマット名

MDLファイルに挿入するFDLファイルのフォーマット名を指定します。入力フォーマットとして挿入する場合は「/IN」，出力フォーマットとして挿入する場合は「/OUT」をそれぞれフォーマット名の前に指定します。種別は入力です。

(3)　/AFオプション指定時の注意事項

旧MDLファイルがない場合は，新MDLファイルを新規に作成します。

フォーマット名を省略した場合は，FDLファイル内のフォーマットの中から，入出力兼用フォーマット以外で検証済みのフォーマットすべてを挿入します。

(4)　実行例

FDLフォーマット挿入機能の実行例を次に示します。

「OLD.mdl」に，「ADD.fdl」のフォーマット「Format1」を入力側に，フォーマット「Format2」を出力側に挿入した結果を「NEW.mdl」として出力します。

etmerge  /AF  OLD.mdl  NEW.mdl  ADD.fdl  /IN  Format1 /OUT  Format2

7.1.7　DTDフォーマット挿入機能（/ADオプション）

フォーマット挿入機能を実行して，指定したDTDフォーマットをMDLファイルに挿入するには，コマンド「etmerge」の引数として「/AD」オプションを指定します。

＜この項の構成＞

(1)　形式

(2)　引数

(3)　/ADオプション指定時の注意事項

(4)　実行例

(1)　形式

etmerge  /AD  旧MDLファイル  新MDLファイル  DTDファイル  
                   {/IN フォーマット名｜/OUT フォーマット名}
                   [ルート要素名[展開ネスト数]]

(2)　引数

/AD

指定したDTDフォーマットをMDLファイルに挿入する機能を実行するオプションです。

旧MDLファイル

変更前のMDLファイル名を指定します。種別は入力です。

新MDLファイル

DTDファイルを挿入した後のMDLファイル名を指定します。旧MDLファイルと同じファイルを指定してもかまいません。種別は出力です。

DTDファイル

MDLファイルに挿入するDTDファイル名を指定します。種別は入力です。

フォーマット名

MDLファイルに挿入するDTDフォーマット名を256バイト以内で指定します。入力フォーマットとして挿入する場合は「/IN」，出力フォーマットとして挿入する場合は「/OUT」をそれぞれフォーマット名の前に指定します。種別は入力です。

ルート要素名

DTDフォーマットのルートとする要素名を指定します。指定しない場合，自動的にルートとする要素が選択されます。挿入するDTDフォーマットのルートとする要素の候補が一つだけである場合は，指定しても意味がありません。種別は入力です。

展開ネスト数

DTDフォーマットの再帰構造の展開ネスト数を0～250の範囲で指定します。ルート構造が再帰構造の場合は，1～250の範囲で指定します。指定しない場合，自動的に１となります。挿入するDTDフォーマットに再帰構造がない場合は，指定しても意味がありません。種別は入力です。

(3)　/ADオプション指定時の注意事項

旧MDLファイルがない場合は，新MDLファイルを新規に作成します。

対象となるDTDフォーマットが再帰構造を含む場合，再帰構造を展開するときの最大コンポーネント数は100,000として処理されます。コンポーネント数が100,000を超える場合は，MDLエディタを使用してください。

(4)　実行例

DTDフォーマット挿入機能の実行例を次に示します。

「OLD.mdl」に，「ADD.dtd」の内容をDTDフォーマット「Format1」として出力側に挿入した結果を「NEW.mdl」として出力します。DTDフォーマットのルート要素は「ROOT1」と，再帰構造の展開ネスト数は「3」とします

etmerge  /AD  OLD.mdl  NEW.mdl  ADD.dtd  /OUT  Format1  ROOT1  3

7.1.8　注意事項

マージツール実行時の注意事項を次に示します。

トランスレータ実行中にはマージツールを起動しないでください。

MDLファイルの検証
マージツールで出力したMDLファイルは検証されていない状態になります。MDLファイルを使用してデータを変換する前に，MDLエディタでファイルを検証してください。

エラー発生時の処理
エラーが発生した場合は，標準出力にエラーの内容（戻り値，エラー内容の説明など）を出力します。エラー内容については，「7.1.9　戻り値」を参照してください。

7.1.9　戻り値

マージツールの戻り値の値と意味を次に示します。

表7-1　戻り値

値 | エラーレベル | 意味
0 | 正常 | 正常終了しました。
1 | エラー | オプション又は引数の指定が不正です。
2 | エラー | ファイルがないか，読み取り権限がありません。エラーの発生したファイル名が表示されます。
3 | エラー | ファイル又はディレクトリに書き込み権限がありません。エラーの発生したファイル名が表示されます。
4 | エラー | メモリ不足です。
5 | エラー | ファイルIOエラーです。ファイル名が表示されます。
100 | エラー | FDLファイル又はMDLファイルのバージョンが不正です。エラーの発生したファイル名が表示されます。
101 | エラー | 指定したフォーマット名が，FDLファイル又はMDLファイル中にありません。エラーの発生したFDLファイル名，MDLファイル名，及びフォーマット名が表示されます。
102 | エラー | 指定したFDLフォーマットが検証されていません。エラーの発生したFDLファイル名及びフォーマット名が表示されません。
103 | エラー | MDLファイルへのフォーマット挿入時に検証エラーが発生しました。
104 | エラー | 挿入できるフォーマットがない。エラーの発生したFDLファイル名が表示されます。
105 | エラー | 同一名称のフォーマットが挿入先のMDLファイルにある。FDLファイル名及びフォーマット名が表示されます。
106 | エラー | 挿入できないDTDフォーマットが指定された。又はDTDフォーマット挿入でエラーが発生しました。
107 | エラー | 指定されたフォーマット名が不正です。
108 | エラー | FDLファイル又はMDLファイルの内容が不正です。不正な内容を含むFDLファイル又はMDLファイルのファイル名が表示されます。
109 | エラー | 再帰構造を展開したコンポーネントの最大数が制限値を超えました。
201 | エラー | マップ式ファイルの記述が不正です。エラーの発生したマップ式ファイル名及びエラー位置が表示されます。
301 | エラー | 指定したコンポーネントがMDL中にありません。エラーの発生したMDLファイル名及びコンポーネント名が表示されます。
801 | ワーニング | 一部のコンポーネントの情報がマージできませんでした。
802 | ワーニング | 一部の変数式の情報がマージできませんでした。※
901 | エラー | 内部エラーです。保守員に連絡してください。

注※

マージできないコンポーネント及びマージできない変数式がある場合は，戻り値「801」が出力されます。

7.1.10　ヘルプの表示

マージツールのヘルプを表示するには，コマンド「etmerge」の引数として「/HELP」又は「/?」オプションを指定します。指定例を次に示します。

etmerge /HELP

8.　インタフェース

この章では，Interschemaが提供するインタフェースの概要及び注意事項について説明します。

＜この章の構成＞

8.1　インタフェースの概要

8.2　C言語及びJava言語のインタフェースを混在させて使用する場合の注意事項

8.1　インタフェースの概要

この節では，Interschemaが提供するインタフェースの概要を説明します。Interschemaが提供するインタフェースには，データ変換処理API及びユーザ組み込み関数の出口関数があります。

＜この節の構成＞

8.1.1　データ変換処理APIの概要

8.1.2　ユーザ組み込み関数の出口関数の概要

8.1.1　データ変換処理APIの概要

データ変換処理APIは，C言語の実行環境又はJava言語の実行環境で，ユーザ業務プログラムからトランスレータを起動して，データ変換を行うために必要なインタフェースです。Interschemaは，次の二つのデータ変換処理APIを提供します。

C言語の実行環境で使用するデータ変換処理API（以降，データ変換処理API（C言語）と呼びます）

Java言語の実行環境で使用するデータ変換処理API（以降，データ変換処理API（Java言語）と呼びます）

データ変換処理APIを使用すると，既存のユーザ業務プログラムにトランスレータの機能を容易に組み込めます。また，ファイル化されたデータだけでなく，メモリ上のデータも変換できます。

データ変換処理API（C言語）の詳細については，「9.　データ変換処理API（C言語）」を参照してください。データ変換処理API（Java言語）の詳細については，「10.　データ変換処理API（Java言語）」を参照してください。

8.1.2　ユーザ組み込み関数の出口関数の概要

FDLファイル又はMDLファイルに変換情報を定義するとき，Interschemaが標準で提供している関数以外に，ユーザが独自に定義したユーザ組み込み関数を使用できます。Interschemaは，データ変換を実行中に，MDLファイルに定義されたユーザ組み込み関数から，ユーザがC言語又はJava言語で作成したユーザプログラムを出口関数として呼び出すインタフェースを提供します。

ユーザ組み込み関数については，「11.　ユーザ組み込み関数」を参照してください。C言語の出口関数の詳細については，「11.4　C言語の出口関数の作成」を参照してください。Java言語の出口関数の詳細については，「11.5　Java言語の出口関数の作成」を参照してください。

8.2　C言語及びJava言語のインタフェースを混在させて使用する場合の注意事項

この節では，Interschemaが提供するC言語のインタフェース，及びJava言語のインタフェースを混在させて使用する場合の注意事項について説明します。

同一プロセス内で，データ変換処理API（C言語）及びデータ変換処理API（Java言語）を混在させて使用しないでください。

ettransコマンドはC言語になります。

データ変換API（C言語）及びデータ変換API（Java言語），並びにC言語の出口関数及びJava言語の出口関数を混在させて使用する場合の制限事項を，次の表に示します。

表8-1　異なる言語のインタフェースを混在させて使用する場合の制限事項

条件 | 結果 | 備考
データ変換APIの対応言語 | 出口関数の対応言語 | 出口関数を呼び出す | データ変換APIから出口関数にオブジェクトを渡す
C言語 | C言語 | ○ | ○ | システム情報ファイル「ettrans.ini」でUSE02IFが指定された出口関数にだけ，オブジェクトを渡します。
C言語 | Java言語 | × | × | データ変換APIの呼び出し時に，出口関数が不正なため変換処理を終了します（メッセージKBET0030T-Eを出力します）。
Java言語 | C言語 | ○ | × | システム情報ファイル「ettrans.ini」でUSE02IFが指定された出口関数には，オブジェクトとしてNULLを渡します。
Java言語 | Java言語 | ○ | ○ | －

（凡例）

○：できます。

×：できません。

－：特にありません。

9.　データ変換処理API（C言語）

この章では，データ変換処理API（C言語）について説明します。

＜この章の構成＞

9.1　データ変換処理API（C言語）の概要

9.2　データ変換処理API（C言語）の関数仕様

9.3　データ変換処理API（C言語）の使用例

9.4　データ変換処理API（C言語）を使用したプログラムの作成

9.1　データ変換処理API（C言語）の概要

Interschemaは，C言語の実行環境で，ユーザ業務プログラムからトランスレータを起動してデータ変換を行うために必要な，データ変換処理API（C言語）を提供します。

この節では，データ変換処理API（C言語）の機能概要，実行順序，及び実行時の注意事項について説明します。データ変換処理API（C言語）の関数を使用する前に，必ずお読みください。

＜この節の構成＞

9.1.1　データ変換処理API（C言語）の機能概要

9.1.2　データ変換処理API（C言語）の実行順序

9.1.3　データ変換処理API（C言語）実行時の注意事項

9.1.1　データ変換処理API（C言語）の機能概要

データ変換処理API（C言語）の関数一覧を次に示します。

表9-1　データ変換処理API（C言語）の関数一覧

項番 | 関数名 | 機能概要 | 種別
1 | ETtrans2Init | トランスレータの初期化 | トランスレータ操作関数
2 | ETtrans2End | トランスレータの終了処理
3 | ETtrans2CreateMdlInfo | MDL情報の生成 | MDL情報操作関数
4 | ETtrans2ReleaseMdlInfo | MDL情報の解放
5 | ETtrans2UpdateMdlInfo | MDL情報の更新
6 | ETtrans2CreateThreadContext | スレッド固有情報の生成 | スレッド固有情報操作関数
7 | ETtrans2ReleaseThreadContext | スレッド固有情報の解放
8 | ETtrans2UpdateThreadContext | スレッド固有情報の更新
9 | ETtrans2Exec | 変換実行 | 変換実行関数
10 | ETtrans2GetDlProperty | DLプロパティ情報の取得 | DLプロパティ操作関数
11 | ETtrans2ReleaseDlProperty | DLプロパティ情報の解放

データ変換処理API（C言語）の各関数については，「9.2　データ変換処理API（C言語）の関数仕様」を参照してください。

9.1.2　データ変換処理API（C言語）の実行順序

データ変換処理API（C言語）の関数の実行順序は，処理の方法によって次の三つに分けられます。

シングルスレッドの場合

マルチスレッド（スレッド内でMDL情報を生成しない）の場合

マルチスレッド（スレッド内でMDL情報を生成する）の場合

各処理での関数の実行順序を次に示します。関数を実行する場合は，必ずこの順序で行ってください。

ETtrans2GetDlProperty関数，及びETtrans2ReleaseDlProperty関数は，ETtrans2Init関数からETtrans2End関数の間の任意の箇所で呼び出せます。ただし，ETtrans2GetDlProperty関数，ETtrans2ReleaseDlProperty関数の順で呼び出してください。

＜この項の構成＞

(1)　シングルスレッドの場合

(2)　マルチスレッド（スレッド内でMDL情報を生成しない）の場合

(3)　マルチスレッド（スレッド内でMDL情報を生成する）の場合

(1)　シングルスレッドの場合

シングルスレッドでの関数の実行順序を次に示します。

図9-1　シングルスレッドでの関数の実行順序

(2)　マルチスレッド（スレッド内でMDL情報を生成しない）の場合

マルチスレッド（スレッド内でMDL情報を生成しない）での関数の実行順序を次に示します。

図9-2　マルチスレッド（スレッド内でMDL情報を生成しない）での関数の実行順序

(3)　マルチスレッド（スレッド内でMDL情報を生成する）の場合

マルチスレッド（スレッド内でMDL情報を生成する）での関数の実行順序を次に示します。

図9-3　マルチスレッド（スレッド内でMDL情報を生成する）での関数の実行順序

9.1.3　データ変換処理API（C言語）実行時の注意事項

データ変換処理API（C言語）の関数を使用する場合は，次の点に注意してください。

データ変換処理API（C言語）は「9.1.2　データ変換処理API（C言語）の実行順序」に従って使用してください。異なる遷移で実行した場合，不正な結果となります。

スレッド固有情報は変換を実行するスレッドごとに生成してください。各スレッドには，異なるスレッド固有情報を渡してください。

一つの処理の中で，データ変換処理API（C言語）と互換APIを混在して使うことはできません。互換APIについては，「付録D　Interschemaバージョン1との互換API」を参照してください。

マルチスレッド（スレッド内でMDL情報を生成しない）の場合，変更するMDL情報がほかのスレッドで使用中のときは，ETtrans2UpdateMdlInfo関数を呼び出さないでください。

マルチスレッド（スレッド内でMDL情報を生成しない）の場合とマルチスレッド（スレッド内でMDL情報を生成する）の場合を混在させて処理する場合で，MDL情報をスレッド内で生成するときは，MDL情報はそのスレッド内だけで使用してください。

マルチスレッドの場合で，動作中のスレッドがあるときは，呼び出しが任意の関数（ETtrans2UpdateThreadContext関数は除きます）を呼び出さないでください。

9.2　データ変換処理API（C言語）の関数仕様

この節では，データ変換処理API（C言語）の各関数の仕様について説明します。データ変換処理API（C言語）の関数の記述形式を次に示します。

形式

関数の記述形式を示します。

引数

関数の引数及び入出力の種別を示します。

説明

関数の機能について説明します。

戻り値

関数の戻り値を示します。

次にデータ変換処理API（C言語）の各関数の仕様を示します。

＜この節の構成＞

9.2.1　ETtrans2Init（トランスレータの初期化）

9.2.2　ETtrans2End（トランスレータの終了処理）

9.2.3　ETtrans2CreateMdlInfo（MDL情報の生成）

9.2.4　ETtrans2ReleaseMdlInfo（MDL情報の解放）

9.2.5　ETtrans2UpdateMdlInfo（MDL情報の更新）

9.2.6　ETtrans2CreateThreadContext（スレッド固有情報の生成）

9.2.7　ETtrans2ReleaseThreadContext（スレッド固有情報の解放）

9.2.8　ETtrans2UpdateThreadContext（スレッド固有情報の更新）

9.2.9　ETtrans2Exec（変換実行）

9.2.10　ETtrans2GetDlProperty（FDLファイル又はMDLファイルのプロパティ情報の取得）

9.2.11　ETtrans2ReleaseDlProperty（FDLファイル又はMDLファイルのプロパティ情報の解放）

9.2.1　ETtrans2Init（トランスレータの初期化）

形式

#include  "ETtrans.h"

int ETtrans2Init (const char *cszLogFile)

引数

引数 | 種別 | 内容
cszLogFile | 入力 | ログファイル名を指定します。

説明

トランスレータを初期化します。この関数を呼び出すのは，一つのプロセスの中で１回だけです。

この関数を呼び出したら，ETtrans2End関数が呼び出されるまで，スレッド上のすべての関数処理のログ情報は，引数cszLogFileで指定したファイルに出力されます。

引数cszLogFileに指定したファイルを作成又は更新できなかった場合，若しくは引数cszLogFileにNULLを指定した場合は，エラー情報はデフォルトのログファイル「errlog.txt」に出力されます。デフォルトのログファイルを作成又は更新できなかった場合は，標準出力に出力されます。

この関数内でログファイルに情報を出力する場合，ログファイルの最大サイズは初期値（1MB）となります。ただし，システム情報ファイル「ettrans.ini」でログを出力しないように指定している場合は，引数cszLogFile指定に関係なくログは出力されません。

戻り値

戻り値 | 内容
0x00000000 | 正常に終了しました。
0x01000010※ | 指定されたログファイルがオープンできないため，ログを初期値のログファイル名で出力，又は標準出力に出力しました。
0x01000040※ | 出口関数の定義に不正があります。
0x01000100※ | 「ettrans.ini」の定義に不正があります。
0x04000002 | メモリ不足です。

注※

0x01000010，0x01000040，及び0x01000100は，ほかの値と同時に設定される場合があります。

9.2.2　ETtrans2End（トランスレータの終了処理）

形式

#include  "ETtrans.h"

int ETtrans2End()

引数

なし

説明

トランスレータを終了します。この関数を呼び出すのは，一つのプロセスの中で１回だけです。

データ変換処理を終了するには，この関数を実行して正常に終了したことを確認する必要があります。

戻り値

戻り値 | 内容
0x00000000 | 正常に終了しました。

9.2.3　ETtrans2CreateMdlInfo（MDL情報の生成）

形式

#include  "ETtrans.h"

int ETtrans2CreateMdlInfo (
 char **pMdlInfo,
 const char *cszMdlFile,
 char *pTC)

引数

引数 | 種別 | 内容
pMdlInfo | 出力 | 生成したMDL情報を取得します。
cszMdlFile | 入力 | ロードしたいMDLファイル名を指定します。
pTC | 入力 | 使用するスレッド固有情報を指定します。

説明

指定されたMDLファイルをロードして，MDL情報を生成します。

引数pMdlInfoで取得したMDL情報は，変換時にETtrans2Exec関数の引数として渡します。

引数pTCにNULLが指定された場合，この関数を呼び出しているときのログは，ETtrans2Init関数で指定されたログファイルに出力されます。また，引数pTCにETtrans2CreateThreadContext関数で生成されたスレッド固有情報が指定された場合，この関数を呼び出しているときのログは，スレッド固有情報に指定されたログファイルに出力されます。

戻り値

戻り値 | 内容
0x00000000 | 正常に終了しました。
0x02000000 | MDLファイルが検証されていない，MDLファイルのバージョンが不整合，又はMDLファイルが不正です。
0x04000000 | MDL情報を生成できませんでした。
0x04000001 | 指定されたMDLファイルがない，又はファイルへのアクセス権がありません。
0x04000002 | メモリ不足です。
0x04000008 | スレッド固有情報が不正です。
0x04000010 | 変換できないMDLファイルです（対応ライセンスがありません）。

9.2.4　ETtrans2ReleaseMdlInfo（MDL情報の解放）

形式

#include  "ETtrans.h"

int ETtrans2ReleaseMdlInfo (char *pMdlInfo)

引数

引数 | 種別 | 内容
pMdlInfo | 入力 | MDL情報を指定します。

説明

指定されたMDL情報に割り当てられたメモリを解放します。データ変換処理を終了する前に，ETtrans2CreateMdlInfo関数で生成したすべてのMDL情報に対して，ETtrans2ReleaseMdlInfo関数を発行し，正常に終了したことを確認する必要があります。

引数pMdlInfoに既に解放されたMDL情報を渡していた場合は，そのまま正常に終了します。

戻り値

戻り値 | 内容
0x00000000 | 正常に終了しました。
0x04000000 | MDL情報を解放できませんでした。
0x04000008 | MDL情報が不正です。

9.2.5　ETtrans2UpdateMdlInfo（MDL情報の更新）

形式

#include  "ETtrans.h"

int ETtrans2UpdateMdlInfo (
 char *pMdlInfo,
 const char *cszMdlFile,
 char *pTC)

引数

引数 | 種別 | 内容
pMdlInfo | 入出力 | 更新したいMDL情報のアドレスを指定します。
cszMdlFile | 入力 | MDLファイル名を指定します。
pTC | 入力 | 使用するスレッド固有情報を指定します。

説明

指定されたMDL情報にロードされているMDLファイルをアンロードし，新たにMDLファイルをロードします。MDL情報を指定して呼び出しているMDL情報操作関数，又は変換実行関数がある場合は，スレッドの外から同じMDL情報を指定して，この関数を呼び出さないでください。

引数pTCにNULLが指定された場合，この関数を呼び出しているときのログはETtrans2Init関数で指定されたログファイルに出力されます。引数pTCにETtrans2CreateThreadContext関数で生成されたスレッド固有情報が指定された場合，この関数を呼び出しているときのログはスレッド固有情報に指定されたログファイルに出力されます。

戻り値

戻り値 | 内容
0x00000000 | 正常に終了しました。
0x02000000 | MDLファイルが検証されていない，MDLファイルのバージョンが不整合，又はMDLファイルが不正です。
0x04000000 | MDL情報を生成できませんでした。
0x04000001 | 指定されたMDLファイルがない，又はファイルへのアクセス権がありません。
0x04000002 | メモリ不足です。
0x04000008 | MDL情報又はスレッド固有情報が不正です。
0x04000010 | 変換できないMDLファイルです（対応ライセンスがありません）。

9.2.6　ETtrans2CreateThreadContext（スレッド固有情報の生成）

形式

#include  "ETtrans.h"

int ETtrans2CreateThreadContext (
 char **pTC,
 int iLogFlag,
 const char *cszLogFile,
 int iFileAppendFlag,
 int iFNFlag,
 const char *cszOptList)

引数

引数
種別
内容

pTC
出力
スレッド固有情報を取得します。

iLogFlag
入力
ログの出力方法を指定します。

ET_LG_ON：ログ出力あり

ET_LG_OFF：ログ出力なし

cszLogFile
入力
スレッド固有情報が使用するログファイル名を指定します。

iFileAppendFlag
入力
ファイルの出力方法を指定します。

ET_FA_UPDATE：新規又は上書き

ET_FA_APPEND：追加書き

iFNFlag
入力
変換するフォーマットを指定するかどうかを指定します。

ET_OP_FNOFF：指定なし

ET_OP_FNON ：指定あり

cszOptList
入力
コマンドラインで指定できる実行時オプションを指定します。オプションについては，「5.4.1(3)　引数」を参照してください。

説明

スレッド固有情報を生成します。スレッド固有情報にはスレッドのログの出力先や変換実行時のオプションが含まれます。変換実行時のオプションは，ETtrans2CreateThreadContext関数で生成したスレッド固有情報を使用して呼び出す変換実行時（ETtrans2Exec関数の呼び出し時）に適用されます。

変換するスレッドごとにETtrans2CreateThreadContext関数を発行し，引数pTCで取得したスレッド固有情報のアドレスを変換実行関数又はETtrans2CreateThreadContext関数以外のスレッド固有情報操作関数に渡します。ETtrans2CreateThreadContext関数で取得したスレッド固有情報のアドレス及び値は変更しないでください。

引数iLogFlagにET_LG_OFFを指定した場合，生成されたスレッド固有情報を使用している関数でのログは出力されません。ただし，システム情報ファイル「ettrans.ini」の[Option]セクションでログを出力しないように指定されている場合，引数iLogFlagの指定に関係なく，ログは出力されません。

引数cszLogFileにはスレッドで呼び出す関数のログの出力先ファイルを指定します。引数cszLogFileにNULLを指定した場合，又は引数cszLogFileに指定したファイルを作成若しくは更新できなかった場合は，ETtrans2Init関数で指定したログファイルに出力します。

引数iFileAppendFlagは，変換結果をファイルに出力する場合だけ使用できます（XML文書の出力は除きます）。ヘッダファイル「ETtrans.h」内で定義されている次の値を指定します。

ET_FA_UPDATE：新規又は上書き

ET_FA_APPEND：追加書き

引数iFNFlagにET_OP_FNOFFを指定した場合，対象となるMDLファイル内のすべてのフォーマットを変換します。ET_OP_FNONを指定した場合は，ETtrans2Exec関数の引数pAdrsListで指定されたフォーマットだけを変換します（コマンド実行時に-FNオプションを指定した場合と同じです）。

引数pszOptListには，コマンドラインで指定できる実行時オプションを指定します。-F，-FN，-E，-file，及び-propは指定できません。

戻り値

戻り値 | 内容
0x00000000 | 正常に終了しました。
0x01000010※ | 指定されたログファイルをオープンできないため，ログを初期値のログファイル名で出力，又は標準出力に出力しました。
0x02000000 | 実行時オプションの指定にエラーがあります。
0x04000000 | スレッド固有情報を生成できませんでした。
0x04000002 | メモリ不足です。

注※

0x01000010は，ほかの値と同時に設定される場合があります。

9.2.7　ETtrans2ReleaseThreadContext（スレッド固有情報の解放）

形式

#include  "ETtrans.h"

int ETtrans2ReleaseThreadContext (char *pTC)

引数

引数 | 種別 | 内容
pTC | 入力 | スレッド固有情報を指定します。

説明

指定されたスレッド固有情報に割り当てられたメモリを解放します。トランスレータが終了する前に，ETtrans2CreateThreadContext関数で生成したすべてのスレッド固有情報に対してETtrans2ReleaseThreadContext関数を発行し，正常終了したことを確認する必要があります。呼び出し中のスレッド固有情報操作関数や変換実行関数がある場合，そこで使用しているものと同じスレッド固有情報を指定しないでください。同じスレッド固有情報を指定して，ETtrans2ReleaseThreadContext関数を呼び出した場合は，不正な結果となります。

引数pTCに既に解放されたスレッド固有情報を渡した場合は，そのまま正常に終了します。

戻り値

戻り値 | 内容
0x00000000 | 正常に終了しました。
0x04000000 | スレッド固有情報を解放できませんでした。
0x04000008 | スレッド固有情報が不正です。

9.2.8　ETtrans2UpdateThreadContext（スレッド固有情報の更新）

形式

#include  "ETtrans.h"

int ETtrans2UpdateThreadContext(
 char *pTC,
 int iLogFlag,
 const char *cszLogFile,
 int iFileAppendFlag,
 int iFNFlag,
 const char *cszOptList)

引数

引数
種別
内容

pTC
入出力
変更したいスレッド固有情報を指定します。

iLogFlag
入力
ログの出力方法を指定します。

ET_LG_ON：ログ出力あり

ET_LG_OFF：ログ出力なし

cszLogFile
入力
スレッド固有情報が使用するログファイル名を指定します。

iFileAppendFlag
入力
ファイルの出力方法を指定します。

ET_FA_UPDATE：新規又は上書き

ET_FA_APPEND：追加書き

iFNFlag
入力
変換するフォーマットを指定するかどうかを指定します。

ET_OP_FNOFF：指定なし

ET_OP_FNON ：指定あり

cszOptList
入力
コマンドラインで指定できる実行時オプションを指定します。オプションについては，「5.4.1(3)　引数」を参照してください。

説明

ログファイル，実行時オプションなどのスレッド固有情報の情報を変更します。この変更は，変更したスレッド固有情報を使用する関数を呼び出したときに使用されます。

エラーが発生した場合，スレッド固有情報は変更されません。ETtrans2UpdateThreadContext関数を呼び出したときのログは，引数pTCで指定したスレッド固有情報に指定されたログファイルに出力されます。呼び出し中のスレッド固有情報操作関数や変換実行関数がある場合，そこで使用しているものと同じスレッド固有情報を指定しないでください。同じスレッド固有情報を指定して，ETtrans2UpdateThreadContext関数を呼び出した場合は，不正な結果となります。

引数cszLogFileにNULLを指定した場合，又は引数cszLogFileに指定したファイルを作成又は更新できなかった場合は，スレッド固有情報に指定されたログファイルは変更されません。

引数iFileAppendFlag，iFNFlag，及びcszOptListについては，「9.2.6　ETtrans2CreateThreadContext（スレッド固有情報の生成）」を参照してください。

戻り値

戻り値 | 内容
0x00000000 | 正常に終了しました。
0x01000010※ | 指定されたログファイルをオープンできないため，ログを初期値のログファイル名で出力，又は標準出力に出力しました。
0x02000000 | 実行時オプションの指定にエラーがあります。
0x04000000 | スレッド固有情報を生成できませんでした。
0x04000002 | メモリ不足です。
0x04000008 | スレッド固有情報が不正です。

注※

0x01000010は，ほかの値と同時に設定される場合があります。

9.2.9　ETtrans2Exec（変換実行）

形式

#include  "ETtrans.h"

int ETtrans2Exec (
 char *pTC,
 char *pMdlInfo,
 ETTRANSADRSLIST *pAdrsList,
 ETTRANSERRLIST *pErrList,
 void *pPtrToUsrFunc)

引数

引数 | 種別 | 内容
pTC | 入力 | スレッド固有情報を指定します。
pMdlInfo | 入力 | 変換に使用するMDL情報を指定します。
pAdrsList | 入出力 | 変換するフォーマットの入出力データ差し替え情報のリストを指定します。
pErrList | 出力 | エラー情報リストを取得します。
pPtrToUsrFunc | 入力 | 出口関数に渡すポインタを指定します。

説明

引数pMdlInfoで指定されたMDL情報に従ってデータ変換をします。ETtrans2Exec関数を呼び出しているときのログは，引数pTCで渡されるスレッド固有情報を生成したときに指定されたログファイルに出力されます。

引数pTCには，ETtrans2CreateThreadContext関数で取得したスレッド固有情報を指定します。複数のスレッドから同じスレッド固有情報を指定して，ETtrans2Exec関数を呼び出さないでください。

引数pMdlInfoには，ETtrans2CreateMdlInfo関数で生成されたMDL情報を指定します。

引数pAdrsListは，MDLファイル内に定義した入出力ファイルを，別ファイル又はメモリデータに差し替える場合に指定します。この引数でデータを差し替えるフォーマット名と，対応するデータのファイル名，又はメモリアドレスを指定します。データを差し替えるフォーマット名は複数指定できます。また，差し替えるフォーマットの終了を示すために，ETTRANSADRSLIST配列の最後の要素のFormatNameメンバはNULLを指定する必要があります。

データ差し替えを指定されたフォーマットに対しては，MDLファイル内で定義された入出力データファイル名は無視されます。入力データと出力データのファイルは，同じファイル名を指定するとエラーとなります。また，MDLファイル内で定義された入出力データファイル名と同じファイル名を指定した場合もエラーとなります。

構造体ETTRANSADRSLISTは，ヘッダファイル「ETtrans.h」内で定義されています。

typedef struct {
 char  *FormatName; /* 差し替え対象となるフォーマット名 */
 int  DataKind;  /* データ種別 (ET_DK_*) */
 char  *DataAddress; /* 入出力データファイル名（ファイル指定） */
                     /* 入出力データの開始アドレス（メモリ指定） */
 char  *EndAddress; /* 入出力データの終了アドレス（メモリ指定） */
 int  MemoryInitSize; /* 出力データエリア初期サイズ
                                            （メモリ指定） */
 int  MemoryIncrementSize; /* 出力データエリア増分サイズ
                                            （メモリ指定） */
} ETTRANSADRSLIST;

データ種別DataKindには，ヘッダファイル「ETtrans.h」内で定義されている次の値のどれかを指定します。

ET_DK_FILE：データ種別がファイルの場合

ET_DK_MEMORY：データ種別がメモリの場合

ET_DK_MEMORYを指定した場合は，入出力データの開始アドレスDataAddressと終了アドレスEndAddressを指定してください。ただし，出力フォーマットの場合は，開始アドレスとしてNULLアドレスを指定できます。この場合，トランスレータが必要なデータエリアを確保し，その先頭アドレスを入出力データの開始アドレスDataAddressへ設定して返します。トランスレータが確保したエリアは，次のETtrans2Exec関数の実行，又はETtrans2ReleaseThreadContext関数の実行前まで有効です。確保するデータエリアサイズは，pAdrsListのMemoryInitSize，又はMemoryIncrementSizeで指定します。pAdrsListの該当する値に0が指定された場合は，システム情報ファイル「ettrans.ini」内の[MemoryData]セクションで定義された値を用います。pAdrsList，システム情報ファイルの両方に定義がない場合は，初期割り当てサイズと割り当て増分サイズの両方に1,024（バイト）を仮定します。

出力フォーマットに対しては，入出力データの終了アドレスEndAddressにデータの最終アドレスを返します。ただし，出力データが指定されたアドレスを超えてエラーのために出力されない場合は，ヘッダファイル「ETtrans.h」で定義されている次の値を設定して返します。

ET_AD_OVER ：メモリアドレスオーバ

ET_AD_NOTOUT ：未出力

引数pErrListへは変換実行時のエラー情報を出力します。エラー情報がない場合には，エラー情報リストpErrListのデータ数に０を返します。取り出した内容は次のETtrans2Exec関数の実行，又はETtrans2ReleaseThreadContext関数の実行前まで有効です。構造体ETTRANSERRLISTは，ヘッダファイル「ETtrans.h」内で定義されています。

typedef struct {
 int  Size;   /* エラー情報データ数 */
 ETTRANSERRDATA  *ErrData; /* エラー情報データ(配列) */
} ETTRANSERRLIST;

typedef struct {
 int  MessageNo; /* メッセージ番号 */
 int  ErrorLevel; /* エラーレベル */
 int  NumericData; /* 数値情報 */
 char  *Information; /* 文字列情報 */
} ETTRANSERRDATA;

各エラー情報のデータには，変換処理で発生したワーニングレベル以上のエラー情報が発生順に設定されます。エラーレベルは，トランスレータの戻り値と同じ意味を持ちます。数値情報と文字列情報は，ログファイルへ出力する付加情報で，次の内容を出力します。付加情報がない場合は，数値情報は０，文字列情報はNULLが設定されます。

表9-2　ログファイルに出力される数値情報，文字情報の内容

メッセージ番号 | 数値情報 | 文字列情報 | 備考
9 | 出力済みのグループ数 | なし | グループ単位の出力指定がある場合のエラー
55，56 | 出口関数の戻り値，例外中のエラーコード（Java言語の出口関数の場合） | ユーザ組み込み関数名 | 出口関数のエラー
70，71，72 | 0 | ユーザ組み込み関数名 | Java言語の出口関数のエラー
7，8，23～36，50，57，67，78 | コンポーネントのアドレス | コンポーネント名 | コンポーネントに対するエラー
21 | 0 | オプション | オプション不正エラー
1 | フォーマット名
2 | なし（メモリアドレス不正の場合）

注

メッセージ番号の内容については，「付録B.3　メッセージ」を参照してください。

引数pPtrToUsrFuncには，出口関数に渡す任意のアドレスを指定します。トランスレータは，システム情報ファイルの[Userfunc_Option]セクションで，USE02IFオプションを指定された出口関数を呼び出すときに，ETtrans2Exec関数で指定された任意のアドレスを出口関数のポインタ型として入力引数へ追加して渡します。ポインタ型の引数については，「11.3.2　［Userfunc_Mapfunc］セクション」の「表11-2　ユーザ組み込み関数で使用する型」を参照してください。

トランスレータは指定されたアドレスの更新及びチェックはしません。USE02IFオプションを指定されていない出口関数は，引数pPtrToUsrFuncの指定は無視されます。

戻り値

トランスレータでのデータ変換の戻り値を同じです。ettransコマンドの戻り値については，「5.4.2　ettransコマンドの戻り値」を参照してください。

9.2.10　ETtrans2GetDlProperty（FDLファイル又はMDLファイルのプロパティ情報の取得）

形式

#include  "ETtrans.h"

int ETtrans2GetDlProperty (
 const char *cszFileName,
 ETTRANSDLPROPINFO *pDlPropInfo)

引数

引数 | 種別 | 内容
cszFileName | 入力 | FDLファイル又はMDLファイル名を指定します。
pDlPropInfo | 出力 | DLプロパティ情報を取得します。

説明

指定されたFDLファイル又はMDLファイルからDLプロパティ情報を取得します。取得したDLプロパティ情報の値は，ETtrans2ReleaseDlProperty関数を呼び出すまで有効です。構造体ETTRANSDLPROPINFOは，ヘッダファイル「ETtrans.h」内で次のように定義されています。

typedef struct _ETTRANSDLPROPINFO {
 char *szUserVersion;   /* ユーザバージョン */
 char *szUserComment;   /* ユーザコメント */
 long lSysCreatedDate;   /* 作成日時 */
 char *szSysCreatedPpVersion;  /* 作成製品バージョン */
 long lSysLastUpdatedDate;  /* 更新日時 */
 char *szSysLastUpdatedPpVersion; /* 更新製品バージョン */
 unsigned long lSysDlVersion;  /* DLファイルバージョン */
} ETTRANSDLPROPINFO;

ETtrans2GetDlProperty関数を呼び出しているときは，ログは出力されません。

ユーザバージョンszUserVersionとユーザコメントszUserCommentは，実行環境の文字コードに変換して返します。ただし，ワークステーションのOSでは，LANG環境変数が”C”に設定されていた場合は，FDLファイル又はMDLファイルを作成したときに格納された文字列をそのまま返します。この二つの情報が設定されていない場合は，対応する構造体メンバにNULLが設定されます。

作成日時lSysCreatedDate，更新日時lSysLastUpdatedDateの値には万国標準時（UCT）の1970年1月1日の00:00:00から作成日時，更新日時までの通算経過秒が設定されます。

作成製品バージョンszSysCreatedPpVersion，更新製品バージョンszSysLastUpdatedPpVersionには，それぞれ作成又は更新に使用したInterschemaのバージョンが次の形式で返されます。

VVRRSS

VV：バージョン番号

RR：リビジョン番号

SS：限定・修正コード

DLファイルバージョンlSysDlVersionにはFDLバージョン又はMDLバージョンが設定されます。

古いバージョンのFDL又はMDL（電子データ変換ツール，又はInterschemaバージョン1で作成したもの）に対してETtrans2GetDlProperty関数を実行した場合は，有効な情報はlSysLastUpdatedDate，lSysDlVersionだけです。

戻り値

戻り値 | 内容
0x00000000 | 正常に終了しました。
0x02000000 | 不正なFDL又はMDLが指定されました。
0x02000001 | コード変換で不正文字コードを検出しました。
0x04000000 | システムエラーがあります（パラメタエラーを含む）。
0x04000001 | ファイルの入出力にエラーがあります。
0x04000002 | メモリ不足です。

9.2.11　ETtrans2ReleaseDlProperty（FDLファイル又はMDLファイルのプロパティ情報の解放）

形式

#include  "ETtrans.h"

int ETtrans2ReleaseDlProperty (ETTRANSDLPROPINFO *pDlPropInfo)

引数

引数 | 種別 | 内容
pDlPropInfo | 入力 | DLプロパティ情報を指定します。

説明

指定されたDLプロパティ情報の構造体の各char*型メンバ領域を解放します。ETtrans2GetDlProperty関数で取得したすべてのDLプロパティ情報に対して，この関数を呼び出して解放処理をする必要があります。この関数を呼び出しているときは，ログは出力されません。

戻り値

戻り値 | 内容
0x00000000 | 正常に終了しました。
0x04000000 | 引数にエラーがあります。

9.3　データ変換処理API（C言語）の使用例

この節では，データ変換処理API（C言語）の使用例を示します。

データ変換処理API（C言語）の使用例には，次の三つの例があります。

シングルスレッドの場合

マルチスレッド（スレッド内でMDL情報を生成しない）の場合

マルチスレッド（スレッド内でMDL情報を生成する）の場合

＜この節の構成＞

(1)　シングルスレッドの場合

(2)　マルチスレッド（スレッド内でMDL情報を生成しない）の場合

(3)　マルチスレッド（スレッド内でMDL情報を生成する）の場合

(1)　シングルスレッドの場合

#include <stdio.h>
#include "ETtrans.h"

static void print_message(int iCode, char *msg,
                         ETTRANSERRLIST *ErrList);

int main()
{
 int iRet = 0;
 ETTRANSADRSLIST AdrsList[3];
 ETTRANSERRLIST ErrList;
 char *pTC = NULL;
 char *pMI = NULL;
                        /* アドレスリストの設定 */
 AdrsList[0].FormatName = "IN";
 AdrsList[0].DataKind = ET_DK_FILE;
 AdrsList[0].DataAddress = "input.txt";
 AdrsList[1].FormatName = "OUT";
 AdrsList[1].DataKind = ET_DK_FILE;
 AdrsList[1].DataAddress = "output.txt";
 AdrsList[2].FormatName = NULL;
                        /* トランスレータ初期化 */
 iRet = ETtrans2Init(NULL);
 if (iRet) {
   print_message(iRet, "ETtrans2Init", NULL);
   goto EXIT;
 }
                        /* スレッド固有情報生成 */
 iRet = ETtrans2CreateThreadContext(
   &pTC, ET_LG_ON,NULL, ET_FA_UPDATE, ET_OP_FNOFF, "-IERR");
 if (iRet) {
   print_message(iRet, "ETtrans2CreateThreadContext", NULL);
   goto END;
 }
                        /* MDLローディング */
 iRet = ETtrans2CreateMdlInfo(&pMI, "SAMPLE.mdl", NULL);
 if (iRet) {
   print_message(iRet, "ETtrans2CreateMdlInfo", NULL);
   goto END;
 }
                        /* 変換実行 */
 iRet = ETtrans2Exec(pTC, pMI, AdrsList, &ErrList, NULL);
 if (iRet) {
   print_message(iRet, "ETtrans2Exec", &ErrList);
   goto END;
 }

END:
 if (pMI) {             /* MDLアンロード */
   iRet = ETtrans2ReleaseMdlInfo(pMI);
   if (iRet) {
     print_message(iRet, "ETtrans2ReleaseMdlInfo", NULL);
   }
 }

 if (pTC) {             /* スレッド固有情報解放 */
   iRet = ETtrans2ReleaseThreadContext(pTC);
   if (iRet) {
   print_message(iRet, "ETtrans2ReleaseThreadContext", NULL);
 }
 }
                        /* 終了処理 */
 iRet = ETtrans2End();
 if (iRet) {
   print_message(iRet, "ETtrans2End", NULL);
 }

EXIT:
 printf("--> Return Code = 0x%08x¥n", iRet);
 return iRet;
}

/*
* エラー情報出力関数
*/
static void print_message(int iCode, char *msg, ETTRANSERRLIST *ErrList)
{
 int i;
 ETTRANSERRDATA *edata;

 printf("### ERROR %s %d ###¥n", msg, iCode);
 if (ErrList) {
   printf(" Error Size = %d¥n", ErrList->Size);
   for (i = 0; i < ErrList->Size; i++) {
     edata = &ErrList->ErrData[i];
     printf("¥t%02d (0x%08x) num=%d",
       edata->MessageNo, edata->ErrorLevel, edata->NumericData);
     if (edata->Information) {
       printf(" info=%s¥n", edata->Information);
     } else {
       printf("¥n");
     }
   }
 }
}

(2)　マルチスレッド（スレッド内でMDL情報を生成しない）の場合

#include <stdio.h>
#include <string.h>
#ifdef WIN32
 #include <process.h>
 #include <windows.h>
#else
 #include <pthread.h>
#endif
#include "ETtrans.h"

#define THRD_NUM  3  /* スレッドの数 */

/* スレッドに渡す情報を格納する構造体 */
typedef struct _THD_INF {
 char *pMI; /* MDL情報 */
 char *pTC; /* スレッド固有情報 */
 char InputDataFile[256]; /* 入力データファイル名 */
 char OutputDataFile[256]; /* 出力データファイル名 */
 int iTid; /* スレッド番号 */
} THD_INF;

#ifdef WIN32
 DWORD  WINAPI ettrans_thrd(LPVOID);
#else
 void *ettrans_thrd(void*);
#endif

/*
* main : メイン関数
*/
int main()
{
 int iRet = 0;
 int i;
 char *pMI = NULL;
 char *pTC_Ary[THRD_NUM];
 THD_INF thd_inf_Ary[THRD_NUM];
 char numwk[12];
#ifdef WIN32
 DWORD thrdid[THRD_NUM];
 HANDLE hthrd[THRD_NUM];
#else
 int ret_thread;
 pthread_t hthrd[THRD_NUM];
#endif
 for (i = 0 ; i < THRD_NUM; i++) {
   pTC_Ary[i] = NULL;
 }
                /* トランスレータ初期化 */
 iRet = ETtrans2Init(NULL);
 if (iRet) goto EXIT;
                /* MDLローディング */
 iRet = ETtrans2CreateMdlInfo(&pMI, "SAMPLE.mdl", NULL);
 if (iRet) goto END;
                /* スレッド固有情報生成 */
 for (i = 0 ; i < THRD_NUM; i++) {
   iRet = ETtrans2CreateThreadContext(&pTC_Ary[i], ET_LG_ON, NULL, ET_FA_UPDATE, ET_OP_FNOFF, "-IERR");
   if (iRet) goto END;
 }
                /* スレッド生成 & 変換実行 */
 for (i = 0 ; i < THRD_NUM; i++) {
   sprintf(numwk, "%d", i + 1);
   strcpy(thd_inf_Ary[i].InputDataFile, "input");
   strcat(thd_inf_Ary[i].InputDataFile, numwk);
   strcat(thd_inf_Ary[i].InputDataFile, ".txt");
   strcpy(thd_inf_Ary[i].OutputDataFile, "output");
   strcat(thd_inf_Ary[i].OutputDataFile, numwk);
   strcat(thd_inf_Ary[i].OutputDataFile, ".txt");
   thd_inf_Ary[i].iTid = i + 1;
   thd_inf_Ary[i].pMI = pMI;
   thd_inf_Ary[i].pTC = pTC_Ary[i];

#ifdef WIN32
 hthrd[i] = CreateThread(NULL, 0, ettrans_thrd, (LPVOID)&thd_inf_Ary[i],
                         0, &thrdid[i]);
#else
 ret_thread = pthread_create(&hthrd[i], NULL, ettrans_thrd,
                             &thd_inf_Ary[i]);
#endif
 }

                /* スレッド終了待合せ */
#ifdef WIN32
 for (i = 0; i < THRD_NUM; i++) {
   WaitForSingleObject(hthrd[i], INFINITE);
 }
 for ( i = 0 ; i < THRD_NUM; i++ ){
   CloseHandle(hthrd[i]);
 }
#else
 for ( i = 0 ; i < THRD_NUM; i++ ){
   pthread_join(hthrd[i], NULL);
 }
#endif

END:
 if (pMI) {           /* MDLアンロード */
   ETtrans2ReleaseMdlInfo(pMI);
 }

 for (i = 0 ; i < THRD_NUM; i++) {
   if (pTC_Ary[i]) { /* スレッド固有情報解放 */
     ETtrans2ReleaseThreadContext(pTC_Ary[i]);
   }
 }

                     /* 終了処理 */
ETtrans2End();

EXIT:
 printf("*** END - 0x%08x ***¥n", iRet);
 return(iRet);
}

/*
* ettrans_thrd : スレッド対応関数
*/
#ifdef WIN32
DWORD WINAPI ettrans_thrd(LPVOID Inf_Arg)
#else
void *ettrans_thrd(void *Inf_Arg)
#endif
{
 int iRet = 0;
 int iTid = 0;
 THD_INF thd_inf;
 ETTRANSADRSLIST AdrsList[3];
 ETTRANSERRLIST ErrList;

 thd_inf = *(THD_INF*)Inf_Arg;
 iTid = thd_inf.iTid;

          /* 引数の設定 */
 AdrsList[0].FormatName = "IN";
 AdrsList[0].DataKind = ET_DK_FILE;
 AdrsList[0].DataAddress = thd_inf.InputDataFile;
 AdrsList[1].FormatName = "OUT";
 AdrsList[1].DataKind = ET_DK_FILE;
 AdrsList[1].DataAddress = thd_inf.OutputDataFile;
 AdrsList[2].FormatName = NULL;

         /* 変換実行 */
 iRet = ETtrans2Exec(thd_inf.pTC, thd_inf.pMI, AdrsList, &ErrList, NULL);
 printf("Thread %08d End - Return Code 0x%08x¥n", iTid, iRet);
#ifdef WIN32
 ExitThread(0);
#else
 pthread_exit((void *)0);
#endif
 return 0;
}

(3)　マルチスレッド（スレッド内でMDL情報を生成する）の場合

#include <stdio.h>
#include <string.h>
#ifdef WIN32
 #include <process.h>
 #include <windows.h>
#else
 #include <pthread.h>
#endif
#include "ETtrans.h"

#define THRD_NUM  3  /* スレッドの数 */

/* スレッドに渡す情報を格納する構造体 */
typedef struct _THD_INF {
 char *pTC; /* スレッド固有情報 */
 char InputDataFile[256]; /* 入力データファイル名 */
 char OutputDataFile[256]; /* 出力データファイル名 */
 int iTid; /* スレッド番号 */
} THD_INF;

#ifdef WIN32
 DWORD  WINAPI ettrans_thrd(LPVOID);
#else
 void *ettrans_thrd(void*);
#endif

/*
* main : メイン関数
*/
int main()
{
 int iRet = 0;
 int i;
 char *pTC_Ary[THRD_NUM];
 THD_INF thd_inf_Ary[THRD_NUM];
 char numwk[12];
#ifdef WIN32
 DWORD thrdid[THRD_NUM];
 HANDLE hthrd[THRD_NUM];
#else
 int ret_thread;
 pthread_t hthrd[THRD_NUM];
#endif
 for (i = 0 ; i < THRD_NUM; i++) {
   pTC_Ary[i] = NULL;
 }
                  /* トランスレータ初期化 */
 iRet = ETtrans2Init(NULL);
 if (iRet) goto EXIT;
                  /* スレッド固有情報生成 */
 for (i = 0 ; i < THRD_NUM; i++) {
   iRet = ETtrans2CreateThreadContext(&pTC_Ary[i], ET_LG_ON, NULL,
     ET_FA_UPDATE, ET_OP_FNOFF, "-IERR");
 if (iRet) goto END;
 }
                 /* スレッド生成 & 変換実行 */
 for (i = 0 ; i < THRD_NUM; i++) {
   sprintf(numwk, "%d", i + 1);
   strcpy(thd_inf_Ary[i].InputDataFile, "input");
   strcat(thd_inf_Ary[i].InputDataFile, numwk);
   strcat(thd_inf_Ary[i].InputDataFile, ".txt");
   strcpy(thd_inf_Ary[i].OutputDataFile, "output");
   strcat(thd_inf_Ary[i].OutputDataFile, numwk);
   strcat(thd_inf_Ary[i].OutputDataFile, ".txt");
   thd_inf_Ary[i].iTid = i + 1;
   thd_inf_Ary[i].pTC = pTC_Ary[i];

#ifdef WIN32
 hthrd[i] = CreateThread(NULL, 0, ettrans_thrd,
            (LPVOID)&thd_inf_Ary[i], 0, &thrdid[i]);
#else
 ret_thread = pthread_create(&hthrd[i], NULL, ettrans_thrd, &thd_inf_Ary[i]);
#endif
 }

               /* スレッド終了待合せ */
#ifdef WIN32
 for (i = 0; i < THRD_NUM; i++) {
   WaitForSingleObject(hthrd[i], INFINITE);
 }
 for ( i = 0 ; i < THRD_NUM; i++ ){
   CloseHandle(hthrd[i]);
 }
#else
 for ( i = 0 ; i < THRD_NUM; i++ ){
   pthread_join(hthrd[i], NULL);
 }
#endif

END:
 for (i = 0 ; i < THRD_NUM; i++) {
   if (pTC_Ary[i]) {         /* スレッド固有情報解放 */
     ETtrans2ReleaseThreadContext(pTC_Ary[i]);
   }
 }

              /* 終了処理 */
 ETtrans2End();

EXIT:
 printf("*** END - 0x%08x ***¥n", iRet);
 return(iRet);
}

/*
* ettrans_thrd : スレッド対応関数
*/
#ifdef WIN32
DWORD WINAPI ettrans_thrd(LPVOID Inf_Arg)
#else
void *ettrans_thrd(void *Inf_Arg)
#endif
{
 int iRet = 0;
 int iTid = 0;
 char *pMI = NULL;
 THD_INF thd_inf;
 ETTRANSADRSLIST AdrsList[3];
 ETTRANSERRLIST ErrList;

 thd_inf = *(THD_INF*)Inf_Arg;
 iTid = thd_inf.iTid;

      /* 引数の設定 */
 AdrsList[0].FormatName = "IN";
 AdrsList[0].DataKind = ET_DK_FILE;
 AdrsList[0].DataAddress = thd_inf.InputDataFile;
 AdrsList[1].FormatName = "OUT";
 AdrsList[1].DataKind = ET_DK_FILE;
 AdrsList[1].DataAddress = thd_inf.OutputDataFile;
 AdrsList[2].FormatName = NULL;

      /* MDLローディング */
 iRet = ETtrans2CreateMdlInfo(&pMI, "SAMPLE.mdl", NULL);
 if (iRet) goto END;
      /* 変換実行 */
 iRet = ETtrans2Exec(thd_inf.pTC, pMI, AdrsList, &ErrList, NULL);
END:
 if (pMI) {   /* MDLアンロード */
   ETtrans2ReleaseMdlInfo(pMI);
 }

 printf("Thread %08d End - Return Code 0x%08x¥n", iTid, iRet);
#ifdef WIN32
 ExitThread(0);
#else
 pthread_exit((void *)0);
#endif
 return 0;
}

9.4　データ変換処理API（C言語）を使用したプログラムの作成

この節では，データ変換処理API（C言語）を使用してプログラムを作成するときの手順について説明します。

＜この節の構成＞

9.4.1　データ変換処理API（C言語）を使用したプログラムの作成（Windowsの場合）

9.4.2　データ変換処理API（C言語）を使用したプログラムの作成（ワークステーションのOSの場合）

9.4.1　データ変換処理API（C言語）を使用したプログラムの作成（Windowsの場合）

データ変換処理API（C言語）を使用したプログラムを作成して，プログラムを実行するために必要な手順について説明します。

＜この項の構成＞

(1)　プログラムの作成

(2)　プログラムの実行

(1)　プログラムの作成

データ変換処理API（C言語）を使用してプログラムを作成する場合，トランスレータのインポートライブラリとリンクを取る必要があります。インポートライブラリとリンクを取るには，作成するプログラムのリンクオプションで，トランスレータで提供するインポートライブラリ（ETapir.lib）を取り込みます。ETapir.libの格納ディレクトリについては，Interschemaのリリースノートを参照してください。

(2)　プログラムの実行

作成したプログラムを実行する場合は，トランスレータで提供するDLL（ETapir.dll）が必要です。作成したプログラムをETapir.dllと同じディレクトリにコピーするか，又はETapir.dllの格納ディレクトリを環境変数PATHに設定してください。ETapir.dllの格納ディレクトリについては，Interschemaのリリースノートを参照してください。

9.4.2　データ変換処理API（C言語）を使用したプログラムの作成（ワークステーションのOSの場合）

データ変換処理API（C言語）を使用してプログラムを作成する場合，共用ライブラリをリンクしてください。共用ライブラリは，次のとおりです。

HP-UX(PA-RISC)の場合：libetapi.sl

HP-UX(IPF)の場合（32bit版ライブラリ）：libetapi.so

HP-UX(IPF)の場合（64bit版ライブラリ）：libetapi64.so

AIXの場合：libetapi.a

Solarisの場合：libetapi.so

共用ライブラリの格納場所については，Interschemaのリリースノートを参照してください。

その後，作成しておいたmakefileをmakeコマンドで実行して，ソースファイルをオブジェクトファイル（プログラム）に変換します。

makefileの作成例は，サンプルファイルを参考にしてください。サンプルファイルの格納先については，Interschemaのリリースノートを参照してください。

なお，各関数の引数に指定できるファイル名の長さは，256バイトまでです。プログラム作成時は注意してください。

10.　データ変換処理API（Java言語）

この章では，データ変換処理API（Java言語）について説明します。

＜この章の構成＞

10.1　データ変換処理API（Java言語）の概要

10.2　jp.co.Hitachi.soft.interschema2パッケージのクラスの仕様

10.3　jp.co.Hitachi.soft.interschema2.exitfuncパッケージのクラスの仕様

10.4　データ変換処理API（Java言語）の使用例

10.1　データ変換処理API（Java言語）の概要

Interschemaは，Java言語の実行環境で，ユーザ業務プログラムからトランスレータを起動してデータ変換を行うために必要な，データ変換処理API（Java言語）を提供します。

ただし，データ変換処理API（Java言語）を利用できるユーザ業務プログラムは，Cosminexus Component Conteiner上でフォーマットを変換する目的で作成されたServletに限ります。Servlet以外のJava言語で作成された一般のプログラムからは，データ変換処理API（Java言語）を利用することはできません。

また，データ変換処理API（Java言語）は，内部でJava Native Interface（以降，JNIと呼びます）を使用しているため，データ変換処理API（Java言語）を使用して作成したユーザ業務プログラムを，Enterprise Java Beans（EJB）から直接呼び出すことはできません。

この節では，データ変換処理API（Java言語）の機能概要，パッケージ構成，各パッケージに含まれるJavaクラスの仕様，及び使用時の注意事項について説明します。データ変換処理API（Java言語）の関数を使用する前に，必ずお読みください。

＜この節の構成＞

10.1.1　データ変換処理API（Java言語）の機能概要

10.1.2　データ変換処理API（Java言語）のパッケージ構成

10.1.3　jp.co.Hitachi.soft.interschema2パッケージのクラスの概要

10.1.4　jp.co.Hitachi.soft.interschema2.exitfuncパッケージのクラスの概要

10.1.5　データ変換処理API（Java言語）使用時の注意事項

10.1.1　データ変換処理API（Java言語）の機能概要

データ変換処理API（Java言語）は，JNI経由でデータ変換処理API（C言語）を呼び出すことによって，Java言語実行環境にデータ変換処理API（C言語）と同等の機能を提供します。さらに，Interschemaが提供する抽象クラスTranslateDataを継承したクラスを作成すると，任意のリソースから変換データを入出力することができます。

10.1.2　データ変換処理API（Java言語）のパッケージ構成

データ変換処理API（Java言語）は，次の二つのパッケージから構成されます。

jp.co.Hitachi.soft.interschema2

jp.co.Hitachi.soft.interschema2.exitfunc

jp.co.Hitachi.soft.interschema2パッケージ，及びjp.co.Hitachi.soft.interschema2.exitfuncパッケージは，次のディレクトリに格納されています。

Interschemaのインストールディレクトリ/classes

jp.co.Hitachi.soft.interschema2パッケージ，及びjp.co.Hitachi.soft.interschema2.exitfuncパッケージは，Jarファイル「ETtransJ2.jar」で定義されています。

jp.co.Hitachi.soft.interschema2パッケージ，及びjp.co.Hitachi.soft.interschema2.exitfuncパッケージを利用するためには，環境変数「CLASSPATH」にJarファイル「ETtransJ2.jar」のパスを設定する必要があります。ワークステーションのOSでInterschemaを使用する場合，Jarファイル「ETtransJ2.jar」の設定については，「5.1.4　クラスパスの設定（ワークステーションのOSの場合）」を参照してください。WindowsでInterschemaを使用する場合，Jarファイル「ETtransJ2.jar」の設定については，「5.2.1　クラスパスの設定（Windowsの場合）」を参照してください。

10.1.3　jp.co.Hitachi.soft.interschema2パッケージのクラスの概要

jp.co.Hitachi.soft.interschema2パッケージに含まれるJavaクラスの一覧を次に示します。

表10-1　jp.co.Hitachi.soft.interschema2パッケージのJavaクラス一覧

項番 | クラス名 | 機能概要
1 | Translator | 変換処理を行うトランスレータを定義します。
2 | MDLInfo | トランスレータの動作を定義する変換情報を定義します。
3 | DLProperty | DLプロパティ情報を定義します。
4 | Option | トランスレータの変換実行時オプションを定義します。
5 | TranslateData | 変換対象データを定義します。
6 | FileData | ファイル形式の変換対象データを定義します。
7 | StringData | 文字列データ形式の変換対象データを定義します。
8 | InputStreamData | 入力ストリーム形式の変換対象データを定義します。
9 | OutputStreamData | 出力ストリーム形式の変換対象データを定義します。
10 | TranslatorException | データ変換処理API（Java言語）実行時に発生したエラー例外を定義します。
11 | ExtraErrorData | 拡張エラー情報を定義します。
12 | UserException | ユーザ定義クラスで発生したエラー例外を定義します。

10.1.4　jp.co.Hitachi.soft.interschema2.exitfuncパッケージのクラスの概要

jp.co.Hitachi.soft.interschema2.exitfuncパッケージに含まれるJavaクラスの一覧を次に示します。

表10-2　jp.co.Hitachi.soft.interschema2.exitfuncパッケージのJavaクラス一覧

項番 | クラス名 | 機能概要
1 | ENVString | InterschemaのET_ENVSTRING型に対応するJavaクラスです。出口関数の引数に使用します。
2 | DateTime | InterschemaのET_DTM型に対応するJavaクラスです。出口関数の引数及び戻り値に使用します。
3 | ExitFuncWarning | 出口関数で発生したワーニングを定義します。
4 | ExitFuncException | 出口関数で発生したエラー例外を定義します。

10.1.5　データ変換処理API（Java言語）使用時の注意事項

データ変換処理API（Java言語）の関数を使用する場合は，次の点に注意してください。

マルチスレッドでデータ変換を行う場合，Translatorクラスのインスタンスをスレッド数だけ生成してください。一つのインスタンスをスレッド間で共有してデータを変換することはできません。

データ変換に使用中のMDLInfoクラスのインスタンスに対して，reloadメソッドを呼び出すことはできません。

TranslateDataクラス，及びその派生クラスのインスタンスを，スレッド間で共有してデータを変換することはできません。

ガーベジコレクションによるメモリ解放の効果を大きくするために，不要になったインスタンスにはnullを代入することを推奨します。

10.2　jp.co.Hitachi.soft.interschema2パッケージのクラスの仕様

この節では，jp.co.Hitachi.soft.interschema2パッケージに含まれるJavaクラスの仕様について説明します。この節の記述形式を次に示します。

継承

Javaクラスの継承関係を示します。

形式

Javaクラス，フィールド，コンストラクタ，及びメソッドの記述形式を示します。

引数

Javaクラス，コンストラクタ，及びメソッドの引数を示します。

説明

Javaクラス，フィールド，コンストラクタ，及びメソッドの機能について説明します。

戻り値

Javaクラス，及びメソッドの戻り値を示します。

例外

Javaクラス，コンストラクタ，及びメソッドの例外を示します。また，例外が発生する条件について説明します。

＜この節の構成＞

10.2.1　Translatorクラス

10.2.2　MDLInfoクラス

10.2.3　DLPropertyクラス

10.2.4　Optionクラス

10.2.5　TranslateDataクラス

10.2.6　FileDataクラス

10.2.7　StringDataクラス

10.2.8　InputStreamDataクラス

10.2.9　OutputStreamDataクラス

10.2.10　TranslatorExceptionクラス

10.2.11　ExtraErrorDataクラス

10.2.12　UserExceptionクラス

10.2.1　Translatorクラス

ここでは，Translatorクラスの仕様について説明します。

＜この項の構成＞

(1)　Translatorクラスの概要

(2)　コンストラクタの詳細

(3)　メソッドの詳細

(1)　Translatorクラスの概要

継承

java.lang.Object
|
+-- jp.co.Hitachi.soft.interschema2.Translator

形式

public final class Translator
extends java.lang.Object

説明

変換処理を行うトランスレータを定義します。トランスレータは，マルチスレッドに対応しているため，プロセス内でTranslatorクラスのインスタンスを複数作成して，変換処理を並列に実行できます。ただし，一つのTranslatorクラスのインスタンスに対して，複数のスレッドから同時にアクセスすることはできません。

コンストラクタの概要

形式 | 機能
public Translator(String logFileName,Option option) | 指定されたログファイル，及び指定された変換オプションで，トランスレータを生成します。
public Translator(String logFileName) | 指定されたログファイル，及びデフォルトの変換オプションで，トランスレータを生成します。
public Translator(Option option) | デフォルトのログファイル，及び指定された変換オプションで，トランスレータを生成します。
public Translator() | デフォルトのログファイル，及びデフォルトの変換オプションで，トランスレータを生成します。

メソッドの概要

形式 | 機能
public int exec(MDLInfo mdlInfo, List inputData,List outputData,java.lang.Object userObj) | 指定されたMDL情報に従って，データ変換を行います。変換中に呼び出すJava言語の出口関数に，最後の引数に指定されたオブジェクトを渡します。
public int exec(MDLInfo mdlInfo, List inputData,List outputData) | 指定されたMDL情報に従って，データ変換を行います。
public Option getOption() | 現在の変換オプションを取得します。
public void setOption(Option option) | 指定された変換オプションを設定します。

(2)　コンストラクタの詳細

(a)　Translator

形式

public Translator(String logFileName,Option option)
   throws TranslatorException

引数

引数 | 内容
logFileName | ログの出力先ファイル名を指定します。
option | オプションを指定します。

説明

指定されたログファイル，及び指定された変換オプションで，トランスレータを生成します。

logFileNameにnullが指定された場合，又はlogFileNameに指定されたファイルを作成・更新できなかった場合は，デフォルトのログファイル（Interschemaのインストールディレクトリ/log/errlog.txt）にログを出力します。デフォルトのログファイルを作成・更新できなかった場合は，標準エラー出力にログを出力します。

optionにnullが指定された場合は，デフォルトのオプションが指定されたものとします。オプションのデフォルト値については，「10.2.4　Optionクラス」を参照してください。

例外

例外 | 内容
TranslatorException | ライブラリの初期化又はトランスレータの生成に失敗した場合に発生します。

(b)　Translator

形式

public Translator(String logFileName)
   throws TranslatorException

引数

引数 | 内容
logFileName | ログの出力先ファイル名を指定します。

説明

指定されたログファイル，及びデフォルトの変換オプションで，トランスレータを生成します。変換オプションにnullを指定してトランスレータを生成する場合と等価です。

例外

例外 | 内容
TranslatorException | ライブラリの初期化又はトランスレータの生成に失敗した場合に発生します。

(c)　Translator

形式

public Translator(Option option)
   throws TranslatorException

引数

引数 | 内容
option | オプションを指定します。

説明

デフォルトのログファイル，及び指定された変換オプションで，トランスレータを生成します。ログファイルにnullを指定してトランスレータを生成する場合と等価です。

例外

例外 | 内容
TranslatorException | ライブラリの初期化又はトランスレータの生成に失敗した場合に発生します。

(d)　Translator

形式

public Translator()
   throws TranslatorException

引数

なし

説明

デフォルトのログファイル，及びデフォルトの変換オプションで，トランスレータを生成します。ログファイルと変換オプションにnullを指定してトランスレータを生成する場合と等価です。

例外

例外 | 内容
TranslatorException | ライブラリの初期化又はトランスレータの生成に失敗した場合に発生します。

(3)　メソッドの詳細

(a)　exec

形式

public int exec(MDLInfo mdlInfo, List inputData, List outputData, java.lang.Object userObj)
   throws TranslatorException,UserException

引数

引数 | 内容
mdlInfo | 変換に使用するMDL情報を指定します。
inputData | 入力する変換対象フォーマット情報のリストを指定します。
outputData | 出力する変換対象フォーマット情報のリストを指定します。
userObj | 出口関数に渡すオブジェクトを指定します。

説明

指定されたMDL情報に従ってデータ変換を行います。

変換対象フォーマット情報は，MDL情報内で指定されている入出力ファイルを，別ファイル又はメモリデータに変換する場合に指定します。変換対象フォーマットは複数指定できます。指定された変換対象フォーマットに対しては，MDL内で設定された入出力データファイル名を無視します。

mdlInfoにnullが指定された場合，パラメタエラーとしてTranslatorExceptionが発生します。

inputData又はoutputDataにnullが指定された場合，MDL情報内で指定されている入出力ファイルを変換します。inputData又はoutputData内にnullの要素が含まれる場合は，その要素を無視します。

userObjに指定されたオブジェクトは，この関数呼び出しの延長で，Java言語の出口関数が呼ばれた時に，第１引数にそのまま渡されます。nullを指定することもできます。

戻り値には，JNI経由で呼び出すETtrans2Exec関数のリタンコードが返されますが，変換の途中でデータ変換を終了するレベルのエラー（ETtrans2Exec関数のリタンコードで0x02yyyyyy又は0x04zzzzzzに該当するエラー）が発生した場合は，TranslatorException例外がスローされて，戻り値は取得できません。

戻り値

JNI経由で呼び出すETtrans2Exec関数のリタンコードが返されます。

例外

例外 | 内容
TranslatorException | MDL情報にnullが指定された場合，又は変換に失敗した場合に発生します。
UserException | ユーザが定義した変換対象データでエラーが発生した場合に発生します。

(b)　exec

形式

public int exec(MDLInfo mdlInfo, List inputData, List outputData)
   throws TranslatorException, UserException

引数

引数 | 内容
mdlInfo | 変換に使用するMDL情報を指定します。
inputData | 入力する変換対象フォーマット情報のリストを指定します。
outputData | 出力する変換対象フォーマット情報のリストを指定します。

説明

指定されたMDL情報に従ってデータ変換を行います。引数が三つの形式のexecを，出口関数に渡すオブジェクト（引数userObj）にnullを指定して呼び出した場合と等価です。

戻り値

JNI経由で呼び出すETtrans2Exec関数のリタンコードが返されます。

例外

例外 | 内容
TranslatorException | MDL情報にnullが指定された場合，又は変換に失敗した場合に発生します。
UserException | ユーザが定義した変換対象データでエラーが発生した場合に発生します。

(c)　getOption

形式

public Option getOption()

引数

なし

説明

現在のオプションを取得します。

戻り値

オプションが返されます。

(d)　setOption

形式

public void setOption(Option option)
   throws TranslatorException

引数

引数 | 内容
option | オプションを指定します。

説明

指定されたオプションを設定します。optionにnullが指定された場合は，デフォルトのオプションが指定されたものとします。オプションのデフォルト値については，「10.2.4　Optionクラス」を参照してください。

戻り値

なし

例外

例外 | 内容
TranslatorException | パラメタの更新に失敗した場合に発生します。

10.2.2　MDLInfoクラス

ここでは，MDLInfoクラスの仕様について説明します。

＜この項の構成＞

(1)　MDLInfoクラスの概要

(2)　コンストラクタの詳細

(3)　メソッドの詳細

(1)　MDLInfoクラスの概要

継承

java.lang.Object
|
+-- jp.co.Hitachi.soft.interschema2.MDLInfo

形式

public final class MDLInfo
extends java.lang.Object

説明

トランスレータの動作を定義するMDL情報を定義します。MDLInfoクラスのインスタンスは，Translatorクラスのexecメソッドの引数として渡します。変換に使用中のMDLInfoクラスのインスタンスに対して，reloadメソッドを呼び出すことはできません。

コンストラクタの概要

形式 | 機能
public MDLInfo(String mdlFileName) | 指定されたMDLファイルをロードして，MDL情報を生成します。

メソッドの概要

形式 | 機能
public DLProperty getDLProperty() | このMDL情報のDLプロパティ情報を取得します。
public String getFileName() | このMDL情報のファイル名を取得します。
public void reload(String mdlFileName) | 指定されたファイル名でMDL情報を更新します。

(2)　コンストラクタの詳細

(a)　MDLInfo

形式

public MDLInfo(String mdlFileName)
   throws TranslatorException

引数

引数 | 内容
mdlFileName | MDLファイル名を指定します。

説明

指定されたMDLファイルをロードして，MDL情報を生成します。mdlFileNameにnull又は空文字列が指定された場合は，パラメタエラーとしてTranslatorExceptionが発生します。

例外

例外 | 内容
TranslatorException | MDLファイルが未検証の場合，又はMDLファイルが存在しない場合に発生します。

(3)　メソッドの詳細

(a)　getDLProperty

形式

public DLProperty getDLProperty()
   throws TranslatorException

引数

なし

説明

このMDL情報のDLプロパティ情報を取得します。

戻り値

このMDL情報のDLプロパティ情報が返されます。

例外

例外 | 内容
TranslatorException | DLプロパティ情報を構築できなかった場合に発生します。

(b)　getFileName

形式

public String getFileName()

引数

なし

説明

このMDL情報のファイル名を取得します。

戻り値

MDL情報のファイル名が返されます。

(c)　reload

形式

public void reload(String mdlFileName)
   throws TranslatorException

引数

引数 | 内容
mdlFileName | ロードするMDLファイル名を指定します。

説明

指定のファイル名でMDL情報を更新します。現在のMDL情報を破棄して，指定のMDLファイル名を再ロードします。

戻り値

なし

例外

例外 | 内容
TranslatorException | MDLファイルが未検証の場合，又はMDLファイルが存在しない場合に発生します。

10.2.3　DLPropertyクラス

ここでは，DLPropertyクラスの仕様について説明します。

＜この項の構成＞

(1)　DLPropertyクラスの概要

(2)　コンストラクタの詳細

(3)　メソッドの詳細

(1)　DLPropertyクラスの概要

継承

java.lang.Object
|
+-- jp.co.Hitachi.soft.interschema2.DLProperty

形式

public final class DLProperty
extends java.lang.Object

説明

DLプロパティ情報を定義します。DLプロパティ情報には，次の情報が含まれます。

ユーザバージョン

ユーザコメント

作成日時

作成製品バージョン

更新日時

更新製品バージョン

DLファイルバージョン

ユーザバージョン及びユーザコメントには，FDLファイル又はMDLファイル作成時に設定された値をUnicodeに変換した値が設定されます。FDLファイル又はMDLファイル作成時に設定された値がない場合は，nullが設定されます。コード変換に失敗した場合は，DLプロパティ情報構築時に例外がスローされます。ただし，ワークステーションのOSでInterschemaを使用する場合，LANG環境変数に「C」が設定されているときは，FDLファイル又はMDLファイル作成時に設定された値を，JIS7（7bit JIS X0201（ISO646），カナなし）として扱います。

作成日時及び更新日時には，万国標準時（UCT）の1970年1月1日の00:00:00から，それぞれ作成日時又は更新日時までの通算経過ミリ秒が設定されます。

作成製品バージョン及び更新製品バージョンには，それぞれ作成及び更新に使用したInterschemaのバージョンが，「VVRRSS」形式で設定されます。

DLファイルバージョンには，FDLバージョン又はMDLバージョンが設定されます。

古いバージョンのFDLファイル又はMDLファイル（電子データ変換ツール又はInterschemaバージョン1で作成したファイル）から作成されたDLプロパティ情報の場合，有効な情報は，更新日時及びDLファイルバージョンだけです。

コンストラクタの概要

形式 | 機能
public DLProperty(String dlFileName) | 指定されたFDLファイル又はMDLファイル名から，DLプロパティ情報を生成します。

メソッドの概要

形式 | 機能
public String getUserVersion() | このDLプロパティ情報のユーザバージョンを取得します。
public String getUserComment() | このDLプロパティ情報のユーザコメントを取得します。
public long getCreatedDate() | このDLプロパティ情報の作成日時を取得します。
public String getCreatedPPVersion() | このDLプロパティ情報の作成製品バージョンを取得します。
public long getLastUpdatedDate() | このDLプロパティ情報の更新日時を取得します。
public String getLastUpdatedPPVersion() | このDLプロパティ情報の更新製品バージョンを取得します。
public long getDLVersion() | このDLプロパティ情報のDLファイルバージョンを取得します。

(2)　コンストラクタの詳細

(a)　DLProperty

形式

public DLProperty(String dlFileName)
   throws TranslatorException

引数

引数 | 内容
dlFileName | FDLファイル名又はMDLファイル名を指定します。

説明

指定されたFDLファイル又はMDLファイルから，DLプロパティ情報を生成します。dlFileNameにnull又は空文字列が指定された場合は，パラメタエラーとしてTranslatorExceptionが発生します。

例外

例外 | 内容
TranslatorException | 不正なファイルが指定された場合，又はファイルが存在しなかった場合に発生します。

(3)　メソッドの詳細

(a)　getUserVersion

形式

public String getUserVersion()

引数

なし

説明

このDLプロパティ情報のユーザバージョンを取得します。

戻り値

ユーザバージョンが返されます。

(b)　getUserComment

形式

public String getUserComment()

引数

なし

説明

このDLプロパティ情報のユーザコメントを取得します。

戻り値

ユーザコメントが返されます。

(c)　getCreatedDate

形式

public long getCreatedDate()

引数

なし

説明

このDLプロパティ情報の作成日時を取得します。

戻り値

作成日時が戻されます。

(d)　getCreatedPPVersion

形式

public String getCreatedPPVersion()

引数

なし

説明

このDLプロパティ情報の作成製品バージョンを取得します。

戻り値

作成製品バージョンが返されます。

(e)　getLastUpdatedDate

形式

public long getLastUpdatedDate()

引数

なし

説明

このDLプロパティ情報の更新日時を取得します。

戻り値

更新日時が返されます。

(f)　getLastUpdatedPPVersion

形式

public String getLastUpdatedPPVersion()

引数

なし

説明

このDLプロパティ情報の更新製品バージョンを取得します。

戻り値

更新製品バージョンが返されます。

(g)　getDLVersion

形式

public long getDLVersion()

引数

なし

説明

このDLプロパティ情報のDLファイルバージョンを取得します。

戻り値

DLファイルバージョンが返されます。

10.2.4　Optionクラス

ここでは，Optionクラスの仕様について説明します。

＜この項の構成＞

(1)　Optionクラスの概要

(2)　フィールドの詳細

(3)　コンストラクタの詳細

(4)　メソッドの詳細

(1)　Optionクラスの概要

継承

java.lang.Object
|
+-- jp.co.Hitachi.soft.interschema2.Option

形式

public final class Option
extends java.lang.Object

説明

トランスレータの変換オプションを定義します。変換オプションには，変換先ファイル出力方法，変換対象フォーマット指定，及び実行時オプションを設定します。このクラスのインスタンスをTranslatorクラスのインスタンスに設定して，変換時のオプションを指定することができます。

変換先ファイル出力方法には，新規作成（FA_UPDATE）及び追加書き（FA_APPEND）を設定することができます。デフォルトでは，新規作成（FA_UPDATE）が設定されます。

変換対象フォーマット指定には，指定なし（FN_OFF）又は指定あり（FN_ON）を設定することができます。デフォルトでは，指定なし（FN_OFF）が設定されます。

実行時オプションは，オプション種別及びそのオプションに対する引数値の組で構成されます。指定したい実行時オプションを変換オプションに追加します。ただし，同じ実行時オプションを複数指定することはできません。同じ実行時オプションを複数回追加した場合は，最後に追加した値が有効となります。また，このクラスで指定した実行時オプションよりも，システム情報ファイル「ettrans.ini」で指定した実行時オプションが優先されます。システム情報ファイル「ettrans.ini」で指定する実行時オプションについては，「5.4.3　システム情報ファイル「ettrans.ini」での実行時オプションの定義」を参照してください。

フィールドの概要

形式 | 機能
public static final int FA_UPDATE | 変換先ファイル出力方法の新規作成を表す定数です。
public static final int FA_APPEND | 変換先ファイル出力方法の追加書きを表す定数です。
public static final boolean FN_OFF | 変換対象フォーマット指定の指定なしを表す定数です。
public static final boolean FN_ON | 変換対象フォーマット指定の指定ありを表す定数です。
public static final int OPT_CIIE | CIIE実行時オプションを表す定数です。
public static final int OPT_CIIR | CIIR実行時オプションを表す定数です。
public static final int OPT_CIIT | CIIT実行時オプションを表す定数です。
public static final int OPT_CSV | CSV実行時オプションを表す定数です。
public static final int OPT_DEFMAP | DEFMAP実行時オプションを表す定数です。
public static final int OPT_DSEPA | DSEPA実行時オプションを表す定数です。
public static final int OPT_DTM | DTM実行時オプションを表す定数です。
public static final int OPT_EIAJHASH | EIAJHASH実行時オプションを表す定数です。
public static final int OPT_ESEPA | ESEPA実行時オプションを表す定数です。
public static final int OPT_FDS | FDS実行時オプションを表す定数です。
public static final int OPT_IERR | IERR実行時オプションを表す定数です。
public static final int OPT_SERR | SERR実行時オプションを表す定数です。
public static final int OPT_SNCODE | SNCODE実行時オプションを表す定数です。
public static final int OPT_XDOC | XDOC実行時オプションを表す定数です。
public static final int OPT_XND | XND実行時オプションを表す定数です。
public static final int OPT_XVC | XVC実行時オプションを表す定数です。
public static final int OPT_XWS | XWS実行時オプションを表す定数です。

コンストラクタの概要

形式 | 機能
public Option() | デフォルトの変換オプションを生成します。

メソッドの概要

形式 | 機能
public boolean addOption(int optionKind, String value) | 指定された実行時オプション及び引数を追加します。
public boolean addOption(int optionKind) | 指定された実行時オプションを追加します。
public boolean removeOption(int optionKind) | 指定された実行時オプションを削除します。
public int getFileAppendFlag() | 現在の変換先ファイル出力方法を取得します。
public void setFileAppendFlag(int FileAppendFlag) | 変換先ファイル出力方法を設定します。
public boolean getFNFlag() | 現在の変換対象フォーマット指定を取得します。
public void setFNFlag(boolean FNFlag) | 変換対象フォーマット指定を設定する。
public String getOptionString() | 現在の実行時オプションの文字列を取得します。
public boolean containsOption(int optionKind) | 実行時オプションが指定されているかを判定します。

(2)　フィールドの詳細

(a)　FA_UPDATE

形式

public static final int FA_UPDATE = 0

説明

変換先ファイル出力方法の新規作成を表す定数です（デフォルト）。変換先ファイルを出力データで上書きします。ファイルがない場合は新規に作成します。

(b)　FA_APPEND

形式

public static final int FA_APPEND = 1

説明

変換先ファイル出力方法の追加書きを表す定数です。出力データを変換先ファイルの最後に追加します。ファイルがない場合は新規に作成します。

(c)　FN_OFF

形式

public static final boolean FN_OFF = false

説明

変換対象フォーマット指定の指定なしを表す定数です（デフォルト）。MDLファイル内のすべてのフォーマットを変換します。

(d)　FN_ON

形式

public static final boolean FN_ON = true

説明

変換対象フォーマット指定の指定なしを表す定数です。MDLファイル内のパラメタで指定されたフォーマットだけを変換します。

(e)　OPT_CIIE

形式

public static final int OPT_CIIE = 10000

説明

CIIE実行時オプションを表す定数です。実行時オプションの詳細は，「5.4.1(3)　引数」を参照してください。

(f)　OPT_CIIR

形式

public static final int OPT_CIIR = 10001

説明

CIIR実行時オプションを表す定数です。実行時オプションの詳細は，「5.4.1(3)　引数」を参照してください。

(g)　OPT_CIIT

形式

public static final int OPT_CIIT = 10002

説明

CIIT実行時オプションを表す定数です。実行時オプションの詳細は，「5.4.1(3)　引数」を参照してください。

(h)　OPT_CSV

形式

public static final int OPT_CSV = 10003

説明

CSV実行時オプションを表す定数です。実行時オプションの詳細は，「5.4.1(3)　引数」を参照してください。

(i)　OPT_DEFMAP

形式

public static final int OPT_DEFMAP = 10004

説明

DEFMAP実行時オプションを表す定数です。実行時オプションの詳細は，「5.4.1(3)　引数」を参照してください。

(j)　OPT_DSEPA

形式

public static final int OPT_DSEPA = 10005

説明

DSEPA実行時オプションを表す定数です。実行時オプションの詳細は，「5.4.1(3)　引数」を参照してください。

(k)　OPT_DTM

形式

public static final int OPT_DTM = 10006

説明

DTM実行時オプションを表す定数です。実行時オプションの詳細は，「5.4.1(3)　引数」を参照してください。

(l)　OPT_EIAJHASH

形式

public static final int OPT_EIAJHASH = 10007

説明

EIAJHASH実行時オプションを表す定数です。実行時オプションの詳細は，「5.4.1(3)　引数」を参照してください。

(m)　OPT_ESEPA

形式

public static final int OPT_ESEPA = 10008

説明

ESEPA実行時オプションを表す定数です。実行時オプションの詳細は，「5.4.1(3)　引数」を参照してください。

(n)　OPT_FDS

形式

public static final int OPT_FDS = 10015

説明

FDS実行時オプションを表す定数です。実行時オプションの詳細は，「5.4.1(3)　引数」を参照してください。

(o)　OPT_IERR

形式

public static final int OPT_IERR = 10009

説明

IERR実行時オプションを表す定数です。実行時オプションの詳細は，「5.4.1(3)　引数」を参照してください。

(p)　OPT_SERR

形式

public static final int OPT_SERR = 10010

説明

SERR実行時オプションを表す定数です。実行時オプションの詳細は，「5.4.1(3)　引数」を参照してください。

(q)　OPT_SNCODE

形式

public static final int OPT_SNCODE = 10017

説明

SNCODE実行時オプションを表す定数です。実行時オプションの詳細は，「5.4.1(3)　引数」を参照してください。

(r)　OPT_XDOC

形式

public static final int OPT_XDOC = 10011

説明

XDOC実行時オプションを表す定数です。実行時オプションの詳細は，「5.4.1(3)　引数」を参照してください。

(s)　OPT_XND

形式

public static final int OPT_XND = 10016

説明

XND実行時オプションを表す定数です。実行時オプションの詳細は，「5.4.1(3)　引数」を参照してください。

(t)　OPT_XVC

形式

public static final int OPT_XVC = 10012

説明

XVC実行時オプションを表す定数です。実行時オプションの詳細は，「5.4.1(3)　引数」を参照してください。

(u)　OPT_XWS

形式

public static final int OPT_XWS = 10013

説明

XWS実行時オプションを表す定数です。実行時オプションの詳細は，「5.4.1(3)　引数」を参照してください。

(3)　コンストラクタの詳細

(a)　Option

形式

public Option()

引数

なし

説明

デフォルトの変換オプションを生成します。

変換先ファイル出力方法には，新規作成（FA_UPDATE）が設定されます。

変換対象フォーマット指定には，指定なし（FN_OFF）が設定されます。

実行時オプションには，指定なしが設定されます。

(4)　メソッドの詳細

(a)　addOption

形式

public boolean addOption(int optonKind, String value)

引数

引数 | 内容
optionKind | 実行時オプション種別を指定します。
value | 実行時オプション引数を指定します。

説明

指定された実行時オプション，及びその引数を追加します。

追加済み実行時オプションを指定した場合は，指定の値で古い値を置き換えます。引数値が必要ないオプションに対して引数値を設定した場合，その値は無視されます。

戻り値

指定された実行時オプションを追加できる場合はtrueが返されます。追加できない場合はfalseが返されます。

(b)　addOption

形式

public boolean addOption(int optonKind)

引数

引数 | 内容
optionKind | 実行時オプション種別を指定します。

説明

指定の実行時オプションを追加します。追加済みの実行時オプションを指定した場合は，指定の値で古い値を置き換えます。

戻り値

指定された実行時オプションを追加できる場合はtrueが返されます。追加できない場合はfalseが返されます。

(c)　removeOption

形式

public boolean removeOption(int optionKind)

引数

引数 | 内容
optionKind | 実行時オプション種別を指定します。

説明

指定された実行時オプションを削除します。

戻り値

指定された実行時オプションを削除できる場合はtrueが返されます。追加できない場合はfalseが返されます。

(d)　getFileAppendFlag

形式

public int getFileAppendFlag()

引数

なし

説明

現在の変換先ファイル出力方法を取得します。

戻り値

変換先出力ファイル出力方法が返されます。

(e)　setFileAppendFlag

形式

public void setFileAppendFlag(int FileAppendFlag)

引数

引数 | 内容
FileAppendFlag | 変換先ファイル出力方法を指定します。

説明

変換先ファイル出力方法を設定します。新規作成（FA_UPDATE）又は追加書き（FA_APPEND）を設定します。これら以外の値を設定した場合は，デフォルトで新規作成（FA_UPDATE）を設定します。

戻り値

なし

(f)　getFNFlag

形式

public boolean getFNFlag()

引数

なし

説明

現在の変換対象フォーマット指定を取得します。

戻り値

変換対象フォーマット指定が返されます。

(g)　setFNFlag

形式

public void setFNFlag(boolean FNFlag)

引数

引数 | 内容
FNFlag | 変換対象フォーマット指定を指定します。

説明

変換対象フォーマット指定を設定します。指定なし（FN_OFF）又は指定あり（FN_ON）を設定します。

戻り値

なし

(h)　getOptionString

形式

public String getOptionString()

引数

なし

説明

現在の実行時オプションの文字列を取得します。

戻り値

実行時オプションの文字列を返します。

(i)　containsOption

形式

public boolean containsOption(int optionKind)

引数

引数 | 内容
optionKind | 判定対象となる実行時オプションを表す定数を指定します。

説明

実行時オプションが指定されているかどうかを判定します。

戻り値

実行時オプションが指定されている場合はtrueが返されます。指定されていない場合はfalseが返されます。

10.2.5　TranslateDataクラス

ここでは，TranslateDataクラスの仕様について説明します。

＜この項の構成＞

(1)　TranslateDataクラスの概要

(2)　メソッドの詳細

(1)　TranslateDataクラスの概要

継承

java.lang.Object
|
+-- jp.co.Hitachi.soft.interschema2.TranslateData

直系の既知のサブクラス

FileData，StringData，InputStreamData，OutputStreamData

形式

public abstract class TranslateData
extends java.lang.Object

説明

変換対象データの抽象クラスを定義します。変換対象データは，フォーマット名，フォーマット名に対応するデータオブジェクト，データエリア初期サイズ，及びデータエリア増分サイズを持ちます。Translatorクラスのexecメソッドを実行する際に，このクラスを指定して変換を行います。

フォーマット名には，変換対象となるFDLのフォーマット名又はDTDのルート要素名が指定されます。

データオブジェクトには，フォーマット名に対応する固有のデータを表現したJavaオブジェクトが指定されます。

データエリア初期サイズ及びデータエリア増分サイズは，変換時に確保するデータエリアのサイズを指定する場合に設定します。

これらの値は，変換対象データが出力データとして指定された場合だけ有効です。

ユーザは，このクラスを拡張して独自の変換対象データを定義することで，任意の形式のデータオブジェクトを変換することができます。ユーザ独自の変換対象データの定義については，「10.4(2)　サンプルコード（TranslateData派生クラス）」を参照してください。

また，toByteArrayメソッド及びtoDataObjectメソッドを実装する場合，エラーを報告するときは，必ずUserException又はその派生クラスの例外をスローしてください。それ以外の例外をスローしたときは，Interschemaは予期しないエラーとして処理します。

メソッドの概要

形式 | 機能
public final String getFormatName() | 現在のフォーマット名を取得します。
public final void setFormatName(String formatName) | 指定されたフォーマット名を設定します。
public final Object getDataObject() | 現在のデータオブジェクトを取得します。
public final void setDataObject(Object data) | 指定されたデータオブジェクトを設定します。
public final int getMemoryInitSize() | 現在の出力データエリア初期サイズを取得します。
public inal void setMemoryInitSize(int initSize) | 指定された出力データエリア初期サイズを設定します。
public final init getMemoryIncrementSize() | 現在の出力データエリア増分サイズを取得します。
public final void setMemoryIncrementSize(int incrementSize) | 指定のされた出力データエリア増分サイズを設定します。
protected abstract byte[] toByteArray(Object obj) | 指定されたデータオブジェクトをバイト列に変換します。
protected abstract Object toDataObject(byte[] byteData) | 指定されたバイト列をデータオブジェクトに変換します。

(2)　メソッドの詳細

(a)　getFormatName

形式

public final String getFormatName()

引数

なし

説明

現在のフォーマット名を取得します。

戻り値

フォーマット名が返されます。

(b)　setFormatName

形式

public final void setFormatName(String formatName)

引数

引数 | 内容
formatName | フォーマット名を指定します。

説明

指定されたフォーマット名を設定します。

戻り値

なし

(c)　getDataObject

形式

public final Object getDataObject()

引数

なし

説明

現在のデータオブジェクトを取得します。

戻り値

変換対象フォーマットデータを返します。

(d)　setDataObject

形式

public final void setDataObject(Object data)

引数

引数 | 内容
data | データオブジェクトを指定します。

説明

指定されたデータオブジェクトを設定します。

戻り値

なし

(e)　getMemoryInitSize

形式

public final int getMemoryInitSize()

引数

なし

説明

現在の出力データエリア初期サイズを取得します。

戻り値

出力データエリア初期サイズが返されます。

(f)　setMemoryInitSize

形式

public final void setMemoryInitSize(int initSize)

引数

引数 | 内容
initSize | 出力データエリア初期サイズを指定します。

説明

指定された出力データエリア初期サイズを設定します。

この値に0が設定された場合は，システム情報ファイル「ettrans.ini」内の[MemoryData]セクションで定義された値を使用します。システム情報ファイル「ettrans.ini」に定義がない場合は，1024バイトを仮定します。

戻り値

なし

(g)　getMemoryIncrementSize

形式

public final int getMemoryIncrementSize()

引数

なし

説明

現在の出力データエリア増分サイズを取得します。

戻り値

出力データエリア増分サイズを指定します。

(h)　setMemoryIncrementSize

形式

public final void setMemoryIncrementSize(int incrementSize)

引数

引数 | 内容
incrementSize | 出力データエリア増分サイズを指定します。

説明

指定された出力データエリア増分サイズを設定します。

この値に0が設定された場合は，システム情報ファイル「ettrans.ini」内の[MemoryData]セクションで定義された値を使用します。システム情報ファイル「ettrans.ini」に定義がない場合は，1024バイトを仮定します。

戻り値

なし

(i)　toByteArray

形式

protected abstract byte[] toByteArray(Object obj)
   throws TranslatorException, UserException

引数

引数 | 内容
obj | データオブジェクトを指定します。

説明

指定されたデータオブジェクトをバイト列に変換します。このメソッドは抽象メソッドであるため，サブクラスは必ずこのメソッドを実装する必要があります。サブクラス固有のデータオブジェクトをバイト列に変換する方法を実装しています。通常は，「任意のデータオブジェクトxについて，x.equals(toDataObject(toByteArray(x))がtrueを返す」という要件を満たすように実装します。

戻り値

データオブジェクトのバイト列が返されます。

例外

例外 | 内容
TranslatorException | データオブジェクトのバイト列への変換に失敗した場合に発生します。
UserException | ユーザが定義した変換対象データで例外が発生した場合に発生します。

(j)　toDataObject

形式

protected abstract Object toDataObject ( byte[] byteData )
   throws TranslatorException, UserException

引数

引数 | 内容
byteData | データオブジェクトのバイト列を指定します。

説明

指定されたバイト列をデータオブジェクトに変換します。このメソッドは抽象メソッドであるため，サブクラスは必ずこのメソッドを実装する必要があります。バイト列をサブクラス固有のデータオブジェクトに変換する方法を実装します。通常は，「任意の変換対象フォーマットデータxについて，x.equals(toDataObject(toByteArray(x))がtrueを返す」という要件を満たすように実装します。

戻り値

データオブジェクトが返されます。

例外

例外 | 内容
TranslatorException | バイト列のデータオブジェクトへの変換に失敗した場合に発生します。
UserException | ユーザが定義した変換対象データで例外が発生した場合に発生します。

10.2.6　FileDataクラス

ここでは，FileDataクラスの仕様について説明します。

＜この項の構成＞

(1)　FileDataクラスの概要

(2)　コンストラクタの詳細

(3)　メソッドの詳細

(1)　FileDataクラスの概要

継承

java.lang.Object
|
+-- jp.co.Hitachi.soft.interschema2.TranslateData
   |
   +-- jp.co.Hitachi.soft.interschema2.FileData

形式

public final class FileData
extends jp.co.Hitachi.soft.interschema2.TranslateData

説明

ファイル形式の変換対象データを定義します。ファイル形式のデータオブジェクトを変換する場合に使用します。この変換対象データは，入力及び出力のどちらにも使用できます。

コンストラクタの概要

形式 | 機能
public FileData(String formatName, File file) | 指定されたフォーマット名及びファイルから，ファイル形式の変換対象データを生成します。
public FileData(String formatName, String fileName) | 指定されたフォーマット名及びファイル名から，ファイル形式の変換対象データを生成します。

メソッドの概要

形式 | 機能
public String getFileName() | 現在の変換対象データのファイル名を取得します。
protected byte[] toByteArray(Object obj) | 指定されたデータオブジェクトをバイト列に変換します。
protected Object toDataObject(byte[] byteData) | 指定されたバイト列をデータオブジェクトに変換します。

(2)　コンストラクタの詳細

(a)　FileData

形式

public FileData(String formatName, File file)

引数

引数 | 内容
formatName | フォーマット名を指定します。
file | ファイルを指定します。

説明

指定されたフォーマット名及びファイルから，ファイル形式の変換対象データを生成します。

(b)　FileData

形式

public FileData(String formatName, String fileName)

引数

引数 | 内容
formatName | フォーマット名を指定します。
fileName | ファイル名を指定します。

説明

指定されたフォーマット名及びファイル名から，ファイル形式の変換対象データを生成します。

(3)　メソッドの詳細

(a)　getFileName

形式

public String getFileName()

引数

なし

説明

現在のデータオブジェクトのファイル名を取得します。

戻り値

ファイル形式データオブジェクトのファイル名が返されます。

(b)　toByteArray

形式

protected byte[] toByteArray (Object obj)
   throws TranslatorException

引数

引数 | 内容
obj | ファイル形式のデータオブジェクトを指定します。

説明

指定されたデータオブジェクトをバイト列に変換します。ファイル形式のデータオブジェクトを読み込みバイト列に変換します。

戻り値

データオブジェクトのバイト列が返されます。

例外

例外 | 内容
TranslatorException | 指定されたデータオブジェクトがFileクラス，又はStringクラスのインスタンスでない場合，又はデータオブジェクトのバイト列への変換に失敗した場合に発生します。

(c)　toDataObject

形式

protected Object toDataObject(byte[] byteData)
   throws TranslatorException

引数

引数 | 内容
byteData | データオブジェクトのバイト列を指定します。

説明

指定されたバイト列をデータオブジェクトに変換します。指定されたバイト列を，現在のデータオブジェクトに設定されているファイルに書き込んで，現在のデータオブジェクトを返します。

戻り値

ファイル形式のデータオブジェクトを返します。

例外

例外 | 内容
TranslatorException | バイト列の変換対象フォーマットデータへの変換に失敗した場合に発生します。

10.2.7　StringDataクラス

ここでは，StringDataクラスの仕様について説明します。

＜この項の構成＞

(1)　StringDataクラスの概要

(2)　コンストラクタの詳細

(3)　メソッドの詳細

(1)　StringDataクラスの概要

継承

java.lang.Object
|
+-- jp.co.Hitachi.soft.interschema2.TranslateData
   |
   +-- jp.co.Hitachi.soft.interschema2.StringData

形式

public final class StringData
extends jp.co.Hitachi.soft.interschema2.TranslateData

説明

文字列形式の変換対象データを定義します。Java言語の文字列形式のデータオブジェクトを変換する場合に使用します。この変換対象データは，入力及び出力のどちらにも使用することができます。

コンストラクタの概要

形式 | 機能
public StringData(String formatName, String data) | 指定されたフォーマット名及び文字列データから，文字列形式の変換対象データを生成します。

メソッドの概要

形式 | 機能
protected byte[] toByteArray(Object obj) | 指定されたデータオブジェクトをバイト列に変換します。
protected Object toDataObject(byte[] byteData) | 指定されたバイト列をデータオブジェクトに変換します。

(2)　コンストラクタの詳細

(a)　StringData

形式

public StringData(String formatName, String data)

引数

引数 | 内容
formatName | フォーマット名を指定します。
data | 文字列形式のデータオブジェクトを指定します。

説明

指定されたフォーマット名及び文字列データから文字列形式の変換対象データを生成します。

(3)　メソッドの詳細

(a)　toByteArray

形式

protected byte[] toByteArray (Object obj)
   throws TranslatorException

引数

引数 | 内容
obj | 文字列形式のデータオブジェクトを指定します。

説明

指定されたデータオブジェクトをバイト列に変換します。指定の文字列形式のデータオブジェクトを，プラットフォームデフォルトの文字列セットを使用してバイト列に変換します。

戻り値

データオブジェクトのバイト列が返されます。

例外

例外 | 内容
TranslatorException | 指定されたデータオブジェクトがStringクラスのインスタンスでない場合，又はデータオブジェクトをバイト列に変換失敗した場合に発生します。

(b)　toDataObject

形式

protected Object toDataObject (byte[] byteData)
   throws TranslatorException

引数

引数 | 内容
byteData | データオブジェクトのバイト列を指定します。

説明

指定されたバイト列をデータオブジェクトに変換します。指定されたバイト列をプラットフォームデフォルトの文字セットを使用して文字列形式のデータオブジェクトに変換します。

戻り値

文字列形式のデータオブジェクトが返されます。

例外

例外 | 内容
TranslatorException | バイト列のデータオブジェクトへの変換に失敗した場合に発生します。

10.2.8　InputStreamDataクラス

ここでは，InputStreamDataクラスの仕様について説明します。

＜この項の構成＞

(1)　InputStreamDataクラスの概要

(2)　コンストラクタの詳細

(3)　メソッドの詳細

(1)　InputStreamDataクラスの概要

継承

java.lang.Object
|
+-- jp.co.Hitachi.soft.interschema2.TranslateData
   |
   +-- jp.co.Hitachi.soft.interschema2.InputStreamData

形式

public final class InputStreamData
extends jp.co.Hitachi.soft.interschema2.TranslateData

説明

入力ストリーム形式の変換対象データを定義します。Java言語の入力ストリーム形式のデータオブジェクトを変換する場合に使用します。この変換対象データは入力専用です。このクラスのインスタンスをTranslatorクラスのexecメソッドの出力データとして指定した場合は，TranslatorExceptionが発生します。

execメソッド実行後は，このクラスに指定したInputStreamのインスタンスは更新されます。

コンストラクタの概要

形式 | 機能
public InputStreamData(String formatName, InputStream streamData) | 指定のフォーマット名及び入力ストリームから，入力ストリーム形式の変換対象データを生成します。

メソッドの概要

形式 | 機能
protected byte[] toByteArray(Object obj) | 指定のデータオブジェクトをバイト列に変換します。
protected Object toDataObject(byte[] byteData) | 指定のバイト列をデータオブジェクトに変換します。

(2)　コンストラクタの詳細

(a)　InputStreamData

形式

public InputStreamData(String formatName, InputStream streamData)

引数

引数 | 内容
formatName | フォーマット名を指定します。
streamData | 入力ストリーム形式のデータオブジェクトを指定します。

説明

指定されたフォーマット名及び入力ストリームから，入力ストリーム形式の変換対象データを生成します。変換データは指定の入力ストリームから読み込まれます。

(3)　メソッドの詳細

(a)　toByteArray

形式

protected byte[] toByteArray(Object obj)
   throws TranslatorException

引数

引数 | 内容
obj | 入力ストリーム形式のデータオブジェクトを指定します。

説明

指定されたデータオブジェクトをバイト列に変換します。指定の入力ストリーム形式のデータオブジェクトからデータを読み取って，バイト列に変換します。

戻り値

データオブジェクトから読み込んだバイト列が返されます。

例外

例外 | 内容
TranslatorException | 指定されたデータオブジェクトがInputStreamのインスタンスでない場合，又はデータオブジェクトのバイト列への変換に失敗した場合に発生します。

(b)　toDataObject

形式

protected Object toDataObject(byte[] byteData)
   throws TranslatorException

引数

引数 | 内容
byteData | データオブジェクトのバイト列を指定します。

説明

指定されたバイト列をデータオブジェクトに変換します。InputStreamDataクラスは入力専用の変換対象データであるため，このメソッドをサポートしません。このメソッドを実行するとTranslatorExceptionが発生します。

戻り値

データオブジェクトが返されます。

例外

例外 | 内容
TranslatorException | 必ず発生します。

10.2.9　OutputStreamDataクラス

ここでは，OutputStreamDataクラスの仕様について説明します。

＜この項の構成＞

(1)　OutputStreamDataクラスの概要

(2)　コンストラクタの詳細

(3)　メソッドの詳細

(1)　OutputStreamDataクラスの概要

継承

java.lang.Object
|
+-- jp.co.Hitachi.soft.interschema2.TranslateData
   |
   +-- jp.co.Hitachi.soft.interschema2.OutputStreamData

形式

public final class OutputStreamData
extends jp.co.Hitachi.soft.interschema2.TranslateData

説明

出力ストリーム形式の変換対象データを定義します。Java言語の出力ストリーム形式のデータオブジェクトを変換する場合に使用します。この変換対象データは出力専用です。このクラスのインスタンスをTranslatorクラスのexecメソッドの入力データとして指定した場合は，TranslatorExceptionが発生します。

コンストラクタの概要

形式 | 機能
public OutputStreamData(String formatName, OutputStream streamData) | 指定のされたフォーマット名及び出力ストリームから，出力ストリーム形式の変換対象データを生成します。

メソッドの概要

形式 | 機能
protected byte[] toByteArray(Object obj) | 指定されたデータオブジェクトをバイト列に変換します。
protected Object toDataObject(byte[] byteData) | 指定されたバイト列をデータオブジェクトに変換します。

(2)　コンストラクタの詳細

(a)　OutputStreamData

形式

public OutputStreamData(String formatName, OutputStream streamData)

引数

引数 | 内容
formatName | フォーマット名を指定します。
streamData | 出力ストリーム形式のデータオブジェクトを指定します。

説明

指定されたフォーマット名及び出力ストリームから，出力ストリーム形式の変換対象データを生成します。変換後のデータは指定の出力ストリームに出力されます。

(3)　メソッドの詳細

(a)　toByteArray

形式

protected byte[] toByteArray(Object obj)
   throws TraslatorException

引数

引数 | 内容
obj | データオブジェクトを指定します。

説明

指定されたデータオブジェクトをバイト列に変換します。OutputStreamDataクラスは出力専用の変換対象データのため，このメソッドをサポートしません。このメソッドを実行すると，TranslatorExceptionが発生します。

戻り値

データオブジェクトのバイト列が返されます。

例外

例外 | 内容
TranslatorException | 必ず発生します。

(b)　toDataObject

形式

protected Object toDataObject(byte[] byteData)
   throws TraslatorException

引数

引数 | 内容
byteData | データオブジェクトのバイト列を指定します。

説明

指定されたバイト列をデータオブジェクトに変換します。指定されたバイト列を現在のデータオブジェクトの出力ストリームに書き込んで，現在のデータオブジェクトを返します。

戻り値

出力ストリーム形式のデータオブジェクトが返されます。

例外

例外 | 内容
TranslatorException | バイト列のデータオブジェクトへの変換に失敗した場合に発生します。

10.2.10　TranslatorExceptionクラス

ここでは，TranslatorExceptionクラスの仕様について説明します。

＜この項の構成＞

(1)　TranslatorExceptionクラスの概要

(2)　メソッドの詳細

(1)　TranslatorExceptionクラスの概要

継承

java.lang.Object
|
+--java.lang.Throwable
  |
  +--java.lang.Exception
     |
     +-- jp.co.Hitachi.soft.interschema2.TranslatorException

形式

public final class TranslatorException
extends java.lang.Exception

説明

データ変換処理API（Java言語）実行時に発生したエラー例外を定義します。getErrorCodeメソッドで取得するエラーコードは，データ変換処理API（C言語）及びettransコマンドのエラーコードとは異なります。ただし，幾つかのエラーには，データ変換処理API（C言語）及びettransコマンドと共通のエラー情報を取得できるものがあります。共通のエラー情報は，getExtraErrorDataメソッドを使用して取得します。取得した値については，「10.2.11　ExtraErrorDataクラス」を参照してください。拡張エラー情報は，Translatorクラスのexecメソッド呼び出し以外では設定されません。

メソッドの概要

形式 | 機能
public int getErrorCode() | データ変換処理API（C言語）で定義したエラーコードを取得します。
public String getMessage() | 例外の発生要因となったエラーの内容を示す文字列を取得します。
public ExtraErrorData[] getExtraErrorData() | 拡張エラー情報を取得します。

(2)　メソッドの詳細

(a)　getErrorCode

形式

public int getErrorCode()

引数

なし

説明

エラーコードを取得します。エラーコードの詳細は，「付録A.1(3)(b)　エラーコード」を参照してください。

戻り値

エラーコードが返されます。

(b)　getMessage

形式

public String getMessage()

引数

なし

説明

例外の詳細メッセージを取得します。

戻り値

エラー内容を示すメッセージが返されます。

(c)　getExtraErrorData

形式

public ExtraErrorData[] getExtraErrorData()

引数

なし

説明

拡張エラー情報を取得します。ExtraErrorDataの詳細は「10.2.11　ExtraErrorDataクラス」を参照してください。

戻り値

拡張エラー情報の配列が返されます。

10.2.11　ExtraErrorDataクラス

ここでは，ExtraErrorDataクラスの仕様について説明します。

＜この項の構成＞

(1)　ExtraErrorDataクラスの概要

(2)　メソッドの詳細

(1)　ExtraErrorDataクラスの概要

継承

java.lang.Object
|
+-- jp.co.Hitachi.soft.interschema2.ExtraErrorData

形式

public final class ExtraErrorData
extends java.lang.Object implements java.io.Serializable

説明

変換実行時に発生した拡張エラー情報を定義します。TranslatorException発生時に詳細なエラー情報がある場合に設定されます。設定される値は，データ変換処理API（C言語）のエラー情報と同じです。値の意味は，「9.2.9　ETtrans2Exec（変換実行）」の「表9-2　ログファイルに出力される数値情報，文字情報の内容」を参照してください。

メソッドの概要

形式 | 機能
public int getMessageNo() | メッセージ番号を取得します。
public int getErrorLevel() | エラーレベルを取得します。
public int getNumericData() | 数値情報を取得します。
public String getInformation() | エラーの内容を示す文字列情報を取得します。

(2)　メソッドの詳細

(a)　getMessageNo

形式

public int getMessageNo()

引数

なし

説明

メッセージ番号を取得します。

戻り値

メッセージ番号が返されます。

(b)　getErrorLevel

形式

public int getErrorLevel()

引数

なし

説明

エラーレベルを取得します。

戻り値

エラーレベルが返されます。

(c)　getNumericData

形式

public int getNumericData()

引数

なし

説明

数値情報を取得します。

戻り値

数値情報が返されます。

(d)　getInformation

形式

public String getInformation()

引数

なし

説明

エラーの内容を示す文字列情報を取得します。

戻り値

エラーの内容を示す文字列情報が返されます。

10.2.12　UserExceptionクラス

ここでは，UserExceptionクラスの仕様について説明します。

＜この項の構成＞

(1)　UserExceptionクラスの概要

(2)　コンストラクタの詳細

(1)　UserExceptionクラスの概要

継承

java.lang.Object
|
+--java.lang.Throwable
  |
  +--java.lang.Exception
     |
     +-- jp.co.Hitachi.soft.interschema2.UserException

直系の既知のサブクラス

ExitFuncWarning，ExitFuncException

形式

public class UserException
extends java.lang.Exception

説明

ユーザ作成クラスで発生したエラー例外を定義します。

ユーザが独自に作成したクラスで例外を発生させる場合は，このクラス又はこのクラスのサブクラスを定義してエラーを報告します。

ユーザ定義クラス内でこのクラス，又はこのクラスの派生クラスの例外が発生した場合は，そのまま上位へスローします。

ユーザ定義クラスでこのクラス，又はこのクラスの派生クラス以外の例外が発生した場合は，TranslatorExceptionが発生します。

コンストラクタの概要

形式 | 機能
public UserException(String message) | 指定された詳細メッセージを持つユーザ例外を生成します。
public UserException() | デフォルトのユーザ例外を生成します。

(2)　コンストラクタの詳細

(a)　UserException

形式

public UserException(String message)

引数

引数 | 内容
message | 詳細メッセージを指定します。

説明

指定された詳細メッセージを持つユーザ例外を生成します。

(b)　UserException

形式

public UserException()

引数

なし

説明

デフォルトのユーザ例外を生成します。詳細メッセージにnullを指定して，ユーザ例外を生成する場合と等価です。

10.3　jp.co.Hitachi.soft.interschema2.exitfuncパッケージのクラスの仕様

この節では，jp.co.Hitachi.soft.interschema2.exitfuncパッケージに含まれるJavaクラスの仕様について説明します。この節の記述形式を次に示します。

継承

Javaクラスの継承関係を示します。

形式

Javaクラス，フィールド，コンストラクタ，及びメソッドの記述形式を示します。

引数

Javaクラス，コンストラクタ，及びメソッドの引数を示します。

説明

Javaクラス，フィールド，コンストラクタ，及びメソッドの機能について説明します。

戻り値

Javaクラス及びメソッドの戻り値を示します。

例外

Javaクラス，コンストラクタ，及びメソッドの例外を示します。また，例外が発生する条件について説明します。

＜この節の構成＞

10.3.1　ENVStringクラス

10.3.2　DateTimeクラス

10.3.3　ExitFuncWarningクラス

10.3.4　ExitFuncExceptionクラス

10.3.1　ENVStringクラス

ここでは，ENVStringクラスの仕様について説明します。

＜この項の構成＞

(1)　ENVStringクラスの概要

(2)　メソッドの詳細

(1)　ENVStringクラスの概要

継承

java.lang.Object
|
+-- jp.co.Hitachi.interschema2.exitfunc.ENVString

形式

public final class ENVString
extends java.lang.Object

説明

InterschemaのET_ENVSTRING型に対応するJavaクラスです。出口関数の引数として使用します。Interschemaが出口関数の引数に文字列を渡す際に文字列データをStringに変換した文字列，及び変換時のエラーコードを持ちます。変換結果とエラーコードに格納される値の関係を，次の表に示します。

表10-3　変換結果とエラーコードに格納される値の関係

エラーコード | 文字コード変換結果 | 文字列
0 | 変換に成功しました。 | String文字列
0x01000001 | 変換時に不正な文字コードを検出しました。※ | 不正な文字コードをスペースに置換したString文字列
-1 | 変換に失敗しました。 | null

注※

フォーマット指定又は実行時オプションで不正文字コードのスペース置換を禁止している場合，変換時に不正文字コードを検出したときは，変換失敗として処理します。

メソッドの概要

形式 | 機能
public String getString() | 文字列を取得します。
public int getErrorCode() | 文字コード変換のエラーコードを取得します。

(2)　メソッドの詳細

(a)　getString

形式

public String getString()

引数

なし

説明

文字列を取得します。

戻り値

文字列が返されます。

(b)　getErrorCode

形式

public int getErrorCode()

引数

なし

説明

文字列変換時のエラーコードを取得します。

戻り値

文字列変換のエラーコードが返されます。

10.3.2　DateTimeクラス

ここでは，DateTimeクラスの仕様について説明します。

＜この項の構成＞

(1)　DateTimeクラスの概要

(2)　コンストラクタの詳細

(3)　メソッドの詳細

(1)　DateTimeクラスの概要

継承

java.lang.Object
|
+-- jp.co.Hitachi.interschema2.exitfunc.DateTime

形式

public final class DateTime
extends java.lang.Object

説明

InterschemaのET_DTM型に対応するJavaクラスです。出口関数の引数及び戻り値に使用します。Interschemaから引数として受け取る場合，日付時刻部分の値が未設定のときは0が設定されます。ゾーン文字列部分の値が未設定のときはnullが設定されます。

コンストラクタの概要

形式 | 機能
public DateTime(int year, int month, int day, int hour, int minute, double second, String timeZone) | 指定の値を持つ日付時刻を生成します。
public DateTime(Date date, String timeZone) | 指定の値を持つ日付時刻を生成します。
public DateTime(Date date) | 指定の値を持つ日付時刻を生成します。
public DateTime() | デフォルトの日付時刻を生成します。

メソッドの概要

形式 | 機能
public int getYear() | 年を取得します。
public void setYear(int year) | 年を設定します。
public int getMonth() | 月を取得します。
public void setMonth(int month) | 月を設定します。
public int getDay() | 日付を取得します。
public void setDay(int day) | 日付を設定します。
public int getHour() | 時を取得します。
public void setHour(int hour) | 時を設定します。
public int getMinute() | 分を取得します。
public void setMinute(int minute) | 分を設定します。
public double getSecond() | 秒を取得します。
public void setSecond(double second) | 秒を設定します。
public String getZone() | タイムゾーン文字列を取得します。
public void setZone(String timeZone) | タイムゾーン文字列を設定します。
public Date getDate() | 設定された時刻に対応するDateオブジェクトを取得します

(2)　コンストラクタの詳細

(a)　DateTime

形式

public DateTime(int year,
               int month,
               int day,
               int hour,
               int minute,
               double second,
               String timeZone)
   throws ExitFuncException

引数

引数 | 内容
year | 年を指定します。
month | 月を指定します。
hour | 時を指定します。
day | 日を指定します。
minute | 分を指定します。
second | 秒を指定します。
timeZone | タイムゾーン文字列を指定します。

説明

指定の値を持つ日付時刻を生成します。各引数の有効な範囲を次に示します。

year(0～9999)

month(1～12)

day (1～31)

hour(0～23)

minute(0～59)

second(0～59, 小数部可)

例外

例外 | 内容
ExitFuncException | 引数に範囲外の値を指定した場合に発生します。

(b)　DateTime

形式

public DateTime(Date date, String timeZone)
   throws ExitFuncException

引数

引数 | 内容
date | 日付・時刻を指定します。
timeZone | タイムゾーン文字列です。

説明

指定された値を持つ日付時刻を生成します。年月日分秒に指定の日付・時刻を，タイムゾーン文字列にzoneを指定して，日付時刻を生成する場合と等価です。

例外

例外 | 内容
ExitFuncException | dateにnullを指定した場合，又は日付・時刻の設定に失敗した場合に発生します。

(c)　DateTime

形式

public DateTime(Date date)
   throws ExitFuncException

引数

引数 | 内容
date | 日付・時刻を指定します。

説明

指定された値を持つ日付時刻を生成します。年月日分秒に指定の日付・時刻を，タイムゾーン文字列に現在のこのホストのデフォルトのタイムゾーン文字列（TimeZone.getDefault().getDisplayName()の値）を指定して，日付時刻を生成する場合と等価です。

例外

例外 | 内容
ExitFuncException | dateにnullを指定した場合，又は日付・時刻の設定に失敗した場合に発生します。

(d)　DateTime

形式

public DateTime()
   throws ExitFuncException

引数

なし

説明

デフォルトの日付時刻を生成します。年月日分秒に現在の日付・時刻を，タイムゾーン文字列に現在のこのホストのデフォルトのタイムゾーン文字列（TimeZone.getDefault().getDisplayName()の値）を指定して，日付時刻を生成する場合と等価です。

例外

例外 | 内容
ExitFuncException | 日付・時刻の設定に失敗した場合に発生します。

(3)　メソッドの詳細

(a)　getYear

形式

public int getYear()

引数

なし

説明

年を取得します。

戻り値

年が返されます。

(b)　setYear

形式

public void setYear(int year)
   throws ExitFuncException

引数

引数 | 内容
year | 年を指定します。

説明

指定の年を設定します。

戻り値

なし

例外

例外 | 内容
ExitFuncException | 引数に範囲外の値を指定した場合に発生します。

(c)　getMonth

形式

public int getMonth()

引数

なし

説明

月を取得します。

戻り値

月が返されます。

(d)　setMonth

形式

public void setMonth(int month)
   throws ExitFuncException

引数

引数 | 内容
month | 月を指定します。

説明

指定の月を設定します。

戻り値

なし

例外

例外 | 内容
ExitFuncException | 引数に範囲外の値を指定した場合に発生します。

(e)　getDay

形式

public int getDay()

引数

なし

説明

日付を取得します。

戻り値

日付が返されます。

(f)　setDay

形式

public void setDay(int day)
   throws ExitFuncException

引数

引数 | 内容
day | 日付を指定します。

説明

指定の日付を設定します。

戻り値

なし

例外

例外 | 内容
ExitFuncException | 引数に範囲外の値を指定した場合に発生します。

(g)　getHour

形式

public int getHour()

引数

なし

説明

時を取得します。

戻り値

時が返されます。

(h)　setHour

形式

public void setHour(int hour)
   throws ExitFuncException

引数

引数 | 内容
hour | 時を指定します。

説明

指定の時を設定します。

戻り値

なし

例外

例外 | 内容
ExitFuncException | 引数に範囲外の値を指定した場合に発生します。

(i)　getMinute

形式

public int getMinute()

引数

なし

説明

分を取得します。

戻り値

分が返されます。

(j)　setMinute

形式

public void setMinute(int minute)
   throws ExitFuncException

引数

引数 | 内容
minute | 分を指定します。

説明

指定の分を設定します。

戻り値

なし

例外

例外 | 内容
ExitFuncException | 引数に範囲外の値を指定した場合に発生します。

(k)　getSecond

形式

public double getSecond()

引数

なし

説明

秒を取得します。

戻り値

秒を取得します。

(l)　setSecond

形式

public void setSecond(double second)
   throws ExitFuncException

引数

引数 | 内容
second | 秒を指定します。

説明

指定の秒を設定します。

戻り値

なし

例外

例外 | 内容
ExitFuncException | 引数に範囲外の値を指定した場合に発生します。

(m)　getZone

形式

public String getZone()

引数

なし

説明

タイムゾーン文字列を取得します。

戻り値

タイムゾーン文字列が返されます。

(n)　setZone

形式

public void setZone(String timeZone)

引数

引数 | 内容
timeZone | タイムゾーン文字列を指定します。

説明

指定のタイムゾーン文字列を設定します。

戻り値

なし

(o)　getDate

形式

public Date getDate()

引数

なし

説明

設定済みの日付・時刻を表すDateオブジェクトを取得します。プラットホームデフォルトのロケールとタイムゾーンに従って，java.util.Dateオブジェクトを生成して，その結果を返します。ただし，年に0を指定した場合は，生成されるjava.util.Dateオブジェクトは0001年になります。

戻り値

設定済みの日付・時刻を表すDateオブジェクトが返されます。

10.3.3　ExitFuncWarningクラス

ここでは，ExitFuncWarningクラスの仕様について説明します。

＜この項の構成＞

(1)　ExitFuncWarningクラスの概要

(2)　コンストラクタの詳細

(1)　ExitFuncWarningクラスの概要

継承

java.lang.Object
|
+-- java.lang.Throwable
   |
   +-- java.lang.Exception
       |
       +-- jp.co.Hitachi.soft.interschema2.UserException
           |
           +-- jp.co.Hitachi.soft.interschema2.exitfunc.ExitFuncWarning

形式

public final class ExitFuncWarning
extends jp.co.Hitachi.soft.interschema2.UserException

説明

出口関数で発生したワーニングを定義します。Java言語の出口関数で発生したワーニングを，このクラスをスローしてInterschemaに通知します。

出口関数でこのワーニングが発生した場合，Interschemaは，出口関数の戻り値として，このクラスに設定された値を仮定して，処理を続行します。

コンストラクタの概要

形式 | 機能
public ExitFuncWarning(int userErrorCode) | 指定されたエラーコード及びデフォルトの戻り値を持つ警告を生成します。
public ExitFuncWarning(int userErrorCode, int result) | 指定されたエラーコード及び戻り値を持つ警告を生成します。
public ExitFuncWarning(int userErrorCode, double result) | 指定されたエラーコード及び戻り値を持つ警告を生成します。
public ExitFuncWarning(int userErrorCode, String result) | 指定されたエラーコード及び戻り値を持つ警告を生成します。
public ExitFuncWarning(int userErrorCode, byte[] result) | 指定されたエラーコード及び戻り値を持つ警告を生成します。
public ExitFuncWarning(int userErrorCode, DateTime result) | 指定されたエラーコード及び戻り値を持つ警告を生成します。

(2)　コンストラクタの詳細

(a)　ExitFuncWarning

形式

public ExitFuncWarning(int userErrorCode)

引数

引数 | 内容
userErrorCode | エラーコードを指定します。

説明

指定されたエラーコード及びデフォルトの戻り値を持つ警告を生成します。このコンストラクタで生成した警告をスローすると，出口関数の型に対応したデフォルトの値を戻り値に使用します。出口関数の型に対応するデフォルトの戻り値を次の表に示します。

表10-4　出口関数の型に対応する警告時のデフォルト戻り値

出口関数の型 | デフォルト値
int | 0
double | 0
java.lang.String | " "（半角スペース）
byte[] | 要素0，長さ1の配列
jp.co.Hitachi.soft.interschema2.exitfunc.DateTime | 現在時刻（引数なしのコンストラクタで生成されたDateTimeオブジェクト）

(b)　ExitFuncWarning

形式

public ExitFuncWarning(int userErrorCode, int result)

引数

引数 | 内容
userErrorCode | エラーコードを指定します。
result | 戻り値を指定します。

説明

指定されたエラーコードと戻り値を持つ警告を生成します。

出口関数の型がint型の場合は，このコンストラクタで生成した警告をスローすると，戻り値としてresultに設定した値が使用されます。

出口関数の型がint型でない場合は，このコンストラクタで生成した警告をスローすると，出口関数の型に対応したデフォルトの値を戻り値に使用します。デフォルトの値については，「表10-4　出口関数の型に対応する警告時のデフォルト戻り値」を参照してください。

(c)　ExitFuncWarning

形式

public ExitFuncWarning(int userErrorCode, double result)

引数

引数 | 内容
userErrorCode | エラーコードを指定します。
result | 戻り値を指定します。

説明

指定されたエラーコードと戻り値を持つ警告を生成します。

出口関数の型がdouble型の場合は，このコンストラクタで生成した警告をスローすると，戻り値としてresultに設定した値が使用されます。出口関数の型がdouble型でない場合は，このコンストラクタで生成した警告をスローすると，出口関数の型に対応したデフォルトの値を戻り値に使用します。デフォルトの値については，「表10-4　出口関数の型に対応する警告時のデフォルト戻り値」を参照してください。

(d)　ExitFuncWarning

形式

public ExitFuncWarning(int userErrorCode, String result)

引数

引数 | 内容
userErrorCode | エラーコードを指定します。
result | 戻り値を指定します。

説明

指定されたエラーコードと戻り値を持つ警告を生成します。

出口関数の型がString型の場合は，このコンストラクタで生成した警告をスローすると，戻り値としてresultに設定した値が使用されます。

出口関数の型がString型でない場合は，このコンストラクタで生成した警告をスローすると，出口関数の型に対応したデフォルトの値を戻り値に使用します。デフォルトの値については，「表10-4　出口関数の型に対応する警告時のデフォルト戻り値」を参照してください。

(e)　ExitFuncWarning

形式

public ExitFuncWarning(int userErrorCode, byte[] result)

引数

引数 | 内容
userErrorCode | エラーコードを指定します。
result | 戻り値を指定します。

説明

指定されたエラーコードと戻り値を持つ警告を生成します。

出口関数の型がbyte[]型の場合は，このコンストラクタで生成した警告をスローすると，戻り値としてresultに設定した値が使用されます。出口関数の型がbyte[]型でない場合，このコンストラクタで生成した警告をスローすると，出口関数の型に対応したデフォルトの値を戻り値に使用します。デフォルトの値については，「表10-4　出口関数の型に対応する警告時のデフォルト戻り値」を参照してください。

(f)　ExitFuncWarning

形式

public ExitFuncWarning(int userErrorCode, DateTime result)

引数

引数 | 内容
userErrorCode | エラーコードを指定します。
result | 戻り値を指定します。

説明

指定されたエラーコードと戻り値を持つ警告を生成します。

出口関数の型がDateTime型の場合は，このコンストラクタで生成した警告をスローすると，戻り値としてresultに設定した値が使用されます。出口関数の型がDateTime型でない場合，このコンストラクタで生成した警告をスローすると，出口関数の型に対応したデフォルトの値を戻り値に使用します。デフォルトの値については，「表10-4　出口関数の型に対応する警告時のデフォルト戻り値」を参照してください。

10.3.4　ExitFuncExceptionクラス

ここでは，ExitFuncExceptionクラスの仕様について説明します。

＜この項の構成＞

(1)　ExitFuncExceptionクラスの概要

(2)　コンストラクタの詳細

(1)　ExitFuncExceptionクラスの概要

継承

java.lang.Object
|
+-- java.lang.Throwable
   |
   +-- java.lang.Exception
       |
       +-- jp.co.Hitachi.soft.interschema2.UserException
           |
           +-- jp.co.Hitachi.soft.interschema2.exitfunc.ExitFuncException

形式

public final class ExitFuncException
extends jp.co.Hitachi.soft.interschema2.UserException

説明

出口関数で発生したエラー例外を定義します。Java言語の出口関数で発生したエラーを，この例外をスローしてInterschemaに通知します。

出口関数でこの例外が発生した場合，Interschemaは，異常終了したものとして処理を終了します。この場合，Translator.exec関数にはTranslatorExceptionがスローされます。

コンストラクタの概要

形式 | 機能
public ExitFuncException(int userErrorCode) | 指定されたエラーコードを持つ出口関数例外を生成します。

(2)　コンストラクタの詳細

(a)　ExitFuncException

形式

public ExitFuncException(int userErrorCode)

引数

引数 | 内容
userErrorCode | エラーコードを指定します。

説明

指定されたエラーコードを持つ出口関数例外を生成します。

10.4　データ変換処理API（Java言語）の使用例

この節では，データ変換API（Java言語）の使用例を示します。

データ変換API（Java言語）の使用例には，次の三つの例があります。

サンプルコード（サーブレット版）

サンプルコード（TranslateData派生クラス）

サンプルコード（DateTimeクラス使用例）

＜この節の構成＞

(1)　サンプルコード（サーブレット版）

(2)　サンプルコード（TranslateData派生クラス）

(3)　サンプルコード（DateTimeクラス使用例）

(1)　サンプルコード（サーブレット版）

import java.io.IOException;
import java.io.PrintWriter;
import java.util.LinkedList;
import java.util.List;

import javax.servlet.ServletContext;
import javax.servlet.ServletException;
import javax.servlet.http.HttpServlet;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
import jp.co.Hitachi.soft.interschema2.*;

/**
* タイトル:  SampleServlet
* 説明:    uCosminexus Interschema V2 Java API Servlet Sample.
* 著作権:  All Rights Reserved. Copyright (C) 2005, Hitachi,Ltd.
* @version  02-01
*/
public class SampleServlet extends HttpServlet {

   public static final String DOCTYPE =
       "<!DOCTYPE HTML PUBLIC ¥"-//W3C//DTD HTML 4.0 " +
       "Transitional//EN¥"";

   public static String headWithTitle(String title) {
       return DOCTYPE + "¥n" +
           "<HTML>¥n" +
           "<HEAD><TITLE>" + title + "</TITLE></HEAD>¥n";
   }

   /**
    *
    * @param request request クライアントがサーブレットに行う要求を含む HttpServletRequest オブジェクト
    * @param response response サーブレットがクライアントに送信する応答を含む HttpServletResponse オブジェクト
    * @see javax.servlet.http.HttpServlet#doGet(HttpServletRequest, HttpServletResponse)
    */
   protected void doGet(HttpServletRequest request, HttpServletResponse response)
               throws ServletException, IOException {

       /*トランスレータ変数の定義*/
       Translator trans = null;
       /*MDL情報変数の定義*/
       MDLInfo mdlInfo = null;

       ServletContext sc = getServletContext();

       sc.log("変換を開始します。");
       try{
           /* パラメータの取得 */
           String inputFormat = request.getParameter("inFormat");
           String inputData = request.getParameter("inputData");
           String outFormat = request.getParameter("outFormat");
           String mdlFileName = request.getParameter("mdlFile");

           /*変換ライブラリの構築*/
           trans = new Translator("Sample.log");

           /*MDLファイルのロード*/
           mdlInfo = new MDLInfo(mdlFileName);

           /*入出力フォーマット情報の作成*/
           List input = new LinkedList();
           List output = new LinkedList();

           input.add(new StringData(inputFormat, inputData));
           output.add(new StringData(outFormat, null));

           /*変換処理の実行*/
           trans.exec(mdlInfo, input, output);

           String[] outData = new String[output.size()];
           for (int i = 0; i < output.size(); i++) {
               TranslateData tranData = (TranslateData)output.get(i);
               outData[i] = (String)tranData.getDataObject();
           }

           response.setContentType("text/html");
           PrintWriter out = response.getWriter();
           out.print(headWithTitle("Interscheama 02-01 Servlet Sample"));
           for (int i = 0; i < outData.length; i++) {
               out.print(outData[i]);
           }

           /*変換終了ログの出力*/
           sc.log("変換が正常終了しました。");
       } catch (UserException ue) {
           sc = getServletContext();
           sc.log("UserExceptionが発生しました。", ue);
       } catch(TranslatorException te) {
           sc = getServletContext();
           sc.log("TranslatorExceptionが発生しました。[0x"
                    + Integer.toHexString(te.getErrorCode()) + "]"
                   + getErrorString(te), te);
       }
   }

   /**
    * サーブレットが POST 要求を処理する際に，service メソッド経由でサーバによって呼び出されます。
    * POST 要求も GET 要求と同じ処理を行う。
    * @param request クライアントがサーブレットに行う要求を含む HttpServletRequest オブジェクト
    * @param response サーブレットがクライアントに送信する応答を含む HttpServletResponse オブジェクト
    * @see javax.servlet.http.HttpServlet#doPost(HttpServletRequest, HttpServletResponse)
    */
   protected void doPost(HttpServletRequest request, HttpServletResponse response)
               throws ServletException, IOException {
       this.doGet(request, response);
   }

   /**
    * 拡張エラー情報を取得して，文字列に変換します。
    * @param te 拡張エラー情報文字列を取得するためのTranslatorException
    * @return 拡張エラー情報文字列
    */
   static String getErrorString(TranslatorException te) {
       ExtraErrorData d[] = te.getExtraErrData();

       if (d == null) {
           return new String("");
       }
       StringBuffer msg = new StringBuffer();
       for(int i = 0; i < d.length; i++) {
           msg.append("エラー情報[" + i + "]:");
           String s = Integer.toString(d[i].getMessageNo());
           msg.append("メッセージ番号[" + s + "],");
           s = Integer.toHexString(d[i].getErrorLV());
           msg.append("エラーレベル[0x" + s + "],");
           s = Integer.toString(d[i].getNumericData());
           msg.append("数値情報[" + s + "],");
           msg.append("文字列情報[" + d[i].getInformation() + "]");        
       }
       return msg.toString();
   }
}

(2)　サンプルコード（TranslateData派生クラス）

import jp.co.Hitachi.soft.interschema2.TranslateData;
import jp.co.Hitachi.soft.interschema2.UserException;

/**
* タイトル:  ByteArrayData
* 説明:    uCosminexus Interschema V2 Java API Sample.
* 著作権:  All Rights Reserved. Copyright (C) 2005, Hitachi,Ltd.
* @version  02-01
*/
public class ByteArrayData extends TranslateData {

   /**
    * 指定のフォーマット名とバイト配列からバイト配列形式の変換対象データを生成する。
    * @param formatName 変換対象フォーマット名
    * @param formatData バイト配列形式のデータオブジェクト
    */
   public ByteArrayData(String formatName, byte[] dataObj) {
       super.setFormatName(formatName);
       super.setDataObject(dataObj);
   }

   /**
    * 指定のデータオブジェクトをバイト配列に変換する。
    * @param dataObj データオブジェクト
    * @exception UserException 指定のデータオブジェクトがバイト配列でない場合
        * @see jp.co.Hitachi.soft.interschema2.TranslateData#toByteArray(Object)
    */
   protected byte[] toByteArray(Object dataObj)
               throws UserException {
       if (!(dataObj instanceof byte[])) {
           throw new UserException();
       }
       return (byte[])dataObj;
   }

   /**
    * 指定のバイト配列をデータオブジェクトに変換する。
    * 指定のバイト配列をそのまま返します。
    * @param byteData バイト配列形式のデータオブジェクト
    * @exception TranslatorException 発生しない。
        * @see jp.co.Hitachi.soft.interschema2.TranslateData#toDataObject(byte[])
    */
   protected Object toDataObject(byte[] byteData) {
               return byteData;
   }
}

(3)　サンプルコード（DateTimeクラス使用例）

package sample;

import java.util.Date;
import java.text.DateFormat;
import java.text.ParseException;
import jp.co.Hitachi.soft.interschema2.exitfunc.DateTime;
import jp.co.Hitachi.soft.interschema2.exitfunc.ExitFuncException;

/**
*Javaによる出口関数を定義します。
*/
public class UserFunction {
   /**
    * 日付時刻を表す文字列をJavaメソッド，DateFormat.parse
    * を利用して解析し，Interschemaの日付時刻形式として設定
    * します。
    * この関数のettrans.iniの定義は以下のようになります。
    * ET_DTM FUNC002 (ET_STRING)
    * 第一引数のObjectは明示的には記述しません。
    * 関数名FUNC002は任意に付けた名前であり，Java
    * メソッド名と一致させる必要はありません。
    */
   public static DateTime func002(Object o, String strDateTime)
               throws ExitFuncException {
       DateTime result = null;
       try {
           /* デフォルトの日付フォーマッタを */
           /* 取得します。 */
           DateFormat dtFmt =
                DateFormat.getDateTimeInstance();
           /* 入力日付文字列を解析します。 */
           Date date = dtFmt.parse(strDateTime);
           result = new DateTime(date);
       } catch (ParseException e) {
           /* 変換エラー発生               */
           throw new ExitFuncException(1);
       }        return result;
   }
}

11.　ユーザ組み込み関数

この章では，ユーザ組み込み関数及びユーザ組み込み関数が呼び出す出口関数について説明します。

＜この章の構成＞

11.1　ユーザ組み込み関数の概要

11.2　ユーザ組み込み関数の設定手順

11.3　システム情報ファイル「ettrans.ini」の定義

11.4　C言語の出口関数の作成

11.5　Java言語の出口関数の作成

11.1　ユーザ組み込み関数の概要

Interschemaでは，変換情報を定義するときに，標準で提供している関数以外に，ユーザが独自に定義した関数を使用できます。このような関数を「ユーザ組み込み関数」と呼びます。

この節では，ユーザ組み込み関数について説明します。

ユーザ組み込み関数の特長は，次のとおりです。

ユーザ組み込み関数は，999個まで定義できます。

任意の名前のユーザ組み込み関数を定義できます。

可変個引数の関数が定義できます。

出口となるC言語又はJava言語の関数は，任意のライブラリに定義できます。

FDLエディタ及びMDLエディタの式中に関数を使用するとき，使用する関数を［関数名］ダイアログから選択できます。

ユーザ組み込み関数を定義すると，［関数名］ダイアログにユーザ組み込み関数が表示されます。［関数名］ダイアログには，組み込んだ関数の関数名，引数の説明，及び関数の説明が表示できます。［関数名］ダイアログの例を次に示します。

図11-1　［関数名］ダイアログの例

また，組み込んだ関数は，FDLエディタ及びMDLエディタで式を指定するテキスト内に直接記述できます。

ユーザ組み込み関数は，C言語又はJava言語で作成したユーザプログラムへの出口として機能します。ユーザ組み込み関数の機能は，出口関数（ユーザが作成するC言語又はJava言語の関数のことで，トランスレータから制御を渡す際の出口になるもの）中に記述します。

11.2　ユーザ組み込み関数の設定手順

ユーザ組み込み関数の設定手順を次に示します。

C言語の出口関数を使用する場合

システム情報ファイル「ettrans.ini」の定義
システム情報ファイル「ettrans.ini」に，ユーザ組み込み関数の情報や出口関数の情報を定義します。

出口関数の定義
ユーザ組み込み関数を記述した出口関数を定義します。

ダイナミックリンクライブラリ（DLL）（Windowsの場合）又は共用ライブラリ（ワークステーションのOSの場合）の作成
DLL（Windowsの場合）又は共用ライブラリ（ワークステーションのOSの場合）を作成します。

Java言語の出口関数を使用する場合

システム情報ファイル「ettrans.ini」の定義
システム情報ファイル「ettrans.ini」に，ユーザ組み込み関数の情報や出口関数の情報を定義します。

出口関数の定義
ユーザ組み込み関数を記述した出口関数を定義します。

Javaクラスファイルの設定
出口関数を定義したJavaクラスファイルを，Java実行環境のクラスパス内に配置します。

11.3　システム情報ファイル「ettrans.ini」の定義

ユーザ組み込み関数は，システム情報ファイル「ettrans.ini」に定義します。

ワークステーションのOSの場合，システム情報ファイルは，システムがサポートする実行環境のロケールに対応したコードで記述してください。

システム情報ファイル「ettrans.ini」で定義が必要なセクションを次に示します。

表11-1　システム情報ファイル「ettrans.ini」で定義が必要なセクション

セクション
トランスレータ
FDLエディタ及びMDLエディタ

C言語の出口関数（
Windowsの場合）
C言語の出口関数（ワークステーションのOSの場合）
Java言語の出口関数

Userfunc_MaxId
○
○
○
○

Userfunc_Mapfunc
○
○
○
○

Userfunc_MapfuncGuide
－
－
－
○

Userfunc_ExitfuncName
○
○
－
－

Userfunc_DllPath
○
－
－
－

Userfunc_SlPath
－
○
－
－

Userfunc_JavaMethodName
－
－
○
△

Userfunc_Option
－
－
－
－

（凡例）

○：定義が必要なセクションです。

△：Java言語の出口関数を使用する場合に必要なセクションです。

－：該当しません（任意です）。

注

[Userfunc_JavaMethodName]セクションの下に有効なメソッド名が定義された関数IDを持つユーザ組み込み関数は，Java言語の出口関数として扱われます。

それ以外のユーザ組み込み関数は，C言語の出口関数として扱われます。

ただし，[Userfunc_ExitfuncName]セクション，又は[Userfunc_JavaMethodName]セクションに同じ関数IDを持つユーザ組み込み関数定義することはできません。

システム情報ファイル「ettrans.ini」の記述例を次に示します。

システム情報ファイル「ettrans.ini」の記述例（C言語の関数を定義する場合）

; ettrans.ini

[Userfunc_MaxId]
MAX=005

[Userfunc_Mapfunc]
FUNC001=ET_INT USERMOD(ET_INT,ET_INT)
FUNC002=ET_REAL USERAVE(ET_REAL,...)
FUNC003=ET_STRING USERFSPACE(ET_STRING)
FUNC004=ET_DTM USERDTM()
FUNC005=ET_STRING USERPRINT(ET_ENVSTRING)

[Userfunc_MapfuncGuide]
FUNC001=(整数１, 整数２);整数１÷整数２の剰余を求める
FUNC002=(実数, ...);平均値を求める
FUNC003=(文字列);文字列がスペースであるか調べる
FUNC004=();特定の日時データを設定する
FUNC005=(実行環境文字コード文字列);実行環境文字コード文字列をファイルに出力する

[Userfunc_ExitfuncName]
FUNC001=usermod
FUNC002=useraverage
FUNC003=userisspace
FUNC004=userdtm
FUNC005=userPrintEnvstring

[Userfunc_DllPath]
FUNC001=c:¥interschema2¥bin¥USERFUNC.dll
FUNC002=c:¥interschema2¥bin¥USERFUNC.dll
FUNC003=c:¥interschema2¥bin¥USERFUNC.dll
FUNC004=c:¥interschema2¥bin¥USERFUNC.dll
FUNC005=c:¥interschema2¥bin¥USERFUNC.dll

[Userfunc_SlPath]
FUNC001=/opt/hitachi/interschema/lib/libuser.sl
FUNC002=/opt/hitachi/interschema/lib/libuser.sl
FUNC003=/opt/hitachi/interschema/lib/libuser.sl
FUNC004=/opt/hitachi/interschema/lib/libuser.sl
FUNC005=/opt/hitachi/interschema/lib/libuser.sl

[Userfunc_Option]
FUNC005=USE02IF

システム情報ファイル「ettrans.ini」の記述例（Java言語の関数を定義する場合）

; ettrans.ini

[Log]
Size=1000

[Userfunc_MaxId]
MAX=8

[Userfunc_Mapfunc]
FUNC001=ET_INT F001(ET_INT,ET_INT)
FUNC002=ET_INT F002(ET_DTM)
FUNC003=ET_INT F003(ET_STREAM)
FUNC004=ET_INT F004(ET_ENVSTRING)
FUNC005=ET_STRING F005(ET_STREAM)
FUNC006=ET_STREAM F006(ET_ENVSTRING)
FUNC007=ET_STRING F007(ET_DTM)
FUNC008= ET_INT F008(ET_REAL,ET_REAL)

[Userfunc_MapfuncGuide]
FUNC001=(引数1,引数2);Java Method 001
FUNC002=(日付時刻文字列);Java Method 002
FUNC003=;Java Method 003
FUNC004=;Java Method 004
FUNC005=;Java Method 005
FUNC006=;Java Method 006
FUNC007=;Java Method 007
FUNC008=;Java Method 008

[Userfunc_JavaMethodName]
FUNC001= usrpackagename.UFunc.func001
FUNC002= usrpackagename.UFunc.func002
FUNC003= usrpackagename.UFunc.func003
FUNC004= usrpackagename.UFunc.func004
FUNC005= usrpackagename.UFunc.func005
FUNC006= usrpackagename.UFunc.func006
FUNC007= usrpackagename.UFunc.func007
FUNC008= usrpackagename.UFunc.func008

システム情報ファイル「ettrans.ini」の各セクションについて次に説明します。

＜この節の構成＞

11.3.1　［Userfunc_MaxId］セクション

11.3.2　［Userfunc_Mapfunc］セクション

11.3.3　［Userfunc_MapfuncGuide］セクション

11.3.4　［Userfunc_ExitfuncName］セクション

11.3.5　［Userfunc_DllPath］セクション

11.3.6　［Userfunc_SlPath］セクション

11.3.7　［Userfunc_JavaMethodName］セクション

11.3.8　［Userfunc_Option］セクション

11.3.1　［Userfunc_MaxId］セクション

組み込み関数の数をMAXキーで定義します。

＜この項の構成＞

(1)　書式

(2)　説明

(1)　書式

MAX=最大ID

(2)　説明

最大ID

組み込み関数の最大IDを定義します（エントリ数ではないので注意してください）。001から999まで指定できます。先頭の0は省略できます。

C言語の関数及びJava言語の関数を混在させている場合は，C言語の関数及びJava言語の関数を併せた中での最大IDを指定します。

11.3.2　［Userfunc_Mapfunc］セクション

組み込み関数のインタフェース（戻り値，引数）をFUNCnnnキーで定義します。組み込み関数の定義数分だけキー定義の行を記述します。

＜この項の構成＞

(1)　書式

(2)　説明

(3)　注意

(1)　書式

FUNCnnn=戻り値の型△名前(引数1の型,引数2の型,...)

注：△は，半角スペースを表しています。

(2)　説明

FUNCnnn

nnnには，組み込み関数のIDを指定します。組み込み関数のIDは，001から999まで指定できます。組み込み関数のIDは必ず3桁で指定してください。先頭の0は省略できません。ここで指定したIDは，ほかのセクションで指定するIDと一致させる必要があります。

行をID順にソートする必要はありません。また，IDは連続していなくてもかまいません。ただし，必ず最大IDが[Userfunc_MaxId]セクションのMAXキーに定義されている必要があります。

戻り値の型

組み込み関数の戻り値の型を指定します。戻り値の型は，「表11-2　ユーザ組み込み関数で使用する型」に示す型の中から指定する必要があります。ただし，ET_PTR型，ET_ENVSTRING型は指定できません。

名前

組み込み関数の名前を指定します。名前には，半角英数字だけを使用できます。ただし，名前の先頭文字は英字にする必要があります。長さは64バイト以内で指定します。

ここで指定した組み込み関数の名前が，FDLエディタ及びMDLエディタの［関数名］ダイアログの関数リストの関数名欄に表示されます。

名前の指定では，Interschemaが標準で提供している関数名やほかのユーザ組み込み関数名と同じ名前は指定できません。

関数名の先頭文字は，次のどれかの文字にしてください。

U，u，W，w，X，x，Y，y，Z，z

Interschemaが標準で提供している関数については，「6.7.3　関数」を参照してください。

引数の型

組み込み関数の引数の型を指定します。引数の型は，「表11-2　ユーザ組み込み関数で使用する型」に示す型の中から指定する必要があります。ただし，ET_PTR型は指定できません。また，Java言語の出口関数の場合，ET_STRING型は指定できません。

引数が複数個ある場合は，引数の数だけ半角コンマで区切って記述します。引数がない場合は，括弧だけを記述します。引数が可変個の場合は，繰り返し部分の先頭の型の後に「...」を記述します。ただし，可変個引数の繰り返し部分は引数の最後に記述する必要があります。また，繰り返し部分はすべて同じ型にする必要があります。可変個引数の定義例を，次に示します。

FUNC001=ET_INT USRFNC(ET_STRING,ET_INT,...※)

注※　...は，ET_INT型の引数の繰り返しを表します。

ユーザ組み込み関数で使用する型

ユーザ組み込み関数で使用する型を次に示します。戻り値の型，及び引数の型は，次に示す型の中から指定してください。

表11-2　ユーザ組み込み関数で使用する型

型 | 意味 | 備考
ET_INT | 整数 | C言語のlong型（32bit）として表現できる範囲の整数です。
ET_REAL | 実数 | C言語のdouble型（32bit）として表現できる範囲の実数です。
ET_STRING | 文字列 | －
ET_STREAM | バイト列 | －
ET_DTM | 日付時刻 | 日付，時刻，日付時刻型に対応します。
ET_PTR | ポインタ型 | 出口関数引数だけで使用され，ユーザ組み込み関数の引数，及び戻り値では使用できません。
ET_ENVSTRING | 実行環境文字コード文字列型 | 実行環境の文字コードに変換された文字列です。ユーザ組み込み関数の引数だけで使用できます。

（凡例）

－：該当しません。

(3)　注意

このセクションを省略した場合，ユーザ組み込み関数は使用できません。

FUNCnnnキーを省略した場合や記述に不備があった場合，そのキーで定義した組み込み関数は使用できません。

「戻り値の型」と「名前」の間には，半角スペースを一文字入れる必要があります。その他の場所にはスペースを入れないでください。

「=」の右辺の文字列は，255バイト以内で記述する必要があります。

ユーザ組み込み関数の引数として指定できる要素は，標準で提供している関数と同じです。実引数の型と組み込み関数の引数の型が異なる場合の変換処理も標準組み込み関数と同じ規則に従います。ただし，整数型（ET_INT）の引数に小数が入力される場合は，小数部を切り捨てた整数に変換します。

整数型（ET_INT）引数にC言語のlong型で収まらない範囲の整数が入力された場合や，実数型（ET_REAL）引数にdouble型で収まらない範囲の実数が入力された場合は，変換時にエラーとなります。日付時刻型(ET_DTM)についても同様です。

C言語の出口関数に対応する組み込み関数で，実行環境文字コード文字列型（ET_ENVSTRING）を使用する場合，[Userfunc_Option]セクションでオプションUSE02IFの指定が必要です。Java言語の出口関数に対応する組み込み関数では，このオプションの指定は不要です。

11.3.3　［Userfunc_MapfuncGuide］セクション

関数ダイアログの関数リストに表示する組み込み関数の説明をFUNCnnnキーで定義します。この定義は，FDLエディタ又はMDLエディタだけで使用します。

ここで指定した引数の説明と関数の説明が，［関数名］ダイアログの関数名欄と機能欄に表示されます。

＜この項の構成＞

(1)　書式

(2)　説明

(3)　注意

(1)　書式

FUNCnnn=引数の説明;関数の説明

(2)　説明

FUNCnnn

nnnには，[Userfunc_Mapfunc]セクションで定義した組み込み関数のIDと同じIDを指定します。

引数の説明

組み込み関数の引数の説明を記述します。ただし，半角セミコロン「;」は使用できません。

関数の説明

関数の意味や仕様を記述します。ただし，半角セミコロン「;」は使用できません。

(3)　注意

このセクションを省略した場合は，関数リスト中のユーザ組み込み関数のすべての説明欄が空白になります。

FUNCnnnキーを省略した場合は，その組み込み関数の説明欄だけが空白になります。

引数の説明，又は関数の説明のどちらかの指定を省略した場合は，対応する説明の欄だけが空白になります。ただし，この場合，引数の説明と関数の説明の区切りのセミコロン「;」は指定する必要があります。

「=」の右辺の文字列は，255バイト以内で記述する必要があります。

11.3.4　［Userfunc_ExitfuncName］セクション

出口関数の名前をFUNCnnnキーで定義します。

＜この項の構成＞

(1)　書式

(2)　説明

(3)　注意

(1)　書式

FUNCnnn=出口関数名

(2)　説明

FUNCnnn

nnnには，[Userfunc_Mapfunc]セクションで定義した組み込み関数のIDと同じIDを指定します。

出口関数名

出口関数名を指定します。出口関数名は，C言語の関数名として使用できる範囲で任意の名前を定義してください。ただし，定義済みのほかの出口関数と同じ名前は指定できません。

(3)　注意

このセクションの指定は，C言語の出口関数を変換実行するときに必要なものです。

「=」の右側の文字列は，255バイト以内で記述する必要があります。

同じIDの組み込み関数に対して，このセクションと[Userfunc_JavaMethodName]セクションを同時に指定することはできません。

11.3.5　［Userfunc_DllPath］セクション

出口関数を含むDLLのフルパスをFUNCnnnキーで定義します。この定義は，Windowsで変換する場合に必要です。

＜この項の構成＞

(1)　書式

(2)　説明

(3)　注意

(1)　書式

FUNCnnn=DLLパス

(2)　説明

FUNCnnn

nnnには，[Userfunc_Mapfunc]セクションで定義した組み込み関数のIDと同じIDを指定します。

DLLパス

[Userfunc_ExitfuncName]セクションで定義した出口関数を含むDLLのフルパスを記述します。

(3)　注意

このセクションの指定は，C言語の出口関数をWindowsで変換実行する時に必要なものです。

同じDLLに複数の出口関数を定義してもかまいません。

「=」の右辺の文字列は，255バイト以内で記述する必要があります。

11.3.6　［Userfunc_SlPath］セクション

出口関数を含む共用ライブラリのフルパスをFUNCnnnキーで定義します。この定義は，ワークステーションのOSで変換する場合に必要です。

＜この項の構成＞

(1)　書式

(2)　説明

(3)　注意

(1)　書式

FUNCnnn=共用ライブラリのパス

(2)　説明

FUNCnnn

nnnには，[Userfunc_Mapfunc]セクションで定義した組み込み関数のIDと同じIDを指定します。

共用ライブラリのパス

[Userfunc_ExitfuncName]セクションで定義した出口関数を含む共用ライブラリのフルパスを記述します。

(3)　注意

このセクションの指定は，C言語の出口関数をワークステーションのOSで変換実行するときに必要なものです。

同じ共用ライブラリに複数の出口関数を定義してもかまいません。

「=」の右辺の文字列は，255バイト以内で記述する必要があります。

11.3.7　［Userfunc_JavaMethodName］セクション

[Userfunc_Mapfunc]セクションで定義したユーザ組み込み関数から呼び出すJava言語の出口関数のメソッド名を指定します。

＜この項の構成＞

(1)　書式

(2)　説明

(3)　注意

(1)　書式

FUNCnnn=[パッケージ名.]クラス名.メソッド名

(2)　説明

FUNCnnn

nnnには，[Userfunc_Mapfunc]セクションで定義した組み込み関数のIDと同じIDを指定します。

パッケージ名

Java言語の出口関数が含まれるパッケージ名を記述します。ただし，パッケージ化していない場合は省略できます。

クラス名

Java言語の出口関数が含まれるクラス名を記述します。

メソッド名

Java言語の出口関数のメソッド名を記述します。

(3)　注意

このセクションの指定は，Java言語の出口関数に対応する組み込み関数の式をFDLエディタ又はMDLエディタで記述するとき，及びその変換実行時に必要なものです。

ここで指定したクラスは，変換実行時にはデータ変換処理API（Java言語）を呼び出すJava環境のクラスパスに含まれていなければなりません。FDLエディタ又はMDLエディタ使用時はその必要はありません。

「=」の右辺の文字列は，255バイト以内で記述する必要があります。

同じIDの組み込み関数に対して，このセクションと[Userfunc_ExitfuncName]セクションを同時に指定することはできません。

11.3.8　［Userfunc_Option］セクション

出口関数で使用するオプションを指定します。

＜この項の構成＞

(1)　書式

(2)　説明

(3)　注意

(1)　書式

FUNCnnn=オプション名

(2)　説明

FUNCnnn

nnnには，[Userfunc_Mapfunc]セクションで定義した組み込み関数のIDと同じIDを指定します。

オプション名

出口関数に渡すオプション名を記述します。

USE02IF

出口関数の入力引数に変換実行関数（ETtrans2Exec関数）で指定されたポインタ（ET_PTR型）が渡されます。なお，Interschemaバージョン1の互換APIが使用されている場合は，ポインタとしてnullが渡されます。

また，実行環境文字コード文字列型（ET_ENVSTRING）を使用できます。実行環境文字コード文字列型（ET_ENVSTRING）については，「11.3.2　［Userfunc_Mapfunc］セクション」の「表11-2　ユーザ組み込み関数で使用する型」を参照してください。

(3)　注意

オプションUSE02IFを指定していない出口関数には，ポインタ（ET_PTR型）を渡しません。また，実行環境文字コード文字列型（ET_ENVSTRING）を使用すると，エラーとなります。

C言語で新しく出口関数を作成する場合，USE02IFオプションを指定してください。

11.4　C言語の出口関数の作成

この節では，C言語出口関数の作成方法について説明します。

＜この節の構成＞

11.4.1　C言語の出口関数の定義

11.4.2　ダイナミックリンクライブラリ（DLL）の作成（Windowsの場合）

11.4.3　共用ライブラリの作成（ワークステーションのOSの場合）

11.4.1　C言語の出口関数の定義

ユーザ組み込み関数の機能を，C言語の出口関数中に記述します。

＜この項の構成＞

(1)　C言語の出口関数の仕様

(2)　C言語の出口関数の実装例

(1)　C言語の出口関数の仕様

C言語の出口関数の仕様を次に示します。

(a)　形式

#include  "ETexit.h"

long  userfunc (long lArgNum, EXITARG *ppInArg[],
               EXITARG *pOutArg )

注：出口関数名（userfunc部分）には任意の名前を指定します。

(b)　引数

（入力）

lArgNum

ppInArg配列の要素の数が指定されます。

ppInArg

ユーザ組み込み関数の引数についての情報を格納するETEXITARG構造体のポインタ配列が指定されます。ETEXITARG構造体については，「(c)　説明」を参照してください。

（入出力）

pOutArg

ユーザ組み込み関数の戻り値についての情報を示す，ETEXITARG構造体のポインタが渡されます。

(c)　説明

ユーザ組み込み関数を使用した場合，トランスレータは，システム情報ファイル「ettrans.ini」の定義に従って対応する出口関数を呼び出します。

lArgNumが0の場合は，ppInArgにNULLが設定されます。

ETEXITARG構造体

ETEXITARG型は，入力となる引数の情報，及び出力となる戻り値の情報を格納する構造体であり，ヘッダファイル「ETexit.h」内で次のように定義されています。

typedef struct {
   long lType;
   ETEXITDATA data;
} ETEXITARG;

lTypeにはデータの型を表す値が入ります。「11.3.2　［Userfunc_Mapfunc］セクション」の「表11-2　ユーザ組み込み関数で使用する型」に示した型名をそのままマクロ定数として使用します。これらの値はヘッダファイル「ETexit.h」内で定義されています。

ETEXITDATA構造体は引数の値を格納するための共用体であり，ヘッダファイル「ETexit.h」内で次のように定義されています。

typedef union {
   long lNumber;
   double dNumber;
   void *pPtr;
   ETEXITDATASTRING edstring;
   ETEXITDATASTREAM edstream;
   ETEXITDATADTM eddtm;
   ETEXITDATAENVSTRING edenvstring;
} ETEXITDATA;

lNumberは，引数又は戻り値が整数型（ET_INT）の場合に使用します。dNumberは実数型（ET_REAL）の場合に使用します。pPtrはポインタ型（ET_PTR）の場合に使用します。

引数，及び戻り値のそれぞれが，ETEXITDATASTRING構造体は文字列型（ET_STRING），ETEXITDATASTREAM構造体はバイト列型（ET_STREAM），ETEXITDATADTM構造体は日付時刻型（ET_DTM），ETEXITDATAENVSTRING構造体は実行環境文字コード文字列型（ET_ENVSTRING）の場合に使用します。ヘッダファイルETexit.h内で次のように定義されています。

typedef struct {
   long lCode;
   long lLength;
   char *pszString;
} ETEXITDATASTRING;

typedef struct {
   long lLength;
   char *psStream;
} ETEXITDATASTREAM;

typedef struct {
   long lYear;        /* year */
   long lMonth;       /* month */
   long lDay;         /* day */
   long lHour;        /* hour */
   long lMinute;      /* minute */
   double dSecond;    /* second */
   char *pszZone;     /* zone string */
} ETEXITDATADTM;

typedef struct {
   long lErrCode;
   long lCode;
   char *pszString;
} ETEXITDATAENVSTRING;

lCodeには文字コードを表す定数が入ります。文字コードは，プレフィクス「ETEXIT_CODE_」を付けたマクロで表されます（例：ETEXIT_CODE_JIS8）。これらのマクロはETexit.h内に定義されています。

lLengthにはデータのサイズ（バイト数）が入ります。データが文字列の場合，終端NULLはサイズとして数えません。ETEXITDATASTRING構造体のpszString，及びETEXITDATASTREAM構造体のpsStreamにはそれぞれ文字列，バイト列を格納したメモリエリアへのポインタが入ります。文字列の場合に，終端NULLは付きません。

ETEXITDATADTM構造体のlYear～dSecondには，対応する日付時刻型のパート値が入ります。日付型や時刻型など，該当するパート値がない場合は，０を設定します。pszZoneには，日付時刻型のゾーン部文字列が終端NULL付きで入ります。ゾーン部を持たない場合はNULLです。ゾーン部文字列の文字コードは，Interschemaがサポートする実行環境のロケールに従います。Windowsの場合は，シフトJISです。

ETEXITDATAENVSTRING構造体のpszStringにはNULL終端文字列，lErrCodeには引数の文字列の実行環境のロケールに従った文字コードへの変換の成否を示すコードが入ります。lErrCode及びlCodeの値と，pszStringに格納される文字列の関係を次の表に示します。

表11-3　ETEXITDATAENVSTRING構造体のメンバの内容

項番 | lErrCode | 文字コード変換結果 | lCode | pszString
1 | 0 | 変換に成功した※1 | 実行環境のロケールに従った文字コード | 実行環境のロケールに従った文字コードのNULL終端文字列です。
2 | 0x01000001 | 変換時に不正文字コードを検出した※2 | 実行環境のロケールに従った文字コード | 実行環境のロケールに従った文字コードのNULL終端文字列で，検出した不正文字コードをスペース文字へ置換したものです。
3 | -1 | 変換に失敗した | ユーザ組み込み関数に渡された文字列の文字コード | ユーザ組み込み関数に渡された文字列に終端NULLを付加したものです。

注※1

ユーザ組み込み関数に渡された文字列が，最初から実行環境のロケールに従った文字コードの場合も含みます。

注※2

フォーマットの指定，又は実行時オプションで不正文字コードのスペース置換を禁止している場合，変換時に不正文字コードを検出したときは，項番3の結果が渡されます。

システム情報ファイルの[Userfunc_Option]セクションでUSE02IFオプションが指定されている場合，引数ppInArgの末尾にET_PTR型の情報を追加して渡します。ここにはETtrans2Exec関数で指定されたポインタを格納します。指定がない又はバージョン1の互換APIを使用している場合は，NULLが設定されます。また，lArgNumの値はシステム情報ファイルで定義した入力パラメタ数＋１となります。

USE02IFオプションが指定されていない場合は，ET_PTR型のデータは追加設定しません。

pOutArgのデータは初期化された状態で出口関数に渡されます。ETEXITARG構造体のlTypeには，組み込み関数の戻り値型に対応した値があらかじめ設定されます。また，ETEXITDATA構造体のlNumber，dNumber，ETEXTITDATADTMのlYear～dSecondは，それぞれ0で初期化されます。

戻り値の型が文字列型の場合のpszString，バイト列型の場合のpsStream，日付時刻型の場合のpszZoneには，2,000バイト分確保したメモリのアドレスが設定されます。2,000バイトの領域は0で初期化されます。文字列，バイト列，日付時刻型のゾーン文字列を出力する場合は，出口関数内で2,000バイトに収まるようにデータを設定する必要があります。ゾーン文字列には終端NULLを付けてください。

異常終了時の戻り値（0以外の値）は出口関数内で任意に設定してかまいません。負の値を返した場合，トランスレータは変換処理を中止します。正の値を返した場合，トランスレータは変換処理を続行します。続行する場合，pOutArgとして出口関数からトランスレータに渡す値はリターン時のものになるので注意してください。エラー発生時の戻り値は，トランスレータのログとして出力されます。

(d)　戻り値

0

正常に終了しました。

＞0

異常で終了しました。ただし，トランスレータの処理は続行します。

＜0

異常で終了しました。トランスレータの処理を終了します。

(2)　C言語の出口関数の実装例

C言語の出口関数の実装例を，整数型の場合，実数型で可変個引数の場合，文字列型の場合，日付時刻型の場合，及びUSE02IFオプションを使用した場合に分けて次に示します。

C言語の出口関数の実装例（整数型）

/*
*  usermod.c -  整数型ユーザ出口関数の実装例
*/
#include  <stdlib.h>
#include  "ETexit.h"

long  usermod(long lArgNum, ETEXITARG *ppInArg[],
             ETEXITARG *pOutArg)
{
    /* 余剰を求める */
    long lArg1, lArg2;

    if (lArgNum != 2 || ppInArg == NULL) return -1;
    if (ppInArg[0] == NULL || ppInArg[0]->lType != ET_INT)  return -2;
    if (ppInArg[1] == NULL || ppInArg[1]->lType != ET_INT)  return -2;

    lArg1 = ppInArg[0]->data.lNumber;
    lArg2 = ppInArg[1]->data.lNumber;
    if (lArg2 == 0) return -3;
    pOutArg->data.lNumber = lArg1 % lArg2;

    return 0;
}

C言語の出口関数の実装例（実数型で可変個引数型）

/*
*  useraverage.c : 実数型可変個引数ユーザ関数の実装例
*/

#include  <stdlib.h>
#include  "ETexit.h"

long  useraverage(long lArgNum, ETEXITARG *ppInArg[],
                 ETEXITARG *pOutArg)
{
   /* 平均値を求める */
   double dTotal = 0.0;
   int i;

   if (lArgNum < 1 || ppInArg == NULL) return -1;
   for ( i = 0; i < lArgNum; i++){
       if (ppInArg[i] == NULL || ppInArg[i]->lType != ET_REAL)
               return -2;
       dTotal += ppInArg[i]->data.dNumber;
   }
   pOutArg->data.dNumber = dTotal/(double)lArgNum;

   return 0;
}

C言語の出口関数の実装例（文字列型）

/*
*  userisspace.c : 文字列型ユーザ関数の実装例
*/

#include  <stdlib.h>
#include  <string.h>
#include  "ETexit.h"

long  userisspace(long lArgNum, ETEXITARG *ppInArg[],
                 ETEXITARG *pOutArg)
{
   /* 文字列中のスペースをチェックする */
   ETEXITDATASTRING *peds1, *peds2;
   long i;

   if (lArgNum != 1 || ppInArg == NULL)  return -1;
   if (ppInArg[0] == NULL || ppInArg[0]->lType != ET_STRING)
           return -2;
   peds1 = &ppInArg[0]->data.edstring;
   if (peds1->lLength >= 2000) return -3;
   if (peds1->lCode != ETEXIT_CODE_SJIS)  return -4;

   peds2 = &pOutArg->data.edstring;
   for (i = 0; i < peds1->lLength; i++) {
        if (peds1->pszString[i] !=  ' ') break;
   }
   if (i < peds1->lLength){
       strncpy(peds2->pszString, peds1->pszString, peds1->lLength);
       peds2->pszString[peds1->lLength] = '¥0';
   } else {
       strcpy(peds2->pszString, "(space)");
   }
   peds2->lLength = strlen(peds2->pszString);
   peds2->lCode = ETEXIT_CODE_SJIS;

   return 0;
}

C言語の出口関数の実装例（日付時刻型）

/*
*  userdtm.c : 日付時刻型ユーザ関数の実装例
*/

#include  <stdlib.h>
#include  <string.h>
#include  "ETexit.h"

long  userdtm(long lArgNum, ETEXITARG *ppInArg[], ETEXITARG *pOutArg)
{
   /* 特定の日時を設定する */
   pOutArg->data.eddtm.lYear = 2002;
   pOutArg->data.eddtm.lMonth = 2;
   pOutArg->data.eddtm.lDay = 15;
   pOutArg->data.eddtm.lHour = 12;
   pOutArg->data.eddtm.lMinute = 0;
   pOutArg->data.eddtm.dSecond = 0.0;
   strcpy(pOutArg->data.eddtm.pszZone, "+09:30");

   return 0;
}

C言語の出口関数実装例（実行環境文字コード文字列型とAPIからのポインタを使用したユーザ関数）

/*
*  userPrintEnvstring.c : 実行環境文字コード文字列型とAPIからのポインタを使用したユーザ関数の実装例
*/
#include  <string.h>
#include  <stdio.h>
#include  "ETexit.h"

/* 実行環境文字コード型引数で受け取った文字列を，APIから渡されたファイルに書き込む関数 */
long  userPrintEnvstring(long lArgNum, ETEXITARG *ppInArg[],
                        ETEXITARG *pOutArg)
{
   ETEXITDATAENVSTRING *pEdEnvstr = NULL;
   ETEXITDATASTRING *peds = NULL;
   const char *cszFile = NULL;
   FILE *fp = NULL;

   if (lArgNum != 2 || ppInArg == NULL)  return -1;
   if (ppInArg[0] == NULL || ppInArg[0]->lType != ET_ENVSTRING)
             return -2;
   if (ppInArg[1] == NULL || ppInArg[1]->lType != ET_PTR)  return -3;

   pEdEnvstr = &ppInArg[0]->data.edenvstring;

   if (pEdEnvstr == NULL || pEdEnvstr->lErrCode == -1)  return -4;
   else {
         /* 実行環境の文字コードは SJISを仮定 */
         if (pEdEnvstr->lCode != ETEXIT_CODE_SJIS)  return -5;
   }

   /* APIから渡されたファイル名を取り出す */
   cszFile = (const char *)ppInArg[1]->data.pPtr;
   if (!cszFile)  return -6;

   /* ファイルに引数で受け取った文字列を書き込む */
   fp = fopen(cszFile, "w");
   if (!fp)  return -7;

   fprintf(fp, "%s", pEdEnvstr->pszString);
   if (fp)  fclose(fp);

   /* ユーザ組み込み関数の戻り値には引数の文字列をそのまま渡す */
   peds = &pOutArg->data.edstring;
   strcpy(peds->pszString, pEdEnvstr->pszString);
   peds->lLength = strlen(peds->pszString);
   peds->lCode = ETEXIT_CODE_SJIS;

   return 0;
}

11.4.2　ダイナミックリンクライブラリ（DLL）の作成（Windowsの場合）

ユーザが作成した出口関数を含むDLLを作成して，トランスレータとバインドします。作成したDLLに未解決のシンボルがあると，変換実行時にDLLをロードしたときにエラーとなります。

DLLの作成手順を次に示します。

＜この項の構成＞

(1)　32bit対応のDLLの作成

(2)　作成したDLLのコピー

(1)　32bit対応のDLLの作成

出口関数を含む32bit対応のDLLを作成します。DLL名はシステム情報ファイル「ettrans.ini」内で指定したものと同じにします。また，出口関数は次のどちらかの方法で外部にエクスポートする必要があります。

モジュール定義ファイル（.def）を作成し，出口関数名を記述する

出口関数のソースコード内で__declspec（export）宣言する

(2)　作成したDLLのコピー

作成したDLLファイルをシステム情報ファイル「ettrans.ini」内で指定したパスにコピーします。

11.4.3　共用ライブラリの作成（ワークステーションのOSの場合）

ユーザが作成した出口関数を含む共用ライブラリを作成して，トランスレータとバインドします。作成した共用ライブラリに未解決のシンボルがあると，変換実行時に共用ライブラリをロードしたときにエラーとなります。

共用ライブラリの作成手順を次に示します。

＜この項の構成＞

(1)　makefileの作成

(2)　作成した共用ライブラリのコピー

(1)　makefileの作成

Interschemaが提供するサンプルmakefileを参考にして，共用ライブラリを作成してください。サンプルファイルmakefileの格納場所は，リリースノートを参照してください。

(2)　作成した共用ライブラリのコピー

作成した共用ライブラリをシステム情報ファイル「ettrans.ini」内で指定したパスにコピーします。

11.5　Java言語の出口関数の作成

Java言語の出口関数は，任意のクラス内のstaticメソッドとして作成します。

この節では，Java言語の出口関数の作成方法について説明します。

＜この節の構成＞

11.5.1　Java言語の出口関数の定義

11.5.2　Java言語の出口関数へのオブジェクト渡し

11.5.3　Java言語の出口関数使用上の注意

11.5.1　Java言語の出口関数の定義

ユーザ組み込み関数の機能を，Java言語の出口関数中に記述します。

＜この項の構成＞

(1)　Java言語の出口関数の仕様

(2)　Java言語の出口関数の実装例

(1)　Java言語の出口関数の仕様

Java言語の出口関数の仕様を次に示します。

(a)　引数

Java言語の出口関数の第1引数には，java.lang.Object型を指定する必要があります。第2引数以降には，ユーザ組み込み関数の引数のデータ型（Interschemaの定義型）をJava言語のデータ型に置き換えたデータ型を指定します。ユーザ組み込み関数の引数のデータ型とJava言語のデータ型の対応を，次の表に示します。

表11-4　ユーザ組み込み関数の引数のデータ型とJava言語のデータ型の対応

ユーザ組み込み関数のデータ型（Interschema定義型） | 対応するJava言語のデータ型 | 備考
ET_INT | int | signed 32Bit
ET_REAL | double | 64Bit format IEEE754
ET_STRING(戻り値) | java.lang.String | －
ET_ENVSTRING(引数) | jp.co.Hitachi.soft.interschema2.exitfunc.ENVString※1 | －
ET_STREAM | byte [] | －
ET_DTM | jp.co.Hitachi.soft.interschema2.exitfunc.DateTime※2 | －

（凡例）

－：特にありません。

注※1

jp.co.Hitachi.soft.interschema2.exitfunc.ENVStringの定義については，「10.3.1　ENVStringクラス」を参照してください。

注※2

jp.co.Hitachi.soft.interschema2.exitfunc.DateTimeの定義については，「10.3.2　DateTimeクラス」を参照してください。

例えば，ユーザ組み込み関数ET_STRING FUNC099 (ET_INT, ET_INT)に対応するJava出口関数は，public static String func099(Object o, int a, int b)というシグニチャを持ちます。

(b)　例外

Java言語の出口関数内でエラーが発生した場合，呼び出し元に例外をスローすることでエラーを通知します。この場合，ユーザがExitFuncExceptionクラスのインスタンスに設定したエラーコードが，ログファイルに出力されて，変換は中止されます。また，DateTimeオブジェクトの生成に失敗したときは，Interschemaが0x20000004以上のエラーコードを設定して，ExitFuncExceptionをスローします。ExitFuncExceptionクラスについては，「10.3.4　ExitFuncExceptionクラス」を参照してください。

Java言語の出口関数内で警告が発生した場合，呼び出し元にExitFuncWarning例外をスローすることで警告を通知します。この場合，Interschemaは，ユーザがExitFuncWarningクラスのインスタンスに設定した値を，Java言語の出口関数の戻り値として使用するため，ユーザが例外に設定したエラーコードがログファイルに出力された後，変換処理は続行されます。ExitFuncWarningクラスについては，「10.3.3　ExitFuncWarningクラス」を参照してください。

Java言語の出口関数から，ExitFuncExceptionクラス又はExitFuncWarningクラス以外の例外をスローしないでください。

Java言語の出口関数から，直接又はExitFuncWarning例外を通して，基本型以外のJavaクラスインスタンスを返す場合の戻り値についての制限事項を，次の表に示します。

表11-5　出口関数戻り値の制限

ユーザ組み込み関数戻り値型 | Java言語で対応する型 | 制限
ET_STRING | java.lang.String | null，空文字列は設定できません。
ET_STREAM | byte [] | nullは設定できません。配列サイズは，1以上に設定する必要があります。
ET_DTM | jp.co.Hitachi.soft.interschema2.exitfunc.DateTime | nullは設定できません。

(c)　Java言語の出口関数で使用できるJavaクラス

Interschemaが定義している出口関数で使用できるJavaクラスは，jp.co.Hitachi.interschema2.exitfuncパッケージで定義されています。jp.co.Hitachi.interschema2.exitfuncパッケージで定義されているJavaクラスについては，「10.1.4　jp.co.Hitachi.soft.interschema2.exitfuncパッケージのクラスの概要」を参照してください。

(2)　Java言語の出口関数の実装例

Java言語の出口関数の実装例を次に示します。

Java言語の出口関数の実装例

package usrpackagename;
import jp.co.Hitachi.soft.interschema2.exitfunc.ExitFuncException;
/**
* Javaによる出口関数を定義します。
*
*/
public class UFunc {
       /**
        * 二つの整数値を受け取り，その剰余を返します。
        * この関数のettrans.iniの定義は以下のようになります。
        * ET_INT FUNC001 (ET_INT, ET_INT)
        * 第一引数のObjectは明示的には記述しません。
        * 関数名FUNC001は任意に付けた名前であり，Java
        * メソッド名と一致させる必要はありません。
        */
        public static int func001 throws ExitFuncException (Object obj, int a, int b){
               if ( b == 0 )  throw new ExitFuncException(-1);
               return a % b;
        }
}

11.5.2　Java言語の出口関数へのオブジェクト渡し

Java言語の出口関数で実行時のコンテキストを判断するために，Translator.execメソッド呼び出し時に指定したObjectクラスのインスタンスを，Java言語の出口関数に渡すことができます。

Java言語の出口関数へのオブジェクトを渡す場合の記述例を次に示します。

Java言語の出口関数へのオブジェクト渡しの例

/* ユーザーが定義した任意のオブジェクト */
String  usrObj = new String(“Hello.”);
try{
       Translator trans = new Translator();
       MDLInfo mdlinfo = new MDLInfo(“Sample.mdl”);
       ･･･
       trans.exec(mdlinfo, sources, dests, usrObj);
       /* このデータ変換で呼び出された */
       /* 出口関数にusrObjが渡されます */
   }catch(TranslatorException e){
}

Java言語の出口関数でオブジェクトを利用する場合の記述例を次に示します。

出口関数でのオブジェクト利用の例

･･･
public class UFunc {
       public static String printHello throws ExitFuncException (Object obj){
       if ( obj == null )  throw new ExitFuncException(-1);
       System.out.println((String)obj);
       return (String)obj;
    }
}

11.5.3　Java言語の出口関数使用上の注意

マルチスレッドを使用してデータ変換API（Java言語）を呼び出す場合，Java言語の出口関数は，再入可能である必要があります。Interschemaは，指定されたJavaメソッドの呼び出しについて同期処理を行いません。

システム情報ファイル「ettrans.ini」に指定したクラスは，データ変換処理API（Java言語）を呼び出すJava環境のクラスパスに含まれている必要があります。

ettransコマンド及びデータ変換処理API（C言語）からJava言語の出口関数を呼び出す変換処理を行う場合，初期化時にはエラーは報告されず，変換時にはエラーメッセージがログファイルに出力されて，変換が中止されます。システム情報ファイル「ettrans.ini」に上記以外の不正な記述がある場合，Interschemaの動作は，「表11-6　システム情報ファイル「ettrans.ini」の記述に不正がある場合の動作」のとおりです。初期化時に，表の項番の順に不正内容をチェックして，先に見付かった不正内容に対してエラー情報がログファイルに出力されます。

表11-6　システム情報ファイル「ettrans.ini」の記述に不正がある場合の動作

不正内容 | 起動方法 | 出口関数の対応言語 | Interschemaの動作
[Userfunc_Mapfunc]セクションの記述に不正がある場合※ | ettransコマンド，又はデータ変換処理API（C言語） | C言語 | 初期化時には，エラー情報をログファイルに出力します。データ変換に使用すると，エラー情報をログファイルに出力して，変換を中止します。
データ変換処理API（Java言語） | C言語，又はJava言語 | 初期化時には，エラー情報をログファイルに出力します。データ変換に使用すると，エラー情報をログファイルに出力して，変換を中止します。
FDLエディタ又はMDLエディタ | C言語，又はJava言語 | エディタ起動時に，メッセージボックスで警告します。
[Userfunc_ExitfuncName]セクション，及び[Userfunc_JavaMethodName]セクションの両方に，同じ関数IDを持つユーザ組み込み関数が定義されてる場合 | ettransコマンド，データ変換処理API（C言語），又はデータ変換処理API（Java言語） | － | 初期化時には，エラー情報をログファイルに出力します。データ変換に使用すると，エラー情報をログファイルに出力して，変換を中止します。
FDLエディタ又はMDLエディタ | － | エディタ起動時に，メッセージボックスで警告します。
[Userfunc_ExitfuncName]セクション，及び[Userfunc_JavaMethodName]セクションの両方に定義がない場合 | ettransコマンド，データ変換処理API（C言語），又はデータ変換処理API（Java言語） | － | 初期化時には，エラー情報をログファイルに出力します。データ変換に使用すると，エラー情報をログファイルに出力して，変換を中止します。
FDLエディタ又はMDLエディタ | － | エラーを無視します。
定義された出口関数が見付からない場合 | ettransコマンド，又はデータ変換処理API（C言語） | C言語 | 初期化時には，エラー情報をログファイルに出力します。変換には，エラー情報をログファイルに出力して，変換を中止します。
データ変換処理API（Java言語） | Java言語 | データ変換に使用すると，エラー情報をログファイルに出力して，変換を中止します。
FDLエディタ又はMDLエディタ | C言語，Java言語 | エラーを無視します。

（凡例）

－：該当しません。

注※

システム情報ファイル「ettrans.ini」の記述内容が不正となる条件は，ユーザ組み込み関数がバインドされている出口関数の言語（C言語，又はJava言語），又は[Userfunc_Option]セクション指定されるオプションによって異なります。

12.　フォーマット作成時及びデータ変換時の注意事項

この章では，XMLデータの変換と各種フォーマットを使用したデータ変換について説明します。フォーマットの特徴，作成方法，及びデータ変換時の規則や注意事項について，フォーマットごとに説明します。

＜この章の構成＞

12.1　XMLデータ

12.2　CSVフォーマット

12.3　CII3フォーマット

12.4　EDIFACT4フォーマット

12.5　Sea-NACCSフォーマット

12.1　XMLデータ

この節では，InterschemaでXMLデータを変換する場合の，XMLデータの対応について説明します。

＜この節の構成＞

12.1.1　DTDからMDLツリーへの変換

12.1.2　XML属性の扱い

12.1.3　EMPTY要素の扱い

12.1.4　ANY要素の扱い

12.1.5　再帰構造を含むDTD及びXML文書の扱い

12.1.6　混在内容構造の扱い

12.1.7　XMLデータの変換

12.1.8　未サポート項目

12.1.1　DTDからMDLツリーへの変換

MDLエディタを使用してDTDフォーマットをMDLへ挿入する場合，ELEMENT定義の親子関係に従って，ツリーへ展開します。

DTDのELEMENT定義で，子タグを内容モデルに持つELEMENTは構造コンポーネント，テキスト（#PCDATA）だけを持つELEMENTは型コンポーネントとします。コンポーネント名はタグ名です。EMPTY要素も型コンポーネントとして展開します。

内容モデル内に名前を持たない構造の定義がある場合，システムが自動的に名称を作成して，構造コンポーネントを作成します。このような，DTD上で名前を持たない（タグがない）構造を，ダミー構造と呼びます。混在内容もダミー構造の一つです。

ダミー構造の名称は，親のコンポーネント名称（ローカル名）に「#n」（nは通し番号）を付けたものです。これはシステムが与える特殊な名称なので，名称の前後にシングルクォーテーションが付きます。

混在内容のテキスト要素に対する型コンポーネントの名前は「#PCDATA」となります（これもシステムが与える特殊な名称です）。

EMPTY要素のコンポーネント，ダミー構造コンポーネント，混在内容のテキスト要素コンポーネントは，一般のコンポーネントとは異なる色（白）のアイコンで表示します。

DTDファイルの記述例：

<!ELEMENT ROOT (S+)>
<!ELEMENT S (a,b*,MIX)>
<!ELEMENT a EMPTY>
<!ELEMENT b (#PCDATA)>
<!ELEMENT MIX (#PCDATA|c)*>
<!ELEMENT c (#PCDATA)>
<!ATTLIST S S_attr CDATA #IMPLIED>
<!ATTLIST a a_attr CDATA #REQUIRED>

DTDフォーマット挿入後のツリー表示：

12.1.2　XML属性の扱い

XML属性は，フォーマットツリー上で構造／型コンポーネントの下のアイテムとして表示されます。1属性が1アイテムとして扱われ，マッピングの対象になります。また，構造コンポーネントのXML属性は，この構造の子コンポーネントより上部に表示します（「12.1.1　DTDからMDLツリーへの変換」のDTDファイルの記述例での「S_attr」コンポーネント）。

デフォルト値を持つタイプの属性は，一般の型コンポーネントでデフォルト式を定義したものと同様で，マップ式が定義されていない場合は，デフォルト値が出力されます。

ただし，属性のデフォルト値タイプが「#FIXED+デフォルト値」である場合は，システムが「=%UNDEF;」のマップ式を与え，そのままの状態では属性値が出力されないようにしています。この属性値を出力する場合は，マップ式を削除してください。

また，出力する「列挙型」のXML属性に，属性の値として定義されていない値が代入されたり，「#FIXED+デフォルト値」のXML属性にデフォルト値と異なる値が代入されたりした場合は，変換実行時にエラーとなるので注意してください。

XML属性のグローバル名は，属性名の前を「@@」でつなぎます。その他のコンポーネント部分は，一般のコンポーネントと同じように「@」でつなぎます。

「12.1.1　DTDからMDLツリーへの変換」のDTDファイルの記述例で，コンポーネント「a」の属性「a_attr」のグローバル名は次のようになります。

Format@ROOT@S@a@@a_attr

トランスレータがXML属性のマップ式を評価するタイミングは，XML属性が属する構造，又は型コンポーネントのマップ式を評価した後です。XML属性が属するコンポーネントのマップ式に評価順序遅延指定がある場合，XML属性の評価も同時に遅延されます。XML属性自身のマップ式では，評価順序遅延の指定はできません。

一つのコンポーネントに複数のXML属性がある場合は，MDLエディタのツリー表示で上部にあるものから順番に評価されます。

また，XML属性のマップ式内で使用する階層指定（「#」「¥n」やINDEX関数のパラメタ）は，XML属性が属するコンポーネントを基点とします。XML属性自身は階層指定外となります。

「12.1.1　DTDからMDLツリーへの変換」のDTDファイルの記述例で，コンポーネント「a」の属性「a_attr」のマップ式を例にとると，次のようになります。

#       ：「a」を表す
¥1      ：「S」を表す
INDEX(1)：「S」の現在のインデクスを表す

12.1.3　EMPTY要素の扱い

EMPTY要素とは，要素の内容を持っていない空要素です。

DTDでEMPTY要素として定義されたコンポーネントでは，EMPTY要素タグの中のすべてのデータは，無視されます。ただし，XML属性は独立したコンポーネントなので，無視されません。EMPTY要素は，次のような場合に使用します。

例えば，トランスレータへ入力するデータは変更できないで，変換に使用しないDTDが一意に決まらないXMLフォーマットがあったとします。この場合，必要としない最上位のELEMENTをEMPTY要素として定義したDTDを作成して，そのDTDをMDLに取り込みます。容易にデータを変換できます。

12.1.4　ANY要素の扱い

ANY要素とは，テキストの要素，及び宣言済みの要素が任意に出現できるようにする任意要素です。

入力フォーマットのANY要素として定義されたコンポーネントに対応するXMLデータは，文字列化されて，型コンポーネントのデータとなります。文字列化されたデータは，基となったXMLデータと同等の文字列です。文字列化の対象となるのは，要素タグ，XML属性，及びテキストデータです。テキストデータに「<」などの特殊な文字が含まれる場合は，該当する文字は文字参照に置換されます。

出力フォーマットのANY要素である型コンポーネントに対して値がマッピングされている場合は，マッピングされた値がANY要素のテキストデータとして出力されます。

また，次の場合はELEMENTが強制的にANY要素として取り込まれます。

再帰構造の展開ネスト数=1での展開後のコンポーネント数が最大値を超えた場合
DTD挿入コマンドを実行して，再帰コンポーネントをANY要素として展開するかどうかを問い合わせるダイアログで「はい」を選択したとき，ルートからの再帰を除く再帰の最上位構造がANY要素として取り込まれます。

混在内容構造をANY要素として取り込むように指定した場合
オプションコマンドで「混在内容構造をANY型にする」を指定したとき，混在内容構造がANY要素として取り込まれます。混在内容構造については，「12.1.6　混在内容構造の扱い」を参照してください。

12.1.5　再帰構造を含むDTD及びXML文書の扱い

再帰構造が任意のネスト数を持つXMLデータは変換できません。再帰構造を持つDTDを挿入する場合は，決められたネスト数分を，ツリーとして展開してから扱います。MDLエディタでは，指定されたネスト数を超える部分（再帰構造の末端）はダミーのEMPTY要素として表示し，マッピングの対象外とします。また，MDLで展開されたネスト数を超える入力XMLデータがトランスレータに渡された場合，超過部分のデータは無視されます。

展開ネスト数に1を指定した例を示します。図の構造「TOP」が再帰構造です。

挿入するDTDフォーマットに再帰構造が含まれる場合，［展開ネスト数指定］ダイアログが表示されます。このダイアログで，ツリーへ展開するネスト数を指定してください。

なお，展開ネスト数が1の状態でコンポーネント数が再帰展開最大コンポーネント数を超えると，再帰の最上位構造をANY要素にするか確認するダイアログが表示されます。ダイアログで「はい」を選択した場合，再帰の最上位構造がANY要素として取り込まれます。ただし，再帰構造の最上位がルート場合は，ANY要素として取り込まれません。再帰展開最大コンポーネント数は，オプションコマンドで設定できます。ただし，DTDの挿入（DTDマージ含む）では，この最大数を超えるコンポーネントを作成することはできません。

12.1.6　混在内容構造の扱い

混在内容構造とは，テキストの要素，及び宣言済みの要素が混在する構造です。図12-1では，「data」が混在内容構造になります。

図12-1　混在内容構造の表示例

混在内容構造は再帰構造となることが多く，DTDを挿入する場合にコンポーネント数が最大値を超えてしまうことがあります。このような場合，次の指定をすることで，混在内容構造をANY要素として取り込むことができます。

MDLエディタのメニューから［ツール］－［オプション］を選択します。
［オプション］ダイアログが表示されます。

［全般］タグの「混在内容構造をANY型にする」を指定します。

なお，MDLエディタがコンポーネントを混在内容構造と見なす条件は次のとおりです。

子コンポーネントが選択構造のダミー構造だけ，かつ出現数が0回以上（最大指定なし）

子コンポーネント（ダミー構造）が複数の子を持ち，かつ先頭の子が#PCDATA

12.1.7　XMLデータの変換

XMLデータを変換する場合，XML文書のエンコーディングに関係なく，一度UTF-16へ文字コード変換してからデータ変換されます。

12.1.8　未サポート項目

未サポートの項目を次に示します。これらが定義されているDTDファイルをMDLへ取り込む場合，DTDフォーマット挿入実行時にエラーとなります。

タグ名，属性名，属性値（デフォルト値，列挙値）としてシフトJIS表記できない文字を含むもの

12.2　CSVフォーマット

この節では，CSVフォーマットの特徴，フォーマット作成時の注意事項，及びCSVフォーマットを使用したデータ変換の規則について説明します。

＜この節の構成＞

12.2.1　CSVフォーマットの特徴

12.2.2　CSVフォーマットの作成

12.2.3　CSVフォーマットの変換の規則

12.2.1　CSVフォーマットの特徴

FDLファイルを作成するときに，フォーマットの規格を「CSV」と指定すると，変換データをCSV形式で処理できるようになります。フォーマットの規格が「CSV」となっているフォーマットを，CSVフォーマットと呼びます。CSVフォーマットでは，ダブルクォーテーション「"」で囲まれた部分がデータとして扱われます。データは，型コンポーネントごとに処理されます。

12.2.2　CSVフォーマットの作成

CSVフォーマットを作成するときの注意事項について説明します。

CSVフォーマットでは，型のサイズを可変長にして，不要文字削除指定を設定しておく必要があります。文字コードには初期値（JIS8，SJIS）を，セパレータには予約セパレータ（#Comma又は#Linefeed）を利用することをお勧めします。また，原則として，次に示す型を使用してください。

1バイト文字列型

混在文字列型

整数型

実数型

暗黙的小数部付数値型

日付型

時刻型

日付時刻型

CSVフォーマットでは，数値型の小数点及び指数記号に「"」を使用したり，桁セパレータを定義したりしないでください。

次に，FDLファイルの検証時に，エラー又はワーニングエラーとなる場合について説明します。

エラーとなる場合

データに解放文字（「?」など）が含まれていると，FDLファイルの検証時にエラーとなります。CSVフォーマットでは解放文字を使用しないようにしてください。

ワーニングエラーとなる場合

型の文字コードとセパレータの文字コードが一致しないと，フォーマットの検証時にワーニングエラーとなります。

フォーマットに文字列型数値以外の数値型，又はバイト列型が含まれていると，フォーマットの検証時にワーニングエラーとなります。文字列型数値以外の数値型（符号付2進整数など），及びバイト列型は使用しないようにしてください。

12.2.3　CSVフォーマットの変換の規則

CSVフォーマットでのデータ処理の規則について説明します。

データ入力時にダブルクォーテーションで囲まれている箇所がある場合は，ダブルクォーテーションで囲まれている内部をデータとして扱います。データ中の「" "」は，「"」として扱います。例えば「"x,y," "z,"」というデータは，「x,y," z,」として扱います。

出力するデータにコンマが含まれる場合，又はデータの先頭がダブルクォーテーションの場合は，出力データがダブルクォーテーションで囲まれます。このとき，データ中のダブルクォーテーションは，ネストされます。

データに対するダブルクォーテーション囲み処理は，型コンポーネントごとに実行されます。

実行時オプション「-CSV」を指定してCSVフォーマットを出力する場合，データは常にダブルクォーテーションで囲まれます。ただし，バイト列などは囲まれません。

囲み文字としてのダブルクォーテーションは，データサイズに含まれません。ただし，囲み文字によってデータ中にネストされたダブルクォーテーションは，文字数には含まれませんが，バイト数には含まれます。

バイト列系の型と2バイト文字列は，CSV処理の対象になりません。

12.3　CII3フォーマット

この節では，CII3フォーマットの特徴，フォーマット作成方法，及びCII3フォーマットを使用したデータ変換の規則について説明します。

＜この節の構成＞

12.3.1　CII3フォーマットの特徴

12.3.2　CII3フォーマットの作成

12.3.3　CII3フォーマットの変換の規則

12.3.1　CII3フォーマットの特徴

CII3フォーマットは，CII標準対応のフォーマットです。CII1.51，CII2.10，及びCII3.00に対応していて，電子データ交換ツールでサポートしている従来のCIIフォーマットよりも，効率良くデータを変換できます。CII標準データを変換する場合は，CII3フォーマットを使用することをお勧めします。

CII3フォーマットは，縮小と拡張を区別しません。また，TFDを一つの型コンポーネントとして扱うため，フォーマットの定義やマッピングが容易にできます。

12.3.2　CII3フォーマットの作成

CII3フォーマットは，Interschemaが提供しているフォーマットを基に作成してください。必要なTFD型，メッセージ構造，及びマルチ明細構造を定義して，Interschemaが提供しているフォーマットのツリー構造に追加します。作成方法の詳細については，FDLエディタ及びMDLエディタのヘルプを参照してください。

12.3.3　CII3フォーマットの変換の規則

CII3フォーマットでのデータ処理の規則について説明します。

＜この項の構成＞

(1)　データの入力処理の規則

(2)　データの出力処理の規則

(1)　データの入力処理の規則

CII3フォーマットでのデータの入力処理の規則を次に示します。

データ中にマルチ明細構造がある場合，マルチ明細の中のTFDで最初に出現したデータのタグ番号と一致する番号のTFD型コンポーネントを子に持つマルチ明細コンポーネントが対応付けられます。

MDLで最小出現回数が1と定義されたTFD及びマルチ明細の子に対応するデータが入力されなかった場合，トランスレータはコンポーネントの値をスペース（K属性及びX属性），0（9属性，N属性，及びY属性），0x00（B属性）だと仮定して処理します。

入力データのエラーの原因が構造コンポーネントにある場合，ログファイルのオフセットには次に示す上位構造の先頭位置が出力されます。

メッセージグループ・ヘッダ

メッセージ

バイナリ

メッセージグループ・トレーラ

同報ヘッダ

標準以外の文字コードのCIIデータを変換する場合，使用する文字コードをフォーマットの文字コードとして定義しておく必要があります。

(2)　データの出力処理の規則

CII3フォーマットでのデータの出力処理の規則を次に示します。

省略できるTFDは出力されません。

TFDを省略したことによってマルチ明細を省略する場合，縮小モードのときはマルチ明細のヘッダとトレーラだけが出力されます。拡張モードのときは，何も出力されません。

CIIのバージョンは，メッセージグループ・ヘッダの子で決定します。メッセージグループ・ヘッダの子でシンタックスのバージョンを表す型コンポーネントにマッピングした値が「CII151」の場合はCII1.51形式，「CII210」の場合はCII2.10形式，「CII300」の場合はCII3.00形式になります。

TFDに対する出力データの文字コードは，フォーマットの文字コードに従います。初期値の文字コード（JIS8，JISK）を設定することをお勧めします。ただし，K属性をUnicodeで出力した場合は，メッセージグループ・ヘッダの子コンポーネントで2バイト文字コードを表す型コンポーネントに，「U」をマッピングする必要があります。

縮小／拡張モードは，メッセージグループ・ヘッダの子コンポーネントで拡張モードを表す型コンポーネントにマッピングした値に従って決定されます。ただし，CII3.00形式の場合は，常に拡張モードになります。
拡張モードを表す型コンポーネントにマッピングした値が，「S」又はスペースの場合は縮小モード，「E」の場合は拡張モードになります。

分割（分割固定長）／通常（分割可変長）モードは，メッセージグループ・ヘッダの子コンポーネントで分割モードを表す型コンポーネントにマッピングした値に従って決定されます。
分割モードを表す型コンポーネントにマッピングした値が，「S」の場合は通常（分割可変長）モード，「M」又はスペースの場合は分割（分割固定長）モードになります。

CII1.51形式でハッシュトータル値を設定したい場合は，メッセージグループ・ヘッダの子コンポーネントでトータル項目番号を表す型コンポーネントに，該当するタグ番号をマッピングします。また，EIAJのハッシュ計算方法で値を出力した場合は，実行時オプション「-EIAJHASH」を指定して，変換します。

標準以外の文字コードのCIIデータを変換する場合，使用する文字コードをフォーマットの文字コードとして定義しておく必要があります。出力フォーマット上のメッセージグループヘッダ下の対応コンポーネントは，マッピングしなくてもかまいません。

12.4　EDIFACT4フォーマット

この節では，EDIFACT4フォーマットの特徴，フォーマット作成方法，及びEDIFACT4フォーマットを使用したデータ変換の規則について説明します。

＜この節の構成＞

12.4.1　EDIFACT4フォーマットの特徴

12.4.2　EDIFACT4フォーマットの作成

12.4.3　EDIFACT4フォーマットの変換の規則

12.4.1　EDIFACT4フォーマットの特徴

EDIFACT4フォーマットは，UN/EDIFACT対応のフォーマットです。バッチ形式構造に対応していて，電子データ交換ツールでサポートしている従来のEDIFACTフォーマットよりも，効率良くデータを変換できます。EDIFACTデータを変換する場合は，EDIFACT4フォーマットを使用することをお勧めします。

EDIFACT4フォーマットは，一つのフォーマットでUNOAやUNOBなどのシンタックス識別，及びEDIFACTのバージョンに対応しています。フォーマットでセパレータ値を個別に指定する必要はありません。

なお，EDIFACTのVersion.4とVersion.1～3との間には，サービスセグメント関連に違いがあります。EDIFACTのVersion.4とVersion.1～3のサービスセグメント関連については，「付録H.1　対応するバージョン」を参照してください。

12.4.2　EDIFACT4フォーマットの作成

EDIFACT4フォーマットは，Interschemaが提供しているフォーマットを基に作成してください。必要なメッセージ構造，セグメント，複合要素，繰り返し構造，及び型を定義して，Interschemaが提供しているフォーマットのツリー構造に追加します。

Interschemaが提供するフォーマットには，EDIFACTのVersion.4用と，Version.1～3用の2種類があります。EDIFACTのVersion.4用の入力フォーマットには，Version.1～3のデータも入力できますが，あらかじめ変換するデータのEDIFACTのバージョンが分かっている場合は，対応するバージョンのフォーマットを使用してください。

作成方法の詳細については，FDLエディタ及びMDLエディタのヘルプを参照してください。

12.4.3　EDIFACT4フォーマットの変換の規則

EDIFACT4でのデータ処理の規則について説明します。

入力データのエラーの原因が構造コンポーネントにある場合（コンポーネント出現回数不正など），ログファイルのオフセットには上位のセグメント構造の先頭位置が出力されます。エラーがセグメント構造のものの場合は，自身のオフセットが出力されます。

データの出力時には，シンタックスのバージョンを表す型コンポーネントにマッピングした値が，出力データのEDIFACTのバージョンになります。

12.5　Sea-NACCSフォーマット

この節では，Sea-NACCSフォーマットの特徴，フォーマット作成方法，及びSea-NACCSフォーマットを使用したデータ変換の規則について説明します。

＜この節の構成＞

12.5.1　Sea-NACCSフォーマットの特徴

12.5.2　Sea-NACCSフォーマットの作成

12.5.3　Sea-NACCSフォーマットの変換の規則

12.5.1　Sea-NACCSフォーマットの特徴

Sea-NACCSフォーマットには，Sea-NACCS EDI電文フォーマット，Sea-NACCS EDIFACT電文フォーマットなどがあります。

Interschemaでは，Sea-NACCSのシステム運用開始時の規定に応じて，Sea-NACCSフォーマットを異なる規格種別のフォーマットとして扱います。

Sea-NACCSのシステム運用開始時とInterschemaの規格種別の対応を次の表に示します。

表12-1　Sea-NACCSのシステム運用開始時とInterschemaの規格種別の対応

Sea-NACCSのシステム運用開始時 | Interschemaの規格種別 | 意味
1999年10月 | SNACCS | Sea-NACCS EDI電文フォーマット（旧）
SNEDIFACT | Sea-NACCS EDIFACT電文フォーマット（旧）
2008年10月 | SNACCS2 | Sea-NACCS EDI電文フォーマット
SNEDIFACT2 | Sea-NACCS EDIFACT電文フォーマット

1999年10月に運用が開始されたSea-NACCS用のフォーマットは，電子データ交換ツールの海上貨物通関用辞書を使用することを前提としています。

2008年10月のSea-NACCSシステム更改後のフォーマットは，Interschemaがサンプルとして提供するフォーマットをカスタマイズして使用することを前提としています。

12.5.2　Sea-NACCSフォーマットの作成

ここでは，SNACCS2／SNEDIFACT2フォーマットの作成方法について説明します。

SNACCS2／SNEDIFACT2フォーマットは，Interschemaがサンプルとして提供するフォーマットを基に作成してください。

Sea-NACCS EDI電文フォーマットの場合は，必要な業務の項目（型）を追加定義し，業務メッセージ構造を作成します。Sea-NACCS EDIFACT電文フォーマットの場合は，必要な業務に対応するメッセージから不要なコンポーネントを削除して作成します。

作成方法の詳細については，FDLエディタ及びMDLエディタのヘルプを参照してください。

12.5.3　Sea-NACCSフォーマットの変換の規則

Sea-NACCSフォーマットでのデータ処理の規則について説明します。なお，「付録J　Sea-NACCSのサポート範囲」も合わせて参照してください。

Interschemaでは，処理要求電文は出力変換を想定しています。また，処理結果通知電文，及び出力情報電文は，入力変換を想定しています。

＜この項の構成＞

(1)　Sea-NACCS EDI電文の入力処理の規則

(2)　Sea-NACCS EDI電文の出力処理の規則

(3)　Sea-NACCS EDIFACT電文の規則

(4)　Sea-NACCSフォーマットに対する文字コードチェックの規則

(1)　Sea-NACCS EDI電文の入力処理の規則

MDLで定義されたコンポーネントのデータが現れる前に入力データが終了した場合，スペース項目があるものとして処理します。

(2)　Sea-NACCS EDI電文の出力処理の規則

Sea-NACCSフォーマットでのEDI電文の出力処理の規則を次に示します。

実行時オプション「-SNCODE」が指定されている場合，Sea-NACCSフォーマットに対する文字コードチェックを実施します。

NULLマップ式が定義された要素に対して，スペースを出力します。

コンポーネントのマップ式が評価できない場合，デフォルト式の値を出力します。

出力データ末尾の不要なスペース項目をカットします。

(3)　Sea-NACCS EDIFACT電文の規則

Sea-NACCSフォーマットでのEDIFACT電文の規則を次に示します。なお，次に示す規則以外は，一般のEDIFACTフォーマットの変換と同じです。

テストモードは判定しません。

出力変換（処理要求電文を出力する変換）で，実行時オプション「-SNCODE」が指定されている場合，Sea-NACCSフォーマットに対する文字コードチェックを実施します。

(4)　Sea-NACCSフォーマットに対する文字コードチェックの規則

Sea-NACCSフォーマットに対する文字コードチェックの規則を次に示します。

出力変換で，かつ実行時オプション「-SNCODE」が指定されている場合に，Sea-NACCSフォーマットに対する文字コードチェックを実施します。

Sea-NACCS文字セットの最大範囲でチェックします。なお，業務によって使用できる文字と使用できない文字がありますが，Interschemaでは常に使用できる文字として扱います。

付録

＜この付録の構成＞

付録A　トラブルシューティング

付録B　トランスレータのメッセージ

付録C　トランスレータの機能差異と電子データ交換ツールからの移行上の注意

付録D　Interschemaバージョン1との互換API

付録E　Interschemaから出力される情報

付録F　ファイルのバージョンとトランスレータのサポート範囲

付録G　CIIシンタックスルールのサポート範囲

付録H　UN/EDIFACTのサポート範囲

付録I　JEDICOSのサポート範囲

付録J　Sea-NACCSのサポート範囲

付録K　文字コード

付録L　用語解説

付録A　トラブルシューティング

トランスレータでエラーが発生したときの処理について説明します。

＜この節の構成＞

付録A.1　エラー発生時の処理

付録A.1　エラー発生時の処理

トランスレータでエラーが発生したときの処理，及びエラー発生時の対策としてログファイルの参照方法について説明します。

＜この項の構成＞

(1)　FDL及びMDLエディタ

(2)　トランスレータ

(3)　データ変換処理API（Java言語）での実行時に固有の処理

(1)　FDL及びMDLエディタ

エディタ画面上にエラーメッセージを出力します。メッセージに従って対処してください。

(2)　トランスレータ

ここでは，コマンド又はAPIでトランスレータを実行している場合にエラーが発生したときの処理を説明します。データ変換処理API（Java言語）を使用している場合，エラー発生時には，固有の処理があります。データ変換処理API（Java言語）を使用している場合は，ここでの説明と合わせて，「付録A.1(3)　データ変換処理API（Java言語）での実行時に固有の処理」を参照してください。

(a)　エラー発生時の処理

トランスレータは，エラー発生時に次のように処理します。

戻り値をログファイルに出力

変換時のエラー情報をログファイルに出力

APIでの実行時に，エラー情報をエラー情報リスト（APIパラメタ）として出力

-CIIEオプション指定時にCII標準形式ファイルを入力した場合，CIIエラー情報メッセージファイルを出力

例外によってエラーを通知（データ変換処理API（Java言語）での実行時）
データ変換処理API（Java言語）での実行時のエラーについては，「付録A.1(3)　データ変換処理API（Java言語）での実行時に固有の処理」を参照してください。

各処理について次に説明します。

戻り値をログファイルに出力

戻り値をログファイルに出力します。メッセージに戻り値を付けて出力するので，メッセージのエラーレベルを判定できます。エラーレベルについては，「付録B.1　メッセージ形式」を参照してください。

変換時のエラー情報をログファイルに出力

変換時のエラー情報としてエラーメッセージをログファイルに出力します。ログファイルを参照して，エラーの詳細情報を確認できます。メッセージについては「付録B.3　メッセージ」を参照してください。

APIでの実行時に，エラー情報をエラーリスト（APIパラメタ）に出力

APIでの実行時に，エラー情報をエラーリストに出力します。

C言語のAPI及びエラーリストについては「9.2.1　ETtrans2Init（トランスレータの初期化）」，及び「9.2.9　ETtrans2Exec（変換実行）」を参照してください。Java言語のAPIのエラー情報については，「付録A.1(3)(b)　エラーコード」を参照してください。

CII標準形式ファイルを入力した場合に，CIIエラーメッセージファイルを出力

-CIIEオプション指定時にCII標準形式ファイルを入力した場合，CIIエラーメッセージファイルを出力します。メッセージ内に設定するエラーコードと，トランスレータで出力するエラーメッセージとの対応については，「付録G　CIIシンタックスルールのサポート範囲」及び「付録G.3　エラーコードの対応」を参照してください。

(b)　ログファイルの参照方法

トランスレータのログファイルは，データの変換結果として戻り値やエラーメッセージなどを出力するテキストファイルです。ログファイルに出力する項目やログファイルの出力先について次に説明します。

ログファイルに出力する項目

変換日時

プロセスID（ワークステーションのOSだけ）

実行時のスレッドID

戻り値

エラーメッセージ

エラーメッセージの付加情報
エラーメッセージの付加情報には，次のような情報があります。

変換フォーマット名，入出力データファイル名又はアドレス

変換エラーとなった要素のグローバル名，及びエラーデータのオフセット値

エラーが発生した出口関数戻り値，及びユーザ組み込み関数名

指定不正オプション，及びフォーマット名
など

ログファイルの出力先と参照方法

ログファイルは，コマンド実行時に指定したファイル（省略時はデフォルトログファイル）へ出力されるので，テキストエディタなどで開いて参照できます。

ログファイル名

ログファイル名は，トランスレータのコマンドの引数として指定できます。ログファイル名を指定しなかった場合は，デフォルトのログファイル「errlog.txt」（Interschemaのインストールディレクトリ/log下に格納）にログが出力されます。また，ログファイル名を指定しても，ファイル名に誤りがあるなどの理由でファイルを開けなかった場合には，デフォルトのログファイル，又は標準出力にログが出力されます。

ログファイルのサイズ

ログファイルは，システム情報ファイル「ettrans.ini」に指定した最大サイズ以内で出力されます。指定した最大サイズを超えた場合は，ファイル内の古い出力情報から削除されます。ログファイルの初期値の最大サイズは1,000キロバイトです。ただし，ログ出力抑止指定がある場合は出力しません。最大サイズは，1キロバイトから10,000キロバイトまでの範囲で変更できます。最大サイズを変更する場合は，「5.3(1)(a)　ログファイルサイズの変更」を参照してください。ログファイルの出力を抑止する場合は，「5.4.3　システム情報ファイル「ettrans.ini」での実行時オプションの定義」を参照してください。

(3)　データ変換処理API（Java言語）での実行時に固有の処理

ここでは，データ変換処理API（Java言語）でトランスレータを実行している場合に固有のエラーが発生したときの処理について説明します。データ変換処理API（Java言語）でトランスレータを実行している場合にエラーが発生した場合，「付録A.1(2)　トランスレータ」の内容と合わせて，ここで説明する内容が必要になります。

(a)　エラー発生時の処理

データ変換処理API（Java言語）は，エラー発生時に次のように処理します。

エラー情報をログファイルに出力

例外によってエラーを通知

データ変換処理API（Java言語）は，Java Navive Interface（JNI）を使用してデータ変換処理API（C言語）を呼び出します。データ変換処理API（C言語）の処理でエラーが発生した場合は，エラー情報をログファイルに出力します。データ変換処理API（Java言語）の処理でエラーが発生した場合は，例外によってエラーを通知します。

エラー情報をログファイルに出力

データ変換処理API（C言語）がログファイルに出力するエラー情報は，Translatorクラスに指定する変換用のエラー情報，及びそれ以外のエラー情報があります。変換用のエラー情報以外のエラー情報は，デフォルトのログファイル（Interschemaのインストールディレクトリ/log/errlog.txt）に出力されます。ログファイルに出力されるエラー情報については，「付録B.3　メッセージ」を参照してください。

エラー情報を例外で通知

データ変換処理API（Java言語）が出力する例外については，「付録B.4　データ変換処理API（Java言語）の例外」を参照してください。

(b)　エラーコード

データ変換処理API（Java言語）で発生するエラーコードを次に示します。エラーコードの値は，TranslatorException例外に設定されて，getErrorCodeメソッドで取得できます。

表A-1　エラーコード一覧

値 | 意味
(0x)2000xxxx | 続行できないレベルのエラーが発生しました。
(0x)4000xxxx | トランスレータ内部で致命的なエラーが発生しました。
xxxxの値 | 0nnn※ | 各クラス共通のエラーが発生しました。
1nnn※ | 初期化処理でエラーが発生しました。
2nnn※ | Translatorクラスでエラーが発生しました。
3nnn※ | MDLInfoクラスでエラーが発生しました。
4nnn※ | DLPropertyクラスでエラーが発生しました。
5nnn※ | TranslateDataクラス，又はその派生クラスでエラーが発生しました。

注※

nnnのコードは，000から順に付けられます。

付録B　トランスレータのメッセージ

トランスレータのメッセージ形式，メッセージの見方，及びメッセージ内容について説明します。

＜この節の構成＞

付録B.1　メッセージ形式

付録B.2　メッセージの見方

付録B.3　メッセージ

付録B.4　データ変換処理API（Java言語）の例外

付録B.1　メッセージ形式

メッセージは次の形式で出力します。

KBETnnnny-lメッセージテキスト

KBETnnnny-lはメッセージを識別するためのメッセージIDです。

nnnn：メッセージ番号

y：メッセージを出力したプログラム

F：FDLエディタ

M：MDLエディタ

T：トランスレータ

J：データ変換処理API（Java言語）

l：メッセージのエラーレベル

エラーレベルの意味と対応するトランスレータの戻り値を次に示します。

表B-1　エラーレベル

エラーレベル | 意味 | 対応するトランスレータの戻り値
I | インフォメーション | 0x00ZZZZZZ
W | ワーニング | 0x01ZZZZZZ
E | エラー | 0x02ZZZZZZ，0x2000ZZZZ（データ変換処理API（Java言語）の場合）
S | システムエラー | 0x04ZZZZZZ，0x4000ZZZZ（データ変換処理API（Java言語）の場合）

付録B.2　メッセージの見方

メッセージは，次の形式で説明します。

メッセージID

メッセージテキスト

メッセージの内容

システムの処理

メッセージをログファイルに出力した後の主な処理内容

要因

想定されるエラー要因

対策

メッセージに応じた対策方法

付録B.3　メッセージ

エラー発生時に，ログファイルに出力されるエラーメッセージについて説明します。

KBET0001T-I

次のMDLで変換を開始します。

データの変換前にログファイルに出力されるメッセージです。MDLファイル名がログファイルに出力されます。

システムの処理

処理を続行します。

KBET0002T-I

入力データ

変換するデータを入力するときにログファイルに出力されるメッセージです。変換するデータのフォーマット名と，入力ファイル名又はメモリアドレスがログファイルに出力されます。

システムの処理

処理を続行します。

KBET0003T-I

出力データ

変換するデータを出力するときにログファイルに出力されるメッセージです。変換するデータのフォーマット名と，出力ファイル名又はメモリアドレスがログファイルに出力されます。

システムの処理

処理を続行します。

KBET0004T-I

変換処理が終了しました。

データの変換処理が終了したときにログファイルに出力されるメッセージです。メッセージに対応する戻り値がログファイルに出力されます。戻り値については，「5.4.2　ettransコマンドの戻り値」を参照してください。

システムの処理

処理を終了して，トランスレータを終了します。

KBET0006T-I

1グループ単位の変換処理が終了しました。

1グループ単位のデータの変換処理が終了したときにログファイルに出力されるメッセージです。

システムの処理

処理を続行します。

KBET0007T-W

不正な文字コードをスペースへ置換して変換しました。

データ中の不正な文字コードをスペースに置き換えたときにログファイルに出力されるメッセージです。メッセージに対応するコンポーネント名又はオフセットがログファイルに出力されます。

システムの処理

処理を続行します。

要因

入力側と出力側で文字コードが異なり，かつ出力側で使用できる文字範囲が異なることが考えられます。

対策

データ中の不正な文字コードをスペースに置き換えたことによって，データ項目として不都合がないか確認してください。

KBET0008T-W

要素のサイズ／桁数があふれたためカットしました。

出力データのサイズが要素のサイズを超えたため，桁あふれ部分が切り捨てられたときにログファイルに出力されるメッセージです。メッセージに対応するコンポーネント名及びオフセットがログファイルに出力されます。

システムの処理

処理を続行します。

要因

出力データのサイズが型定義した要素のサイズを超えました。サイズ／桁数の桁あふれ部分の内容を次に示します。

表B-2　サイズ／桁数の桁あふれ部分の内容の説明

項目
説明

サイズ／桁数
桁あふれ部分

出力要素が固定長で，データサイズが想定値を超えました。

小数部を持つ数値を，小数部を持たない数値に代入しようとしました。

マップ式の演算結果が，想定する数値桁数を超えました。

出力側文字列中にセパレータと同じ文字があったため，解放文字を埋め込んだ分だけサイズが増加しました。

出力側文字列がシフトコードを使用するため，シフトコード分のサイズが増加しました。

対策

桁あふれ部分が切り捨てられたことによって，データ項目として不都合がないか確認してください。

KBET0009T-W

変換エラーが発生しましたが，正常処理したグループのみ出力しました。

システムの処理

処理を終了します。

対策

エラーを修正後，変換できたグループ以降を再度変換してください。

KBET0010T-I

入力データはテスト用のデータです。

入力したデータが，テスト用のデータであるときにログファイルに出力されるメッセージです。

システムの処理

処理を続行します。

KBET0011T-W

ハッシュトータル値がメッセージグループ・トレーラの値と一致しません。

CIIのハッシュトータル値がメッセージグループ・トレーラの値と一致しないときにログファイルに出力されるメッセージです。メッセージに対応するタグ番号が出力されます。

システムの処理

処理を続行します。

要因

入力データがEIAJシンタックスルール方式で加算した，対象とするTFD項目の属性で不要な「0」があることが考えられます。

対策

ログファイルに出力されたデータタグ番号のデータ値を確認し，必要に応じてハッシュトータル値の加算方法を変更してください。

KBET0012T-W

出口関数の定義に不正があります。

ユーザ組み込み関数の定義に誤りがある場合にログファイルに出力されるメッセージです。メッセージに対応するシステム情報ファイル「ettrans.ini」の不正位置が，ログファイルに出力されます。
出口ライブラリのローディングの失敗，及び未解決シンボルによる不正時は，その詳細情報がログファイルに出力されます。

システムの処理

設定に誤りがある関数は定義されていないと見なして，処理を続行します。

要因

次のどれかの要因が考えられます。

システム情報ファイル「ettrans.ini」の定義に誤りがある

[Userfunc_DllPath]セクション又は[Userfunc_SlPath]セクションのエラーが報告された場合，出口関数を定義したライブラリに未解決シンボルがある

対策

次のどちらかの対策を実施してください。

ログファイルに出力されたシステム情報ファイル「ettrans.ini」の不正位置に記述されている定義を確認する

ライブラリに未解決シンボルがないか確認する

KBET0013T-W

ログファイルがオープンできないため，デフォルトのログファイルまたは標準出力に出力しました。

ログファイルを開けないため，デフォルトのログファイル又は標準出力に，ログを出力したときに出力されるメッセージです。

システムの処理

処理を続行します。

要因

次のどれかの要因が考えられます。

指定したログファイル名又はファイル／ディレクトリのアクセス権限が不正（READ／WRITE権限が必要です）

開かれているファイル数が最大値を超えた

対策

ログファイル名やアクセス権限などを確認してください。

KBET0014T-S

システムでメモリ不足が発生しました。トランスレータを強制終了します。

メモリ不足で処理が続行できないときにログファイルに出力されるメッセージです。

システムの処理

処理を終了します。

対策

リソースを確保し，再度実行してください。

KBET0015T-S

システムエラーが発生しました。トランスレータを強制終了します。

システムでエラーが発生したときにログファイルに出力されるメッセージです。

システムの処理

処理を終了します。

要因

データが破壊されているおそれがあります。

対策

システム管理者に連絡してください。

KBET0016T-S

ファイルのオープンができません。

指定したファイルが開けないときにログファイルに出力されるメッセージです。メッセージに対応するファイル名がログファイルに出力されます。

システムの処理

処理を終了します。

要因

次のどれかの要因が考えられます。

ファイル名又はファイル／ディレクトリのアクセス権限（出力側はWRITE，そのほかはREAD権限が必要です）が不正

別プロセス（スレッド）と重なって使用しようとした

開かれているファイル数が最大値を超えた

対策

ファイル名やアクセス権限などを確認してください。

KBET0017T-S

ファイルの入力処理中にエラーが発生しました。

変換する入力データの処理でエラーが発生したときにログファイルに出力されるメッセージです。メッセージに対応するファイル名がログファイルに出力されます。

システムの処理

処理を終了します。

要因

次のどちらかの要因が考えられます。

ファイル／ディレクトリのアクセス権限（READ権限）が不正

外部からファイルが破壊されている

対策

ログファイルに出力されたファイルの状態を確認し，エラー要因を修正してください。

KBET0018T-S

ファイルの出力処理中にエラーが発生しました。

変換する出力データの処理でエラーが発生したときにログファイルに出力されるメッセージです。メッセージに対応するファイル名がログファイルに出力されます。

システムの処理

処理を終了します。

要因

次のどちらかの要因が考えられます。

ファイル／ディレクトリのアクセス権限（WRITE権限）が不正

外部からファイルが破壊されている

対策

ログファイルに出力されたファイルの状態を確認し，エラー要因を修正してください。

KBET0019T-S

出力データのサイズが出力可能なメモリアドレスを超えました。

メモリ出力を指定された出力データのサイズが出力先のメモリサイズを超えたときなどにログファイルに出力されるメッセージです。メッセージに対応するメモリ開始／終了アドレスがログファイルに出力されます。

システムの処理

処理を終了します。

要因

次のどちらかの要因が考えられます。

出力先として確保したメモリが不足している

想定したサイズ以上の入力データを一括変換で出力しようとした

対策

出力先として確保するメモリサイズを増やして，再度実行してください。

KBET0020T-S

ワークファイルの作成処理でエラーが発生しました。

システムの処理

処理を終了します。

要因

次のどれかの要因が考えられます。

トランスレータが正しくインストールされていない

ワークディレクトリ（Interschemaのインストールディレクトリ/tmp）のアクセス権限にREAD／WRITE権限がない

OPENされているファイル数が最大値を超えた

対策

ワークディレクトリ（Interschemaのインストールディレクトリ/tmp）の状態を確認し，エラー要因を修正してください。

KBET0021T-E

オプションの指定に誤りがあります。

誤りのあるオプション名やフォーマット名がログファイルに出力されます。

システムの処理

変換しないで処理を終了します。

要因

コマンドの実行でオプションを指定し，処理できなかったときにログファイルに出力されるメッセージです。コマンド起動文字列に入力ミスがあります。次の要因が考えられます。

同じオプションを重複して定義している

-Fオプションでフォーマット名と入出力データファイル名が組で設定されていない

-FNオプション（又はAPIの入出力データ差し替え情報）で入出力フォーマットが指定されていない

APIの入出力データ差し替え情報のメモリ開始／終了アドレスの大小関係が不当

変換対象フォーマットの入出力データが指定されていない

対策

正しいオプションを指定して，再度実行してください。

KBET0022T-W

入力フォーマットに対応するデータ以降に不当なデータがあります。

入力フォーマットとして定義されたデータ以降に，余分なデータがある場合に出力されるメッセージです。入力データのバイト位置がログファイルに出力されます。

システムの処理

処理を続行します。

要因

次のどちらかの要因が考えられます。

入力データが指定したMDLファイルに対応していない

メモリアドレスの指定に誤りがある

対策

入力データが指定したMDL（FDL）ファイルと対応しているか確認し，必要に応じて余分なデータを削除してください。

KBET0023T-E

以下のコンポーネントの作成に失敗しました。

メッセージに対応するコンポーネント名又はオフセットがログファイルに出力されます。

システムの処理

処理を終了します。

要因

コンポーネントが作成できないときにログファイルに出力されるメッセージです。次のどちらかの要因が考えられます。

選択構造で選択できるコンポーネントが一つもない

データ不正又はMDLファイルにエラーがある（特に選択構造の選択条件が不正のおそれがある）

対策

次のどちらかの対策を実施してください。

データが選択構造の子コンポーネントと一致するか確認する

必要に応じてMDL（FDL）ファイルの評価規則などを修正する

KBET0024T-E

以下のコンポーネントの出現回数が定義された値と異なります。

メッセージに対応するコンポーネント名又はオフセットがログファイルに出力されます。

システムの処理

処理を終了します。

要因

コンポーネントの出現数が，定義した回数と異なるときにログファイルに出力されるメッセージです。MDL（FDL）ファイルの定義に誤りがあります。

対策

次のどちらかの対策を実施してください。

入力データを確認する

必要に応じて，ログファイルに出力されたコンポーネントの出現回数をMDL（FDL）ファイルで修正する

KBET0025T-E

以下のコンポーネントの評価規則が真ではありません。

メッセージに対応するコンポーネント名又はオフセットがログファイルに出力されます。

システムの処理

処理を終了します。

要因

次のどちらかの要因が考えられます。

評価規則（条件式）の記述，又は入力データに誤りがある

条件を満たさないデータを変換しようとした

対策

入力データとMDL（FDL）ファイル内の評価規則（条件式）を確認し，必要に応じて評価規則（条件式）を修正してください。

KBET0026T-E

以下のコンポーネントのセパレータが見つかりません。

メッセージに対応するコンポーネント名又はオフセットがログファイルに出力されます。

システムの処理

処理を終了します。

要因

セパレータ定義に誤りがあるときにログファイルに出力されるメッセージです。入力データ又はMDL（FDL）ファイルのセパレータ定義に誤りがあります。

対策

入力データとMDL（FDL）ファイルのセパレータ定義を確認し，必要に応じてセパレータ定義を修正してください。

KBET0027T-E

以下のコンポーネントが値定義で指定された値と異なります。

メッセージに対応するコンポーネント名又はオフセットがログファイルに出力されます。

システムの処理

処理を終了します。

要因

型の値定義で「他の値が現れてもエラーにしない」を選択しなかった場合，定義していない値が出現したときにログファイルに出力されるメッセージです。次のどちらかの要因が考えられます。

型定義で定義していない値が出現しました。

値定義に誤りがあります（例えば，可変長文字データであるのにスペースの扱いがデータと値定義で異なる場合や，バイト列で記述した場合に「文字列」と「文字」との不一致が考慮されていないなど）。

対策

次のどちらかの対策を実施してください。

入力データを確認する

必要に応じてMDL（FDL）ファイルの値定義を修正するか，又は値定義を持つコンポーネントの「他の値が現れてもエラーにしない」のチェックを外す

KBET0028T-E

以下のコンポーネントのサイズ決定式の評価結果が不正です。

メッセージに対応するコンポーネント名又はオフセットがログファイルに出力されます。

システムの処理

処理を終了します。

要因

サイズ決定式の記述に誤りがあります。

対策

入力データとMDL（FDL）ファイルのサイズ決定式を確認し，必要に応じてサイズ決定式を修正してください。

KBET0029T-E

以下のコンポーネントの子コンポーネント数が最大値を超えました。

コンポーネントの子コンポーネント数が定義した数を超えたときにログファイルに出力されるメッセージです。メッセージに対応するコンポーネント名又はオフセットがログファイルに出力されます。

システムの処理

処理を終了します。

要因

FDLファイル内の構造定義に誤りがあります。

対策

MDL（FDL）ファイルの構造定義を確認してください。

KBET0030T-E

以下のコンポーネントのマップ式の評価結果が不正です。

メッセージに対応するコンポーネント名又はオフセットがログファイルに出力されます。

システムの処理

処理を終了します。

要因

次のどれかの要因が考えられます。

マップ式定義に誤りがある（例えば，評価順序遅延指定など）

入力データで必要なデータがない

値が想定した型と異なる

対策

入力データとMDL（FDL）ファイルのマップ式を見直し，必要に応じてマップ式を修正してください。

KBET0031T-E

要素のデータが不正です。

メッセージに対応するコンポーネント名又はオフセットがログファイルに出力されます。

システムの処理

処理を終了します。

要因

データが型定義した要素と一致していません。データ不正の内容を表B-3に示します。

表B-3　データ不正の内容の説明

項目
要素の
主属性
説明

データ不正

整数

実数

暗黙的小数部付数値

数字／符号／小数点／桁セパレータ／指数記号／スペース以外の文字が出現しました。

数字列が複数箇所にあります（スペースで区切られている）。

符号の出現位置・回数が型定義と一致しません。

桁セパレータが不正です。
桁セパレータが3桁ごとの区切りではありません。
桁セパレータで数値が始まっています。
整数部以外に桁セパレータがあります。

桁寄せ指定に一致しません。

指数記号が最後にあります。

ゾーン形式数値

パック形式数値

パック／ゾーン形式にデータが一致しません。

符号が正しくありません。

日付

時刻

日付時刻

-DTMオプション指定時に，値が年月日／時分秒ではありません（値の範囲が不正です）。

混在文字列

1バイト文字列

2バイト文字列

解放文字の指定がないのに文字列中にセパレータと同じ文字があります。

2バイト文字コードの要素サイズが奇数のため，埋め字（2バイト文字）が埋まりません。

CII標準形式での
データ不正
－

規格で規定されていない値です。

（凡例）

－：該当しません。

対策

入力データを確認してください。

KBET0032T-E

要素のサイズ／桁数が最小値より小さいか，最大値を超えました。

メッセージに対応するコンポーネント名又はオフセットがログファイルに出力されます。

システムの処理

処理を終了します。

要因

出力データのサイズが型定義したサイズに達しない，又はサイズを超えました。サイズ／桁数の桁あふれ部分の内容を表B-4に示します。

表B-4　サイズ／桁数の桁あふれ部分の内容の説明

項目
説明

サイズ／桁数の桁あふれ部分

出力要素が固定長で，データサイズが想定値を超えました。

小数部を持つ数値を，小数部を持たない数値に代入しようとしました。

マップ式の演算結果が，想定する数値桁数を超えました。

出力側文字列中にセパレータと同じ文字があったため，解放文字を埋め込んだ分だけサイズが増加しました。

出力側文字列がシフトコードを使用するため，シフトコード分のサイズが増加しました。

セパレータ区切りまでに読み込んだ要素が，最小サイズに達していません。

対策

入力データとMDL（FDL）ファイルのマップ式，出力要素の型定義を確認し，必要に応じて型定義を修正してください。

KBET0033T-E

数値型の要素の符号，小数点，指数記号が不正です。

メッセージに対応するコンポーネント名又はオフセットがログファイルに出力されます。

システムの処理

処理を終了します。

要因

入力側と出力側で文字コードが異なるため，指数記号などの文字が変換できません。

対策

入力データとMDL（FDL）ファイルの入出力要素の型定義を確認し，必要に応じてMDL（FDL）ファイルの文字コード宣言を修正してください。

KBET0034T-E

不正な文字コードがあります。

メッセージに対応するコンポーネント名又はオフセットがログファイルに出力されます。

システムの処理

処理を終了します。

要因

入力側と出力側で文字コードが異なり，かつ出力側で使用できる文字範囲が異なることが考えられます。

対策

入力データとMDL（FDL）ファイルの入出力要素の型定義を確認し，必要に応じてMDL（FDL）ファイルの文字コード宣言を修正してください。

KBET0035T-E

選択構造の評価順序が決定できません。

メッセージに対応するコンポーネント名又はオフセットがログファイルに出力されます。

システムの処理

処理を終了します。

要因

選択構造の条件設定が不正であるか，又は想定しないデータを変換しようとしました。

対策

入力データを確認し，必要に応じてMDL（FDL）ファイルの評価順序決定式を修正してください。

KBET0036T-E

トランスレータ指示指定に誤りがあります。

メッセージに対応するコンポーネント名又はオフセットがログファイルに出力されます。

システムの処理

処理を終了します。

要因

セパレータの指定で文字列／バイト列以外の値を代入しようとしました。

対策

入力データを確認し，必要に応じて変換情報を定義したときのトランスレータ指示指定を修正してください。

KBET0037T-E

UN/EDIFACTのヘッダ情報が不正です。

メッセージに対応するヘッダ名がログファイルに出力されます。

システムの処理

処理を終了します。

要因

データ不正，INTERACTIVEメッセージの運用に誤りがあります。

対策

ヘッダの内容が正しく設定されているか確認してください。

KBET0038T-E

シンタックスIDが不正です。

システムの処理

処理を終了します。

要因

トランスレータが対応しないCIIシンタックスルールのバージョンのデータを変換しようとしました。

対策

CIIのバージョン1.51，2.10，又は3.00形式のデータで再度変換してください。InterschemaのCIIシンタックスルールのサポート範囲については，「付録G　CIIシンタックスルールのサポート範囲」を参照してください。

KBET0039T-E

CIIデータが非透過モードのため変換できません。

システムの処理

処理を終了します。

要因

非透過モードデータを変換しようとしました。

対策

CIIの透過モード形式のデータで再度変換してください。

KBET0040T-E

CIIデータの分割区分が不正です。

システムの処理

処理を終了します。

要因

次のどちらかの要因が考えられます。

分割区分がシーケンシャルになっていない

最終レコードの分割区分が9（メッセージ）又はI（バイナリデータ）ではない

対策

CII標準形式のデータが分割モードで正しく作成されているか確認してください。

KBET0041T-E

CIIメッセージまたはバイナリデータのシーケンス番号が不正です。

システムの処理

処理を終了します。

要因

次のどれかの要因が考えられます。

シーケンス番号が昇順ではない（メッセージ／バイナリデータ混在のときに別々に数えられているなど）

メッセージグループ・トレーラのシーケンス番号とメッセージ又はバイナリデータ数が一致していない

0件メッセージのメッセージグループ・トレーラのシーケンス番号が0以外になっている

対策

メッセージ又はバイナリデータのシーケンス番号が昇順であるか，又はメッセージやバイナリデータ数がメッセージグループ・トレーラに設定されているか確認してください。

KBET0042T-E

CIIデータにメッセージグループ・ヘッダがありません。

システムの処理

処理を終了します。

要因

CII標準形式のデータが入力データの場合は，CII標準形式以外のデータが入力されたか，又はデータが破壊されています。出力データの場合は，辞書の不当な修正がありました。

対策

CII標準形式のデータが入力データの場合はデータを確認してください。出力データの場合はMDL（FDL）ファイル構造とマップ式を確認してください。

KBET0043T-E

CIIデータにメッセージグループ・トレーラがありません。

システムの処理

処理を終了します。

要因

CII標準形式のデータが入力データの場合は，次のどちらかの要因が考えられます。

データ構造に誤りがある

データが破壊されている

CII標準形式のデータが出力データの場合は，辞書の不当な修正があったことが考えられます。

対策

CII標準形式のデータが入力データの場合はデータを確認してください。出力データの場合はMDL（FDL）ファイル構造とマップ式を確認してください。

KBET0044T-E

CIIデータにメッセージヘッダがありません。

システムの処理

処理を終了します。

要因

CII標準形式のデータが入力の場合はレコード区分に誤りがあるか，又はデータが破壊されています。出力データの場合は辞書の不当な修正がありました。

対策

CII標準形式のデータが入力データの場合はデータを確認してください。出力データの場合はMDL（FDL）ファイル構造とマップ式を確認してください。

KBET0045T-E

CIIデータにバイナリデータ・トレーラがありません。

システムの処理

処理を終了します。

要因

CII標準形式のデータが入力データの場合はデータが破壊されています。出力データの場合は辞書の不当な修正がありました。

対策

CII標準形式のデータが入力の場合はデータを確認します。出力の場合はMDL（FDL）ファイル構造とマップ式を確認してください。

KBET0046T-E

縮小モードのCIIデータにマルチ明細のネストがあります。

システムの処理

処理を終了します。

要因

データ中に縮小モードでのマルチ明細ネストがあります。

対策

データを拡張モード形式とするか，又はマルチ明細のネストを解除して再度変換してください。

KBET0047T-E

CIIデータに未定義のデータタグがあります。

システムの処理

処理を終了します。

要因

タグ番号が決められた範囲外か，又は対応していない指示子が使用されています。

対策

次のどちらかの対策を実施してください。

CII標準形式のデータのタグ番号を確認する

トランスレータで対応しないタグを取り除く

KBET0048T-E

CIIデータの構造が不正です。

システムの処理

処理を終了します。

要因

0件メッセージでメッセージグループ・ヘッダやトレーラ以外のデータがあるか，又は受信確認，エラー情報メッセージのデータがありません。

対策

運用メッセージデータの内容を確認してください。

KBET0049T-E

CIIデータのチェックサム項目の値が数値ではありません。

メッセージに対応するタグ番号又はコンポーネント名とオフセットがログファイルに出力されます。

システムの処理

処理を終了します。

要因

チェックサム項目の設定に誤りがあるか，又は項目のデータが不正です。

対策

ログファイルに出力されたコンポーネントの内容，チェックサム項目のタグ番号を確認してください。

KBET0050T-E

CIIデータの項目長が不正です。

メッセージに対応するコンポーネント名又はオフセットがログファイルに出力されます。

システムの処理

処理を終了します。

要因

データ項目長がCIIで規定されたサイズを超えているか，又は0です。

対策

ログファイルに出力されたコンポーネントのデータサイズを確認してください。

KBET0051T-E

CIIデータの同報ヘッダが不正です。

システムの処理

処理を終了します。

要因

同報ヘッダの継続区分，個数の設定に誤りがあります。

対策

同報ヘッダの継続区分，同報個数を確認してください。

KBET0052T-E

CIIデータの変換処理でエラーが発生しました。

システムの処理

処理を終了します。

要因

変換正常処理時の受信確認，エラー情報メッセージの出力でエラーが発生したか，又はメッセージ中に出力できるTFD項目がありません。

対策

このメッセージ以外に出力された内容（要素データ不正など），又はマップ式及び入力データを確認してください。

KBET0053T-E

トランスレータとMDLのバージョンが不整合です。

システムの処理

処理を終了します。

要因

MDLファイルのバージョンがトランスレータで扱えるバージョンより新しくなっています

対策

トランスレータとMDLファイルのバージョンを合わせてください。

KBET0054T-E

未検証のMDLが指定されました。

システムの処理

処理を終了します。

要因

MDLファイルの検証を実行していません。又はMDLファイル修正後にMDLファイルの検証を実行していません。

対策

MDLエディタでMDLファイルのチェックコマンドを実行してから，再度実行してください。

KBET0055T-W

出口関数でエラーが発生しました。

出口関数名と出口関数の戻り値がログファイルに出力されます。

システムの処理

処理を続行します。

要因

出口関数の処理でエラーが発生しました。

対策

出口関数の処理，引数としたコンポーネントの値などを確認してください。

KBET0056T-E

出口関数でエラーが発生しました。

出口関数名と出口関数の戻り値がログファイルに出力されます。

システムの処理

処理を終了します。

要因

出口関数の処理でエラーが発生しました。

対策

出口関数の処理，引数としたコンポーネントの値などを確認してください。

KBET0057T-E

グループ単位出力指定されているコンポーネントに対応するコンポーネントがありません。

グループ単位出力指定されているコンポーネント名がログファイルに出力されます。

システムの処理

処理を終了します。

要因

選択構造の子コンポーネント間で対応関係を設定してある場合に，対応するコンポーネントが選択されませんでした。グループ単位出力指定に誤りがあるか，又は選択構造の子コンポーネントを選択する条件が正しくありません。

対策

グループ単位出力指定が入出力フォーマット間で正しく指定されているか確認してください。

KBET0058T-E

Sea-NACCSデータの電文長が許容範囲を超えました。

業務コードと電文長がログファイルに出力されます。

システムの処理

処理を終了します。

要因

規定外のメッセージ構造であるため，電文長が上限を超えました。

対策

Sea-NACCSの処理要求電文で対応する業務メッセージ構造を確認してください。

KBET0059T-E

RDB接続フォーマットは変換できません。

システムの処理

処理を終了します。

要因

RDB接続フォーマットを含むMDLファイルで変換しようとしました。

対策

RDB接続フォーマットを含むMDLは，電子データ交換ツール 01-04で変換してください。

KBET0060T-E

XMLパーサによる解析でエラーが発生しました。

XMLパーサが出力するエラーコードとメッセージがログファイルに出力されます。

システムの処理

処理を終了します。

要因

入力XML文書に誤りがあります。

対策

入力XML文書を確認してください。

KBET0061T-E

XMLドキュメント出力時にエラーが発生しました。

システムの処理

処理を終了します。

要因

XMLパーサのドキュメント出力機能実行時にエラーが発生しました。

次のどちらかの要因が考えられます。

ファイル／ディレクトリのアクセス権限（WRITE権限）が不正

オープンできるファイル数の制限を超えた

外部からファイルが破壊されている

対策

出力データファイルの状態を確認し，エラー要因を修正してください。

KBET0062T-E

不正なコンポーネントデータを検出しました。

メッセージに対応するコンポーネント名がログファイルに出力されます。

システムの処理

処理を終了します。

要因

入力XML文書がMDLファイルの構造定義と一致しません。

対策

入力XML文書を確認してください。

KBET0063T-E

XML属性の評価結果の値が不正です。

メッセージに対応する属性のコンポーネント名がログファイルに出力されます。

システムの処理

処理を終了します。

要因

変換後のXML属性データが，MDLファイル中の固定値（#FIXED属性の場合），又は列挙値（属性値の候補が列挙型の場合）と一致しない場合にログファイルに出力されます。

次のどちらかの要因が考えられます。

固定値，又は列挙値で定義していない値が出現した

MDLファイル作成時に読み込んだDTDに誤りがある

対策

次のどちらかの対策を実施してください。

入力データを確認

必要に応じてMDLファイルに読み込むDTDを修正するか，エラーになったXML属性のマップ式を削除

KBET0064T-E

XML処理命令のターゲット名に不正な文字コードがあります。

システムの処理

処理を終了します。

要因

MDLファイル中に定義されたXML処理命令のターゲット名に，XML 1.0で許されない不正な文字列が指定されています。

対策

MDLファイルに定義した処理命令を確認してください。

KBET0065T-E

以下のコンポーネントの出現回数決定式の評価結果が不正です。

メッセージに対応するコンポーネント名とオフセットがログファイルに出力されます。

システムの処理

処理を終了します。

要因

出現回数決定式の記述に誤りがあります。

対策

入力データとMDLファイルの出現回数決定式を確認し，必要に応じて出現回数決定式を修正してください。

KBET0066T-E

MDLの内容が不正です。

システムの処理

処理を終了します。

要因

MDLファイルをワークステーションのOSのマシンへ転送する手順に誤りがあったことが考えられます。

対策

MDLを確認してください。ワークステーションのOSのマシンへ転送する場合は，バイナリデータとして転送してください。

KBET0067T-E

変数式の評価結果が不正です。

メッセージに対応するコンポーネント名又はオフセットがログファイルに出力されます。

システムの処理

処理を終了します。

要因

次のどれかの要因が考えられます。

変数式定義に誤りがある

入力データで必要なデータがない

値が想定した型と異なる

対策

入力データとMDL（FDL）ファイルの変数式を見直し，必要に応じて変数式を修正してください。

KBET0068T-S

変換できないMDLが指定されました。

システムの処理

処理を終了します。

要因

変換に必要なライセンス製品がインストールされていません。

対策

必要なライセンス製品をインストール後，再度変換してください。MDLに含まれるフォーマットの規格種別と必要ライセンス製品の対応を次に示します。

表B-5　規格種別と必要ライセンス製品

規格種別
必要なライセンス製品

CII
CII3
uCosminexus Interschema CIIライセンス

EDIFACT
EDIFACT4
uCosminexus Interschema EDIFACTライセンス

Sea-NACCS
Sea-NACCS用EDIFACT
uCosminexus Interschema 海上貨物通関ライセンス

XML
uCosminexus Interschema XMLライセンス

KBET0069T-W

出口関数が二重に定義されました。

メッセージに対応する組み込み関数のIDが，ログファイルに出力されます。

システムの処理

設定に誤りがある関数は，定義されていないと見なして，処理を続行します。

要因

同じ組み込み関数のIDに対する出口関数が，[Userfunc_JavaMethodName]セクション及び[Userfunc_ExitfuncName]セクションの両方に定義されています。

対策

報告された出口関数を使用する場合は詳細情報を確認して，システム情報ファイルを修正後に，再度実行してください。

KBET0070T-E

Java出口関数が見つかりません。

メッセージに対応する組み込み関数名が，ログファイルに出力されます。

システムの処理

処理を終了します。

要因

使用しているJava言語の出口関数が，Java実行環境のクラスパスに見つかりません。

対策

詳細情報を確認して，対応するJava言語の出口関数をJava実行環境のクラスパス内に配置後に，再度実行してください。

KBET0071T-E

出口関数で未知の例外が発生しました。

メッセージに対応する組み込み関数名が，ログファイルに出力されます。

システムの処理

処理を終了します。

要因

Java言語の出口関数から，ExitFuncExceptionクラス又はExitFuncWarningクラス以外の例外が送出されました。

対策

ExitFuncExceptionクラス又はExitFuncWarningクラスどちらかの例外をスローするように出口関数を作成し直して，再度実行してください。

KBET0072T-E

出口関数の戻り値が不正です。

メッセージに対応する組み込み関数名が，ログファイルに出力されます。

システムの処理

処理を終了します。

要因

許可されていない値が，出口関数又はExitFuncWarningクラス（Java言語の出口関数の場合だけ）の戻り値として指定されました。

対策

正しい戻り値を返すように出口関数を作成し直して，再度実行してください。

KBET0073T-S

ＭＤＬ情報またはスレッド固有情報が不正です。

システムの処理

処理を終了します。

要因

MDL情報又はスレッド固有情報が，別のスレッドで使用中です。スレッド間の排他漏れ，又はユーザプログラムの構築が不正です。

対策

APIの使用方法は，Interschemaが示すAPIの実行順序に従っているか，マルチスレッド実行時に必要な情報の排他処理が行われているかを確認してください。

KBET0078T-E

Sea-NACCSデータの電文長が不正です。

該当するデータのオフセットが，ログファイルに出力されます。

システムの処理

処理を終了します。

要因

Sea-NACCS EDI電文の電文長がないか，又は数値ではありません。

対策

Sea-NACCSデータの電文長を確認してください。

付録B.4　データ変換処理API（Java言語）の例外

エラー発生時に通知されるデータ変換処理API（Java言語）の例外について説明します。

KBET0001J-E

パラメータの指定に誤りがあります。詳細：aa=bb

aa：パラメータ名
bb：パラメータ値

要因

指定したパラメータが不正です。

対処

詳細情報を確認して，エラーの原因を取り除いた後，再度実行してください。

KBET0002J-E

文字列の変換に失敗しました。

要因

文字列の変換に失敗しました。

対処

エラーの原因を取り除いた後，再度実行してください。

KBET0003J-S

指定されたファイルが存在しないか，アクセス権がありません。

要因

指定のファイルが存在しないか，又はアクセス権がありません。

対処

指定のファイルを確認して，再度実行してください。

KBET0004J-S

Java VM のバージョンが不正です。

要因

Java Virtual Machine（Java VM）のバージョンが不正です。

対処

Java Virtual Machine（Java VM）のバージョンを確認してください。

KBET0005J-S

システムでメモリ不足が発生しました。

要因

メモリが不足しました。

対処

メモリ容量を確保した後，再度実行してください。

KBET0006J-S

システムエラーが発生しました。

要因

処理中にシステムエラーが発生しました。

対処

システム管理者に連絡してください。

KBET0007J-S

予期せぬエラーが発生しました。

要因

予期しないエラーが発生しました。

対処

システム管理者に連絡してください。

KBET0008J-S

予期せぬエラーが発生しました。詳細：aa

aa：原因となった例外の詳細メッセージ

要因

予期しないエラーが発生しました。

対処

システム管理者に連絡してください。

KBET0009J-E

ライブラリの初期化に失敗しました。詳細：aa

aa：原因となった例外の詳細メッセージ

要因

ライブラリの初期化処理でエラーが発生しました。

対処

詳細情報を確認して，エラーの原因を取り除いた後，再度実行してください。

KBET0010J-S

メッセージリソースが見つかりません。

要因

エラーメッセージ用のリソースファイルが見つかりません。

対処

システム管理者に連絡してください。

KBET0011J-E

オプションの指定に誤りがあります。

要因

指定した実行時オプションが不正です。

対処

ログを確認して，エラーの原因を取り除いた後，再度実行してください。

KBET0012J-E

変換処理中にエラーが発生しました。

要因

変換処理中にエラーが発生しました。

対処

拡張エラー情報を確認して，エラーの原因を取り除いた後，再度実行してください。

KBET0013J-E

変換処理中にエラーが発生しました。詳細：aa

aa：エラーの原因を示す詳細メッセージ

要因

変換処理中にエラーが発生しました。

対処

詳細情報を確認して，エラーの原因を取り除いた後，再度実行してください。

KBET0014J-S

出口関数でエラーが発生しました。

要因

出口関数でエラーが発生しました。

対処

ログを確認して，エラーの原因を取り除いた後，再度実行してください。

KBET0015J-S

トランスレータの生成に失敗しました。

要因

トランスレータオブジェクトの生成に失敗しました。

対処

システム管理者に連絡してください。

KBET0016J-S

トランスレータの更新に失敗しました。

要因

トランスレータオブジェクトの更新に失敗しました。

対処

システム管理者に連絡してください。

KBET0017J-S

トランスレータの解放に失敗しました。

要因

トランスレータオブジェクトの解放に失敗しました。

対処

システム管理者に連絡してください。

KBET0018J-E

MDLファイルが不正です。

要因

MDLファイルが未検証，バージョン不正，又は不正です。

対処

指定したMDLファイルを確認して，再度実行してください。

KBET0019J-S

MDL情報の生成に失敗しました。

要因

MDL情報の生成に失敗しました。

対処

システム管理者に連絡してください。

KBET0020J-S

MDL情報の解放に失敗しました。

要因

MDLファイルの解放に失敗しました。

対処

システム管理者に連絡してください。

KBET0021J-E

FDLまたはMDLファイルが不正です。

要因

FDLファイル又はMDLファイルの内容が不正です。

対処

指定したファイルを確認して，再度実行してください。

KBET0022J-E

コード変換で不正な文字コードを検出しました。

要因

DLプロパティ情報の生成時に不正な文字コードを検出しました。

対処

DLプロパティ情報のユーザコメント，及びユーザバージョン情報の文字コードを確認して，再度実行してください。

KBET0023J-S

DLプロパティ情報の生成に失敗しました。

要因

DLプロパティ情報の生成に失敗しました。

対処

システム管理者に連絡してください。

KBET0024J-E

データオブジェクトからバイト配列への変換に失敗しました。詳細：aa

aa：原因となった例外の詳細メッセージ

要因

データオブジェクトをバイト配列に変換できませんでした。

対処

詳細情報を確認して，エラーの原因を取り除いた後，再度実行してください。

KBET0025J-E

バイト配列からデータオブジェクトへの変換に失敗しました。詳細：aa

aa：原因となった例外の詳細メッセージ

要因

バイト配列をデータオブジェクトに変換できませんでした。

対処

詳細情報を確認して，エラーの原因を取り除いた後，再度実行してください。

KBET0026J-S

変換できないMDLが指定されました。

要因

変換に必要なライセンス製品がインストールされていません。

対処

必要なライセンス製品をインストール後，再度実行してください。MDLに含まれるフォーマットの規格種別と必要ライセンス製品の対応については，「付録B.3　メッセージ」の「KBET0068T-S」を参照してください。

付録C　トランスレータの機能差異と電子データ交換ツールからの移行上の注意

Windows版のトランスレータとワークステーションのOSのトランスレータとの機能差異と，電子データ交換ツールからInterschemaバージョン1へ移行する場合の注意について説明します。

なお，Interschemaバージョン1からInterschemaバージョン2以降へのAPI（C言語）の移行には，Interschemaバージョン1との互換APIが使用できます。互換APIについては，「付録D　Interschemaバージョン1との互換API」を参照してください。

＜この節の構成＞

付録C.1　トランスレータの機能差異

付録C.2　電子データ交換ツールからの移行上の注意

付録C.3　出口関数移行上の注意点

付録C.4　デ－タ変換処理APIを使用したプログラムの移行上の注意

付録C.1　トランスレータの機能差異

Windows版とワークステーションのOSのトランスレータとの機能差異を次に示します。Windows版とワークステーションのOSとの機能差異に注意して，トランスレータを使用してください。

表C-1　トランスレータの機能差異

項番
内容
Windows版
ワークステーションのOS

1
インストールパス
レジストリによる設定に従います。
環境変数INTERSCHEMAで設定します。未設定時は「/opt/hitachi/interschema」が想定されます。

2
ファイル名の指定

空白を含むファイル，又はフォルダ名をパラメタとして指定する場合，項目全体を「"」で囲みます（パラメタ指定は除く）。

同左。また，ファイル名に「"」又は「¥」を含む場合は，「¥」をエスケープ文字とします。

ファイル名は，256バイト以内に制限されます。

3
ユーザ組み込み関数の定義方法

ユーザが組み込み関数機能を実装したDLLを作成し，トランスレータ実行時に動的にバインドします。

DLLパスは，システム情報ファイルettrans.iniの[Usefunc_DllPath]セクションに記述します。

共用ライブラリのバインドです。

パスは[Usefunc_SlPath]セクションに記述します。

システム情報ファイルサイズの上限はありません。

4
ログファイル
変換日時，スレッドID，戻り値，エラーメッセージ，及び付加情報を出力します。
左記の内容に加えてプロセスIDが出力されます。

付録C.2　電子データ交換ツールからの移行上の注意

Interschemaと電子データ交換ツールとの機能差異，及び電子データ交換ツールからの移行上の注意について説明します。

＜この項の構成＞

(1)　電子データ交換ツールとの機能差異

(1)　電子データ交換ツールとの機能差異

Interschemaと電子データ交換ツールには，次のような機能差異があります。なお，機能差異は電子データ交換ツールが持つ機能について，Interschemaと比較しています。

表C-2　電子データ交換ツールとの機能差異

項番
分類
電子データ交換ツール
Interschema

1
トランスレータ
次の機能をサポートしています。

CII対応トランスレータ互換機能
（/EDIFT）

ISO8859互換オプション

左記の機能をサポートしていません。
※2

2
エディタ全般
チェック時の異種属性代入チェックオプションがあります。
左記の機能をサポートしていません（常に異種属性間の代入式を許す）。

3
コンポーネント名
最大64バイト。英数字，1バイト仮名文字，及び2バイト文字から構成されます。
先頭が数字又は数字だけの名称は使用できません。
フォーマット名は，256バイト以内です。そのほかは，4,096バイトまでです。
使用できる文字は，XMLに従います。ただし，2バイト文字の制限はありませんが，範囲はシフトJISに限ります。

4
API

ETtransExec

ETtransExecS

ETtransErrorInfo

左記APIをETtransExecに統合しました。※3

5
日付時刻型※1
i_num型，及び10進整数として処理します。
中間型はi_dtm，演算時に10進数化して処理します。
パート値の定義は数値型と同じだが，型全体としては文字列型と同じに扱われます。

6
ユーザ組み込み関数名
64バイト以内。半角英数字，先頭英字で指定します。
システム関数との重複を避けるため，先頭文字は下記のとおりとします。
U，u，W，w，X，x，Y，y，Z，z

7
サイズ決定式
入力フォーマットだけ有効となります。
入力／出力フォーマットの両方で有効となります。

8
トランスレータ及び戻り値

コマンド及びAPI：(0x)0nxx

テスト用データ：0x0108(ワーニング)

コマンド及びAPI：(0x)0n0000xx

テスト用データ：0x00000008（インフォメーション）

9
実行時オプション
/xxx（Windows版だけ）
-xxx

10
ログファイルの初期値
「電子データ交換ツールのインストールディレクトリ¥bin」下へ出力（Windows版だけ）
「Interschemaのインストールディレクトリ/log」下へ出力

11
不要文字削除指定
入力フォーマットでは無視され，入力文字列の埋め字を除いてデータと見なされます。
入力フォーマットの文字列に対して不要文字削除指定がある場合は，埋め字を除いてデータと見なし，不要文字削除指定がない場合は埋め字を含めてデータとして扱います。
電子データ交換ツールで作成されたMDLファイルの読み込み時，入力フォーマットは不要文字削除指定ありと見なします。

12
Unicode文字列のバイトオーダマーク
型（文字列）ごとに付けて出力します。
型（文字列）のデータとして付けないで出力します。ただし，出力がXML文書の場合は，文書の先頭にバイトオーダマークが出力されます。
エンディアンはフォーマットの指定に従います。

注※1

電子データ交換ツールの日付型と時刻型は，数値属性です。Interschemaでは，数値型とは別に日付時刻型をサポートしています。

電子データ交換ツールの日付型と時刻型は，数値属性のため，埋め字は０又はスペース，１バイト文字コードで表しましたが，Interschemaの日付型，時刻型，及び日付時刻型は，文字列型の属性を持ちます。埋め字は任意で，混在文字コードが使用できます。

日付型と時刻型を使用した電子データ交換ツールのMDLに従って，Interschemaで変換を実行した場合，電子データ交換ツールの日付型と時刻型は，自動的にInterschemaの日付時刻型に置き換わるため，変換した結果が異なることがあります。サイズ，左右寄せなどの要素の属性を確認した上で，変換してください。

注※2

Interschemaは，CII対応トランスレータの互換機能をサポートしていません。CII対応トランスレータの定義情報による変換は，電子データ交換ツールで実行してください。

注※3

注意事項の詳細は，「付録C.4　デ－タ変換処理APIを使用したプログラムの移行上の注意」を参照してください。

付録C.3　出口関数移行上の注意点

ユーザ組み込み関数に対する出口関数は，インクルードファイル「ETexit.h」のETEXITDATA構造体の定義が変更になっているので，必ず再コンパイルしてください。

また，Cコンパイラではなく，C++コンパイラでコンパイルする場合は，関数名がシステム情報ファイル「ettrans.ini」の［Userfunc_ExitfuncName］セクションで定義した名前と同じになるように，「extern“C”」を指定して作成してください。

システム情報ファイル「ettrans.ini」での出口関数の定義は，そのまま使用できます。

付録C.4　デ－タ変換処理APIを使用したプログラムの移行上の注意

電子データ交換ツールが提供しているETtransExecS関数とETtransErrorInfo関数は，Interschemaバージョン1ではETtransExec関数へ統合されています。ETtransExec関数は，引数も変更になっています。また，ETtransExec関数，及びETtransExecT関数のパラメタとして使用するETTRANSADRSLIST構造体が変更になっているため，プログラムの変更が必要です。

データ変換処理関数APIを含む共用ライブラリはC++で作成しているので，データ変換処理関数APIを使用したプログラムもC++コンパイラでのコンパイル・リンクが必要です。ワークステーションのOSの場合は，makefileのサンプルファイルを参考にmakefileを作成してください。makefileのサンプルファイルの格納場所は，リリースノートを参照してください。HP-UXの場合，実行時に環境変数SHLIB_PATHで指定したディレクトリから共用ライブラリを検索するために，リンカへのオプションとして必ず「+s」を指定してください。

(a)　ETtransExec関数引数

第6引数「int iFNFlag」，第7引数「ETTRANSERRLIST *pErrList」が追加になっています。

第6引数iFNFlagには，次の値を指定してください。

ETtransExec関数で処理していたもの：ET_OP_FNOFF

ETtransExecS関数で処理していたもの：ET_OP_FNON

第7引数pErrListには，次の値を指定してください。

ETtransErrorInfo関数でエラー情報を取得していた場合：ETtransErrorInfo関数の第2引数と同じもの

ETtransErrorInfo関数未使用だった場合：NULL

上記に合わせて，ETtransExecS関数はETtransExec関数に置き換えて，ETtransErrorInfo関数の実行処理は削除してください。

(b)　ETTRANSADRSLIST構造体の変更

ファイル指定の場合のファイル名を表すメンバ（電子データ交換ツールでのDataFile）と，メモリ指定の開始アドレスを表すメンバ（電子データ交換ツールでのStartAddress）が統合されて，一つのメンバ（Interschemaバージョン1でのDataAddress）になっています。次に示すように，構造体のメンバ名を変更してください。

ファイル指定の場合
DataFileをDataAddressに変更し，StartAddressメンバ操作部分を削除する

メモリ指定の場合
StartAddressをDataAddressに変更し，DataFileメンバ操作部分を削除する

なお，Interschemaバージョン1ではこのほかにもメンバの追加がありますが，電子データ交換ツールの機能範囲内で変換する場合は，設定しなくてもかまいません。詳細については，「付録D.3　ETtransExec（トランスレータの起動）」を参照してください。

付録D　Interschemaバージョン1との互換API

Interschemaバージョン1との互換APIについて説明します。

互換APIの使用は，Interschemaバージョン1から使用しているユーザが対象です。新しくAPIを作成する場合には，データ変換処理APIを使用します。データ変換処理APIの概要については，「8.　インタフェース」を参照してください。データ変換処理APIの詳細については，「9.　データ変換処理API（C言語）」又は「10.　データ変換処理API（Java言語）」を参照してください。

Interschemaバージョン1との互換APIは，Interschemaバージョン1で使用しているデータ変換処理APIです。

この互換APIと8章，9章，及び10章のデータ変換処理APIは，混在させて使用することはできません。

次に互換APIの関数一覧を示します。

表D-1　互換APIの関数一覧

関数名 | 機能概要
ETtransInit | トランスレータの初期化
ETtransLoadMap | MDLファイルのロード
ETtransExec | トランスレータの起動
ETtransUnLoadMap | MDLファイルのアンロード
ETtransEnd | トランスレータの終了
ETtransInitT | 変換処理の初期化※
ETtransExecT | 変換処理の実行※
ETtransEndT | 変換処理の終了※

注※

変換処理の実行単位でスレッド化する場合に使用します。

互換APIの関数の実行順序を，次に示します。

図D-1　互換APIの関数の実行順序

互換APIの関数は，マルチスレッドでのデータ変換に使用できます。ただし，次の点に注意してください。

1.の場合，各スレッドでは，必ずETransInit関数とETtransEnd関数を実行してください。

2.の場合，変換処理の実行部分をマルチスレッド化する場合は，ETtransInitT関数，ETtransExecT関数，及びETtransEndT関数を使用してください。

互換APIの関数の仕様については，次の順序で説明します。

形式

関数の記述形式を示します。

引数

関数の引数及び入出力の種別を示します。

説明

関数の機能について説明します。

戻り値

関数の戻り値を示します。

＜この節の構成＞

付録D.1　ETtransInit（トランスレータの初期化）

付録D.2　ETtransLoadMap（MDLファイルのロード）

付録D.3　ETtransExec（トランスレータの起動）

付録D.4　ETtransUnLoadMap（MDLファイルのアンロード）

付録D.5　ETtransEnd（トランスレータの終了）

付録D.6　ETtransInitT（変換処理の初期化）

付録D.7　ETtransExecT（変換処理の実行）

付録D.8　ETtransEndT（変換処理の終了）

付録D.9　互換APIの使用例

付録D.1　ETtransInit（トランスレータの初期化）

形式

#include  "ETtrans.h"

int ETtransInit (char  **c, char  *pszLogFile)

引数

引数 | 種別 | 内容
c | 出力 | システムの管理情報のアドレスが格納されます。
pszLogFile | 入力 | ログファイル名を指定します。

説明

トランスレータを初期化します。

ETtransExec関数又はETtransExecT関数で変換を実行する前にこの関数を実行し，この関数が正常に終了したことを確認する必要があります。

引数cで取得したシステムの管理情報のアドレスは，ほかのデータ変換処理の関数へ渡す必要があります。

この関数を呼び出したら，ETtransEnd関数が呼び出されるまで，すべての関数処理のログ情報は引数pszLogFileで指定したファイルに出力されます。ただし，ETtransExec関数とETtransExecT関数では，ログ情報の出力先を別ファイルに指定できます。詳細については，ETtransExec関数とETtransExecT関数の説明を参照してください。

引数pszLogFileに指定したファイルを作成又は更新できなかった場合や引数pszLogFileにNULLを指定した場合，エラー情報はデフォルトのログファイル「errlog.txt」に出力されます。デフォルトのログファイルを作成又は更新できなかった場合は，標準出力に出力されます。

この関数内でログファイルに情報を出力する場合，ログファイルの最大サイズは初期値（1MB）となります。ただし，「ettrans.ini」ファイルでログ出力抑止を指定している場合は，引数pszLogFileの指定に関係なく，ログは出力されません。

戻り値

戻り値 | 内容
0x00000000 | 正常に終了しました。
0x01000010※ | 指定されたログファイルをオープンできないため，ログを初期値のログファイル名で出力したか又は標準出力に出力しました。
0x01000040※ | 出口関数の定義に不正があります。
0x01000100※ | 「ettrans.ini」の定義に不正があります。
0x04000000 | トランスレータを初期化できませんでした。
0x04000002 | メモリ不足です。

注※

0x01000010，0x01000040，及び0x01000100は，ほかの値と同時に設定される場合があります。

付録D.2　ETtransLoadMap（MDLファイルのロード）

形式

#include  "ETtrans.h"

int  ETtransLoadMap (char  *c, char  *pszMDLFile)

引数

引数 | 種別 | 内容
c | 入力 | システムの管理情報のアドレス（ETtransInit関数の引数cで取得したアドレス）を指定します。
pszMDLFile | 入力 | ロードしたいMDLファイル名を指定します。

説明

MDLファイルをメモリ上にロードします。

ETtransExec関数又はETtransExecT関数を実行する前に，この関数でMDLファイルをロードしておく必要があります。

既にMDLファイルがロードされている状態でこの関数を実行するとエラーとなります。

戻り値

戻り値 | 内容
0x00000000 | 正常に終了しました。
0x02000000 | MDLファイルの定義内容が検証されていない，MDLファイルのバージョン不整合，又はMDLファイルの内容が不正です。
0x04000000 | MDLファイルをロードできませんでした。
0x04000001 | 指定されたMDLファイルが見付からない，又はファイルへのアクセス権がありません。
0x04000002 | メモリ不足です。
0x04000010 | 変換できないMDLです（対応するライセンスがありません）。

付録D.3　ETtransExec（トランスレータの起動）

形式

#include  "ETtrans.h"

int  ETtransExec(char  *c, ETTRANSADRSLIST  *pAdrsList,
                char  *pszLogFile, char  *pszOptList,
                int  iFileAppendFlag,  int  iFNFlag,
                ETTRANSERRLIST  *pErrList)

引数

引数
種別
内容

c
入力
システムの管理情報が格納されているアドレス（ETtransInit関数の引数cで取得したアドレス）を指定します。

pAdrsList
入力
入出力データ差し替え情報の配列を指定します。

pszLogFile
入力
ログファイル名を指定します。

pszOptList
入力
コマンドラインで指定できる実行時オプションを指定します。
オプションの詳細については，「5.4.1(3)　引数」を参照してください。

iFileAppendFlag
入力
ファイルの出力方法を指定します。

ET_FA_UPDATE：新規又は上書き

ET_FA_APPEND：追加書き

iFNFlag
入力
MDL内のフォーマットのうち，変換対象とするフォーマットを特定するかどうかを指定します。

ET_OP_FNOFF：指定なし

ET_OP_FNON：指定あり

pErrList
出力
エラー情報リストの出力先を指定します。

説明

引数pszOptListに指定したオプションでトランスレータを起動し，ETtransLoadMap関数でロードしたMDLファイルに定義されている内容に従ってデータを変換します。

MDLファイルがロードされていない状態でこの関数を実行するとエラーとなります。

引数pAdrsListは，MDLファイル内に定義した入出力ファイルを別ファイル又はメモリデータに差し替える場合に指定します。この引数でデータを差し替えるフォーマット名と，対応するデータのファイル名，又はメモリアドレスを指定します。データを差し替えるフォーマット名は複数指定できます。また，差し替え対象となるフォーマットの終了を示すために，ETTRANSADRSLIST配列の最後の要素のFormatNameメンバをNULLにする必要があります。

データの差し替えを指定されたフォーマットに対しては，MDLファイル内で定義された入出力データファイル名は無視されます。入力データと出力データのファイルは，同じファイル名を指定するとエラーとなります。また，MDLファイル内で定義された入出力データファイル名と同じファイル名を指定した場合もエラーとなるので注意してください。

構造体ETTRANSADRSLISTは，ヘッダファイルETtrans.h内で定義されています。ETtrans.hの内容を次に示します。

typedef struct {
 char *FormatName;  /* 差し替え対象となるフォーマット名 */
 int  DataKind;     /* データ種別（ET_DK_*）*/
 char *DataAddress; /* 入出力データファイル名（ファイル指定）*/
                   /* 入出力データの開始アドレス（メモリ指定）*/
 char *EndAddress; /* 入出力データの終了アドレス（メモリ指定）*/
 int  MemoryInitSize; /* 出力データエリア初期サイズ
                                          （メモリ指定）*/
 int  MemoryIncrementSize; /* 出力データエリア増分サイズ
                                          （メモリ指定）*/
} ETTRANSADRSLIST;

データ種別DataKindには，ヘッダファイルETtrans.h内で定義されている次の値のどれかを指定します。

ET_DK_FILE：データ種別がファイルの場合

ET_DK_MEMORY：データ種別がメモリの場合

ET_DK_MEMORYを指定した場合は，入出力データの開始アドレスDataAddressと終了アドレスEndAddressを指定してください。ただし，出力フォーマットの場合だけ，開始アドレスとしてNULLアドレスを指定できます。この場合，トランスレータが必要なデータエリアを確保し，その先頭アドレスを入出力データの開始アドレスDataAddressへ設定して返します。トランスレータが確保したエリアは，次回のETtransExecの実行，又はETtransEndの実行前まで有効です。確保するデータエリアサイズは，pAdrsListのMemoryInitSize，又はMemoryIncrementSizeで指定します。pAdrsListの該当する値に0が指定された場合は，システム情報ファイルettrans.ini内の[MemoryData]セクションで定義された値を用います。pAdrsList，システム情報ファイルの両方に定義がない場合は，初期割り当てサイズと割り当て増分サイズの両方に1,024（バイト）を仮定します。

出力フォーマットに対しては，入出力データの終了アドレスEndAddressにデータ最終アドレスを返します。ただし，出力データが指定されたアドレスを超えてエラーのために未出力になる場合は，ヘッダファイル「ETtrans.h」で定義されている次の値を設定して返します。

ET_AD_OVER：メモリアドレスオーバー

ET_AD_NOTOUT：未出力

ログファイル名pszLogFileは，ETtransInit関数で指定したファイルとは別のファイルに出力する場合に指定します。この引数にNULLを指定した場合，又は指定したファイルを作成又は更新できない場合は，ETtransInit関数で指定したファイルに出力します。ただし，システム情報ファイルの[Option]セクションでログ出力の抑止が指定されている場合は，pszLogFile指定に関係なく，ログを出力しません。

変換対象指定iFileAppendFlagは，変換結果をファイルに出力する場合に有効になります（XML文書の出力を除きます）。ヘッダファイルETtrans.h内で定義されている次の値を指定します。

ET_FA_UPDATE：新規又は上書き

ET_FA_APPEND：追加書き

変換対象フォーマット指定iFNFlagにET_OP_FNOFFを指定した場合は，対象となるMDLファイル内すべてのフォーマットを変換します。ET_OP_FNONを指定した場合は，差し替え情報pAdrsListで指定されたフォーマットだけを変換します（コマンド実行時に-FNオプションを指定した場合と同じです）。

エラー情報リストpErrListへは変換実行時のエラー情報を出力します。エラー情報がない場合は，エラー情報リストpErrListのデータ数に０を返します。取り出した内容は，次回のEttransExecの実行，又はETtransEndの実行前まで有効です。構造体ETTRANSERRLISTは，ヘッダファイルETtrans.h内で定義されています。

typedef struct {
   int  Size;                 /* エラー情報データ数 */
   ETTRANSERRDATA  *ErrData;  /* エラー情報データ (配列) */
} ETTRANSERRLIST;

typedef struct {
   int  MessageNo;            /* メッセージ番号 */
   int  ErrorLevel;           /* エラーレベル */
   int  NumericData;          /* 数値情報 */
   char  *Information;        /* 文字列情報 */
} ETTRANSERRDATA;

各エラー情報のデータは，変換処理で発生したワーニングレベル以上のエラー情報が発生順に設定されます。エラーレベルは，トランスレータの戻り値と同じ意味を持ちます。数値情報と文字列情報は，ログファイルへ出力する付加情報で，次の内容を出力します。付加情報がない場合は，数値情報は０，文字列情報はNULLが設定されます。

表D-2　ログファイルに出力される数値情報，文字情報の内容

メッセージ番号 | 数値情報 | 文字列情報 | 備考
9 | 出力済みのグループ数 | なし | グループ単位出力指定がある場合のエラー
55，56 | 出口関数の戻り値 | ユーザ組み込み関数名 | 出口関数のエラー
7，8，23～36，50，57，67，78 | コンポーネントのアドレス | コンポーネント名 | コンポーネントに対するエラー
21 | 0 | オプション | オプション不正のエラー
1 | フォーマット名
2 | なし（メモリアドレス不正の場合）

注

メッセージ番号の内容については，「付録B　トランスレータのメッセージ」を参照してください。

戻り値

トランスレータ起動コマンド実行時の戻り値と同じです。ettransコマンドの戻り値については，「5.4.2　ettransコマンドの戻り値」を参照してください。

付録D.4　ETtransUnLoadMap（MDLファイルのアンロード）

形式

#include  "ETtrans.h"

int  ETtransUnLoadMap (char  *c)

引数

引数 | 種別 | 内容
c | 入力 | システムの管理情報のアドレス（ETtransInit関数の引数cで取得したアドレス）を指定します。

説明

ETtransLoadMap関数でロードしたMDLファイルをメモリ上から破棄します。MDLファイルがロードされていない状態でこの関数を実行するとエラーとなります。

戻り値

戻り値 | 内容
0x00000000 | 正常に終了しました。
0x04000000 | MDLファイルをメモリ上から破棄できませんでした。

付録D.5　ETtransEnd（トランスレータの終了）

形式

#include  "ETtrans.h"

int  ETtransEnd (char  *c)

引数

引数 | 種別 | 内容
c | 入力 | システムの管理情報のアドレス（ETtransInit関数の引数cで取得したアドレス）を指定します。

説明

トランスレータを終了します。

MDLファイルがロードされている状態でこの関数を実行すると，MDLファイルは自動的にアンロードされます。

データ変換処理を終了するには，この関数を実行して正常に終了したことを確認する必要があります。

戻り値

戻り値 | 内容
0x00000000 | 正常に終了しました。
0x04000000 | トランスレータの終了処理に失敗しました。

付録D.6　ETtransInitT（変換処理の初期化）

形式

#include  "ETtrans.h"

int  ETtransInitT(char  *c, char  **ct)

引数

引数 | 種別 | 内容
c | 入力 | システムの管理情報のアドレス（ETtransInit関数の引数cで取得したアドレス）を指定します。
ct | 出力 | サブシステム管理情報を取得します。

説明

変換処理の初期化を実行します。

変換処理の実行単位でスレッド化する場合，この関数を実行して引数ctで取得したサブシステム管理情報（アドレス）をETtransEexeT関数及びETtransEndT関数へ渡す必要があります。

戻り値

戻り値 | 内容
0x00000000 | 正常に終了しました。
0x04000000 | 変換処理の初期化に失敗しました。
0x04000002 | メモリ不足です。

付録D.7　ETtransExecT（変換処理の実行）

形式

#include  "ETtrans.h"

int  ETtransExecT(char  *c, char  *ct,
                 ETTRANSADRSLIST  *pAdrsList,
                 char  *pszLogFile,  char  *pszOptList,
                 int  iFileAppendFlag, int  iFNFlag,
                 ETTRANSERRLIST  *pErrList)

引数

引数
種別
内容

c
入力
システムの管理情報が格納されているアドレス（ETtransInit関数の引数cで取得したアドレス）を指定します。

ct
入力
サブシステムの管理情報が格納されているアドレス（ETtransInitT関数の引数ctで取出したアドレス）を指定します。

pAdrsList
入力
変換対象フォーマットの入出力データ差し替え情報の配列を指定します。

pszLogFile
入力
ログファイル名を指定します。

pszOptList
入力
トランスレータ実行時のオプションを指定します。指定できる実行時のオプションについては，「5.4.1(3)　引数」を参照してください。

iFileAppendFlag
入力
ファイルの出力方法を指定します。

ET_FA_UPDATE：新規又は上書き

ET_FA_APPEND：追加書き

iFNFlag
入力
MDL内のフォーマットのうち，変換対象とするフォーマットを特定するかどうかを指定します。

ET_OP_FNOFF：指定なし

ET_OP_FNON ：指定あり

pErrList
出力
エラー情報リストを取得します。

説明

指定されたオプションでトランスレータを起動し，ETtransLoadMap関数でロードしたMDLファイルに定義されている内容に従ってフォーマットのデータを変換します。

詳細については，「付録D.3　ETtransExec（トランスレータの起動）」を参照してください。ただし，トランスレータが確保した出力フォーマットのメモリエリア及びエラー情報リストの内容は，同一スレッド内で，次のETtransExecT関数又はETtransEndT関数を実行するまで有効です。

戻り値

ettrans実行時の戻り値と同じです。戻り値については，「5.4.2　ettransコマンドの戻り値」を参照してください。

付録D.8　ETtransEndT（変換処理の終了）

形式

#include  "ETtrans.h"

int  ETtransEndT(char  *c, char  *ct)

引数

引数 | 種別 | 内容
c | 入力 | システムの管理情報のアドレス（ETtransInit関数の引数cで取得したアドレス）を指定します。
ct | 入力 | サブシステムの管理情報のアドレス（ETtransInitT関数の引数ctで取得したアドレス）を指定します。

説明

変換処理を終了します。

変換処理の実行単位でスレッド化する場合，この関数を実行して変換処理が正常に終了したことを確認してください。

戻り値

戻り値 | 内容
0x00000000 | 正常に終了しました。
0x04000000 | 変換処理の終了に失敗しました。

付録D.9　互換APIの使用例

互換APIの使用例を，次に示します。

#include <stdio.h>
#include "ETtrans.h"

static void print_message(int iCode, char *msg,
                         ETTRANSERRLIST *ErrList);

int main()
{
 int iRet = 0;
 ETTRANSADRSLIST AdrsList[3];
 ETTRANSERRLIST ErrList;
 char *c;
                 /* アドレスリストの設定 */
 AdrsList[0].FormatName = "IN";
 AdrsList[0].DataKind = ET_DK_FILE;
 AdrsList[0].DataAddress = "input.txt";
 AdrsList[1].FormatName = "OUT";
 AdrsList[1].DataKind = ET_DK_FILE;
 AdrsList[1].DataAddress = "output.txt";
 AdrsList[2].FormatName = NULL;
                 /* トランスレータ初期化 */
 iRet = ETtransInit(&c, NULL);
 if (iRet) {
   print_message(iRet, "ETtransInit", NULL);
   goto EXIT;
}
                 /* MDLローディング */
 iRet = ETtransLoadMap(c, "SAMPLE.mdl");
 if (iRet) {
   print_message(iRet, "ETtransLoadMap", NULL);
   goto END;
}
                 /* 変換実行 */
 iRet = ETtransExec(c, AdrsList, NULL, "-IERR",
                    ET_FA_UPDATE, ET_OP_FNOFF, &ErrList);
 if (iRet) {
   print_message(iRet, "ETtransExec", &ErrList);
   goto END;
}
                 /* MDLアンロード */
 iRet = ETtransUnLoadMap(c);
 if (iRet) {
   print_message(iRet, "ETtransUnLoadMap", NULL);
   goto END;
}

END:              /* 終了処理 */
 iRet = ETtransEnd(c);
 if (iRet) {
   print_message(iRet, "ETtransEnd", NULL);
}

EXIT:
 printf("--> Return Code = 0x%08x¥n", iRet);
 return iRet;
}

/*
* エラー情報出力関数
*/
static void print_message(int iCode, char *msg,
                         ETTRANSERRLIST *ErrList)
{
 int i;
 ETTRANSERRDATA *edata;

 printf("### ERROR %s %d ###¥n", msg, iCode);
 if (ErrList) {
   printf(" Error Size = %d¥n", ErrList->Size);
   for (i = 0; i < ErrList->Size; i++) {
      edata = &ErrList->ErrData[i];
      printf("¥t%02d (0x%08x) num=%d",
        edata->MessageNo, edata->ErrorLevel, edata->NumericData);
      if (edata->Information) {
        printf(" info=%s¥n", edata->Information);
      } else {
        printf("¥n");
     }
   }
 }
}

付録E　Interschemaから出力される情報

Interschemaから出力される情報について説明します。

＜この節の構成＞

付録E.1　マップ式ファイル

付録E.2　ツリー情報ファイル

付録E.3　フォーマット情報ファイル

付録E.4　差分情報ファイル

付録E.1　マップ式ファイル

マップ式ファイルは，マップ式をテキスト形式で記述したファイルです。対象となるフォーマットのルートコンポーネントから順番に，すべてのコンポーネントのマップ式や変数式などの情報を記述します。マップ式ファイルは，次のどちらかの方法で出力します。

マージツールのコマンド「etmerge」

MDLエディタの外部出力コマンド又はマージコマンド

出力したマップ式は，マップ式ファイル上で直接編集できます。マップ式ファイルの編集内容は，次のどちらかの方法でMDLファイルに反映できます。

マージツールのコマンド「etmerge」

MDLエディタのマージコマンド

＜この項の構成＞

(1)　記述形式

(2)　注意事項

(3)　記述例

(1)　記述形式

マップ式ファイルのフォーマットの記述形式を次に示します。なお，マップ式ファイルは項目ごとに改行されます。

表E-1　マップ式ファイルのフォーマットの記述形式

項目
説明

コンポーネントのグローバルパス名
コンポーネントのグローバルパス名です。

マップ式
マップ式文字列です。マップ式がない場合は空行になります。

%NOUSE%
未使用のコンポーネントを表します。

%IOCHANGE%n
グループ単位出力指定があることを表します。nはラベル「1」～「255」の数値です。

%ORDER%
MDLエディタで編集した順序決定式があることを表します。選択構造コンポーネントの場合だけ出力されます。

順序決定式
順序決定式文字列です。MDLエディタで式を削除した場合は出力されません。

%CASE%%定数種別%
MDLエディタで編集した順序決定値があることを表します。選択構造の子コンポーネントの場合だけ出力されます。
定数種別には，次のどれかが出力されます。

NUM：数値

STRING：文字列

STREAM：バイト列

順序決定値
順序決定値です。定数種別の値が次の形式で出力されます。

数値：10進数表記の文字列

文字列

バイト列：0x付きの16進文字列

ただし，MDLエディタで値を削除した場合は出力されません。

%DEFAULT%
MDLエディタで編集したデフォルト式があることを表します。コンポーネントが型の場合だけ出力されます。

デフォルト式
デフォルト式文字列です。MDLエディタで式を削除した場合は出力されません。

%CONDITION%
MDLエディタで編集したコンポーネントの条件式があることを表します。

条件式
条件式文字列です。MDLエディタで式を削除した場合は出力されません。

%DEPEND%
MDLエディタで編集した出現回数決定式があることを表します。

出現回数決定式
出現回数決定式文字列です。MDLエディタで式を削除した場合は出力されません。

%SIZE%
MDLエディタで編集したサイズ決定式があることを表します。

サイズ決定式
サイズ決定式文字列です。MDLエディタで式を削除した場合は出力されません。

%%-%%
変数式の区切りを表す記号文字列（固定文字列）です。変数ごとに，この区切りと変数式が繰り返されます。

変数式
1変数分の変数式文字列です。

%-%
1コンポーネントの終了を表す記号文字列（固定文字列）です。

(2)　注意事項

マップ式ファイルの注意事項を次に示します。

マージ時にコンポーネント名が重複する場合は，最後に出現したものを優先します。

「%NOUSE%」指定は，MDLエディタの［コンポーネントのプロパティ］ダイアログで「このコンポーネントを使用しない」を選択して未使用の定義をするのと同じ意味になります。また，「%IOCHANGE%」指定は，［コンポーネントのプロパティ］ダイアログで「グループ単位出力指定」と「ラベル」を指定するのと同じ意味になります。

式文字列及び定数値以外の部分は正当性を検証しないので，直接編集しないでください。

変数式は，定義した変数ごとに区切って出力されます。

マージツール「etmerge」のマッピング機能，又はMDLエディタのマージコマンドのマップ式マージで，表E-1の「%ORDER%」～「サイズ決定式」の情報がマージされた場合，MDL上で式又は値が編集されたものと見なされます。

MDL上で式又は値を編集した後にフォーマットをマージした場合，マージ元の式又は値と，マージ先のフォーマットの式又は値が同じときは，MDL上での編集は，なしの状態に戻ります。式又は値が同じかどうかは，その文字列の単純比較で判定します。

(3)　記述例

マップ式ファイルの記述例を次に示します。

OUT@ROOT@STRUCT
= IN@ROOT@MESSAGE[INDEX(0)];
%IOCHANGE%1
%ORDER%
OUT@v1
%%-%%
OUT@v1 = OUT@v1 + 1;
%%-%%
OUT@v2 = OUT@V1 * 10;
%-%
OUT@ROOT@STRUCT@data0

%NOUSE%
%-%
OUT@ROOT@STRUCT@data1
= $@data1;
%CASE%%NUM%
1
%CONDITION%
# > 0
%-%
OUT@ROOT@STRUCT@data2
= $@data2 + IN@ROOT@HEAD@num;
%CASE%%STRING%
N2
%DEFAULT%
= 0;
%SIZE%
10
%-%
OUT@ROOT@STRUCT@data3
= $@data3[INDEX(0)];
%CASE%%STREAM%
0x03
%DEPEND%
OUT@v2
%-%

付録E.2　ツリー情報ファイル

ツリー情報ファイルは，FDL又はMDLの内容をツリー形式で出力し，各種属性の情報を記述したファイルです。ツリー情報ファイルは，FDLエディタ又はMLDエディタの外部出力コマンドで出力します。FDLエディタの場合は，フォーマット情報ファイルの一部として出力されます。MDLエディタの場合は，フォーマット情報ファイルの一部として出力するか，ツリー情報ファイルだけ出力するかを指定できます。フォーマット情報ファイルについては，「付録E.3　フォーマット情報ファイル」を参照してください。

＜この項の構成＞

(1)　記述形式

(2)　フォーマット部

(3)　変数部

(4)　ツリー部

(5)　値

(6)　記述例

(1)　記述形式

ツリー情報ファイルは，FDL又はMDLのフォーマット単位に記述されます。1フォーマット分の記述形式を次に示します。

図E-1　ツリー情報ファイルの記述形式

フォーマット部には，フォーマット名とそのフォーマットの属性が出力されます。

変数部には，1行に1変数の情報が，変数の数だけ出力されます。

ツリー部には，1行に1コンポーネントのコンポーネント情報が出力されます。ツリーには，MDLエディタと同様，ルート構造以下が表示されます。FDLのフォーマットの場合，ルート構造からつながっていない型や構造などは出力されません。

(2)　フォーマット部

フォーマット部の記述形式を次に示します。

フォーマット名（TAB）フォーマット属性

（凡例）

（TAB）：タブを表します。

フォーマット属性として出力される項目を，出力される順番に次に示します。なお，項目間はスペースで区切られます。

表E-2　フォーマット属性として出力される項目

項目 | 出力内容 | 説明 | 備考
入出力種別 | (i) | 入力専用 | 入出力兼用の場合は，出力されません。
(o) | 出力専用
規格種別 | CII | － | 規格種別が「なし」の場合は，出力されません。
CII3
EDIFACT
EDIFACT4
SNACCS | Sea-NACCS（旧）
SNACCS2 | Sea-NACCS
SNEDIFACT | Sea-NACCS用EDIFACT（旧）
SNEDIFACT2 | Sea-NACCS用EDIFACT
XMLDTD | XML
CSV | －
データ形式 | (big) | ビッグエンディアン | －
(little) | リトルエンディアン
文字コード | 1バイト文字列：2バイト文字列：混在文字列：数値：セパレータ | － | 各文字コードは，コード指定子です。コード指定子については，「6.3.1　トランスレータが扱う文字コード」を参照してください。
サイズ系指定 | (byte) | バイト数 | －
(char) | 文字数
不正文字コード置換 | (spron) | ON | －
(sproff) | OFF
溢れカット | (cuton) | ON | －
(cutoff) | OFF
不要文字削除 | (delon) | ON | －
(deloff) | OFF

（凡例）

－：特にありません。

(3)　変数部

フォーマット部の記述形式を次に示します。

（indent）@ 変数名（TAB）初期値

（凡例）

（indent）：インデントを表します。1階層分のインデントは，スペース2文字分です。

（TAB）：タブを表します。

(4)　ツリー部

ツリー部の記述形式を次に示します。

構造のコンポーネントの場合

（indent）+ 構造のコンポーネント名[補助情報] [出現数]（TAB）構造属性（TAB）コンポーネント属性

型のコンポーネントの場合

（indent）+ 型のコンポーネント名[補助情報] [出現数]（TAB）型属性（TAB）コンポーネント属性

XML属性の場合

（indent）+ @ XML属性名（TAB）XML属性の属性（TAB）コンポーネント属性

（凡例）

（indent）：インデントを表します。1階層分のインデントは，スペース2文字分です。最上位構造（ルート）は1階層分，その他は階層数分のインデントです。

（TAB）：タブを表します。

[補助情報]：次の条件に該当する場合だけ，次の内容が出力されます。

　選択構造の場合：(P)

　未使用指定がある場合：(NOUSE)

[出現数]：次の内容が出力されます。ただし，1回固定のコンポーネントに対しては出力されません。nは最小，mは最大の意味です。

　固定の場合：[n]

　可変の場合：[n:m]

　可変（無限大）の場合：[n:]

　動的指定ある場合：[出現数](dep)

属性として出力される項目を，出力される順番に次に示します。なお，項目間は基本的にスペースで区切られますが，複数の項目を連続して記述する場合もあります。また，定義されていない項目，及びFDLエディタで「フォーマットの指定に従う」を指定した項目は出力されません。

表E-3　構造属性として出力される項目

項目
出力内容
説明
備考

セパレータ
<SEPA> (b)開始文字 (p)中間区切り（要素前） (i)中間区切り（要素間） (a)終了文字 (r)解放文字
開始文字，中間区切り，終了文字，及び解放文字は，「値」又は「セパレータ名(値)」です。(値)はそのセパレータの値です。
セパレータを定義した場合だけ出力されます。
予約セパレータの場合，(値)は出力されません。

順序決定式
<ORDER>式文字列
－
式文字列中のスペース，タブ，及び改行コードは削除されます。ただし，文字列定数部は除きます。

条件式
<CHECK>式文字列
－
式文字列中のスペース，タブ，及び改行コードは削除されます。ただし，文字列定数部は除きます。

規格情報（CII3）
<<MSG>>BPID INFO
メッセージ構造

BPID：サブ機関，版を含むBPIDです（8桁）。

INFO：情報区分です（4桁）。

メッセージ構造及びマルチ明細構造以外は出力されません。

<<MULTI>>NO
マルチ明細構造

NO：マルチ明細番号です。拡張マルチは「0x」が付いた16進文字列，その他は文字です。

規格情報（EDIFACT4）
<<SEG>>
Segment
－

<<CMP>>
Component（S001，S004を含む）

<<REP>>
Repetition

<<UNA>>
UNA Segment

（凡例）

－：特にありません。

表E-4　型属性として出力される項目

項目
出力内容
説明
備考

主属性
int
整数
－

num
実数

imp
暗黙的小数部付数値

fd
ゾーン形式数値

fdp
パック形式数値

s1
符号付2進整数（1バイト）

s2
符号付2進整数（2バイト）

s3
符号付2進整数（3バイト）

s4
符号付2進整数（4バイト）

us1
符号無2進整数（1バイト）

us2
符号無2進整数（2バイト）

us3
符号無2進整数（3バイト）

us4
符号無2進整数（4バイト）

str1
1バイト文字列

str2
2バイト文字列

str
混在文字列

stm
バイト列

date
日付

time
時刻

datetime
日付時刻

サイズ
n
固定
　n：最小
主属性がint，num，imp，str1，str2，str，stm，date，time，又はdatetimeの場合だけ出力されます。

n:m
可変
　n：最小
　m：最大（省略時は出力されません）

n:m(dep)
動的指定
　n：最小
　m：最大（省略時は出力されません）

サイズ系指定
(byte)
バイト数
主属性がstr1，str2，str，date，time，又はdatetimeの場合だけ出力されます。

(char)
文字数

文字コード
コード指定子
－
主属性がint，num，imp，fd，str1，str2，str，date，time，又はdatetimeの場合だけ出力されます。
コード指定子については，「6.3.1　トランスレータが扱う文字コード」を参照してください。

数値桁数
符号
指数部
桁セパレータ
符号カウント指定
(place)(1)(2)(3)(4)(5)(6)(7)(8) (9) (10)
(1)：先頭符号（-：負だけ，*：常にあり）
(2)：桁数（全体）
(3)：小数点文字「.」
(4)：桁数（小数部）
(5)：末尾符号（-：負だけ，*：常にあり）
(6)：指数記号
(7)：指数部符号（-：負だけ，*：常にあり）
(8)：桁数（指数部）
(9)：桁セパレータ
(10)：符号カウント指定「(c)」
主属性がint，num，imp，fd，又はfdpの場合だけ出力されます。
(1)～(10)に該当する内容がない場合は出力されません。

日付／時刻書式
YYYYMMDD
8桁の日付表示
主属性がdate又はtimeの場合だけ出力されます。

YYMMDD
6桁の日付表示

HHMMSS
6桁の時刻表示

日付時刻書式
(1)(2)(3)
(1)：先頭文字列
(2)：パート書式
　CCYY：西暦年
　CC：西暦年上位2桁
　YY：年（西暦年下2桁）
　MM：月
　DD：日
　hh：時
　mm：分
　ss：秒
　ZZ：ゾーン部
(3)：後続文字列
主属性がdatetimeの場合だけ出力されます。

桁寄せ
埋め字
不要文字削除
(1)(2)(3)
(1)：桁寄せ
　(l)：左寄せ
　(r)：右寄せ
(2)：埋め字の値
(3)：不要文字削除
　(delon)：ON
　(deloff)：OFF
　(delon_poff)：全体ON，パート値OFF
　(deloff_pon)：全体OFF，パート値ON
主属性がint，num，imp，str1，str2，str，date，time，又はdatetimeの場合だけ出力されます。
(1)は，文字列／日時が左寄せ，又は数値が右寄せの場合は出力されません。
(2)は，文字列／日時がスペース，又は数値が0の場合は出力されません，ただし，バイト列定義の場合は出力されます。

値定義
<VALUE>(nochk)
－
(nochk)は「他の値が現れてもエラーにしない」を指定した場合だけ出力されます。
個々の値は出力されません。

規格情報(CII3)
<<TFD>>(1)(2)
(1)：タグ番号
(2)：属性種別
　(9)：9属性
　(N)：N属性
　(Y)：Y属性
　(X)：X属性
　(K)：K属性
　(B)：B属性
TFD以外は出力されません。

（凡例）

－：特にありません。

表E-5　XML属性として出力される項目

項目 | 出力内容 | 説明 | 備考
属性型 | CDATA | － | －
ID
IDREF
IDREFS
NMTOKEN
NMTOKENS
ENTITY
ENTITIES
NOTATION
ENUMERATION | 列挙型
デフォルト値タイプ | #req | #REQUIRED | －
#imp | #IMPLIED
#fix | #FIXED
#val | デフォルト値
列挙値 | <VALUE> | － | 個々の値は出力されません。
デフォルト値 | <DEFAULT>値 | － | －

（凡例）

－：特にありません。

表E-6　コンポーネント属性として出力される項目

項目
出力内容
説明
備考

グループ単位出力指定
(io)n
n：ラベル
－

カウンタ
(clear)
初期化指定
－

(increment)
インクリメント指定

順序決定値
<CASE>値
－
－

出現回数決定式
<EXISTCOUNT>式文字列
－
式文字列中のスペース，タブ，及び改行コードは削除されます。ただし，文字列定数部は除きます。

条件式
<CHECK>式文字列
－
式文字列中のスペース，タブ，及び改行コードは削除されます。ただし，文字列定数部は除きます。

トランスレータ指示
<PRAGMA>定義文字列
－
この情報は辞書で設定される情報です。FDLエディタ及びMDLエディタでは操作できません。

サイズ決定式
<SIZE>式文字列
－
式文字列中のスペース，タブ，及び改行コードは削除されます。ただし，文字列定数部は除きます。

デフォルト式
<DEFAULT>式文字列
－
式文字列中のスペース，タブ，及び改行コードは削除されます。ただし，文字列定数部は除きます。

マップ式
<MAP>式文字列
－
文字列定数部，及び%delay部を除く式文字列中のスペース，タブ，及び改行コードは削除されます。

子マップ式
<CHILDMAP>式文字列
－
文字列定数部，及び%delay部を除く式文字列中のスペース，タブ，及び改行コードは削除されます。
複数式ある場合は，次のように式と式の間にスペース文字が入ります。
＜xxxxx>式文字列1 式文字列2 式文字列3…
なお，この情報は辞書で設定される情報です。FDLエディタ及びMDLエディタでは操作できません。

変数式
<VAR>式文字列
－
式文字列中のスペース，タブ，及び改行コードは削除されます。ただし，文字列定数部は除きます。
複数式ある場合は，次のように式と式の間にスペース文字が入ります。
＜xxxxx>式文字列1 式文字列2 式文字列3 ･･･

（凡例）

－：特にありません。

(5)　値

各属性の「値」（定数値）は，次のように出力されます。

数値：浮動小数形式

例　1.5

文字列：ダブルクォーテーション囲み

例　"abc"

バイト列：「0x」付き16進文字列

例　x0d0a

(6)　記述例

ツリー情報ファイルの記述例を次に示します。

付録E.3　フォーマット情報ファイル

フォーマット情報ファイルは，FDL又はMDLのプロパティ情報を記述したファイルです。フォーマット情報ファイルは，FDLエディタ又はMLDエディタの外部出力コマンドで出力します。

＜この項の構成＞

(1)　記述形式

(2)　フォーマット詳細情報

(3)　記述例

(1)　記述形式

フォーマット情報ファイルは，ツリー情報ファイルの内容とフォーマット詳細情報の内容で構成されています。ツリー情報ファイルについては，「付録E.2　ツリー情報ファイル」を参照してください。フォーマット詳細情報は，フォーマット単位に記述されます。フォーマット情報ファイルの記述形式を次に示します。

図E-2　フォーマット情報ファイルの記述形式

各情報の出力順序について次に説明します。

型

FDLの場合は型定義フォルダの順序，MDLの場合は型名でソートした順序で出力されます。

セパレータ

FDLの場合はセパレータ定義フォルダの順序，MDLの場合は定義されている順序で出力されます。

変数

FDLの場合は変数定義フォルダの順序，MDLの場合は定義されている順序で出力されます。

構造

FDLの場合は構造定義フォルダの順序，MDLの場合は構造名でソートした順序で出力されます。MDLの場合，複数の箇所で使用されている構造は，代表の構造についてだけ出力されます。

コンポーネント

1構造に対して，兄弟の順序で出力されます。

XML属性

構造直下のものは構造のコンポーネント情報の前に，型直下のものは型コンポーネント情報に続けて，定義された順序で出力されます。

注意

MDLの場合，構造以下のフォーマット詳細情報は，代表の構造についてだけ出力されます。したがって，MDL上で編集した式は出力されないものがあります。個々の式については，ツリー情報ファイルで確認してください。

(2)　フォーマット詳細情報

次に示す情報の項目タイトル及び項目値が，フォーマット詳細情報として出力されます。

フォーマット属性情報

型属性情報

セパレータ属性情報

変数属性情報

構造属性情報

XML属性情報

コンポーネント属性情報

フォーマット詳細情報の記述形式を次に示します。

項目値だけ出力される場合

項目タイトル（TAB）項目値

項目値以外の情報も出力される場合

項目タイトル（TAB）項目値（TAB）補助情報

（凡例）

（TAB）：タブを表します。

注意

式文字列に改行が含まれる場合，改行コードはスペースに置き換えられます。

(3)　記述例

フォーマット詳細情報の記述例を次に示します。なお，記述例は実際の出力情報を抜粋したものです。

付録E.4　差分情報ファイル

差分情報ファイルは，FDLフォーマット又はDTDフォーマットのマージ前後の差分情報を記述したファイルです。差分情報ファイルは，MDLエディタのマージコマンドで出力します。

＜この項の構成＞

(1)　記述形式

(2)　属性項目比較の記述形式

(3)　値定義比較／列挙値比較の記述形式

(4)　記述例

(1)　記述形式

差分情報ファイルの記述形式を次に示します。

図E-3　差分情報ファイルの記述形式

(a)　フォーマット属性項目の比較（FORMAT）

［FORMAT］以下に出力される項目を次に示します。

(b)　型属性項目の比較（TYPE）

［TYPE］以下に出力される項目を次に示します。

(c)　セパレータ属性項目の比較（SEPARATOR）

［SEPARATOR］以下に出力される項目は，型情報の「型」を「セパレータ」に置き換えた内容と同じです。

(d)　変数属性項目の比較（VARIABLE）

［VARIABLE］以下に出力される項目は，型情報の「型」を「変数」に置き換えた内容と同じです。

(e)　構造属性項目，コンポーネント属性項目およびXML属性項目の比較（STRUCT）

［STRUCT］以下に出力される項目を次に示します。

(f)　注意事項

差分情報ファイルに出力される各情報の注意事項を次に示します。

一つの構造に対する比較は，グローバル名が一致するコンポーネント同士が比較され，差分が出力されます。ただし，ルートは名称に関係なく必ず比較されます。また，MDLエディタのマージコマンドでフォーマット名だけ変更したコンポーネント同士は，比較の対象となります。

グローバル名が一致するコンポーネントでも，型と構造の種別を変更した場合は，構造属性の比較はされません。

XML属性は，構造の子コンポーネントの下で比較されます。ただし，ルート構造直下のXML属性だけ，構造の下（子コンポーネントの比較前）で比較されます。

構造の子コンポーネント及びXML属性の定義情報（兄弟順序や定義の有無）の差分は，リスト情報として変更位置，追加，及び削除の情報が出力されます。

型，セパレータ，及び変数は，同名の要素同士が比較されます。追加又は削除された要素に対しては，名称が出力されます。

(2)　属性項目比較の記述形式

各属性項目の差分情報の記述形式を次に示します。なお，差分がない場合は出力されません。

項目タイトル:
（TAB）[b] 変更前の内容
（TAB）[a] 変更後の内容

（凡例）

（TAB）：タブを表します。

[b]：変更前を表します。

[a]：変更後を表します。

(3)　値定義比較／列挙値比較の記述形式

値定義比較／列挙値比較の記述形式を次に示します。マージ前後の両方のフォーマットで値が定義されている場合に出力されます。

（凡例）

（TAB）：タブを表します。

[b]：変更前を表します。

[a]：変更後を表します。

注※

値エラーチェック解除指定は，［値定義］ダイアログで「他の値が現れてもエラーにしない」を選択した場合に記述されます。選択しない場合は空欄になります。

(4)　記述例

差分情報ファイルの記述例を次に示します。

付録F　ファイルのバージョンとトランスレータのサポート範囲

FDLファイル及びMDLファイルのバージョンと，項目長やデータサイズなどに関するトランスレータのサポート範囲について説明します。

＜この節の構成＞

付録F.1　ファイルのバージョンとInterschemaのバージョンとの対応

付録F.2　トランスレータのサポート範囲

付録F.1　ファイルのバージョンとInterschemaのバージョンとの対応

FDLファイル及びMDLファイルは，ファイルの作成に使用したエディタによってバージョンが異なります。ここでは，ファイルのバージョンとInterschemaのバージョンとの対応について説明します。なお，FDLファイル及びMDLファイルは上位互換です。例えば，電子データ交換ツールで作成したFDLファイル及びMDLファイルは，Interschemaで編集できますが，Interschemaで作成したFDLファイル及びMDLファイルを電子データ交換ツールで編集することはできません。

表F-1　 FDLファイル及びMDLファイルのバージョン一覧

ファイルのバージョン
Interschemaのバージョン
説明

1
－
電子データ交換ツールで作成されたファイル。
初期のバージョン。

2
－
電子データ交換ツールで作成されたファイル。
Sea-NACCSフォーマット（旧）を含む。

3
－
電子データ交換ツールで作成されたファイル。
RDB接続フォーマット又はJEDICOS文字コード（JISE）を含む。

10
01-00
なし。

11※
01-00～01-02
バージョン10から追加された文字コードを含む。

16
02-00～
なし。

20
03-00～
なし。

21
03-01～
Sea-NACCSフォーマットを含む。

（凡例）

－：該当するInterschemaのバージョンはありません。

注※

このバージョンのファイルは，次に示すバージョンのInterschemaでは使用できません。

Cosminexus Interschema 01-00（Windows版）

Cosminexus Interschema - Definer 01-00（Windows版）

Cosminexus Interschema 01-00（HP-UX版）

Cosminexus Interschema 01-01（HP-UX版）

付録F.2　トランスレータのサポート範囲

トランスレータのサポート範囲について説明します。Interschemaでは，CIIやEDIFACTなどの規格は，トランスレータのサポート範囲を超えない範囲でサポートされています。

表F-2　トランスレータのサポート範囲

項目 | サポート範囲
項目長 | 最大2,000,000,000バイト
数値桁数 | 最大30桁（小数部は最大29桁）
繰り返し数 | 最大2,000,000,000
ネスト数 | 最大2,000,000,000
項目数 | 最大2,000,000,000
データサイズ | 最大4,000,000,000

付録G　CIIシンタックスルールのサポート範囲

InterschemaのCIIシンタックスルールのサポート範囲について説明します。

＜この節の構成＞

付録G.1　対応するバージョン

付録G.2　サポート機能基準との比較

付録G.3　エラーコードの対応

付録G.4　トランスレータの対応

付録G.5　EIAJ標準メッセージの対応範囲

付録G.1　対応するバージョン

Interschemaは，CIIシンタックスルールのバージョンは1.51，2.10，及び3.00に対応しています。CII2.10又はCII3.00でデータを変換する場合は，CII3フォーマットを使用します。CII1.51でデータを変換する場合は，CII3フォーマット又は従来のCIIフォーマットのうちどちらかを使用します。

バージョン1.10又は1.11で作成されたCII標準形式のデータは，そのまま入力データとして使用できます。バージョン1.10又は1.11のデータとして出力する場合には，次の対応が必要です。

CII 1.51で追加された構造（バイナリデータ）は使用しない。

シンタックスのバージョンを表す要素（メッセージグループ・ヘッダの「シンタックスIDバージョン」）に，対応させたいバージョンの値をマッピングしたMDLファイルで変換する。

付録G.2　サポート機能基準との比較

CIIサポート機能基準とInterschemaのサポート範囲の比較を次に示します。

表G-1　CIIサポート機能基準との比較

基準機能項目
Interschemaでのサポート範囲

項目属性
X※1
混在文字列型属性で対応

B
バイト列型などで対応

K
2バイト文字列型属性で対応

9
暗黙的小数点付数値型又は整数型属性で対応

N
実数型属性で対応

Y
日付型属性で対応

項目長
X
2,000～32,767文字
最大32,767バイト
数値型属性は最大30桁（小数部は最大29桁）

B
～32,767バイト

K
1,000～32,766文字

N
18～30桁

9
18～30桁

Y
6桁，8桁

標準メッセージ
32,750バイト～
無制限

ネスト3レベル以上
無制限

繰り返し数1,000回以上
最大999,999,999

最大項目数200項目以上
無制限

オプション
通常／分割モードの選択
対応（メッセージグループ・ヘッダで指定されたモードに従う）

縮小／拡張モードの選択
対応（メッセージグループ・ヘッダで指定されたモードに従う）

非透過モード
非サポート

TYPE-E
非サポート

バイナリデータの扱い
対応

短縮メッセージグループ※2
入力フォーマットだけ対応

運用メッセージ
の出力
エラー情報メッセージ
対応

受信確認メッセージ
対応

0件メッセージ
対応

同報ヘッダ
対応

注※1

CIIフォーマットでは，１バイト文字列型属性で対応しています。

注※2

CIIフォーマットでは，対応していません。

トランスレータが扱えるデータのサイズは，最大4,000,000,000バイトです。表G-1のサポート範囲は，トータルデータサイズが最大値を超えない範囲でサポートされます。

付録G.3　エラーコードの対応

CIIが定めるエラーコードを次に示します。トランスレータの実行時オプションで，エラー情報メッセージ又は受信確認メッセージの出力を指定した場合，トランスレータが出力するエラーメッセージに対応したエラーコードを設定して，CII運用メッセージを出力します。

表G-2　エラーコードの対応

エラーコード
エラー内容
対応するトランスレータの
エラーメッセージ番号※

（スペース）
エラーなし
－

01
取り決め以外の情報区分コード
－

02
メッセージグループ・ヘッダが見付からない
42

03
メッセージグループ・トレーラが見付からない
43

04
シンタックスIDの不正
38

05
分割識別子シーケンスエラー
40

10
未定義制御タグの検出
47

11
不正データタグの検出
－

12
マルチ明細ヘッダが実行形式SMテーブル（変換テーブル）上にない
－

13
マルチ明細トレーラが実行形式SMテーブル（変換テーブル）上にない
－

14
ローカル側（標準側）繰り返しが標準側（ローカル側）繰り返しを超えた
－

15
データのレングスが最大値を超えた
50

16
チェックサム項目の値が数値ではない
49

17
数値変換の項目の値が数値ではない
－

18
標準側データ長がローカル側データ長より大きい
－

19
レコード区分がDではない（メッセージが見付からない）
44

20
過大レコード長
－

21
メッセージトレーラ（X'FE'）がない
－

22
負のデータあり（9属性の時など）
－

30
シーケンスNo.が昇順ではない
41

31
チェックサムの数値がメッセージグループ・トレーラ上の数値と一致しない
11

32
実行形式SMテーブルサーチ不能
（対応する変換テーブルなし）
－

33
不正文字コードの検出
7，34

34
非透過モード時のメッセージ長不正
－

35
縮小モード中のマルチ明細のネスト，又は拡張モードマルチ明細ヘッダあり
46

36
不正日付の検出
－

40
UNAセグメントの不正
－

41
UNBセグメントなし
－

42
UNHセグメントなし
－

43
UNTセグメントなし
－

44
UNZセグメントなし
－

81
交換エラー
22～33，35，36，39，45，48，50

82
同報エラー
51

99
その他のエラー
14～20，52

（凡例）

－：該当しません。

注※

対応するトランスレータのエラーメッセージ番号とは，プレフィクス，出現元プログラム，メッセージレベルを除いた下4桁の数値です。例えば，メッセージ番号「42」はメッセージID「KBET0042T-E」に，メッセージ番号「11」はメッセージID「KBET0011T-W」に該当します。トランスレータのエラーメッセージについては，「付録B　トランスレータのメッセージ」を参照してください。

付録G.4　トランスレータの対応

CII標準形式データの変換は，次のどれかを使用することを前提とします。

電子データ交換ツールの辞書

Interschemaの辞書

Windows版のトランスレータで提供するCII3フォーマット

＜この項の構成＞

(1)　データ入力時のチェック

(2)　データ出力時の値

(3)　ハッシュトータルチェック

(4)　TFD項目の省略

(5)　バイナリデータ

(6)　テストデータ

(7)　運用メッセージ

(1)　データ入力時のチェック

メッセージグループ・ヘッダの次の値をチェックします。

非透過モード
0x4D（'M'）の場合は未対応モードのためエラーとします

拡張モード
0x53（'S'）又は0x20（' '）の場合で，メッセージ中に拡張モード指示子が現れた場合はエラーとします

このほかに，メッセージデータに対して次の場合をエラーとします。

縮小モードでマルチ明細のネストがある

未定義／非対応データタグが出現した

(2)　データ出力時の値

メッセージデータ／バイナリデータを分割モード又は通常モードで出力するかは，メッセージグループ・ヘッダの分割モード要素に従います。CII3フォーマットの場合，出力データの形式はメッセージグループ・ヘッダのCIIシンタックスバージョン要素の値に従います。また，次の要素は変換したデータの内容に従って，マップ式の定義とは別に設定し直します。

同報ヘッダ
継続区分。

メッセージグループ・ヘッダ
フォーマットID，文字コード（8bit／16bit），非透過モード。

バイナリデータ・トレーラ
最終ユニット有効長，全ユニット数。

メッセージグループ・トレーラ
最終シーケンス番号，ハッシュトータル1，2。

メッセージグループ・ヘッダ，トレーラで使用できない文字がある場合は，フォーマットの不正文字コード置換が指定されていてもエラーとします。また，縮小モードでマルチ明細がネストする場合もエラーとします。

(3)　ハッシュトータルチェック

CIIフォーマットでは，メッセージグループ・ヘッダでトータル項目の指定がある場合，変換データのハッシュトータルチェックを実施します。通常はCII標準の計算方式（属性の定義に関係なく小数部なしで計算）に従いますが，次の場合では，EIAJ標準の計算方式（小数部を意識し，メッセージグループ・トレーラの値は小数部3桁で出力）にも従います。

CII標準形式データをローカル形式データに変換する場合（入力時）
データがEIAJ標準に従うと見なす場合，EIAJ標準及びCII標準の計算方式で値をチェックします。EIAJ標準，CII標準の計算方式どちらにも一致しない場合にワーニングエラーとします。

ローカル形式データをCII標準形式データに変換する場合（出力時）
実行時オプション「-EIAJHASH」を指定し，かつデータがEIAJ標準に従うと見なす場合，EIAJ標準の計算方式で値を出力します。このほかの場合ではCII標準の計算方式で出力します。

データがEIAJ標準に従うと見なす条件
データがEIAJ標準に従うと見なす条件は，メッセージグループ・ヘッダのBPID版の値が「1x」（xは任意）であることです。

なお，トータル項目に指定されているTFD項目の要素が数値と見なせない場合，その要素を加算の対象から外します。

CIIフォーマットで，EIAJ標準の計算方式で値をチェックするには，EIAJ標準メッセージで使用される数値属性項目のTFDデータタグ番号と小数部桁数を，EIAJハッシュ用ファイル「ethash.ini」に設定しておく必要があります。設定方法については，「5.3(3)　EIAJハッシュ用ファイル「ethash.ini」の設定」を参照してください。なお，CII3フォーマットでは，ethash.iniの定義は不要です。

(4)　TFD項目の省略

CIIフォーマットでは，実行時オプション「-CIIT」を指定してCII標準データを出力する場合，省略の対象となるTFD項目は出力しません。要素（データエレメント）の内容が次の条件にあてはまるTFD項目が省略の対象となります。

X属性／K属性で，すべてスペース。

9属性／N属性／Y属性で，数値として「0」（±0.0も0と見なす）。

B属性で，各バイトがすべて「0x00」。

省略の対象となるTFD項目の属性とデータタグ番号の対応を，CIIデータタグファイル「etciitag.ini」に設定しておく必要があります。設定方法については，「5.3(2)　CIIデータタグファイル「etciitag.ini」の設定」を参照してください。なお，CII3フォーマットでは，省略できるTFD項目は常に出力されません。また，etciitag.iniの定義は不要です。

また，マルチ明細（ネストしたマルチ明細も含めて）中のすべてのTFD項目が省略された場合，マルチ明細そのものの省略は次のとおりです。

縮小モードの場合
マルチ明細ヘッダ，マルチ明細トレーラだけ出力します。

拡張モードの場合
マルチ明細全体を省略します。

(5)　バイナリデータ

CIIフォーマットでは，バイナリデータ（ユニット部分）を一つの要素として，その前にバイナリデータ長要素（バイナリデータの長さを表す要素）を設定してあります。CII標準形式データを入力する場合はバイナリデータ長要素を自動生成します。CII標準形式データを出力する場合，バイナリデータ長要素に定義された長さ分のデータを，CII標準の形式に変換して出力します。

(6)　テストデータ

入力データがテスト用のデータだった場合，テスト用のデータであることを示すメッセージ（インフォメーション）を出力します。メッセージグループ・ヘッダの運用モードが「0x31」の場合は，テスト用のデータです。

(7)　運用メッセージ

実行時オプション「-CIIR」又は「-CIIE」を指定して出力された，受信確認メッセージ又はエラー情報メッセージは，入力する1メッセージグループにつき1メッセージデータを出力します。複数のメッセージグループデータを入力した場合，入力データ中の連続するメッセージグループで，「発信VANコード」「発信センタコード」「発信者コード」，「受信VAN」「受信センタコード」「受信者コード」，「BPID機関」「BPIDサブ機関」「BPID版」が同じメッセージグループに対応するデータを，一つのメッセージグループとして出力します。

入力するデータにエラーがあり，メッセージグループ・トレーラまでを解釈できない場合は，該当するメッセージグループ・トレーラの部分をスペースにして運用メッセージを出力します。

付録G.5　EIAJ標準メッセージの対応範囲

EIAJ標準メッセージのデータとして変換できる制限範囲を次に示します。辞書をベースとしてデータを変換する場合には，EIAJ 1D版の辞書を使用してください。

なお，トランスレータが変換の対象データをEIAJ標準に従うと見なす条件は，メッセージグループ・ヘッダのBPID版の値が「1x」（xは任意）であることです。

分割／縮小モードを使用する。

N属性，K属性項目を使用しない。

240以上のタグ番号（項目No）を使用しない。

240バイト以上の長さを持つデータ項目を使用しない。

明細番号付マルチ明細，マルチ明細のネストを使用しない。

EIAJ標準形式の出力データを変換する場合に，ハッシュトータルチェックを実施するときは，実行時オプション「-EIAJHASH」を指定する（又は小数部3桁の9属性項目を指定する)。

文字セットは標準のものを使用する（8bit JIS）。

最大メッセージ長を32,767バイト以下にする。

付録H　UN/EDIFACTのサポート範囲

InterschemaのUN/EDIFACTのサポート範囲について説明します。

＜この節の構成＞

付録H.1　対応するバージョン

付録H.2　サポート機能基準との比較

付録H.3　エラー情報

付録H.4　トランスレータの対応

付録H.1　対応するバージョン

Interschemaが対応するUN/EDIFACTのバージョンは，Version.4の中のPart1，Part2，Part3，Part8です。

＜この項の構成＞

(1)　EDIFACTフォーマットでVersion.1～3のデータを変換する場合

(2)　EDIFACT4フォーマットでVersion.1～3のデータを変換する場合

(1)　EDIFACTフォーマットでVersion.1～3のデータを変換する場合

Version.1～3で作成されたUN/EDIFACTのデータを入力データとして使用する場合，セグメントの明示的なネスト表現部分は無条件に読み飛ばします。Version.1～3のデータとして出力する場合には，次の対応が必要です。

Version.4で追加された構造（INTERACTIVE，パッケージなど）は使用しないでください。
なお，サービスセグメント関連のVersion.4とVersion.1～3の間で，次に示す相違点があります。

表H-1　サービスセグメント関連の相違点（Version.4とVersion.1～3）

コンポーネント | Version.4 | Version.1～3
UNG | n0038，S006，S007，n0051，S008は選択（Conditional）です。 | n0038，S006，S007，n0051，S008は必須（Mandatory）です。
UNH | S016，S017，S018が追加されました。 | －
S001 | n0080，n0133が追加されました。 | －
S002 | n0042が追加されました。 | －
S003 | n0046が追加されました。 | －
S009 | n0010，n0113が追加されました。 | －
n0008, n0014 | 英数字で35桁まで指定できます。 | 英数字で14桁まで指定できます。
n0017 | 数値8桁（CCYYMMDD）で指定します。 | 数値6桁（YYMMDD）で指定します。
n0051 | 英数字で3桁まで指定できます。 | 英数字で2桁まで指定できます。
n0074 | 10桁まで指定できます。 | 6桁まで指定できます。

（凡例）

－：該当しません。

注

n付きのコンポーネントは要素を表します。

UNAセグメントなしでUNOB文字セットのデータを出力する場合，FDLエディタでEDIFACTフォーマットを次のように修正したFDLファイルを使用したMDLファイルで変換します。修正する内容を次に示します。

INTERCHANGE構造から子コンポーネントUNAを削除する。

ROOT構造のセパレータ指定で，解放文字の指定を削除する。

セパレータ定義で，値をUNOB文字セットの場合の初期値へ変更する。UNOB文字セットの場合の初期値を次に示す。

シンタックスのバージョンを表す要素（0002 Syntax Version Number要素）に，対応させたいバージョンの値をマッピングしたMDLファイルで変換します。

(2)　EDIFACT4フォーマットでVersion.1～3のデータを変換する場合

Version.1～3で作成されたUN/EDIFACTのデータを入力データとして使用する場合の対応は，EDIFACTフォーマットの場合と同じです。「(1)　EDIFACTフォーマットでVersion.1～3のデータを変換する場合」を参照してください。Version.1～3のUN/EDIFACTのデータを出力する場合は，Version.1～3用のEDIFACT4フォーマットを使用してMDLファイルを作成してください。

付録H.2　サポート機能基準との比較

UN/EDIFACTサポート機能基準とInterschemaのサポート範囲の比較を次に示します。

表H-2　UN/EDIFACTサポート機能基準との比較

基準機能項目
Interschemaでのサポート範囲

サイズ
項目数
無制限

項目長
文字列型属性は最大999,999,999バイト
数値型属性は最大30桁（小数部は最大29桁）

繰り返し数
最大999,999,999

ネスト数
無制限

メッセージ長
無制限

データ内容
文字コード
次の文字セットに対応

Aレベル文字セット（英大文字・数字）（UNOA）

Bレベル文字セット（7ビット文字）（UNOB）

拡張手法による日本語文字コード（ISO-2022-JP）（UNOX）

構造
バッチ
対応

対話型
対応

関連データ(パッケージ)
対応

トランスレータが扱えるデータのサイズは，最大4,000,000,000バイトです。表H-2のサポート範囲は，トータルデータサイズが最大値を超えない範囲でサポートされます。

付録H.3　エラー情報

トランスレータが独自に出力する受信確認，エラー情報メッセージはありません。変換時のエラー情報はログファイルとして出力します。ログファイルの参照方法については，「付録A　トラブルシューティング」を参照してください。

付録H.4　トランスレータの対応

UN/EDIFACT形式データの変換は，次のどれかを使用することを前提とします。

電子データ交換ツールの辞書

Interschemaの辞書

Windows版のトランスレータで提供するEDIFACT4フォーマット

属性型などFDL／MDLで定義される内容以外でのトランスレータの対応は次のとおりです。

＜この項の構成＞

(1)　テストデータ

(1)　テストデータ

入力データがテスト用のデータだった場合，テスト用のデータであることを示すメッセージ（インフォメーション）を出力します。テストフラグが格納されている要素（0035 Test Indicator）の値が「1」から「4」までの場合は，テスト用のデータです。

付録I　JEDICOSのサポート範囲

InterschemaのJEDICOSのサポート範囲について説明します。

＜この節の構成＞

付録I.1　対応するバージョン

付録I.2　サポート機能基準との比較

付録I.1　対応するバージョン

Interschemaが対応するJEDICOSのバージョンは，Version.2です。

付録I.2　サポート機能基準との比較

UN/EDIFACTと同じです。「付録H.2　サポート機能基準との比較」の「表H-2　UN/EDIFACTサポート機能基準との比較」を参照してください。ただし，文字コードにはUN/EDIFACTのUNOXを使用しています。

付録J　Sea-NACCSのサポート範囲

InterschemaのSea-NACCSのサポート範囲について説明します。

＜この節の構成＞

付録J.1　対応するバージョン

付録J.2　サポート機能基準との比較

付録J.3　エラー情報

付録J.4　トランスレータの対応

付録J.1　対応するバージョン

Interschemaでは，次の表に示す規定内容に従います。

表J-1　Interschemaで従う規定内容

規定内容
Sea-NACCSフォーマット

1999年6月現在の規定内容（1999年10月運用開始）

Sea-NACCS EDI電文フォーマット（旧）

Sea-NACCS EDIFACT電文フォーマット（旧）

2008年6月現在の規定内容（2008年10月システム更改）

Sea-NACCS EDI電文フォーマット

Sea-NACCS EDIFACT電文フォーマット

なお，Sea-NACCS EDIFACT電文でのシンタックスルールはVersion.3，文字セットはUNOAです（ただし，Sea-NACCSでの規定を優先します）。

付録J.2　サポート機能基準との比較

Sea-NACCS EDI電文のサポート機能基準とInterschemaでのサポート範囲の比較を次に示します。

表J-2　Sea-NACCS EDI電文サポート機能基準との比較

基準機能項目
Interschemaでのサポート範囲

属性
an型
1バイト文字列型で対応（文字セットはJIS7A）

n型
整数又は実数型で対応（文字セットはJIS7A）
ただし，30桁を超える項目は文字列型で対応
日時を表す場合は，日時型（日付，時刻，日付時刻）でも対応（推奨は整数型）

j型
混在文字列型で対応（文字セットはEUC）

文字コード
－
JIS7A又はEUCで対応

その他
電文分割※¹
未サポート

CSV形式※²
未サポート

XML電文※³
未サポート

（凡例）

－：該当しません。

注※1

Sea-NACCSフォーマット（旧）の場合，通関情報処理センターのセンターホストから出力される処理結果電文が複数に分割されているときは，トランスレータで変換（入力）する前に電文を組み立てる必要があります。

注※2

管理資料が該当します。

注※3

システムとしては対応しません。

Sea-NACCS EDI電文長は最大500,000バイトです。Interschemaでは，Sea-NACCS EDI電文長についてサイズの制限はありません。

付録J.3　エラー情報

トランスレータが独自に出力する受信確認，エラー情報メッセージはありません。通関情報処理センターのセンターホストから返ってくる受信確認，エラー情報メッセージは，Sea-NACCS EDI電文又はSea-NACCS EDIFACT電文の1メッセージとして変換できます（トランスレータにとっては，種別は入力になります）。

付録J.4　トランスレータの対応

変換処理は，前提として使用するものがフォーマットによって次のように異なります。

Sea-NACCS EDI電文フォーマット（旧），及びSea-NACCS EDIFACT電文フォーマット（旧）の場合
電子データ交換ツールの海上貨物通関用辞書を使用することを前提とします。

Sea-NACCS EDI電文フォーマット，及びSea-NACCS EDIFACT電文フォーマットの場合
Interschemaがサンプルとして提供するフォーマットを使用することを前提とします。

属性型などFDL／MDLで定義される内容以外でのトランスレータの対応は次のとおりです。

＜この項の構成＞

(1)　Sea-NACCS EDI電文を入力する場合（処理結果通知電文，出力情報電文）

(2)　Sea-NACCS EDI電文を出力する場合（処理要求電文）

(3)　Sea-NACCS EDIFACT電文を変換する場合

(1)　Sea-NACCS EDI電文を入力する場合（処理結果通知電文，出力情報電文）

Sea-NACCS EDI電文を入力データとして変換する場合，FDL／MDLファイルで定義されているすべてのコンポーネントのデータが現れる前に入力データが終了したときは，入力データ終了以降に相当するコンポーネントのデータはスペースが入力されたものとして扱います。この場合，数値属性の場合は値「0」が入力されたことになります。

(2)　Sea-NACCS EDI電文を出力する場合（処理要求電文）

Sea-NACCS EDI電文を出力データとして変換する場合，電文末尾のスペース項目をカットして，電文長も補正します。このほかの場合，次のように変換します。

マップ式が評価できない場合（入力データの出現回数が少ない場合など）は，デフォルト式の値を出力します。

NULLマップ式が定義された要素に対しては，スペースを出力します。

実行時オプション「-SNCODE」が指定されている場合，文字コードチェックを厳密に実施します（これはSea-NACCSで規定する文字コードと，Interschemaで扱う文字コードの範囲が異なるためです）。

(3)　Sea-NACCS EDIFACT電文を変換する場合

Sea-NACCS EDIFACT電文を変換する場合，FDL／MDLファイル内で定義されている以外には，特別な変換処理はされません。通常のUN/EDIFACT形式データとは次の点が異なります。

テストモードの判定がありません（Sea-NACCSではテストフラグを使用しないため，通常のデータとテスト用のデータを区別できません）。

処理要求電文（トランスレータでは出力）の場合，実行時オプション「-SNCODE」が指定されているときに，文字コードチェックを厳密に実施します。

付録K　文字コード

トランスレータが扱う文字コード，及び文字種別について説明します。また，文字コード間での変換，及びEBCDIC／EBCDIKのコードについても説明します。

＜この節の構成＞

付録K.1　文字コード一覧

付録K.2　文字種別

付録K.3　文字コード変換

付録K.4　EBCDIC／EBCDIKのコード表

付録K.1　文字コード一覧

トランスレータが扱う文字コードの一覧（詳細）を次に示します。

表K-1　文字コード一覧（詳細）

コード指定子
コード範囲 0x
<文字種別>※1
種別
説明

JIS8
<0201R> 00-7f
<0201K> a1-df
1バイト

JIS-X0201 (8bit)

JIS-X0201をフルサポートしています。

JIS7
<ISO> 00-7f
1バイト

ISO/IEC 646 (7bit)

一般的にはASCIIコードです。

JIS-X0201のラテン文字部分として扱います。

JIS7A
<ISO> 20-60,7b-7e
1バイト

ISO/IEC 646 制御コードと英小文字を除く

UN/EDIFACT Aセット文字用コードです。

ISO8859
<ISO> 00-7f
<8859G1> a1-ff
1バイト

ISO-8859

GLはJIS7での扱いです。

GRは他コードへの変換できません。

EBCDIC
－
1バイト

日立EBCDIC

JIS-X0201との間でテーブル変換します。

EBCDIK
－
1バイト

日立EBCDIK

JIS-X0201との間でテーブル変換します。

IBM_EBCDIC
－
1バイト

IBM EBCDIC

EBCDIC-C-US (cp00281)です。

JIS-X0201との間でテーブル変換します。

かな文字は含みません。

IBM_EBCDIK
－
1バイト

IBM EBCDIK

EBCDIC-JP-Kana (cp00290拡張前)です。

JIS-X0201との間でテーブル変換します。

英小文字は含みません。

JISK
<0208>[1st] 21-7e
<0208>[2nd] 21-7e
2バイト

JIS-X0208 (JIS漢字)

JIS-X0208-1990です。

文字チェックはUnicodeテーブルとのマッチングによって行います。

JISKS
JISKを参照
2バイト

JIS-X0208 シフトIN/OUT付き

JISKに対してシフトコードを付けたものです。

開始：0x1B2442（2バイト文字へ遷移）

終了：0x1B284A（1バイト文字へ遷移）

終了シフトコード以降は，JIS-X0201のスペース文字(0x20)だけ許します。ただし，データとしては扱いません。

KEIS
(基本)[1st] a1-cf
(基本)[2nd] a1-fe
(拡張)[1st] d0-fe
(拡張)[2nd] a1-fe
(ユーザ)[1st] 41-a0
(ユーザ)[2nd] a1-fe
2バイト

KEIS (日立漢字コード)

KEIS’83 （KEIS’90で追加された文字にも対応）です。

JIS-X0208との間で変換できます。

KEISS
KEISを参照
2バイト

KEIS シフトIN/OUT付き

KEISに対してシフトコードを付けたものです。

開始：0x0A42（2バイト文字へ遷移）

終了：0x0A41（1バイト文字へ遷移）

終了シフトコード以降は，EBCDIKのスペース文字(0x40)だけ許します。ただし，データとしては扱いません。

SJISK
[1st] 81-9f, e0-ef
[2nd] 40-7e,80-fc
(IBM拡張)[1st] fa-fc
(IBM拡張)[2nd]40-7e,80-fc
(ユーザ)[1st] f0-f9
(ユーザ)[2nd] 40-7e,80-fc
2バイト

Shift-JIS 2バイトコード

SJISの2バイトコードだけで構成されます。SJISを参照してください。

IBM
[1st] 41-68
[2nd] 41-fe
(ユーザ)[1st] 69-7f
(ユーザ)[2nd] 41-fe
2バイト

IBM DBCS-Host (IBM漢字コード)

IBM'83です。

SJISとの間でテーブル変換します。

JEF
[1st] a1-fe※2
[2nd] a1-fe※2
(拡張)[1st] 41-7d, 7f
(拡張)[2nd] a1-fe
(ユーザ)[1st] 80-a0
(ユーザ)[2nd] a1-fe
2バイト

JEF (富士通漢字コード)

JIS-C6226-1978との間で変換できます。

JEF拡張領域，ユーザ定義文字を共に外字領域として扱います。

CJIS
<0208>[1st] 21-7e
<0208>[2nd] 21-7e
<0212>[1st] a1-fe
<0212>[2nd] 21-7e
2バイト

CII用 JIS-X0208 + JIS-X0212

CII 2.10以降で使用される組み合わせコードです。

JIS-X0212に対してMSB操作をします。

ISOJP
<ISO/0201R> 00-7f
<0208>[1st] 21-7e
<0208>[2nd] 21-7e
混在

ISO-2022-Jp

ISO-2022に従って7bitの範囲でASCIIとJIS-X0208を切り替える文字コードです。

JIS-X0201(かな)，JIS-X0212は使用できません。

シフトコードは次のとおりです。

0x1B284A：JIS-X0201 (ROMAN)

0x1B2440：JIS-C6226 (JIS-X0208-1978)

0x1B2442：JIS-X0208

Interschemaの文字コード変換で出力する場合，次のシフトコードは出力されません。

0x1B2842：ISO/IEC 646

SJIS
<0201R> 00-7f
<0201K> a1-df
[1st] 81-9f, e0-ef
[2nd] 40-7e,80-fc
(ユーザ)[1st] f0-f9
(ユーザ)[2nd] 40-7e,80-fc
(IBM拡張)[1st] fa-fc
(IBM拡張)[2nd]40-7e,80-fc
混在

Shift-JIS

1バイトコード：JIS-X0201

2バイトコード：JIS-X0208を変換したものです。

IBM拡張文字は，Unicodeとの間で変換できます。

EUC
<0201R> 00-7f
<0201K>(SC) 8e
<0201K> a1-df
<0208>[1st] a1-fe
<0208>[2nd] a1-fe
<0212>(SC) 8f
<0212>[1st] a1-fe
<0212>[2nd] a1-fe
(ユーザA)[1st] a1-fe
(ユーザA)[2nd] 21-7e
(ユーザB)[1st] f5-fe
(ユーザB)[2nd] a1-fe
混在

Extended UNIX Code

JIS-X0201(かな)とJIS-X0212に対してはシフトコード（1バイト，その文字だけに有効）を付けます。

ユーザ定義文字はA（EUC-HJの外字領域），Bどちらでも使用できます。

UNIC
(領域A)[1st] 00-4d
(領域A)[2nd] 00-ff
(領域I)[1st] 4e-9f
(領域I)[2nd] 00-ff
(領域R)(ユーザ)[1st] e0-f8
(領域R)(ユーザ)[2nd] 00-ff
混在

Unicode (UCS-2)

各文字を2バイトで表します。

JISコードとの変換は対応テーブルによります。

UCS4
UNICを参照
混在

Unicode (UCS-4)

各文字を4バイトで表します。変換テーブルはUNICと同様です。

UTF8
UNICを参照
混在

Unicode (UTF-8)

各文字をUCSの文字コードで実際に使用されているビット数に応じた長さで表します。

変換テーブルはUNICと同様です。

UTF16
UNICを参照
混在

Unicode (UTF-16)

U+10000からU+10FFFFの範囲をUnicode規格内で予約された領域を使い，二つの16ビットデータの組み合わせで１文字を表現（サロゲートペア）します。

サロゲートペア以外はUCS-2と同様です。

変換テーブルはUNICと同様です。

JISE
<0201R> 00-7f
<0201K> a1-df
<0208>[1st] 21-7e
<0208>[2nd] 21-7e
<0212>[1st] a1-fe
<0212>[2nd] a1-fe
混在

JEDICOS文字セット

ISO-2022に従ってJIS-X0201，JIS-X0208，JIS-X0212を切り替えます。

シフトコードは次のとおりです。

0x1B284A：JIS-X0201 (ROMAN)

0x1B2949：JIS-X0201 (かな)

0x1B2442：JIS-X0208

0x1B242944：JIS-X0212

Interschemaの文字コード変換で出力する場合，次のシフトコードは出力されません。

0x1B2842：ISO/IEC 646

0x1B2849：JIS-X0201 (かな)

0x1B2440：JIS-C6226 (JIS-X0208-1978)

0x1B242844：JIS-X0212

KEIS_EBCDIC_MIX
KEIS，EBCDICを参照
混在

KEIS+EBCDIC混在

Shift-In：0x0A41（1バイト文字へ遷移）

Shift-Out：0x0A42（2バイト文字へ遷移）

KEIS_EBCDIK_MIX
KEIS，EBCDIKを参照
混在

KEIS+EBCDIK混在

Shift-In：0x0A41（1バイト文字へ遷移）

Shift-Out：0x0A42（2バイト文字へ遷移）

IBM_EBCDIC_MIX
IBM，IBM_EBCDICを参照
混在

IBM+IBM_EBCDIC混在

Shift-In：0x0F（1バイト文字へ遷移）

Shift-Out：0x0E（2バイト文字へ遷移）

IBM_EBCDIK_MIX
IBM，IBM_EBCDIKを参照
混在

IBM+IBM_EBCDIK混在

Shift-In：0x0F（1バイト文字へ遷移）

Shift-Out：0x0E（2バイト文字へ遷移）

JEF_EBCDIC_MIX
JEF，IBM_EBCDICを参照
混在

JEF+IBM_EBCDIC混在

Shift-In：0x29（1バイト文字へ遷移）

Shift-Out：0x28（2バイト文字へ遷移）

JEF_EBCDIK_MIX
JEF，IBM_EBCDIKを参照
混在

JEF+IBM_EBCDIK混在

Shift-In：0x29（1バイト文字へ遷移）

Shift-Out：0x28（2バイト文字へ遷移）

（凡例）

1st：第1バイトです。

2nd：第2バイトです。

ユーザ：ユーザ定義文字です。

SC：シフトコードです。

1バイト：1バイト文字コードです。

2バイト：2バイト文字コードです。

混在：1バイト／2バイト混在文字コードです。

－：該当しません。

注※1

文字種別については，「付録K.2　文字種別」を参照してください。

注※2

2バイト文字の値として「0xa1a1」を除きます。

付録K.2　文字種別

トランスレータが扱う文字コードはJISコードを基本とし，それぞれの文字を次に示す文字種別に分類して操作します。

表K-2　文字種別一覧

文字種別
意味
説明

ISO
ISO/IEC 646
JIS-X0201 (ROMAN)と同様に扱います。
ISO/IEC 646の文字をJIS-X0201 (ROMAN)にそのまま代入できます。

0201R
JIS-X0201(ROMAN)
7bit JISです。ISO/IEC 646と同様に扱います。
0x00～0x1f：制御コード
0x20～0x7e：印字可能文字
0x7f：DEL

0201K
JIS-X0201(かな)
JIS-X0201のかな文字部分：0xa1～0xdf

0201K_G1
JIS-X0201(かな) G1
JIS-X0201(かな)と同様です。
解放文字処理などで文字種別（シフトコード）を区別するために使用します。

8859G1
ISO-8859(G1)
ISO-8859のG1(GR)文字部分：0xa1～0xff

C6226
JIS-C6226
JIS-X0208-1978です。
各バイトは0x21～0x7eの範囲となります。
JIS-X0208へ変換できます。
JIS-C6226からJIS-X0208-1983の変更は次のとおりです。

削除文字なし

追加文字あり

コード入れ替え 22文字

字形変更されたものあり

0208
JIS-X0208
JIS-X0208-1990です。
各バイトは0x21～0x7eの範囲となります。
トランスレータではJIS-X0208-1983とは区別しません。

0212
JIS-X0212
JIS-X0212-1990です。
各バイトは0x21～0x7eの範囲となります。
JIS-X0208との変換はできません。

0212_G1
JIS-X0212 G1
JIS-X0212と同様です。
解放文字処理などで文字種別（シフトコード）を区別するために使用します。

UTF
Unicode(サロゲートペア)
サロゲートペアで表される文字をUCS-4表現したものです。
Unicode内でだけ扱えます（UCS-2を除きます）。
UTF-16での1st値：0xd800～0xdbff
UTF-16での2nd値：0xdc00～0xdfff

KEIS_USER
KEISユーザ定義文字
1st値：0x41～0xa0
2nd値：0xa1～0xfe

IBM_USER
IBMユーザ定義文字
1st値：0x69～0x7f
2nd値：0x41～0xfe

JEF_USER
JEFユーザ定義文字
1st値：0x41～0x7d, 7f, 0x80～0xa0
2nd値：0xa1～0xfe

UCS2_USER
UCS2ユーザ定義文字
Unicodeのユーザ定義文字は，UCS-2の範囲だけ対応します。
1st値：0xe0～0xf8
2nd値：0x00～0xff

SJIS_USER
SJISユーザ定義文字
1st値0xfa～0xfcはIBM拡張漢字で，Unicode変換時は通常文字扱いとなります。
1st値：0xf0～0xfc
2nd値：0x40～0x7e, 0x80～0xfc

EUC_USER
EUCユーザ定義文字
[A]
　1st値：0xa1～0xfe
　2nd値：0x21～0x7e
[B]
　1st値：0xf5～0xfe
　2nd値：0xa1～0xfe

（凡例）

1st値：第1バイトの値です。

2nd値：第2バイトの値です。

付録K.3　文字コード変換

各文字コード間では，1バイト文字コードから2バイト文字コード，及び2バイト文字コードから1バイト文字コードへの変換はできません。1バイト文字コードと2バイト文字コード間の変換以外は，対応する文字種別及び値が存在するとき変換できます。ただし，ユーザ定義文字は変換できません。

なお，変換は1文字単位で処理されます。

文字コードと文字種別の変換の関連図を次に示します。

図K-1　文字コードと文字種別の変換の関連

文字コードと文字種別の詳細については，「付録K.1　文字コード一覧」及び「付録K.2　文字種別」を参照してください。

付録K.4　EBCDIC／EBCDIKのコード表

EBCDIC／EBCDIKのコード表を次に示します。

コード表のコードは16進表示です。横は上位４ビット，縦は下位４ビットを表します。各カラムの上段はコードの16進値，下段は対応文字（印字できる文字だけ表記）を表します。

＜この項の構成＞

(1)　EBCDICコードからJISコードへの変換

(2)　JISコードからEBCDICコードへの変換

(3)　EBCDIKコードからJISコードへの変換

(4)　JISコードからEBCDIKコードへの変換

(5)　IBM_EBCDICコードからJISコードへの変換

(6)　JISコードからIBM_EBCDICコードへの変換

(7)　IBM_EBCDIKコードからJISコードへの変換

(8)　JISコードからIBM_EBCDIKコードへの変換

(1)　EBCDICコードからJISコードへの変換

（凡例）

(SP)：スペース文字です。

(2)　JISコードからEBCDICコードへの変換

（凡例）

(SP)：スペース文字です。

(3)　EBCDIKコードからJISコードへの変換

（凡例）

(SP)：スペース文字です。

(4)　JISコードからEBCDIKコードへの変換

（凡例）

(SP)：スペース文字です。

(5)　IBM_EBCDICコードからJISコードへの変換

（凡例）

(SP)：スペース文字です。

(6)　JISコードからIBM_EBCDICコードへの変換

（凡例）

(SP)：スペース文字です。

(7)　IBM_EBCDIKコードからJISコードへの変換

（凡例）

(SP)：スペース文字です。

(8)　JISコードからIBM_EBCDIKコードへの変換

（凡例）

(SP)：スペース文字です。

付録L　用語解説

Interschemaで使用する用語について説明します。

（英字）

ANSI X12

ANSI（American National Standards Institute：アメリカ規格協会）が定めたアメリカ国内標準規格です。

CIIシンタックスルール

CII（Center for the Informatization of Industry：産業情報化推進センター）が定めたシンタックスルールです。EIAJ標準を基に作成され，基本的にEIAJシンタックスルールを内包する内容です。CIIシンタックスルールと各業界が開発した標準メッセージとを合わせてCII標準と呼びます。

DTD

Document Type Definitionの略です。XML文書で使用するタグの属性や階層構造や出現順序などを定義したものです。XML文書はこのDTDで定義した文法に従って記述します。

EDI

EDI（Electronic Data Interchange：電子データ交換）とは，「異なる企業間で，商取引のためのデータを，通信回線を介して標準的な規約（できる限り広く合意された各種規約）を用いて，コンピュータ（端末も含む）間で交換すること」（EDI推進協議会（JEDIC：Japan Electronic Data Interchange Council））を意味します。

EDIFACT

EDIFACT（Electronic Data Interchange for Administration, Commerce and Transport：行政，商業，運輸のための電子データ交換に関する規格）は，ISOに登録されたEDIシンタックスルールです。

EIAJ標準

EIAJ（Electronic Industries Association of Japan：日本電子機械工業会）が定めた同業界のEDI標準規格です。日本で初めて可変長フォーマットを採用したシンタックスルールです。

EJB（Enterprise Java Beans）

Javaでサーバサイドのプログラムを作成するときに使用するアプリケーションモデルです。

EMPTY要素

要素に内容がない場合を示します。

FDLファイル

FDLエディタで定義したファイルです。ファイルの拡張子は，「.fdl」です。

Java VM（Virtual Machine）

Javaコンパイラを使って生成した中間コードによるプログラムを解釈・実行する環境です。

JEDICOS

JEDICOS（Japan EDI for Commerce Systems）は，財団法人 流通システム開発センターによって定められた国内流通業界でのEDIの標準規格です。EDIシンタックスルールはEDIFACTに従います。

JNI（Java Native Interface）

Javaからプラットフォーム固有の機能を呼び出す際に利用する機能です。

MDLファイル

変換する情報を定義したファイルです。ファイルの拡張子は，「.mdl」です。

Sea-NACCS

Sea-NACCS（Sea-Nippon Automated Cargo Clearance System：海上貨物通関情報処理システム）は，厚生労働省や財務省などの各省庁と輸出入関連の民間業界をネットワークで接続し，通関に関する一連の手続きを処理するシステムです。このシステムで扱う電文には，Sea-NACCS形式のEDI電文（Sea-NACCS EDI電文）とEDIFACT形式の電文（Sea-NACCS EDIFACT電文）があります。

このシステムの稼働開始及び更改の時期は次のとおりです。

1999年10月
システムの稼働を開始

2008年10月
サービスレベルの維持と向上，国際物流の情報化推進などを目的として，システムを更改

Servlet

JavaでWebのコンポーネントを構築するためのインタフェースです。

TFD

TFD（Transfer Form Data）はCII標準又はEIAJ標準で可変長データエレメントを扱う形式で，データタグ（データエレメントの番号を表す），レングスタグ（データエレメントの長さを表す），データエレメント（データ本体）から構成されます。

UN/EDIFACT

UN/EDIFACT（United Nations Rules for Electronic Data Interchange for Administration, Commerce and Transport：行政，商業，運輸のための電子データ交換に関する国連規格）は，国際連合によって定められた国際的なEDI標準規格です。

white space

XMLデータのタブ，改行，復帰，スペースの各文字の任意の組み合わせのことです。

XML

Extensible Markup Languageの略です。W3Cが制定したマークアップ言語で，インターネット上でデータのやり取りを実現します。このマニュアルでは，XML形式で記述された文書をXML文書と呼びます。

XML文書

XML形式で記述された文書です。

（ア行）

アイテム

画面上（FDMエディタ及びMDLエディタ）のツリー（木構造形式のGUI部品）やリスト（表形式のGUI部品）内に表示されるオブジェクトです。型，セパレータ，変数，構造，XML属性などを表します。

（カ行）

外部サブセット

XMLの文書型宣言の外部サブセットは，文書型宣言の外部パラメタ実体で宣言される，名前の付けられない外部実体に格納されるDTD宣言の集合を指します。外部実体とは，その宣言が格納されている場所とは，別の外部に内容が格納されている実体のことです。

型

データ中の項目となる要素の属性，サイズや要素の受け取る値などを定義したものです。

空要素

内容がない要素のことです。XMLでは，開始タグの直後に終了タグを置くか，空要素タグを使って表します。空要素タグは，開始タグの末尾にある「＞」の直前に「/」を挿入したものです。

グローバル名

MDLファイル内で使用するコンポーネント（構造又は要素）の名前です。フォーマット名から目的とするコンポーネント名までを「@」でつないだ文字列です。

構造

変換するデータの構成を表す概念で，子コンポーネントを持ちます。C言語の構造体に相当します。

固定長方式

データ要素が決められた長さを持つ方式です。

コメント

XMLのコメントとは，プログラミング言語の場合と同じように，そのソースを読む人に向けられたメッセージのことです。

コンポーネント

エディタで定義された構造の構成メンバです。コンポーネントは構造又は型定義された要素です。

（サ行）

セパレータ

データを区切る記号です。CSVフォーマットのコンマや改行などが該当します。

（タ行）

デリミタ(セパレータ)方式

連続するデータ要素の区切りにデリミタ（セパレータ）を使用して可変長データを扱う方式です。UN/EDIFACT，ANSI X12などが該当します。

（ナ行）

内容モデル

XMLの子要素の型及び子要素の出現順序を制御する簡単な文法のことです。要素型宣言の一部として，ある型の要素としてありえる内容を記述します。

（ハ行）

フォーマット

変換するデータの構造を定義したものです。FDLエディタで定義します。

（マ行）

メッセージ

EDIで交換される情報の単位です。通常，1件の取引が一つのメッセージになります。

（ヤ行）

要素

FDLファイル／MDLファイルでは変換するデータの末端の構成要素で，構造の子供に相当する概念です。変換するデータ中の1項目に相当します。

XMLの場合は，文書の型ごとに定義される論理構造の1単位に相当します。要素は，開始タグと終了タグによって表現されます。

（ラ行）

レングスタグ方式

データ要素に対して，その長さ又は個数を表す数値情報を付けることで可変長データを扱う方式です。CII標準，EIAJ標準などが該当します。

ローカル名

FDLファイル内で使用するコンポーネント（構造又は要素）の名前です。

索引

[記号]
[数字]
[Ａ][Ｃ][Ｄ][Ｅ][Ｆ][Ｇ][Ｉ][Ｊ][Ｌ][Ｍ][Ｎ][Ｏ][Ｓ][Ｔ][Ｕ][Ｖ][Ｗ][Ｘ]
[ア行][カ行][サ行][タ行][ナ行][ハ行][マ行][ヤ行][ラ行]

(記号)

?

?

/AD

/AF

/ID

/IF

/IT

/OT

-CIIE

-CIIR

-CIIT

-CIIT

-CIIT〔機能説明〕

-CSV

-DEFMAP

-DSEPA

-DTM

-E

-EIAJHASH

-EIAJHASH〔機能説明〕

-ESEPA

-F

-FDS

-file

-FN

-IERR

-prop

-RELVL

-SERR

-SNCODE

-XDOC

-XND

-XVC

-XWS

¥n

¥n

¥n

$

$

$

%DEFAULT

%delay

%delay %next

%delay %next

%delay n

%delay n

%delayのマップ式

%FALSE

%NULL

%TRUE

%UNDEF

#

#

&

*

*

@

@@

(数字)

1種類のセパレータを使用したフォーマット（フォーマット「SEPA1」）

1バイト文字列

2バイト文字列

32bit対応のDLLの作成

(英字)

(Ａ)

ANSI X12

ANY要素

API

API

(Ｃ)

CII

CII1.51

CII2.10

CII3.00

CII3フォーマットの作成

CII3フォーマットの特徴

CII3フォーマットの変換の規則

CIIシンタックスルール

CIIシンタックスルールのサポート範囲

CIIデータタグファイル「etciitag.ini」

CIIデータタグファイル「etciitag.ini」の設定

CII標準

CSV

CSVフォーマットの作成

CSVフォーマットの特徴

CSVフォーマットの変換の規則

CURRENTDATE関数

C言語及びJava言語のインタフェースを混在させて使用する場合の注意事項

C言語の出口関数の作成

C言語の出口関数の実装例

C言語の出口関数の仕様

C言語の出口関数の定義

(Ｄ)

DateTimeクラス

DLPropertyクラス

DTD

DTDフォーマット挿入機能（/ADオプション）

DTDマージ機能（/IDオプション）

(Ｅ)

EBCDIC／EBCDIKのコード表

EDI

EDIFACT

EDIFACT4フォーマットの作成

EDIFACT4フォーマットの特徴

EDIFACT4フォーマットの変換の規則

EDI標準規格フォーマットのデータを変換できます

EIAJハッシュ用ファイル「ethash.ini」

EIAJハッシュ用ファイル「ethash.ini」の設定

EIAJ標準

EIAJ標準〔用語解説〕

EIAJ標準メッセージの対応範囲

EJB（Enterprise Java Beans）

EMPTY要素

EMPTY要素〔用語解説〕

ENVStringクラス

errlog.txt

errlog.txt

ETapir.dll

ETapir.lib

etciitag.ini

ethash.ini

etmerge

ettrans.ini

ettrans.ini〔ユーザ組み込み関数の定義〕

ETtrans2CreateMdlInfo

ETtrans2CreateThreadContext

ETtrans2End

ETtrans2Exec

ETtrans2GetDlProperty

ETtrans2Init

ETtrans2ReleaseDlProperty

ETtrans2ReleaseMdlInfo

ETtrans2ReleaseThreadContext

ETtrans2UpdateMdlInfo

ETtrans2UpdateThreadContext

ETtransEnd

ETtransEndT

ETtransExec

ETtransExecT

ETtransInit

ETtransInitT

ETtransLoadMap

ETtransUnLoadMap

ettransコマンド

ettransコマンドの戻り値

ExitFuncExceptionクラス

ExitFuncWarningクラス

ExtraErrorDataクラス

(Ｆ)

FDLエディタ

FDLエディタウィンドウ

FDLエディタの画面構成

FDLエディタのコマンド一覧

FDLエディタの操作

FDLでの定義情報

FDLファイル

FDLファイル作成時の注意事項

FDLファイルの作成手順

FDLファイルの保存

FDLファイルを変更した場合

FDLフォーマット挿入機能（/AFオプション）

FDLマージ機能（/IFオプション）

FileDataクラス

(Ｇ)

GETCOMPIF関数

GETCOMP関数

(Ｉ)

IF関数

IF関数の引数

INDEX関数

INDEX関数の引数

InputStreamDataクラス

Interschemaとは

Interschemaの機能

Interschemaの特長

Interschemaの目的

Interschemaバージョン1との互換API

(Ｊ)

Java VM（Virtual Machine）

Java言語の出口関数使用上の注意

Java言語の出口関数の作成

Java言語の出口関数の実装例

Java言語の出口関数の仕様

Java言語の出口関数の定義

Java言語の出口関数へのオブジェクト渡し

JEDICOS

JEDICOS〔文字コード使用時の注意点〕

JEDICOS〔用語解説〕

JEDICOSのサポート範囲

JNI（Java Native Interface）

jp.co.Hitachi.soft.interschema2.exitfuncパッケージのJavaクラス一覧

jp.co.Hitachi.soft.interschema2.exitfuncパッケージのクラスの概要

jp.co.Hitachi.soft.interschema2.exitfuncパッケージのクラスの仕様

jp.co.Hitachi.soft.interschema2パッケージのJavaクラス一覧

jp.co.Hitachi.soft.interschema2パッケージのクラスの概要

jp.co.Hitachi.soft.interschema2パッケージのクラスの仕様

(Ｌ)

LANG〔環境変数〕

LENGTH関数

(Ｍ)

makefileの作成

MDLInfoクラス

MDLエディタ

MDLエディタウィンドウ

MDLエディタの画面構成

MDLエディタのコマンド一覧

MDLエディタの操作

MDLでの定義情報

MDLファイル

MDLファイル作成時の注意事項

MDLファイルの検証

MDLファイルの作成手順

MDLファイルの保存

MDLファイル名

MERGELOG.txt〔/IDオプション指定時〕

MERGELOG.txt〔/IFオプション指定時〕

MERGELOG.txt〔/ITオプション指定時〕

(Ｎ)

NE

NULL

NULLマップ式

(Ｏ)

Optionクラス

OutputStreamDataクラス

(Ｓ)

Sea-NACCS

Sea-NACCS〔文字コード使用時の注意点〕

Sea-NACCS〔用語解説〕

Sea-NACCS EDIFACT電文

Sea-NACCS EDIFACT電文を変換する場合

Sea-NACCS EDI電文

Sea-NACCS EDI電文を出力する場合

Sea-NACCS EDI電文を入力する場合

Sea-NACCSのサポート範囲

Sea-NACCSフォーマットの作成

Sea-NACCSフォーマットの特徴

Sea-NACCSフォーマットの変換の規則

Servlet

StringDataクラス

SUM関数

(Ｔ)

TFD

TFD項目

TFD項目の省略

TranslateDataクラス

TranslatorExceptionクラス

Translatorクラス

(Ｕ)

UN/EDIFACT

UN/EDIFACT〔文字コード使用時の注意点〕

UN/EDIFACT〔用語解説〕

UN/EDIFACTサポート機能基準との比較

UN/EDIFACTのサポート範囲

UNDEFマップ式

UserExceptionクラス

［Userfunc_DllPath］セクション

［Userfunc_ExitfuncName］セクション

［Userfunc_JavaMethodName］セクション

［Userfunc_Mapfunc］セクション

［Userfunc_MapfuncGuide］セクション

［Userfunc_MaxId］セクション

［Userfunc_Option］セクション

［Userfunc_SlPath］セクション

(Ｖ)

VALUEMAP関数

VALUEMAP関数の引数

(Ｗ)

white space

(Ｘ)

XML

XML〔用語解説〕

XML属性

XML属性のマップ式評価

XMLデータのマッピング例

XMLフォーマットのデータを変換できます

XML文書

(ア行)

(あ)

アイテム

アイテム〔用語解説〕

値定義

値を持つ要素のマッピング

暗黙的小数部付数値

(い)

インストールディレクトリの設定

インタフェース

インタフェースの概要

インデクスの指定

インポートライブラリ

(う)

運用メッセージ

(え)

エラーコードの対応

エラー情報〔Sea-NACCS〕

エラー情報〔UN/EDIFACT〕

エラー発生時の処理〔トランスレータ〕

エラー発生時の処理〔マージツール〕

エラーレベル

演算子

演算子及び関数

(カ行)

(か)

開始／終了シフトコードを使用する文字列型

外部サブセット

解放文字

解放文字

解放文字の使用例

解放文字の定義

概要

カウンタの指定

カウンタをインクリメントする

カウンタを初期化する

型

型

型〔用語解説〕

型定義情報

型の定義

空要素

関数

簡単なデータ構造のフォーマット定義例

簡単なマッピング例

(き)

規格指定

既存ユーザ業務にデータ変換処理を組み込めます

共用ライブラリ検索パスの設定

共用ライブラリの作成（ワークステーションのOSの場合）

(く)

クラスパスの設定（Windowsの場合）

クラスパスの設定（ワークステーションのOSの場合）

繰り返し構造を持つメッセージのフォーマット（フォーマット「FIX2」）

グループ単位出力指定

グループ単位出力指定〔注意事項〕

グローバル名

グローバル名〔用語解説〕

(け)

桁あふれ時の指定

桁あふれ時の処理

(こ)

構造

構造

構造〔用語解説〕

構造「分納」の子コンポーネントのマップ式

構造「明細」の子コンポーネントのマップ式

構造「明細」のマップ式

構造全体を定義する

構造定義情報

構造の定義

構造の定義〔注意事項〕

構造のマップ式

構造を含んだマッピング

互換APIの関数一覧

互換APIの使用例

固定長形式のメッセージ「MSG1」のレングスタグ構造化（フォーマット「LT1」）

固定長形式のメッセージ「MSG2」のレングスタグ構造化（フォーマット「LT2」）

固定長形式フォーマットの定義

固定長方式

異なる属性型同士での変換

異なる分類の属性の型同士での変換可否

コメント

混在内容構造

混在文字列

コンポーネント

コンポーネント〔用語解説〕

コンポーネント定義情報

コンポーネントの出現回数を省略する

コンポーネント名

コンポーネント名の略記方法

(サ行)

(さ)

サービスセグメント関連の相違点（Version.4とVersion.1～3）

サイズ系指定

サイズ決定式

サイズ決定式

サイズ決定式

サイズ定義

作成したDLLのコピー

作成した共用ライブラリのコピー

サブコンポーネント

サブコンポーネント

差分情報ファイル

サポート機能基準との比較〔CIIシンタックスルール〕

サポート機能基準との比較〔JEDICOS〕

サポート機能基準との比較〔Sea-NACCS〕

サポート機能基準との比較〔UN/EDIFACT〕

(し)

式

式表記と出力規則

時刻

システム環境変数の設定（Windowsの場合）

システム環境変数の設定（ワークステーションのOSの場合）

システム情報ファイル「ettrans.ini」で定義が必要なセクション

システム情報ファイル「ettrans.ini」での実行時オプションの定義

システム情報ファイル「ettrans.ini」の記述に不正がある場合の動作

システム情報ファイル「ettrans.ini」の設定

システム情報ファイル「ettrans.ini」の定義

システムの処理

システムファイル

システムファイルの設定

実行時オプション

実行時オプションの定義

実行例

実数

出現回数決定式

出現回数決定式

出現するコンポーネントの選択条件の定義

出力エリアサイズの初期値の指定

出力データに対する規則

出力フォーマットビュー

順序決定式

順序決定式

順序決定式～順序決定値

条件式

条件式

条件式

条件式とNULLを使用したマッピング

条件式の定義

(す)

数字列

数値

数値要素「注文番号」「単価」「個数」の定義

ステータスバー〔FDLエディタ〕

ステータスバー〔MDLエディタ〕

(せ)

整数

セパレータ

セパレータ〔用語解説〕

セパレータ及び解放文字の定義

セパレータ形式フォーマットの定義

セパレータ定義情報

セパレータ定義方法

セパレータの使用例

セパレータの定義

セレクト情報

全体式と個別式

選択構造の定義

選択構造を定義する

選択構造を持つフォーマットのマッピング

(そ)

操作の概要〔FDLエディタ〕

操作の概要〔MDLエディタ〕

ゾーン形式(アンパック形式)数値

属性

その他出力時の規則

その他の属性の規則

(タ行)

(た)

対応するバージョン〔CIIシンタックスルール〕

対応するバージョン〔JEDICOS〕

対応するバージョン〔Sea-NACCS〕

対応するバージョン〔UN/EDIFACT〕

対策

ダイナミックリンクライブラリ（DLL）の作成（Windowsの場合）

代入のマップ式

ダミー構造

(ち)

注意事項〔ettransコマンド〕

注意事項〔マージツール〕

帳票「IN」のフォーマット

帳票「OUT」のフォーマット

(つ)

通常の出力形式

ツールバー〔FDLエディタ〕

ツールバー〔MDLエディタ〕

ツリー情報ファイル

ツリービュー

(て)

定義と変換の規則

定義内容と規則

定数

データ格納形式

データ型

データ出力時の値

データ入力時のチェック

データの変換

データ変換処理API（C言語）

データ変換処理API（C言語）実行時の注意事項

データ変換処理API（C言語）の概要

データ変換処理API（C言語）の関数一覧

データ変換処理API（C言語）の関数仕様

データ変換処理API（C言語）の機能概要

データ変換処理API（C言語）の実行順序

データ変換処理API（C言語）の使用例

データ変換処理API（C言語）を使用したプログラムの作成

データ変換処理API（Java言語）

データ変換処理API（Java言語）使用時の注意事項

データ変換処理API（Java言語）の概要

データ変換処理API（Java言語）の機能概要

データ変換処理API（Java言語）の使用例

データ変換処理API（Java言語）のパッケージ構成

データ変換処理APIの概要

データ変換処理APIを使用したプログラムの移行上の注意

データ変換の流れ

データをコピーする

出口関数移行上の注意点

出口関数の型に対応する警告時のデフォルト戻り値

出口関数戻り値の制限

テストデータ〔CIIシンタックスルール〕

テストデータ〔UN/EDIFACT〕

デフォルト式

デフォルト式

デフォルト式の定義

デフォルト値

デリミタ(セパレータ)方式

電子データ交換ツールからの移行上の注意

電子データ交換ツールとの機能差異

(と)

ドキュメントウィンドウ

ドキュメントビューウィンドウ

トラブルシューティング

トランスレータ

トランスレータが扱う文字コード

トランスレータでのデータ変換

トランスレータの機能差異

トランスレータのサポート範囲

トランスレータの対応〔CIIシンタックスルール〕

トランスレータの対応〔Sea-NACCS〕

トランスレータの対応〔UN/EDIFACT〕

トランスレータのメッセージ

(ナ行)

(な)

内容モデル

(に)

入出力データファイル名

入力データに対する規則

入力フォーマットビュー

(ハ行)

(は)

バイト列〔型の属性〕

バイト列〔定数〕

バイナリデータ

パック形式数値

ハッシュトータルチェック

ハッシュトータルチェック

パラメタファイル

(ひ)

引数

日付

日付時刻

日付時刻型

日付時刻型出力時の規則

日付時刻型の規則

日付時刻属性の埋め字

必須項目の指定

一つの要素に対するレングスタグ構造のフォーマット

評価順序遅延指定のマップ式

評価順序遅延の指定の注意事項

評価順序を遅延（待機）させるマップ式

(ふ)

ファイルのバージョン

フォーマット

フォーマット指定コンボボックス

フォーマット詳細情報

フォーマット情報

フォーマット情報ファイル

フォーマットセレクトタブ

フォーマット挿入機能とは

フォーマット挿入時の検証

フォーマットツリーリスト

フォーマットの検証

フォーマットの構造をツリー構造で定義できます

フォーマットの種類

フォーマットの挿入

フォーマットの挿入

フォーマットの定義

フォーマットの定義手順

フォーマットの定義内容

フォーマットのマッピングはドラッグ&ドロップで定義できます

フォーマット名

フォーマット名

フォーマット名の定義

複雑なデータ構造のフォーマット定義例

複雑なマッピング例

複数種類のメッセージを変換するフォーマットの定義（選択構造の定義）

複数種類のメッセージを持つ固定長形式のフォーマット（フォーマット「FIX」）

複数種類のメッセージを持つセパレータ形式のフォーマット（フォーマット「SEPA」）

複数種類のメッセージを持つレングスタグ形式のフォーマット（フォーマット「LT」）

複数データを変換するフォーマットの定義

複数のセパレータと解放文字を使用したフォーマット（フォーマット「SEPA2」）

符号付2進整数

符号無2進整数

不正文字コード置換指定

浮動小数文字列

不要文字削除指定

不要文字削除指定時の処理

プログラムの作成

プログラムの実行

(へ)

ヘッダ情報

ヘルプの表示

変換情報の定義時にユーザ作成の関数を使用できます

変換処理の流れ

変換の規則

変換の結果（XMLデータの場合）

変換のコマンド

変数式

変数式

変数式の評価規則

変数定義情報

(マ行)

(ま)

マージ機能とは

マージツール

マージツール「etmerge」

マージツールとは

マージログファイル〔/IDオプション指定時〕

マージログファイル〔/IFオプション指定時〕

マージログファイル〔/ITオプション指定時〕

マッピング

マッピング

マッピング機能（/ITオプション）

マッピング機能とは

マップ式

マップ式

マップ式

マップ式〔注意事項〕

マップ式出力機能（/OTオプション）

マップ式出力機能とは

マップ式の定義

マップ式の定義

マップ式の定義（XMLデータの場合）

マップ式ファイル

マップ式ファイル

マップビュー

(み)

右寄せ・左寄せと埋め字の指定

未使用コンポーネント指定

未使用の定義

未使用の定義

(む)

無限回出現コンポーネントのマップ式

(め)

メッセージ

メッセージ〔用語解説〕

メッセージ形式

メッセージデータの例

メッセージの見方

メニューバー〔FDLエディタ〕

メニューバー〔MDLエディタ〕

メモリ上のデータ

(も)

文字コード

文字コード指定

文字コード使用時の注意点

文字コード変換

文字種別

文字列〔型の属性〕

文字列〔定数〕

文字列型数値属性の埋め字

文字列型数値属性の入力形式

文字列型属性の埋め字

文字列要素「単位」の定義

戻り値

(ヤ行)

(ゆ)

ユーザ組み込み関数

ユーザ組み込み関数で使用する型

ユーザ組み込み関数の概要

ユーザ組み込み関数の設定手順

ユーザ組み込み関数の定義

ユーザ組み込み関数の出口関数の概要

ユーザフォーマットのデータを変換できます

ユティリティ

(よ)

要因

用語解説

要素

要素「金額」の定義

要素「単価」「個数」「金額」のマップ式

要素「注文総額」のマップ式

要素「注文番号」「単位」「品名」のマップ式

要素「注文番号」「単位」のマップ式

要素「注文日」の定義

要素「注文日」のマップ式

要素「注文日」のマップ式

要素「品名」の定義

要素の定義

要素のマップ式

要素名称の規則

予約定数

(ラ行)

(ら)

ライブラリ検索パスの設定

ラベル

(り)

リストビュー

(る)

ルート構造

ルートコンポーネント情報

(れ)

レングスタグ形式

レングスタグ形式フォーマットの定義

レングスタグ構造のデータを出力データとする場合

レングスタグ構造のデータを入力データとする場合

レングスタグフォーマットへのマッピング

レングスタグ方式

(ろ)

ローカル名

ローカル名〔用語解説〕

ログファイル

ログファイルサイズの変更

ログファイルに出力される数値情報，文字情報の内容

ログファイルに出力する項目

ログファイルのサイズ

ログファイルの参照方法

ログファイルの出力先と参照方法

ログファイル名

ロケールと文字コードの対応関係

ロケールの設定

■ 商標類

AIXは，米国における米国International Business Machines Corp.の登録商標です。
HP-UXは，米国Hewlett-Packard Companyのオペレーティングシステムの名称です。
IBMは，米国およびその他の国におけるInternational Business Machines Corporationの商標です。
Java及びすべてのJava関連の商標及びロゴは，米国及びその他の国における米国Sun Microsystems, Inc.の商標または登録商標です。
JEDICOSは，（財）流通システム開発センターの登録商標です。
Microsoftは，米国およびその他の国における米国Microsoft Corp.の登録商標です。
Sea-NACCSは，通関情報処理センターの登録商標です。
Solarisは，米国Sun Microsystems, Inc. の米国およびその他の国における商標または登録商標です。
Sun，Sun Microsystems，Javaは，米国Sun Microsystems, Inc. の米国およびその他の国における商標または登録商標です。
UNIXは，X/Open Company Limited が独占的にライセンスしている米国ならびに他の国における登録商標です。
Windowsは，米国およびその他の国における米国Microsoft Corp.の登録商標です。
Windows Serverは，米国Microsoft Corporationの米国及びその他の国における登録商標です。
プログラムプロダクト「P-9D2C-BA31」には，米国Sun Microsystems, Inc.が著作権を有している部分が含まれています。
プログラムプロダクト「P-9D2C-BA31」には，UNIX System Laboratories, Inc.が著作権を有している部分が含まれています。