XML 模式到 PL/I 映射

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

将模式元素名称映射到 PL/I 的规则

CICS® 助手使用以下规则为模式元素名称中的 PL/I 变量生成唯一且有效的名称:
  1. 将 A-Z , a-z , 0-9 , @ , # , _ 或 $以外的字符替换为 " X '。

    例如,monthly-total 变为 monthlyXtotal

    您可以使用 MAPPING-OVERRIDES 参数来更改处理其他字符的方式。 例如,如果设置值 HYPHENS-AS-UNDERSCORES ,那么 XML 中的任何连字符都将转换为下划线而不是 X。 例如, monthly-total 变为 monthly_total

  2. 如果模式指定变量具有不同的基数 (即,使用 xsd:element 上的不同值指定 minOccursmaxOccurs 属性) ,并且模式元素名称长度超过 24 个字符,那么会将其截断为该长度。

    如果模式指定变量具有固定的基数,并且模式元素名称超过 29 个字符,那么会将其截断为该长度。

  3. 通过在名称的第二个实例和后续实例中添加一个或多个数字数字,使同一作用域中的重复名称成为唯一名称。

    例如,三个 year 实例变为 yearyear1year2

    如果不希望出现上述行为,那么用户可以将 MAPPING-OVERRIDES=NO-ARRAY-NAME-INDEXING 指定为实用程序的输入,这将禁止将一个或两个数字数字添加到名称的第二个实例和后续实例中。

  4. 为字符串 _cont_num 保留了五个字符,当模式指定变量具有不同的基数时使用这些字符; 即,当使用不同的值指定 minOccursmaxOccurs 属性时使用这些字符。

    有关更多信息,请参阅 元素的变量数组

  5. 对于属性,先前的规则将应用于元素名称。 前缀 attr- 将添加到元素名称中,后跟 -value-exist 。 如果总长度超过 28 个字符,那么将截断元素名称。 有关更多信息,请参阅 对 XML 属性的支持

    可空属性具有特殊规则。 添加了前缀 attr- ,但也会将 nil- 添加到元素名称的开头。 元素名称后跟 -value 。 如果总长度超过 28 个字符,那么将截断元素名称。

生成名称的总长度最多 31 个字符。

将模式类型映射到 PL/I 的规则

DFHSC2LS 和 DFHWS2LS 根据下表将模式类型映射到 PL/I 数据类型。 另请注意以下几点:
  • 如果 MAPPING-LEVEL 参数设置为 1.2 或更高版本,并且 CHAR-VARYING 参数设置为 NULL ,那么变长字符数据将映射到以 null 结束的字符串,并为 null 终止符分配额外的字符。
  • 如果 MAPPING-LEVEL 参数设置为 1.2 或更高版本,并且未指定 CHAR-VARYING 参数,那么缺省情况下,变长字符数据将映射到 Enterprise PL/I 的 VARYINGZ 数据类型和其他 PL/I 的 VARYING 数据类型。
  • 可变长度二进制数据映射到 VARYING 数据类型 (如果它小于 32 768 字节) 和容器 (如果它超过 32 768 字节)。
模式 PL/I 数据描述

<xsd:simpleType>
	<xsd:restriction base="xsd:anyType">
	</xsd:restriction>
</xsd:simpleType>

映射级别 2.0 及更低版本:

不支持

映射级别 2.1 及更高版本:

受支持


<xsd:simpleType>
	<xsd:restriction base="xsd:anySimpletype">
	</xsd:restriction>
</xsd:simpleType>

映射级别 1.1 及更高版本:

CHAR(255)

<xsd:simpleType>
	<xsd:restriction base="xsd:type">
		<xsd:maxLength value="z"/>
		<xsd:whiteSpace value="preserve"/>
	</xsd:restriction>
</xsd:simpleType>
其中 type 是下列其中一项:
  • string
  • normalizedString
  • token
  • Name
  • NMTOKEN
  • language
  • NCName
  • ID
  • IDREF
  • ENTITY

所有映射级别:

CHARACTER( z )

<xsd:simpleType>
	<xsd:restriction base="xsd:type">
		<xsd:length value="z"/>
	</xsd:restriction>
</xsd:simpleType>
其中 type 是下列其中一项:
  • string
  • normalizedString
  • token
  • Name
  • NMTOKEN
  • language
  • NCName
  • ID
  • IDREF
  • ENTITY

CCSID=1200 处于映射级别 4.0 及更高版本时:



WIDECHAR(
z
)


<xsd:simpleType>
	<xsd:restriction base="xsd:type">
	</xsd:restriction>
</xsd:simpleType>
其中 type 是下列其中一项:
  • duration
  • date
  • time
  • gDay
  • gMonth
  • gYear
  • gMonthDay
  • gYearMonth

所有映射级别:

CHAR(32)

<xsd:simpleType>
	<xsd:restriction base="xsd:dateTime">
	</xsd:restriction>
</xsd:simpleType>

映射级别 1.2 及更低版本:


CHAR(32)

映射级别 2.0 及更高版本:


CHAR(40)

映射级别 3.0 及更高版本:


FIXED DECIMAL(15)
时间戳记的格式为 CICS ABSTIME。

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

映射级别 1.1 及更低版本:



BIT(
z
)

where = 8 × and < 4095 bytes.


CHAR(
z
)

其中 z = 8 × yz > 4095 字节。

映射级别 1.2 及更高版本:



CHAR(
y
)


