cobol到xml架构 - WTX工具

时间:2012-01-15 14:05:34

标签: xsd transformation cobol copybook wtx

我们正在使用IBM Websphere转换扩展器在中间件系统中对copybook执行xml,反之亦然。从这个链接  Cobol to xsd mapping ,我们意识到了

在副本中,PIC X(03)必须转换为以下xml架构

<xsd:simpleType>
<xsd:restriction base="xsd:string">
<xsd:maxlength value="3"/>
<xsd:whiteSpace value="preserve"/>
</xsd:restriction>
</xsd:simpletype>

副本中的PIC 9(03)必须转换为以下xml架构

<xsd:simpleType>
<xsd:restriction base="xsd:unsignedInt">
<xsd:minInclusive value="0"/>
<xsd:maxInclusive value="999"/>
</xsd:restriction>
</xsd:simpletype>

但是,无法直接确定用于以下副本类型的xml架构。有人可以指导吗?

PIC S9(17) COMP-3
PIC S9(17)
PIC S9(03)
PIC S9(03) COMP-3
PIC +9(17)
PIC +9(03)

1 个答案:

答案 0 :(得分:4)

理解PICTURE子句的最佳方法是查阅COBOL文档。我会跟着一些“文档”。

有一点需要注意的是,虽然我认为下面的XSD片段是正确的,但是不同的工具可能与我的不完全匹配;当然,无论你从工具中获得什么,都不应该比我的限制更多。

PIC S9(17)COMP-3

PIC S9(17)

PIC +9(17)

注意:从XSD的角度来看,COMP-3并不重要;它会影响COBOL世界中的编码。

<xsd:simpleType name="S9-17">
    <xsd:restriction base="xsd:integer">
        <xsd:minInclusive value="-99999999999999999"/>
        <xsd:maxInclusive value="99999999999999999"/>
    </xsd:restriction>
</xsd:simpleType>

PIC S9(03)

PIC S9(03)COMP-3

PIC +9(03)

<xsd:simpleType name="S9-3">
    <xsd:restriction base="xsd:int">
        <xsd:minInclusive value="-999"/>
        <xsd:maxInclusive value="999"/>
    </xsd:restriction>
</xsd:simpleType>

您的PIC 9(03)表示未签名的数字,隐含正值。

前面的S表示数值,S9(17)表示“有符号”,最多17位小数;价值可能是正面的或负面的。根据其他条款,标志可以是单独的,前导的或尾随的。

当存在COMPutational子句时,事情变得棘手,在这种情况下,数据使用“二进制”格式(大小的一半,每位四位,符号使用高位,最左位)编码 - 在COBOL中世界, XML。 COMP子句(有时称为“packed”)不会更改值的语义,它只描述编码机制,直接影响表示该特定数字所需的大小(以字节为单位)。例如,PIC 9(17)将需要17个字节,PIC 9(17)COMP-3将需要9个字节。没有COMP的子句以DISPLAY格式表示(基本上每个十进制数字一个字节,加上一个用于符号,如果适用)。

前面的+符号很像S;表示数字已签名,+表示正数,a表示负数。

因此,在用XML表示数据时,保留的是数据,而不是它的表示。考虑PIC 9(03)和值1。

COBOL到XML转换可以保留001或不保留(即获得1)。 XML到COBOL转换必须能够取001或1并正确地将其转换为001。