cobol 到 xml 架构 - WTX 工具

发布于 2024-12-27 11:31:21 字数 943 浏览 1 评论 0原文

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

PIC X(03),在 copybook 中,必须转换为下面的 xml schema

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

PIC 9(03),在 copybook 中,必须转换为下面的 xml schema

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

We are doing xml to copybook and vice versa conversions in a middleware system, using IBM Websphere transformation extender. From this link
Cobol to xsd mapping
, we realised that

PIC X(03), in copybook, has to be converted to the below xml schema

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

PIC 9(03), in copybook, has to be converted to the below xml schema

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

However, not able to make out, directly, what xml schema to be used for the below copybook types. Could anyone please guide?

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

如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。

扫码二维码加入Web技术交流群

发布评论

需要 登录 才能够评论, 你可以免费 注册 一个本站的账号。

评论(1

沉睡月亮 2025-01-03 11:31:21

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

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

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

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

The best way to understand a PICTURE clause, is to consult your COBOL documentation. I'll follow with some "documentation".

One thing to note is that while I consider the XSD snippets below as correct, different tools may not match exactly mine; for sure, whatever you get from your tools, should not be more restrictive than mine.

PIC S9(17) COMP-3

PIC S9(17)

PIC +9(17)

Note: COMP-3 doesn't matter from an XSD perspective; it affects the encoding in the COBOL world.

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

Your PIC 9(03) means the number as unsigned, with an implied positive value.

A preceding S for a numeric value, S9(17) means "signed", with up to 17 decimal digits; the value may be positive or negative. Depending on other clauses, the sign could be separate, leading or trailing.

Things get tricky when a COMPutational clause is present, in which case data is encoded using a "binary" format (half the size, four bits per digit, the sign using the high order, left most bit) - in the COBOL world, not XML. The COMP clause (sometimes referred to as "packed") doesn't change the semantics of the value, it just describes the encoding mechanism, with direct impact on the size (in bytes) required to represent that particular number. For example, a PIC 9(17) will require 17 bytes, a PIC 9(17) COMP-3 will require 9 bytes. Clauses without a COMP are represented in DISPLAY format (basically one byte per decimal digit, plus one for sign, where applicable).

A preceding + sign is much like S; indicates that a number is signed, a + will be used for positive, a - will be used for negative numbers.

Because of this, when representing data in XML, what gets preserved is the data, not it's representation. Consider PIC 9(03) and a value of 1.

A COBOL to XML transform may preserve 001, or not (i.e. get 1).
An XML to COBOL transform must be able to take 001 or 1 and correctly convert it to 001.

~没有更多了~
我们使用 Cookies 和其他技术来定制您的体验包括您的登录状态等。通过阅读我们的 隐私政策 了解更多相关信息。 单击 接受 或继续使用网站,即表示您同意使用 Cookies 和您的相关数据。
原文