PL/I 到 XML 模式的映射

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

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

    例如,monthly$total 将变为 monthlyxtotal

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

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

DFHLS2SC 和 DFHLS2WS 依据下表将 PL/I 数据类型映射到模式元素。 DFHLS2SC 或 DFHLS2WS 不支持未在该表中显示的 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,那么会将字符数组映射到 xsd:string,并且作为以 null 结束的字符串进行处理;该映射不适用于 Enterprise PL/I。
  • 如果将 MAPPING-LEVEL 参数设置为 1.2 或更高,并将 CHAR-VARYING 参数设置为 BINARY,那么字符数组会映射到 xsd:base64Binary 并作为二进制数据进行处理。
  • 如果将 MAPPING-LEVEL 参数设置为 1.2 或更高,并将 CHAR-VARYING 参数设置为 COLLAPSE,那么会为字符串生成 <xsd:whiteSpace value="collapse"/>
DFHLS2SC 和 DFHLS2WS 不会完全实现 PL/I 的填充算法;因此,必须在数据结构中明确声明填充字节。 如果 DFHLS2SC 和 DFHLS2WS 检测到缺少填充字节,那么它们会发出一条消息。 每个顶级结构必须在双字边界上开始,并且结构中的每个字节必须映射到正确的边界。 请考虑以下代码片段:
 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 之前紧接着插入三个填充字节。
由于 DFHLS2WS 不插入相等的填充字节数,因此必须在 DFHLS2WS 处理该结构之前明确声明这些字节。 例如:
 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 数据描述 模式
FIXED BINARY (n)

其中 n ≤ 7


<xsd:simpleType>
	<xsd:restriction base="xsd:byte"/>
</xsd:simpleType>
FIXED BINARY (n)

其中,8 ≤ n ≤ 15


<xsd:simpleType>
	<xsd:restriction base="xsd:short"/>
</xsd:simpleType>
FIXED BINARY (n)

其中,16 ≤ n ≤ 31


<xsd:simpleType>
	<xsd:restriction base="xsd:int"/>
</xsd:simpleType>
FIXED BINARY (n)

其中,32 ≤ n ≤ 63

限制: 仅限 Enterprise PL/I

<xsd:simpleType>
	<xsd:restriction base="xsd:long"/>
</xsd:simpleType>
UNSIGNED FIXED BINARY(n)

其中 n ≤ 8

限制: 仅限 Enterprise PL/I

<xsd:simpleType>
	<xsd:restriction base="xsd:unsignedByte"/>
</xsd:simpleType>
UNSIGNED FIXED BINARY(n)

其中,9 ≤ n ≤ 16

限制: 仅限 Enterprise PL/I

<xsd:simpleType>
	<xsd:restriction base="xsd:unsignedShort"/>
</xsd:simpleType>
UNSIGNED FIXED BINARY(n)

其中,17 ≤ n ≤ 32

限制: 仅限 Enterprise PL/I

<xsd:simpleType>
	<xsd:restriction base="xsd:unsignedInt"/>
</xsd:simpleType>
UNSIGNED FIXED BINARY(n)

其中,33 ≤ n ≤ 64

限制: 仅限 Enterprise PL/I

<xsd:simpleType>
	<xsd:restriction base="xsd:unsignedLong"/>
</xsd:simpleType>
FIXED DECIMAL( n , m )

<xsd:simpleType>
	<xsd:restriction base="xsd:decimal">
		<xsd:totalDigits value="n"/>
		<xsd:fractionDigits value="m"/>
	</xsd:restriction>
</xsd:simpleType>
FIXED DECIMAL(15)

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


<xsd:simpleType>
	<xsd:restriction base="xsd:dateTime"
	</xsd:restriction>
</xsd:simpleType>
时间戳记的格式为 CICS® ABSTIME。
BIT(n)

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


<xsd:simpleType>
	<xsd:restriction base="xsd:hexBinary">
		<xsd:length value="m"/>
	</xsd:restriction>
</xsd:simpleType>
其中 m = n /8
CHARACTER( n )

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

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

<xsd:simpleType>
	<xsd:restriction base="xsd:string">
		<xsd:maxLength value="n"/>
		<xsd:whiteSpace value="preserve"/>
	</xsd:restriction>
</xsd:simpleType>
GRAPHIC( n )

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

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

<xsd:simpleType>
	<xsd:restriction base="xsd:hexBinary">
		<xsd:length value="m"/>
	</xsd:restriction>
</xsd:simpleType>

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


<xsd:simpleType>
	<xsd:restriction base="xsd:string">
		<xsd:length value="n"/>
		<xsd:whiteSpace value="preserve"/>
	</xsd:restriction>
</xsd:simpleType>
WIDECHAR( n )
限制: 仅限 Enterprise PL/I
在映射级别 1.0 和 1.1,其中 m = 2* n :

<xsd:simpleType>
	<xsd:restriction base="xsd:hexBinary">
		<xsd:length value="m"/>
	</xsd:restriction>
</xsd:simpleType>

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


<xsd:simpleType>
	<xsd:restriction base="xsd:hexBinary">
		<xsd:length value="n"/>
	</xsd:restriction>
</xsd:simpleType>

在映射级别 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

<xsd:simpleType>
	<xsd:restriction base="xsd:byte"/>
</xsd:simpleType>
BINARY FLOAT( n )

where N <= 21

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


<xsd:simpleType>
	<xsd:restriction base="xsd:float">
	</xsd:restriction>
</xsd:simpletype>
BINARY FLOAT( n )

其中 21 < n <= 53

不支持大于 53 的值。

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


<xsd:simpleType>
	<xsd:restriction base="xsd:double">
	</xsd:restriction>
</xsd:simpletype>
DECIMAL FLOAT( n )

where N <= 6

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

注: IBM® 十六进制浮点 (HFP) 数据表示与用于 XML 的 IEEE-754-1985 表示不完全相同。 某些值可能不会精确从一个表示转换为另一个表示。 对于 xsd:float 数据来说,一些极大值或极小值可能会无效。 转换为 HFP 表示或从 HFP 表示转换时,某些值可能会不精确。 如果精确转换很重要,请考虑将 DECIMAL FLOAT 数据类型的使用替换为固定精度替代方法。

<xsd:simpleType>
	<xsd:restriction base="xsd:float">
	</xsd:restriction>
</xsd:simpletype>
DECIMAL FLOAT( n ) 其中 6 < n <= 16

不支持大于 16 的值。

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

注: IBM 十六进制浮点 (HFP) 数据表示与用于 XML 的 IEEE-754-1985 表示不完全相同。 某些值可能不会精确从一个表示转换为另一个表示。 对于 xsd:double 数据来说,一些极大值或极小值可能会无效。 转换为 HFP 表示或从 HFP 表示转换时,某些值可能会不精确。 如果精确转换很重要,请考虑将 DECIMAL FLOAT 数据类型的使用替换为固定精度替代方法。

<xsd:simpleType>
	<xsd:restriction base="xsd:double">
	</xsd:restriction>
</xsd:simpletype>