我们正在使用IBM Websphere转换扩展器在一个中间件系统中进行xml到copybook的转换,反之亦然。通过这个链接Cobol to xsd mapping,我们意识到
copybook中的PIC X(03)必须转换为以下xml模式
<xsd:simpleType>
<xsd:restriction base="xsd:string">
<xsd:maxlength value="3"/>
<xsd:whiteSpace value="preserve"/>
</xsd:restriction>
</xsd:simpletype>图9(03),在copybook中,必须转换为下面的xml模式
<xsd:simpleType>
<xsd:restriction base="xsd:unsignedInt">
<xsd:minInclusive value="0"/>
<xsd:maxInclusive value="999"/>
</xsd:restriction>
</xsd:simpletype>但是,不能直接确定将哪种xml模式用于下面的copybook类型。有谁能给我带路吗?
PIC S9(17) COMP-3
PIC S9(17)
PIC S9(03)
PIC S9(03) COMP-3
PIC +9(17)
PIC +9(03)发布于 2012-01-16 00:04:20
理解图片子句的最好方法是查阅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>您的PIC9(03)表示无符号的数字,带有隐含的正值。
前面的S表示数值,S9( 17 )表示“带符号的”,最多包含17位十进制数字;该值可以是正数,也可以是负数。根据其他条款,符号可以是单独的、前导或尾随。
当存在COMPutational子句时,事情就变得棘手了,在这种情况下,数据是使用“二进制”格式编码的(大小的一半,每位四位,符号使用高位,最左边的位)-在COBOL界,而不是XML.COMP子句(有时称为"packed")不会改变值的语义,它只是描述编码机制,直接影响表示该特定数字所需的大小(以字节为单位)。例如,PIC 9( 17 )将需要17字节,PIC 9(17) COMP-3将需要9字节。不带COMP的子句以显示格式表示(基本上是每个十进制数一个字节,如果适用,加上一个符号)。
前面的+号很像S;表示一个数字是有符号的,+表示正数,a-表示负数。
正因为如此,当用XML表示数据时,保留的是数据,而不是它的表示。考虑PIC 9(03)和值1。
COBOL到XML的转换可以保留001,也可以不保留(即get 1)。从XML到COBOL的转换必须能够接受001或1,并正确地将其转换为001。
https://stackoverflow.com/questions/8870219
复制相似问题