2

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

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)
4

1 回答 1

4

理解 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

图片 +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 子句(有时称为“打包”)不会改变值的语义,它只是描述编码机制,直接影响表示该特定数字所需的大小(以字节为单位)。例如,PIC 9(17) 需要 17 个字节,PIC 9(17) COMP-3 需要 9 个字节。没有 COMP 的子句以 DISPLAY 格式表示(基本上每个十进制数字一个字节,如果适用,加一个符号)。

前面的 + 符号很像 S;表示一个数字是有符号的,a + 将用于正数,a - 将用于负数。

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

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

于 2012-01-15T16:04:19.993 回答