PL/I 到 JSON 模式映射

DFHLS2JS 实用程序支持 PL/I 数据结构与 JSON 模式定义之间的映射。 由于 Enterprise PL/I 编译器与较早的 PL/I 编译器有所不同,因此支持以下两种语言选项:PLI-ENTERPRISEPLI-OTHER

按照以下规则将 PL/I 名称转换为 JSON 名称:
  1. 在 JSON 属性名称中无效的字符将替换为 " x '。

    例如,monthly$total 将变为 monthlyxtotal

  2. 将通过添加一个或多个数字位来使重复的名称唯一。

    例如,两个 year 实例将变为 yearyear1

DFHLS2JS 根据下表将 PL/I 数据类型映射到模式元素。 DFHLS2JS不支持表中未显示的 PL/I 类型。 同时适用以下限制:
  • 不支持具有 COMPLEX 属性的数据项。
  • 在映射级别 1.2 或更高级别上支持具有 FLOAT 属性的数据项。 不支持 Enterprise PL/I FLOAT IEEE。
  • 在映射级别 1.2 或更高级别上支持 VARYING 和 VARYINGZ 纯 DBCS 字符串。
  • 指定为 DECIMAL ( pq ) 的数据项 仅当 pq 时才受支持
  • 指定为 BINARY ( pq ) 的数据项 仅当 q = 0 时才受支持。
  • 如果为数据项指定了 PRECISION 属性,那么将忽略该属性。
  • 不支持 PICTURE 字符串。
  • 将 ORDINAL 数据项视为 FIXED BINARY(7) 数据类型。
  • 如果 MAPPING-LEVEL 参数设置为 1.2 或更高版本,并且 CHAR-VARYING 参数设置为 NULL ,那么字符数组将映射到 string 并作为以 null 结束的字符串进行处理; 此映射不适用于 Enterprise PL/I。
  • 如果 MAPPING-LEVEL 参数设置为 1.2 或更高版本,并且 CHAR-VARYING 参数设置为 BINARY ,那么字符数组将映射到 string 并作为二进制数据进行处理。
  • 如果 MAPPING-LEVEL 参数设置为 1.2 或更高版本,并且 CHAR-VARYING 参数设置为折叠,那么将除去前导空格和尾部空格,并将多个空格替换为单个空格。
DFHLS2JS 未完全实现 PL/I 的填充算法; 因此,必须在数据结构中显式声明填充字节。 如果 DFHLS2JS 检测到缺少填充字节,那么将发出一条消息。 每个顶级结构必须在双字边界上开始,并且结构中的每个字节必须映射到正确的边界。 请考虑以下代码片段:
 3 FIELD1 FIXED BINARY(7),
3 FIELD2 FIXED BINARY(31),
3 FIELD3 FIXED BINARY(63);
在本示例中:
  • FIELD1 为 1 个字节长度,可以在任何边界上对齐。
  • FIELD2 为 4 个字节长度,必须在全字边界上对齐。
  • FIELD3 为 8 个字节长度,必须在双字边界上对齐。
Enterprise PL/I 编译器按照以下顺序对齐字段:
  1. 首先对齐 FIELD3,这是因为它具有最强烈的的边界需求。
  2. 在 FIELD3 之前紧接着将 FIELD2 在全字边界处对齐。
  3. 在 FIELD3 之前紧接着将 FIELD1 在字节边界处对齐。
最后,以使整个结构在全字边界处对齐,编译器立即在 FIELD1 之前插入三个填充字节。
因为 DFHLS2JS 不会插入等效的填充字节,所以您必须在 DFHLS2JS处理结构之前显式声明这些字节。 例如:
 3 PAD1 FIXED BINARY(7),