<xsd:simpleType>
	<xsd:restriction base="xsd:byte">
	</xsd:restriction>
</xsd:simpleType>
所有映射级别:
企业 PL/I
SIGNED FIXED BINARY (7)
其他 PL/I
FIXED BINARY (7)

<xsd:simpleType>
	<xsd:restriction base="xsd:unsignedByte">
	</xsd:restriction>
</xsd:simpleType>
所有映射级别:
企业 PL/I
UNSIGNED FIXED BINARY (8)
其他 PL/I
FIXED BINARY (8)

<xsd:simpleType>
	<xsd:restriction base="xsd:short">
	</xsd:restriction>
</xsd:simpleType>
所有映射级别:
企业 PL/I
SIGNED FIXED BINARY (15)
其他 PL/I
FIXED BINARY (15)

<xsd:simpleType>
	<xsd:restriction base="xsd:unsignedShort">
	</xsd:restriction>
</xsd:simpleType>
所有映射级别:
企业 PL/I
UNSIGNED FIXED BINARY (16)
其他 PL/I
FIXED BINARY (16)

<xsd:simpleType>
	<xsd:restriction base="xsd:integer">
	</xsd:restriction>
</xsd:simpleType>
所有映射级别:
企业 PL/I
FIXED DECIMAL(31,0)
其他 PL/I
FIXED DECIMAL(15,0)

<xsd:simpleType>
	<xsd:restriction base="xsd:int">
	</xsd:restriction>
</xsd:simpleType>
所有映射级别:
企业 PL/I
SIGNED FIXED BINARY (31)
其他 PL/I
FIXED BINARY (31)

<xsd:simpleType>
	<xsd:restriction base="xsd:unsignedInt">
	</xsd:restriction>
</xsd:simpleType>
所有映射级别:
企业 PL/I
UNSIGNED FIXED BINARY(32)
其他 PL/I
BIT(64)

<xsd:simpleType>
	<xsd:restriction base="xsd:long">
	</xsd:restriction>
</xsd:simpleType>
映射级别 1.1 及更低版本:
企业 PL/I
SIGNED FIXED BINARY(63)
注: LIMITS 编译器伪指令可能会影响 PL/I 编译器解释此字段的方式。 CICS 期望该字段具有声明的大小,但编译器可能会将该字段优化为更小的空间,这可能会导致不匹配。 要避免此类问题,请使用 LIMITS (FIXEDBIN (63)) 编译时选项。
映射级别 1.2 及更高版本:
企业 PL/I
CHAR( y )

其中,y 是小于 16 MB 的固定长度。

所有映射级别:
其他 PL/I
BIT(64)

<xsd:simpleType>
	<xsd:restriction base="xsd:unsignedLong">
	</xsd:restriction>
</xsd:simpleType>
映射级别 1.1 及更低版本:
企业 PL/I
UNSIGNED FIXED BINARY(64)
注: LIMITS 编译器伪指令可能会影响 PL/I 编译器解释此字段的方式。 CICS 期望该字段具有声明的大小,但编译器可能会将该字段优化为更小的空间,这可能会导致不匹配。 要避免此类问题,请使用 LIMITS (FIXEDBIN (63)) 编译时选项。
映射级别 1.2 及更高版本:
企业 PL/I
CHAR( y )

其中,y 是小于 16 MB 的固定长度。

所有映射级别:
其他 PL/I
BIT(64)

<xsd:simpleType>
	<xsd:restriction base="xsd:boolean">
	</xsd:restriction>
</xsd:simpleType>
映射级别 1.1 及更低版本:
企业 PL/I
SIGNED FIXED BINARY (7)
其他 PL/I
FIXED BINARY (7)
映射级别 1.2 及更高版本:
企业 PL/I
BIT(7)
BIT(1)
其他 PL/I
BIT(7)
BIT(1)
其中,BIT(7) 是为对齐提供,BIT(1) 包含布尔映射值。

<xsd:simpleType>
	<xsd:restriction base="xsd:decimal">
		<xsd:totalDigits value="n"/>
		<xsd:fractionDigits value="m"/>
	</xsd:restriction>
</xsd:simpleType>

所有映射级别:

FIXED DECIMAL( n , m )

<xsd:simpleType>
	<xsd:list>
		<xsd:simpleType>
			<xsd:restriction base="xsd:int"/>
		</xsd:simpleType>
	</xsd:list>
</xsd:simpleType>

所有映射级别:

CHAR(255)

<xsd:simpleType>
	<xsd:union memberTypes="xsd:int xsd:string"/>
</xsd:simpleType>

所有映射级别:

CHAR(255)

<xsd:simpleType>
	<xsd:restriction base="xsd:base64Binary">
		<xsd:length value="y"/>
	</xsd:restriction>
</xsd:simpleType>


<xsd:simpleType>
	<xsd:restriction base="xsd:base64Binary">
	</xsd:restriction>
</xsd:simpleType>
其中未定义长度

映射级别 1.0:

不支持

映射级别 1.1:



CHAR(
z
)

其中 z = 4 × (ceil ( y /3))。 ceil ( x ) 是大于或等于 x的最小整数。

映射级别 1.2 及更高版本:



CHAR(
y
)

其中长度是固定的。

CHAR(16)
未定义长度的 。 该字段包含存储二进制数据的容器的 16 字节名称。


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

映射级别 1.0 和 1.1:


CHAR(32)

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

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

映射级别 1.0 和 1.1:


CHAR(32)

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