問題があり、自分で解決することはできません。だから私はStackOverflowで助けを見つけようとしています。
私は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でこの構造を構築する方法がわかりません。「配列内の整数」の問題に直面する方法を知っている人はいますか?
追加する1つのこと:jsonコードが次のようになる場合:
"factors": [ "items":{ [12,3], [1,14] } ]
「factors-array」の内容を次のように表現できたので問題ありません
<xs:element name="items" type="integer" max0occurs="unbounded"/>
しかし、内部の配列構造には整数のみが含まれ、要素は含まれていません。
反対票を投じないようにするには、「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からJSDへの変換を実際のXSDに対して3年間行ってきたため、この変換をかなり改良しました。あなたのようなシナリオを実現するために、独自のマークアップを定義しました<xsd:appinfo/>
。これは、変換エンジンにプロパティの作成をスキップするように指示し、関連するオブジェクトの作成をスキップします。Pythonベースのパーサーを変更して、ある種の「ヒント」を、私たちが行った方法で、またはパターンを作成することによって(無差別に適用したい場合)考慮されるようにすることをお勧めします。
この記事はインターネットから収集されたものであり、転載の際にはソースを示してください。
侵害の場合は、連絡してください[email protected]
コメントを追加