3 PAD2 FIXED BINARY(7),
3 PAD3 FIXED BINARY(7),
3 FIELD1 FIXED BINARY(7),
3 FIELD2 FIXED BINARY(31),
3 FIELD3 FIXED BINARY(63);
或者,也可以更改该结构,将所有字段声明为未对齐,并重新编译使用该结构的应用程序。 有关 PL/I 结构内存对齐需求的更多信息,请参阅 Enterprise PL/I for z/OS 产品信息
PL/I 数据描述 JSON 模式定义
FIXED BINARY (n

"type":"integer",
"minimum":- (
n
+ 1),
"maximum":
n
其中 n 是可由原语表示的最大值。
UNSIGNED FIXED BINARY(n
限制: 仅限 Enterprise PL/I

"type":"integer",
"minimum":0,
"maximum":
n
其中 n 是可由原语表示的最大值。
FIXED DECIMAL( n , m )

"type":"number",
"format":"decimal",
"multipleOf":
x
,
"maximum":
y
,
"minimum":-
z



其中:

x 是可用的最小单位 = 1/10 m

y 是可以由 nm 的组合表示的最大值

z 是可以由 nm 的组合表示的最大值

FIXED DECIMAL(15)

DATETIME=PACKED15 时,在映射级别 3.0 和更高版本上受支持

"type":"string",
"format":"date-time"
时间戳记的格式由 RFC3339定义。
BIT(n

其中 n 是 8 的倍数。 不支持其他值。


"type":"string"
"maxLength":
m
其中 m = n /8
CHARACTER( n )

在映射级别 1.2 和更高级别上还支持 VARYINGVARYINGZ

限制: VARYINGZ 仅受 Enterprise PL/I 支持

"type":"string"
"maxLength":
n
GRAPHIC( n )

在映射级别 1.2 和更高级别上还支持 VARYINGVARYINGZ

限制: VARYINGZ 仅受 Enterprise PL/I 支持
在映射级别 1.0 和 1.1,其中 m = 2* n :

"type":"string"
"maxLength":
m

在映射级别 1.2 或更高级别上:


"type":"string"
"maxLength":
n
WIDECHAR( n )
限制: 仅限 Enterprise PL/I
在映射级别 1.0 和 1.1,其中 m = 2* n :

"type":"string"
"maxLength":
m

在映射级别 1.2 或更高级别上:


"type":"string"
"maxLength":
n

在映射级别 4.0 和更高版本上, CICS® 使用 UTF-16 数据填充应用程序数据结构字段。

<xsd:simpleType>
<xsd:restriction base="xsd:string">
<xsd:maxlength value="n"/>
<xsd:whiteSpace value="preserve"/>
</xsd:restriction>
</xsd:simpleType>
ORDINAL
限制: 仅限 Enterprise PL/I
"type":"integer",
"minimum":0,
"maximum":255
BINARY FLOAT( n )

其中 n <= 21

在映射级别 1.2 和更高级别上受支持。

注: IBM® 十六进制浮点 (HFP) 数据表示与用于 JSON 的 IEEE-754-1985 表示不完全相同。 某些值可能无法正好从一种表示法转换为另一种表示法。 对于浮点数据类型,某些极大或极小值可能无效。 在转换到或转换自 HFP 表示法时,某些值可能会失去精度。 如果精确转换很重要,请考虑将 BINARY FLOAT 数据类型的使用替换为固定精度替代方法。
"type":"number",
"format":"float"
BINARY FLOAT( n )

其中 21 < n <= 53

不支持大于 53 的值。

在映射级别 1.2 和更高级别上受支持。

注: IBM 十六进制浮点 (HFP) 数据表示与用于 JSON 的 IEEE-754-1985 表示不完全相同。 某些值可能无法正好从一种表示法转换为另一种表示法。 对于浮点数据类型,某些极大或极小值可能无效。 在转换到或转换自 HFP 表示法时,某些值可能会失去精度。 如果精确转换很重要,请考虑将 BINARY FLOAT 数据类型的使用替换为固定精度替代方法。
"type":"number",
"format":"double"
DECIMAL FLOAT( n )

其中 n <= 6

在映射级别 1.2 和更高级别上受支持。

注: IBM 十六进制浮点 (HFP) 数据表示与用于 JSON 的 IEEE-754-1985 表示不完全相同。 某些值可能无法正好从一种表示法转换为另一种表示法。 对于浮点数据类型,某些极大或极小值可能无效。 在转换到或转换自 HFP 表示法时,某些值可能会失去精度。 如果精确转换很重要,请考虑将 DECIMAL FLOAT 数据类型的使用替换为固定精度替代方法。
"type":"number",
"format":"float"
DECIMAL FLOAT( n )

其中 6 < n <= 16

不支持大于 16 的值。

在映射级别 1.2 和更高级别上受支持。

注: IBM 十六进制浮点 (HFP) 数据表示与用于 JSON 的 IEEE-754-1985 表示不完全相同。 某些值可能无法正好从一种表示法转换为另一种表示法。 对于浮点数据类型,某些极大或极小值可能无效。 在转换到或转换自 HFP 表示法时,某些值可能会失去精度。 如果精确转换很重要,请考虑将 DECIMAL FLOAT 数据类型的使用替换为固定精度替代方法。
"type":"number",
"format":"double"
名称 ( n ) 数据描述 对于原语:

"type":"array"
"maxItems":
n
"minItems":
n
"items":{
"type":"object",
"properties":{
name
:{
data description JSON
}
}
"required":[
name
]
}
关于数据声明:

"type":"array"
"maxItems":
n
"minItems":
n
"items":{
data description JSON
}

其中,data description JSON 是 PL/I 数据描述的 JSON 模式表示。