4.4.1 バイナリフォーマット定義ファイルのデータ型と文字コードの種類
バイナリフォーマット定義エディタでは,次に示すデータ型を使用してフォーマットを定義できます。
-
数値
-
文字列
-
バイト列
-
ビット列
-
日付時刻
各データ型は,データ変換機能によって,バイナリ型からXML型(DOM),またはXML型(DOM)からバイナリ型へ変換されます。このバイナリ型と中間形式との型変換処理をバイナリパース処理と呼びます。データ変換機能の変換処理については,マニュアル「サービスプラットフォーム 解説」の「付録B データ変換機能の処理概要」を参照してください。
各データで扱う文字コードの種類については,マニュアル「サービスプラットフォーム リファレンス」の「1.3.1 フォーマットダイアログ」を参照してください。
バイナリデータ内で文字コードが混在する場合の対応については,「付録P バイナリデータ内に文字コードが混在する場合の対応」を参照してください。
次に各データ型の内容について説明します。
(1) 数値
数値型には,数値属性によって文字列型数値とバイト列型数値に分けられます。それぞれの数値型に属する数値属性を次に示します。
バイナリ型からXML型(DOM)への変換仕様を説明します。
-
文字列型数値は,先頭埋め字(右寄せの場合),末尾埋め字(左寄せの場合),先頭0,小数点以下の末尾0を除く有効桁と符号を,XMLスキーマdecimal型に変換する。
-
実数の場合,整数部が存在しない数値(先頭が小数点)は整数部に0を設定して変換する。また,小数点が存在するが小数部が存在しない場合(小数部がすべて0の場合も含む)は,小数点を切り捨てる。
-
サイズノード指定によって0バイトとなるデータは変換できない。
-
埋め字(スペース)だけで埋められたデータは変換できない。
XML型(DOM)からバイナリ型への変換仕様を説明します。
-
数値前後の空白(半角スペース,タブ,および改行)を除いたデータを変換対象とする。
-
数値の前の0は常に削除する。
-
不要文字は数値の前の0を表す。
-
実数は,小数部の桁数が小数部桁数の設定値より小さい場合,小数部の下位桁を0で埋める。
-
固定小数部数値は,有効桁が小数部桁数の設定値より小さい場合,有効桁の右側を0で埋める。
-
有効桁が全体桁数の設定値より小さい場合,有効桁の左側を0で埋める。
-
全体桁数の指定が有効になるのは,不要文字を削除しない設定の場合だけである。
-
サイズが0のデータ(空ノードや空白だけのデータ)は,0として扱う。
-
サイズが固定長かつ変換後のデータ長が指定されたサイズに満たない場合,左右寄せの指定によって末尾または先頭を埋め字で埋める。
図4‒3 全体桁,サイズ,埋め字の関係(右寄せの例) 図4‒4 全体桁,サイズ,埋め字の関係(左寄せの例)
文字列型数値の符号は省略できます。符号の出現位置は数字列の前です。
バイナリ型からXML型(DOM)への変換仕様を説明します。
-
ゾーン形式またはパック形式数値は,先頭0,小数点以下の末尾0を除く有効桁と符号をXMLスキーマdecimal形式に変換する。
-
ゾーン形式またはパック形式数値に小数桁が指定され,整数部が無い場合は”0.”を補う。
-
サイズノード指定により0バイトとなるデータは変換できない。
-
符号付2進数または符号無2進整数は,XMLスキーマinteger形式に変換する。
XML型(DOM)からバイナリ型への変換仕様を説明します。
数値前後の空白(半角スペース,タブ,改行)を除いたデータを変換対象とする。
-
サイズが0のデータ(空ノードや空白だけのデータ)は,0として扱う。
-
ゾーン形式またはパック形式数値は,先頭0を削除した有効桁を右寄せで埋める。
-
ゾーン形式またはパック形式数値に小数部桁数が指定されている場合,整数部の”0.”は変換しない。また,小数部が指定された小数部桁数に満たない場合は右側を0で埋める。
-
ゾーン形式またはパック形式数値のサイズが固定長かつ,変換後のデータ長が指定されたサイズに満たない場合(左側が空いた場合)は0で埋める。
どの数値属性もデータ変換では10進数として扱います。扱える10進数としての最大桁(整数部と小数部の桁数の合計)は,整数部先頭の0,小数部末尾の0,符号,小数点を削除し,有効桁だけの状態で34桁です。
それぞれの数値属性について説明します。
(a) 整数
「数字」および「符号」で構成される数値属性です。この数値属性は,内部的にBigIntegerクラスで処理されます。
整数は最大34桁で小数部を持ちません。
整数の例を次に示します。
- (例1)
-
1234567890
- (例2)
-
-1234567890
(b) 実数
「数字」,「符号」および「小数点」から構成される一般的な形式の数値属性です。この数値属性は内部的にBigDecimalクラスで処理されます。
実数は最大34桁で小数部を持ちます。ただし,入力データ中に数字がなく,小数点だけの場合はエラーになります。
実数の例を次に示します。
- (例1)
-
1234567890
- (例2)
-
-123.456
(c) 固定小数部数値
「符号」および「数字」から構成され,小数部の桁を指定すると小数点が暗黙的に設定される数値属性です。この数値属性は内部的にBigDecimalクラスで処理されます。
固定小数部数値は最大34桁で,小数部は最大33桁です。
小数部を4桁に指定した場合の固定小数部数値の例を示します。
- (例1)「1234567890」の場合
-
123456.789
(1234567890 → 123456.7890 → 123456.789)
- (例2)「+123」の場合
-
0.0123
(+123 → +0.0123 → 0.0123)
- (例3)「-1230000」の場合
-
-123
(-1230000 → -123.0000 → -123)
(d) ゾーン形式数値
ゾーン形式の数値属性です。小数部の桁を指定すると小数点が暗黙的に設定されます。この数値属性は内部的にBigDecimalクラスで処理されます。
ゾーン形式数値は最大34桁で,符号は項目の最終バイトのゾーン部で表します。
文字コードがJIS8の場合,正符号は0x3,負符号は0x7で表します。
文字コードがEBCDIKの場合,正符号は0xCまたは0xF,負符号は0xDで表します。
符号の正負は変更できます。
最終バイト以外のゾーン部は各コードの正符号で表し,数値は各バイトの下位4ビットで表します(0x0〜0x9)。
文字コードがJIS8の場合のゾーン形式数値の例を示します。
- (例1)「0x31323334」(小数部の指定なし)の場合
-
1234
- (例2)「0x31323334」(小数部を2桁に指定)の場合
-
12.34
- (例3)「0x31323374」(小数部の指定なし)の場合
-
-1234
(e) パック形式数値
パック形式の数値属性です。小数部の桁を指定すると小数点が暗黙的に設定されます。この数値属性は内部的にBigDecimalクラスで処理されます。
パック形式数値は最大34桁で,桁数が偶数の場合,最上位バイトの上4ビットは0にしなければなりません。
符号は項目データの最終バイトの下位4ビットで表します。正符号は0xCまたは0xF,負符号は0xDで表し,数値は4ビットで表します(0x0〜0x9)。符号の正負は変更できます。なお,データ変換は正符号として0xCを出力します。
文字コードがJIS8の場合のパック形式数値の例を示します。
- (例1)「0x01234F」(小数部の指定なし)の場合
-
1234
- (例2)「0x01234F」(小数部を2桁に指定)の場合
-
12.34
- (例3)「0x01234D」(小数部の指定なし)の場合
-
-1234
(2) 文字列
バイナリ型からXML型(DOM)への変換仕様を説明します。
-
指定されたサイズの文字列を,XMLスキーマstring型として文字列に変換する。
-
埋め字にスペースが指定されていて,かつ不要文字を削除しない設定の場合,スペースの付いた入力文字列が抽出される。
-
埋め字にスペースが指定されていて,かつ不要文字を削除する設定の場合,左右寄せの反対側のスペースを削除する。
-
埋め字に空文字(0x00)が指定されている場合,次の仕様で変換する。
-
空文字(0x00)までをデータとする設定の場合,文字列の先頭から空文字の直前の文字までをユーザデータとして,XMLの文字列に変換する。
-
空文字(0x00)までをデータとしない設定で,かつ不要文字を削除する設定の場合,左右寄せの反対側の空文字を削除する。
-
空文字(0x00)までをデータとしない設定で,かつ不要文字を削除しない設定の場合,空文字の付いた入力文字列が抽出される。
-
-
XMLで使用できない文字(使用不可文字)を代替文字で置き換えるように設定した場合,XML上の使用不可文字を通常の文字として扱う。
-
サイズノード指定によって0バイトとなるデータは変換できない。
XML型(DOM)からバイナリ型への変換仕様を説明します。
-
XMLデータを指定された文字コードで変換する。
-
サイズが0のデータ(空ノード)は,空文字列として扱う。
-
固定長の場合,終端の連続する半角スペースを除去して変換する。変換後のデータ長が指定されたサイズに満たない場合は,埋め字で埋める。
-
埋め字に空文字(0x00)が指定されて,かつ空文字(0x00)までをデータとする設定の場合,入力文字列の末尾を空文字で埋める。
-
不要文字を削除する設定の場合,入力文字列の末尾の半角スペースを削除する。
-
不要文字を削除しない設定の場合,入力文字列から半角スペースや空文字を削除しない。
(3) バイト列
バイト列型は,プラットフォーム間でビットパターンが保存されるバイト列そのものです。バイト列をバイナリパース処理すると,XMLスキーマのhexBinary型またはbase64Binary型に変換されます。
hexBinary型では,8ビット(1バイト)のバイナリデータの場合,16進数2桁の文字に変換します。例えば,300バイトの元データをhexBinary型で表現するには,300バイト×2文字(600文字)が必要になります。
base64Binary型では,6ビット(6/8バイト)のバイナリデータの場合,Base64エンコードされた1桁の文字に変換します。例えば,300バイトの元データをbase64Binary型で表現するには,300×8/6文字(400文字)が必要になります。
バイト列をバイナリパース処理する場合,サイズノード指定によって0バイトとなるデータは変換できません。また,XML型(DOM)をバイナリパース処理する場合,前後の空白(半角スペース,タブ,および改行)を除いたデータが対象となります。サイズが0のデータ(空ノードや空白だけのデータ)は,0x00として扱います。
(4) ビット列
ビット列とは,2進数で表されるビットが並んだものです。ビット列型とは,2進数のデータを1桁単位で扱うことのできるデータ型です。ビット列型はビッグエンディアンで処理されます。
バイナリ型からXML型(DOM)には,次のとおり変換します。
-
指定されたビットサイズ分,入力バイナリの先頭から読み,8ビット単位でXMLスキーマのhexBinary形式に変換します。
-
すべての要素の読み込みが完了したあとに1バイト未満のデータが残っていた場合,残ったデータを桁合わせビットと見なし,切り捨てます。1バイト以上のデータが残っていた場合はエラーになります。
-
サイズノード指定によって0バイトとなるデータは変換できません。
XML型(DOM)からバイナリ型には,次のとおり変換します。
-
前後の空白(半角スペース,タブ,および改行)を除いたデータが変換対象となります。
-
hexBinary形式のデータを下位ビットから指定ビットサイズ分をバイナリデータに変換します。
-
XMLデータが変換先ビット数より大きい場合,変換先ビット数から上位ビットを切り捨て,エラーにしません。
-
XMLデータが変換先ビット数より小さい場合,変換先ビット数までのビットを0で補完します。
-
指定されたビットサイズ分のXMLデータが16進文字列でない場合はエラーになります。
-
サイズが0のデータ(空ノードや空白だけのデータ)は,0x00として扱います。
(5) 日付時刻
日付時刻型は,年,月,日,時,分,秒のパートの組み合わせで構成する型です。個々のパートは数値を指定でき,秒を表すパートは小数部を持つことができます。
日付時刻型をXML型(DOM)からバイナリ型の固定長要素に変換する場合,入力XMLの変換後のサイズが固定長要素のサイズより小さいときに,要素データを左右どちら側に寄せて表現するか(左右寄せ)を指定できます。
日付時刻型をXML型(DOM)からバイナリ型の固定長要素に変換する場合,前後の空白(半角スペース,タブ,および改行)を除いたデータが変換対象となります。入力XMLの変換後のサイズが固定長要素のサイズより小さいときに,要素データを左右どちら側に寄せて表現するか(左右寄せ)を指定できます。
サイズが0のデータ(空ノードや空白だけのデータ)の場合,形式ごとにデータの扱いが異なります。
サイズが0のデータ(空ノードや空白だけのデータ)の場合の日付時刻の例を示します。
- (例1)「YYMMDD」形式の場合
-
000101
- (例2)「CCYYMMDD」形式の場合
-
20000101
- (例3)「hhmmss」形式の場合
-
000000
- (例4)「YYMMDDhhmmss」形式の場合
-
000101000000
- (例5)「CCYYMMDDhhmmss」形式の場合
-
20000101000000
日付時刻型を指定する場合,次の制限事項があります。
-
2バイト文字コードは使用できません。
-
小数点として認識する文字は「.」だけです。
日付時刻型のパートを次の表に示します。
パート |
意味 |
指定する桁数 |
---|---|---|
CCYY |
西暦年(0〜9999) |
1〜4桁 |
YY |
年(西暦年下2桁) |
最大2桁 |
MM |
月(1〜12) |
最大2桁 |
DD |
日(1〜31) |
最大2桁 |
hh |
時(0〜23) |
最大2桁 |
mm |
分(0〜59) |
最大2桁 |
ss |
秒(0〜59,小数部可) |
整数部最大2桁,小数部最大3桁 |
パートの組み合わせによって,日付時刻型は3つのデータ型(日付型,時刻型,および日付時刻型)を表現することができます。
データ型とパートの組み合わせを次の表に示します。
データ型 |
組み合わせ |
意味 |
---|---|---|
日付型 |
CCYYMMDD |
西暦年/月/日 |
YYMMDD※ |
西暦年下2桁/月/日 |
|
時刻型 |
hhmmss |
時/分/秒 |
日付時刻型 |
CCYYMMDDhhmmss |
西暦年/月/日/時/分/秒 |
YYMMDDhhmmss |
西暦年下2桁/月/日/時/分/秒 |
日付型,時刻型,および日付時刻型をXML変換すると,それぞれ次のように変換されます。
-
日付型は,XMLスキーマのdate型に変換されます。
-
時刻型は,XMLスキーマのtime型に変換されます。
-
日付時刻型は,XMLスキーマのdateTime型に変換されます。
日付時刻型の例を次に示します。
- (例1)「2001年1月24日」の場合
-
20010124
- (例2)「1999年12月31日1時30分59秒」の場合
-
991231013059