XML 模式到 C 和 C++ 映射

DFHSC2LS 和 DFHWS2LS 实用程序支持每个 Web Service 描述中包含的 XML 模式定义与 C 和 C++ 数据类型之间的映射。

如何将 XML 模式元素名称转换为 C 和 C++

CICS® 助手使用以下规则从模式元素名称生成 C 和 C++ 变量的唯一有效名称:

  1. 除 A-Z , a-z , 0-9 或 _ 以外的字符将替换为 " X '。

    例如,monthly-total 变为 monthlyXtotal

  2. 如果第一个字符不是字母字符,那么会将其替换为前导 " X '。

    例如,_monthlysummary 变为 Xmonthlysummary

  3. 如果模式元素名称长度超过 50 个字符,那么会将其截断为该长度。
  4. 通过添加一个或多个数字数字,使同一作用域中的重复名称唯一。

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

  5. 为字符串 _cont_num 保留了五个字符,在模式指定变量具有不同的基数时使用; 即,在 xsd:element上指定 minOccursmaxOccurs 时使用。

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

  6. 对于属性,先前的规则将应用于元素名称。 前缀 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 ,那么可变长度字符数据将映射到两个相关元素: 长度字段和数据字段。
表 1. XML 模式类型的映射引用
模式 simpleType C 和 C++ 数据类型
<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.0: 不受支持

映射级别 1.1 及更高版本:
char[255]
<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
  • hexBinary
所有映射级别:
char[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 及更高版本时:
char16_t[z]
<xsd:simpleType>
  <xsd:restriction base="xsd:type">
  </xsd:restriction>
</xsd:simpleType>
其中 type 是下列其中一项:
  • duration
  • date
  • decimal
  • 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 及更高版本:
char[8]

时间戳记的格式为 CICS ABSTIME。


<xsd:simpleType>
  <xsd:restriction base="xsd:byte">
  </xsd:restriction>
</xsd:simpletype>
所有映射级别:
signed char
<xsd:simpleType>
  <xsd:restriction base="xsd:unsignedByte">
  </xsd:restriction>
</xsd:simpletype>
所有映射级别:
char
<xsd:simpleType>
  <xsd:restriction base="xsd:short">
  </xsd:restriction>
</xsd:simpletype>
所有映射级别:
short
<xsd:simpleType>
  <xsd:restriction base="xsd:unsignedShort">
  </xsd:restriction>
</xsd:simpletype>
所有映射级别:
unsigned short
<xsd:simpleType>
  <xsd:restriction base="xsd:integer">
  </xsd:restriction>
</xsd:simpletype>
所有映射级别:
char[33]
<xsd:simpleType>
  <xsd:restriction base="xsd:int">
  </xsd:restriction>
</xsd:simpletype>
所有映射级别:
int
<xsd:simpleType>
  <xsd:restriction base="xsd:unsignedInt">
  </xsd:restriction>
</xsd:simpletype>
所有映射级别:
unsigned int
<xsd:simpleType>
  <xsd:restriction base="xsd:long">
  </xsd:restriction>
</xsd:simpletype>
所有映射级别:
long long
<xsd:simpleType>
  <xsd:restriction base="xsd:unsignedLong">
  </xsd:restriction>
</xsd:simpletype>
所有映射级别:
unsigned long long
<xsd:simpleType>
  <xsd:restriction base="xsd:boolean">
  </xsd:restriction>
</xsd:simpletype>
所有映射级别:
bool

(仅 C++)

short

(仅 C)

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

映射级别 1.0: 不受支持

映射级别 1.1 及更高版本:
char[255]
<xsd:simpleType>
  <xsd:union memberTypes="xsd:int xsd:string"/>
</xsd:simpleType>

映射级别 1.0: 不受支持

映射级别 1.1 及更高版本:
char[255]
<xsd:simpleType>
  <xsd:restriction base="xsd:base64Binary">
    <xsd:length value="z"/>
  </xsd:restriction>
</xsd:simpleType>
<xsd:simpleType>
  <xsd:restriction base="xsd:base64binary">
  </xsd:restriction>
</xsd:simpletype>
其中未定义长度
映射级别 1.1 及更低版本:
char[y]
其中 y = 4 × (ceil ( z /3))。 ceil ( x ) 是大于或等于 x的最小整数。
映射级别 1.2 及更高版本:
char[z]
其中长度是固定的。
char[16]

是在未定义长度时存储二进制数据的容器的名称。

<xsd:simpleType>
  <xsd:restriction base="xsd:float">
  </xsd:restriction>
</xsd:simpletype>
映射级别 1.1 及更低版本:
char[32]
映射级别 1.2 及更高版本:
float(*)
注: IBM® 十六进制浮点 (HFP) 数据表示与用于 XML 的 IEEE-754-1985 表示不完全相同。 某些值可能不会精确从一个表示转换为另一个表示。 对于 xsd:float 数据来说,一些极大值或极小值可能会无效。 转换为 HFP 表示或从 HFP 表示转换时,某些值可能会不精确。 如果精确转换很重要,请考虑使用固定精度替代方法来取代使用浮点数据类型。
<xsd:simpleType>
  <xsd:restriction base="xsd:double">
  </xsd:restriction>
</xsd:simpletype>
映射级别 1.0 及更低版本:
char[32]
映射级别 1.2 及更高版本:
double(*)
注: IBM 十六进制浮点 (HFP) 数据表示与用于 XML 的 IEEE-754-1985 表示不完全相同。 某些值可能不会精确从一个表示转换为另一个表示。 对于 xsd:double 数据来说,一些极大值或极小值可能会无效。 转换为 HFP 表示或从 HFP 表示转换时,某些值可能会不精确。 如果精确转换很重要,请考虑使用固定精度替代方法来取代对双精度数据类型的使用。