この項では、以下のトピックを扱います。
22.1項「MFLのデータ型」 - この項では、非XMLからXMLへの変換またはXMLから非XMLへの変換に使用されるサポート対象のメタデータのデータ型を示します。
22.2項「COBOL Copybook Importerのデータ型」 - Format Builderツールには、COBOLコピーブックをMFLファイルに変換するためのユーティリティがあります。この項では、メタデータのデータ型に変換できるサポート対象のCOBOLのデータ型を示します(この変換は設計時に行われます)。
22.3項「サポートされていないC言語機能」 - Format Builderツールには、C構造体をMFLファイルに変換するためのユーティリティがあります。この項では、メタデータのデータ型に変換できないC言語構造体を示します(この変換は設計時に行われます)。
表22-1は、データ・トランスフォーマでサポートされているMFLのデータ型を示します。これらのデータ型はFieldFormat要素のtype属性で指定します。
表22-1 サポートされるMFLデータ型
データ型 | 説明 |
---|---|
Binary (Base64エンコーディング) |
任意の文字の値を入力できます。長さ、長さフィールド、区切り記号、または区切り記号フィールドが必要です。このフィールドの変換後のXMLデータはbase-64でエンコードされています。 |
Binary (16進数エンコーディング) |
任意の文字の値を入力できます。長さ、長さフィールド、区切り記号、または区切り記号フィールドが必要です。このフィールドの変換後のXMLデータはbase-16でエンコードされています。 |
Date: DD-MMM-YY |
日付を定義する文字列(例: 22-JAN-00)。 |
Date: DD-MMM-YYYY |
日付を定義する文字列(例: 22-JAN-2000)。 |
Date: DD/MM/YY |
日付を定義する文字列(例: 22/01/00)。 |
Date: DD/MM/YYYY |
日付を定義する文字列(例: 22/01/2000)。 |
Date: DDMMMYY |
日付を定義する文字列(例: 22JAN00)。 |
Date: DDMMMYYYY |
日付を定義する文字列(例: 22JAN2000)。 |
Date: MM/DD/YY |
日付を定義する文字列(例: 01/22/00)。 |
Date: MM/DD/YYYY |
日付を定義する文字列(例: 01/22/2000)。 |
Date: MMDDYY |
日付を定義する6桁の数字列(例: 012200)。 |
Date: MMDDYYYY |
日付を定義する8桁の数字列(例: 01222000)。 |
Date: MMM-YY |
日付を定義する文字列(例: JAN-00)。 |
Date: MMM-YYYY |
日付を定義する文字列(例: JAN-2000)。 |
Date: MMMDDYYYY |
日付を定義する文字列(例: JAN222000)。 |
Date: MMMYY |
日付を定義する文字列(例: JAN00)。 |
Date: MMMYYYY |
日付を定義する文字列(例: JAN2000)。 |
Date: Wed Nov 15 10:55:37 CST 2000 |
Javaプラットフォームのデフォルトの日付フォーマット(例: 'WED NOV 15 10:55:37 CST 2000')。 |
Date: YY-MM-DD |
日付を定義する文字列(例: 00/01/22。この文字列で定義される日付は2000年1月22日)。 |
Date: YY/MM/DD |
日付を定義する文字列(例: 00/01/22。この文字列で定義される日付は2000年1月22日)。 |
Date: YYMMDD |
日付を定義する文字列(例: 000122。この文字列で定義される日付は2000年1月22日)。 |
Date: YYYY-MM-DD |
日付を定義する文字列(例: 2000/01/22。この文字列で定義される日付は2000年1月22日)。 |
Date: YYYY/MM/DD |
日付を定義する文字列(例: 2000/01/22。この文字列で定義される日付は2000年1月22日)。 |
Date: YYYYMMDD |
YYYYMMDDフォーマットの8バイトの数字列。文字エンコーディングを表すStringまたはEBCDICの基本データ型を指定できます。 |
DateTime: DD/MM/YY hh:mm |
日付と時刻を定義する文字列(例: 22/01/00 12:24)。 |
DateTime: DD/MM/YY hh:mm AM |
日付と時刻を定義する文字列(例: 22/01/00 12:24 AM)。 |
DateTime: DD/MM/YY hh:mm:ss |
日付と時刻を定義する文字列(例: 22/01/00 12:24:00)。 |
DateTime: DD/MM/YY hh:mm:ss AM |
日付と時刻を定義する文字列(例: 22/01/00 12:24:00 AM)。 |
DateTime: MM/DD/YY hh:mm |
日付と時刻を定義する文字列(例: 01/22/00 12:24)。 |
DateTime: MM/DD/YY hh:mi AM |
日付と時刻を定義する文字列(例: 01/22/00 12:24 AM)。 |
DateTime: MM/DD/YY hh:mm:ss |
日付と時刻を定義する文字列(例: 01/22/00 12:24:00)。 |
DateTime: MM/DD/YY hh:mm:ss AM |
日付と時刻を定義する文字列(例: 01/22/00 12:24:00 AM)。 |
DateTime: MMDDYYhhmm |
日付と時刻を定義する数字列(例: 0122001224)。 |
DateTime: YYYYMMDDhhmmss |
YYYYMMDDHHMISSフォーマットの14バイトの数字列。基本データ型を指定できます。 |
DateTime: MMDDYYhhmmss |
日付と時刻を定義する数字列(例: 012200122400)。 |
EBCDIC |
IBMのExtended Binary Coded Decimal Interchange Codeの文字列。長さ、長さフィールド、区切り記号、または区切り記号フィールドが必要です。 |
Filler |
XMLに変換されないバイト・シーケンス。非XMLデータからXMLへの変換では、このフィールドはスキップされます。XMLから非XMLデータへの変換では、このフィールドはスペースのシーケンスとしてバイナリ出力ストリームに書き込まれます。 |
FloatingPoint: 4バイト、ビッグ・エンディアン |
IEEE標準754に準拠する4バイト・ビッグ・エンディアンの浮動小数点数。 |
FloatingPoint: 4バイト、リトル・エンディアン |
IEEE標準754に準拠する4バイト・リトル・エンディアンの浮動小数点数。 |
FloatingPoint: 8バイト、ビッグ・エンディアン |
IEEE標準754に準拠する8バイト・ビッグ・エンディアンの浮動小数点数。 |
FloatingPoint: 8バイト、リトル・エンディアン |
IEEE標準754に準拠する8バイト・リトル・エンディアンの浮動小数点数。 |
Integer: 符号付き、1バイト |
1バイトの符号付き整数(例: 56は0x38)。 |
Integer: 符号なし、1バイト |
1バイトの符号なし整数(例: 128は0x80)。 |
Integer: 符号付き、2バイト、ビッグ・エンディアン |
ビッグ・エンディアン・フォーマットの2バイトの符号付き整数(例: 4660は0x1234)。 |
Integer: 符号付き、4バイト、ビッグ・エンディアン |
ビッグ・エンディアン・フォーマットの4バイトの符号付き整数(例: 4660は0x00001234)。 |
Integer: 符号付き、8バイト、ビッグ・エンディアン |
ビッグ・エンディアン・フォーマットの8バイトの符号付き整数(例: 4660は0x0000000000001234)。 |
Integer: 符号なし、2バイト、ビッグ・エンディアン |
ビッグ・エンディアン・フォーマットの2バイトの符号なし整数(例: 65000は0xFDE8)。 |
Integer: 符号なし、4バイト、ビッグ・エンディアン |
ビッグ・エンディアン・フォーマットの4バイトの符号なし整数(例: 65000は0x0000FDE8)。 |
Integer: 符号なし、8バイト、ビッグ・エンディアン |
ビッグ・エンディアン・フォーマットの8バイトの符号なし整数(例: 65000は0x000000000000FDE8)。 |
Integer: 符号付き、2バイト、リトル・エンディアン |
リトル・エンディアン・フォーマットの2バイトの符号付き整数(例: 4660は0x3412)。 |
Integer: 符号付き、4バイト、リトル・エンディアン |
リトル・エンディアン・フォーマットの4バイトの符号付き整数(例: 4660は0x34120000) |
Integer: 符号付き、8バイト、リトル・エンディアン |
リトル・エンディアン・フォーマットの8バイトの符号付き整数(例: 4660は0x3412000000000000)。 |
Integer: 符号なし、2バイト、リトル・エンディアン |
リトル・エンディアン・フォーマットの2バイトの符号なし整数(例: 65000は0xE8FD)。 |
Integer: 符号なし、4バイト、リトル・エンディアン |
リトル・エンディアン・フォーマットの4バイトの符号なし整数(例: 65000は0xE8FD0000)。 |
Integer: 符号なし、8バイト、リトル・エンディアン |
リトル・エンディアン・フォーマットの8バイトの符号なし整数(例: 65000は0xE8FD000000000000)。 |
Literal |
value属性の内容によって決定されるリテラル値。非XMLデータからXMLへの変換時、指定されたリテラルが非XMLデータに存在するかどうかがWLXTによって検証されます。リテラルは読み込まれるがXMLデータには変換されません。XMLデータから非XMLフォーマットへの変換で、リテラルが非XMLフォーマットの一部として定義されている場合、リテラルは変換後の非XMLバイト・ストリームに書き込まれます。 |
Numeric |
数値(0 - 9)のみの文字列。長さ、長さフィールド、区切り記号、または区切り記号フィールドが必要です。 |
Packed Decimal: 符号付き |
IBMの符号付きパック形式。長さ、長さフィールド、区切り記号、または区切り記号フィールドを指定する必要があります。長さまたは長さフィールドでは、このフィールドのサイズをバイト単位で指定する必要があります。 |
Packed Decimal: 符号なし |
IBMの符号なしパック形式。長さ、長さフィールド、区切り記号、または区切り記号フィールドを指定する必要があります。長さまたは長さフィールドでは、このフィールドのサイズをバイト単位で指定する必要があります。 |
String |
文字列。長さ、長さフィールド、区切り記号、または区切り記号フィールドが必要です。Stringデータ型に長さ、長さフィールド、区切り記号のいずれも指定されていない場合は、「\x00」(NUL文字)が指定されているものと見なされます。 |
String: NULで終了 |
固定長フィールド内に含まれ、必要に応じてNUL (\x00)で終了される文字列。このフィールドのデータ型には、読み込むデータ量を決定する長さ属性または長さフィールドが必要です。このデータのNUL区切り記号の有無が調べられます。区切り記号が検出されるとそれ以降のデータが破棄されます。NUL区切り記号が存在しない場合、固定長データがフィールドの値として使用されます。 |
Time: hhmmss |
時刻を定義する文字列(例: 122400)。 |
Time: hh:mm AM |
時刻を定義する文字列(例: 12:24 AM)。 |
Time: hh:mm |
時刻を定義する文字列(例: 12:24)。 |
Time: hh:mm:ss AM |
時刻を定義する文字列(例: 12:24:00 AM)。 |
Time: hh:mm:ss |
時刻を定義する文字列(例: 12:24:00)。 |
Zoned Decimal: 先行符号 |
符号付きゾーン10進数形式(US-ASCIIまたはEBCDIC)。符号は最初のニブルに含まれます。長さ、長さフィールド、区切り記号、または区切り記号フィールドを指定する必要があります。長さまたは長さフィールドでは、このフィールドのサイズをバイト単位で指定する必要があります。 注意: このデータ型はMessage Format Languageバージョン2.02のUS-ASCIIデータでのみサポートされます。 |
Zoned Decimal: 先行分離符号 |
符号付きゾーン10進数形式(US-ASCIIまたはEBCDIC)。符号は最初のバイトに含まれます。最初のバイトには符号のみが含まれ、数値とは分離されています。長さ、長さフィールド、区切り記号、または区切り記号フィールドを指定する必要があります。長さまたは長さフィールドでは、このフィールドのサイズをバイト単位で指定する必要があります。 注意: このデータ型はMessage Format Languageバージョン2.02のUS-ASCIIデータでのみサポートされます。 |
Zoned Decimal: 符号付き |
符号付きゾーン10進数形式(US-ASCIIまたはEBCDIC)。長さ、長さフィールド、区切り記号、または区切り記号フィールドを指定する必要があります。長さまたは長さフィールドでは、このフィールドのサイズをバイト単位で指定する必要があります。 注意: このデータ型はMessage Format Languageバージョン2.02のUS-ASCIIデータでのみサポートされます。 |
Zoned Decimal: 後続分離符号 |
符号付きゾーン10進数形式(US-ASCIIまたはEBCDIC)。符号は最後のバイトに含まれます。最後のバイトには符号のみが含まれ、数値とは分離されています。長さ、長さフィールド、区切り記号、または区切り記号フィールドを指定する必要があります。長さまたは長さフィールドでは、このフィールドのサイズをバイト単位で指定する必要があります。 注意: このデータ型はMessage Format Languageバージョン2.02のUS-ASCIIデータでのみサポートされます。 |
Zoned Decimal: 符号なし |
符号なしゾーン10進数形式(US-ASCIIまたはEBCDIC)。長さ、長さフィールド、区切り記号、または区切り記号フィールドを指定する必要があります。長さまたは長さフィールドでは、このフィールドのサイズをバイト単位で指定する必要があります。 注意: このデータ型はMessage Format Languageバージョン2.02のUS-ASCIIデータでのみサポートされます。 |
表22-2は、COBOLのデータ型とImporterによるサポートの有無を示します。これらのデータ型のサポートには制限があります。次のフォーマットは4バイトの符号なし整数に変換されます。
05 pic 9(5) comp-5 05 pic 9(5) comp-x
一方、以下のフォーマットではエラーが生成されます。
05 pic X(5) comp-5 05 pic X(5) comp-x
これらの例では、pic x(5)
のかわりにpic9(5)
を使用できます。
表22-2 COBOLのデータ型
COBOLの型 | サポート |
---|---|
BLANK WHEN ZERO (ゾーン10進数) |
サポートされます |
COMP-1、COMP-2(浮動小数点) |
サポートされます |
COMP-3、PACKED-DECIMAL |
サポートされます |
COMP、COMP-4、バイナリ(整数) |
サポートされます |
COMP、COMP-4、バイナリ(固定長) |
サポートされます |
COMP-5、COMP-X |
サポートされます |
DISPLAY(英数字) |
サポートされます |
DISPLAY数値(ゾーン10進数) |
サポートされます |
編集済み英数字 |
サポートされます |
編集済み浮動小数点値 |
サポートされます |
編集済み数値 |
サポートされます |
グループ・レコード |
サポートされます |
INDEX |
サポートされます |
JUSTIFIED RIGHT |
無視されます |
OCCURS(固定配列) |
サポートされます |
OCCURS DEPENDING(可変長) |
サポートされます |
OCCURS INDEXED BY |
無視されます |
OCCURS KEY IS |
無視されます |
POINTER |
サポートされます |
PROCEDURE-POINTER |
サポートされます |
REDEFINES |
サポートされます |
SIGN IS LEADING SEPARATE (ゾーン10進数) |
サポートされます |
SIGN IS TRAILING (ゾーン10進数) |
サポートされます |
SIGN IS TRAILING SEPARATE (ゾーン10進数) |
サポートされます |
SIGN IS LEADING (ゾーン10進数) |
サポートされます |
SYNCHRONIZED |
無視されます |
66 RENAMES |
サポートされません |
66 RENAMES THRU |
サポートされません |
77レベル |
サポートされます |
88レベル(条件付き) |
無視されます |
この表でのサポートの定義は次のとおりです。
サポート対象 - このデータ型はImporterで正しく解析され、メッセージ・フォーマットのフィールドまたはグループに変換されます。
サポート対象外 - このデータ型はサポートされず、コピーブックのインポート時にImporterでエラーが報告されます。
無視 - このデータ型は解析され、メッセージ・フォーマットにコメントが追加されます。対応するフィールドまたはグループは作成されません。
Importerでは、ベンダー固有の一部の拡張が認識されませんが、ANSI標準COBOLに準拠するコピーブック文はすべて正しく解析されます。Importerのデフォルトのデータ・モデルはIBMのメインフレーム・モデルに基づいており、Format Builderで変更することによって文字セットとデータの「エンディアン特性」を補正できます。
コピーブックのインポート時、フィールドは一般的なデータ型として識別されますが、目視で調べるとより詳細なデータ型を簡単に特定できる場合があります。そのため、Copybook Importerでは、コピーブックで検出された各フィールドにコメントが作成されます。この情報は、MFLデータを編集して元のコピーブックのデータをより適切に表す場合に役立ちます。例:
元のコピーブックのエントリ:
05 birth-date picxx/xx/xx
インポート後:
8
バイト長のEBCDIC
型のフィールド
詳しく調べると、このフィールドが日付フォーマットであり、以下のデータ型のフィールドとして定義できることがわかります。
Date: MM/DD/YY
型のフィールドまたはData: DD/MM/YY
型のフィールド
C Struct Importerユーティリティでは、匿名ユニオン、ビット・フィールド、またはインライン・アセンブラ・コードを含むファイルは解析されません。ここでは、#include <windows.h>
文を含むhello.c
ファイルのプリプロセッサ出力の一部を例にサポートされていない機能を示します。
匿名ユニオン
#line 353 "e:\\program files\\microsoft visual studio\\vc98\\include\\winnt.h" typedef union_LARGE_INTEGER{ struct { DWORD LowPart; LONG HighPart; }; struct { DWORD LowPart; LONG HighPart; } u; #line 363 "e:\\program files\\microsoft visual studio\\vc98\\include\\winnt.h" LONGLONG QuadPart; } LARGE_INTEGER
ビット・フィールド
typedef struct_LDT_ENTRY { WORD LimitLow; WORD BaseLow; union { struct { BYTE BaseMid; BYTE Flags1; BYTE Flags2; BYTE BaseHi; } Bytes; struct DWORD BaseMid : 8; DWORD Type : 5; DWORD Dpl : 2; DWORD Pres : 1; DWORD LimitHi : 4; DWORD Sys : 1; DWORD Reserved_0 : 1; DWORD Default_Big : 1; DWORD Granularity : 1; DWORD BaseHi : 8; } Bits; } HighWord; } LDT_ENTRY, *PLDT_ENTRY;
インライン・アセンブラ・コード
_inline ULONGLONG _stdcall Int64ShrlMod32( ULONGLONG Value, DWORD ShiftCount ) { _asm { mov ecx, ShiftCount mov eax, dword ptr [Value] mov edx, dword ptr [Value+4] shrd eax, edx, cl shr edx, cl } }