XML 模式到 C 和 C++ 映射
DFHSC2LS 和 DFHWS2LS 实用程序支持每个 Web Service 描述中包含的 XML 模式定义与 C 和 C++ 数据类型之间的映射。
如何将 XML 模式元素名称转换为 C 和 C++
CICS® 助手使用以下规则从模式元素名称生成 C 和 C++ 变量的唯一有效名称:
- 除 A-Z , a-z , 0-9 或 _ 以外的字符将替换为 "
X'。例如,
monthly-total变为monthlyXtotal。 - 如果第一个字符不是字母字符,那么会将其替换为前导 "
X'。例如,
_monthlysummary变为Xmonthlysummary。 - 如果模式元素名称长度超过 50 个字符,那么会将其截断为该长度。
- 通过添加一个或多个数字数字,使同一作用域中的重复名称唯一。
例如,两个
year实例将变为year和year1。 - 为字符串
_cont或_num保留了五个字符,在模式指定变量具有不同的基数时使用; 即,在xsd:element上指定minOccurs和maxOccurs时使用。有关更多信息,请参阅 元素的变量数组。
- 对于属性,先前的规则将应用于元素名称。 前缀
attr_将添加到元素名称中,后跟_value或_exist。 如果总长度超过 28 个字符,那么将截断元素名称。可空属性具有特殊规则。 添加了前缀
attr_,但也会将nil_添加到元素名称的开头。 元素名称后跟_value。 如果总长度超过 28 个字符,那么将截断元素名称。
生成的名称的总长度不超过 57 个字符。
如何将 XML 模式类型映射到 C 和 C++
DFHSC2LS 和 DFHWS2LS 根据 表 1将模式类型映射到 C 和 C++ 数据类型。 以下规则也适用:
- 如果 MAPPING-LEVEL 参数设置为 1.2 或更高版本,并且 CHAR-VARYING 参数设置为 NULL ,那么变长字符数据将映射到以 null 结束的字符串,并为 null 终止符分配额外的字符。
- 如果 MAPPING-LEVEL 参数设置为 1.2 或更高版本,并且 CHAR-VARYING 参数设置为 YES ,那么可变长度字符数据将映射到两个相关元素: 长度字段和数据字段。
| 模式 simpleType | C 和 C++ 数据类型 |
|---|---|
|
映射级别 2.0 及更低版本: 不受支持 映射级别 2.1 及更高版本: 受支持 |
|
映射级别 1.0: 不受支持 映射级别 1.1 及更高版本:
|
其中 type 是下列其中一项:
|
所有映射级别:
|
其中 type 是下列其中一项:
|
当 CCSID=1200 处于映射级别 4.0 及更高版本时:
|
其中 type 是下列其中一项:
|
所有映射级别:
|
|
映射级别 1.2 及更低版本:
映射级别 2.0 及更高版本:
映射级别 3.0 及更高版本:
时间戳记的格式为 CICS ABSTIME。 |
|
所有映射级别:
|
|
所有映射级别:
|
|
所有映射级别:
|
|
所有映射级别:
|
|
所有映射级别:
|
|
所有映射级别:
|
|
所有映射级别:
|
|
所有映射级别:
|
|
所有映射级别:
|
|
所有映射级别:
(仅 C++)
(仅 C) |
|
映射级别 1.0: 不受支持 映射级别 1.1 及更高版本:
|
|
映射级别 1.0: 不受支持 映射级别 1.1 及更高版本:
|
其中未定义长度 |
映射级别 1.1 及更低版本:
其中 y = 4 × (ceil ( z /3))。 ceil ( x ) 是大于或等于 x的最小整数。映射级别 1.2 及更高版本:
其中长度是固定的。
是在未定义长度时存储二进制数据的容器的名称。 |
|
映射级别 1.1 及更低版本:
映射级别 1.2 及更高版本:
注: IBM® 十六进制浮点 (HFP) 数据表示与用于 XML 的 IEEE-754-1985 表示不完全相同。 某些值可能不会精确从一个表示转换为另一个表示。 对于
xsd:float 数据来说,一些极大值或极小值可能会无效。 转换为 HFP 表示或从 HFP 表示转换时,某些值可能会不精确。 如果精确转换很重要,请考虑使用固定精度替代方法来取代使用浮点数据类型。 |
|
映射级别 1.0 及更低版本:
映射级别 1.2 及更高版本:
注: IBM 十六进制浮点 (HFP) 数据表示与用于 XML 的 IEEE-754-1985 表示不完全相同。 某些值可能不会精确从一个表示转换为另一个表示。 对于
xsd:double 数据来说,一些极大值或极小值可能会无效。 转换为 HFP 表示或从 HFP 表示转换时,某些值可能会不精确。 如果精确转换很重要,请考虑使用固定精度替代方法来取代对双精度数据类型的使用。 |