2012-01-15 67 views
2

我們正在使用IBM Websphere轉換擴展器,在中間件系統中對xml進行副本轉換,反之亦然。從這個鏈接 Cobol to xsd mapping ,我們意識到cobol to xml schema - WTX工具

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

瞭解PICTURE子句的最佳方法是查閱COBOL文檔。我會跟隨一些「文檔」。

需要注意的一件事是,儘管我認爲下面的XSD代碼片段是正確的,但不同的工具可能不完全符合我的要求;當然,無論你從工具中得到什麼,都不應該比我的限制更多。

PIC S9(17)COMP-3

PIC S9(17)

PIC 9(17)

注:COMP-3不從XSD透視關係;它會影響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位十進制數;該值可能是正值或負值。根據其他條款,標誌可以是單獨的,前導或尾隨。

當存在計算子句時,事情會變得棘手,在這種情況下,數據使用「二進制」格式(大小的一半,每位數四位,符號使用高位,最左邊的位)編碼 - COBOL世界,而不是 XML。 COMP子句(有時稱爲「packed」)不會更改值的語義,它只是描述編碼機制,並直接影響表示該特定數字所需的大小(以字節爲單位)。例如,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.

+0

謝謝。有沒有辦法在xml模式中定義我的數字元素,以便它可以達到+999?那就是如果cobol抄本正在發送+999,它應該被轉換爲帶有'+'符號的整數。如果我們將元素作爲一個整數保存在模式中,我們會得到999,'+'符號不會到來。 – Suresh 2012-01-16 11:38:48

+0

不幸的是,沒有。 – 2012-01-16 13:14:17