2016-07-27 71 views
1

我有一個問題,我無法自己解決。所以我試圖在StackOverflow中尋求幫助。難以對齊JSONschema和XSD等價物

我生成XSD並使用基於python的轉換器將XSD轉換爲JSON模式。 JSON模式用於驗證JSON代碼,我不會詳細解釋。我的問題是,我有JSON代碼來驗證其中包含一個數組包含數組(包含整數)的數組。

的JSON-代碼如下所示:

"factors": [ 
    [12,3], 
    [1,14] 
] 

我知道怎麼寫的JSON架構如下:

"factors": { 
    "items": { 
     "$ref": "#/definitions/factorscontent" 
    }, 
    "type": "array" 
} 

... 

"factorscontent": { 
    "items": { 
     "type": "integer" 
    }, 
    "type": "array",   
    "properties": {} 
} 

這工作得很好。但我不知道如何在XSD中構建這個結構。有誰知道如何面對「陣列中的數組整數」問題?

有一點補充:如果JSON代碼應該是這樣的:

"factors": [ "items":{ [12,3], [1,14] } ] 

我不會有問題,因爲我可以表達「的因素陣列」作爲

內容
<xs:element name="items" type="integer" max0occurs="unbounded"/> 

但是裏面的數組結構只包含整數,沒有元素!

+0

有一點補充: 如果JSON代碼應該是這樣的: 「因素」: 「項目」:{[12,3],[1,14]}] 我不會有一個問題,因爲我可以將「因素數組」的內容表示爲 但是數組結構中只包含整數,沒有元素! – tharndt

+0

所以你的問題可以重寫爲如何在XSD中定義一個二維數組。 –

+0

它真的是2D嗎? – tharndt

回答

1

爲了避免投下意見,請清理您的「would」JSON示例,因爲"factors": [ "items":{ [12,3], [1,14] } ]根本不是格式正確的JSON。一個格式良好的可能看起來如下(當然,可以隨意糾正它,以便它反映出你想要的內容,至少我們的工具會按照你共享的XSD代碼片段的方式生成它):

{ 
    "factors": [ 
     { 
      "items": [ 12, 3 ] 
     }, 
     { 
      "items": [ 1, 14 ] 
     } 
    ] 
} 

您的問題有一個簡單的答案:除非您依賴XSD中的專有標記,否則無法執行此操作。

在XML中,表示數據需要某種標記;一個文本節點和一個屬性需要一個元素來「保留」它們。在XSD中,您可以使用<xsd:list/>來模擬一個整數數組;即使這樣,使用它也需要一個(n)(重複)元素使其成爲一個數組數組(或者,該元素可能會被包裝在重複合成器中,通常爲<xsd:sequence/>)。

因爲這必須具備的元件的,我知道將自動創建的對象的任何轉換器(其中對象是通過JSON架構草案所定義的),並使用元素的名稱和/或屬性來創建屬性。你的數組數組沒有對象,因此沒有屬性是允許的,因此你不能依賴這種轉換的核心XSD結構。

對於真正的XSD,我們一直在對XSD進行JSD轉換三年,所以我們對此轉換進行了相當多的改進。爲了實現像您這樣的場景,我們在<xsd:appinfo/>中定義了專有標記:它指示轉換引擎跳過創建屬性並關聯對象創建。我建議你改變你的基於Python的解析器,以便它考慮某種「提示」,無論是我們做的方式,還是通過創作模式(如果你想不加區分地應用它們)。

+0

非常感謝你的詳細和有用的答案。我感謝你的努力。因爲xsd和json模式不難理解,所以我已經在考慮「這可能不起作用」。所以現在我知道了。 我認爲,最簡單的方法就是改變特定問題的python腳本,就像你推薦的那樣。 – tharndt