Xsd cobol到xml模式-WTX工具

Xsd cobol到xml模式-WTX工具,xsd,transformation,cobol,copybook,wtx,Xsd,Transformation,Cobol,Copybook,Wtx,我们正在中间件系统中使用IBMWebSphereTransformationExtender进行xml到copybook的转换,反之亦然。从这个链接 ,我们意识到 copybook中的picx(03)必须转换为下面的xml模式 <xsd:simpleType> <xsd:restriction base="xsd:string"> <xsd:maxlength value="3"/> <xsd:whiteSpace value="preserve"/&g

我们正在中间件系统中使用IBMWebSphereTransformationExtender进行xml到copybook的转换,反之亦然。从这个链接 ,我们意识到

copybook中的picx(03)必须转换为下面的xml模式

<xsd:simpleType>
<xsd:restriction base="xsd:string">
<xsd:maxlength value="3"/>
<xsd:whiteSpace value="preserve"/>
</xsd:restriction>
</xsd:simpletype>
<xsd:simpleType>
<xsd:restriction base="xsd:unsignedInt">
<xsd:minInclusive value="0"/>
<xsd:maxInclusive value="999"/>
</xsd:restriction>
</xsd:simpletype>

理解PICTURE子句的最佳方法是查阅COBOL文档。接下来我将介绍一些“文档”

注意的是,虽然我认为下面的XSD片段是正确的,但不同的工具可能不完全匹配我的;当然,无论你从工具中得到什么,都不应该比我的更严格

图S9(17)COMP-3

图S9(17)

图片+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>

图S9(03)

图S9(03)COMP-3

PIC+9(03)


图9(03)中的数字是无符号的,带有一个隐含的正值

前面的S表示数值,S9(17)表示“有符号”,最多有17位十进制数字;该值可以是正值或负值。根据其他条款,符号可以是单独的、前导的或尾随的

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

前面的+符号很像S;表示数字有符号,a+表示正数,a-表示负数

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

COBOL到XML的转换可能保留001,也可能不保留001(即get 1)。
XML到COBOL的转换必须能够接受001或1并将其正确转换为001。

理解PICTURE子句的最佳方法是查阅COBOL文档。接下来我将介绍一些“文档”

注意的是,虽然我认为下面的XSD片段是正确的,但不同的工具可能不完全匹配我的;当然,无论你从工具中得到什么,都不应该比我的更严格

图S9(17)COMP-3

图S9(17)

图片+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>

图S9(03)

图S9(03)COMP-3

PIC+9(03)


图9(03)中的数字是无符号的,带有一个隐含的正值

前面的S表示数值,S9(17)表示“有符号”,最多有17位十进制数字;该值可以是正值或负值。根据其他条款,符号可以是单独的、前导的或尾随的

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

前面的+符号很像S;表示数字有符号,a+表示正数,a-表示负数

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

COBOL到XML的转换可能保留001,也可能不保留001(即get 1)。
XML到COBOL转换必须能够接受001或1,并将其正确转换为001。

谢谢。有没有一种方法可以在xml模式中定义my number元素,使其成为+999?也就是说,如果cobol copybook发送+999,则应将其转换为带“+”号的整数。如果我们将元素保持为整数,在模式中,我们会得到999,“+”号不会出现。谢谢。有没有一种方法可以在xml模式中定义my number元素,使其成为+999?也就是说,如果cobol copybook发送+999,则应将其转换为带“+”号的整数。如果我们保持元素为整数,在模式中,我们得到999,“+”号不会出现。
<xsd:simpleType name="S9-3">
    <xsd:restriction base="xsd:int">
        <xsd:minInclusive value="-999"/>
        <xsd:maxInclusive value="999"/>
    </xsd:restriction>
</xsd:simpleType>