既存の XML スキーマ (XSD ファイル) からJSON スキーマを生成する方法を知っている人はいますか? これに利用できるツールはありますか?
5 に答える
免責事項: 私は、強力なオープンソースの XML<->JSON JavaScript マッピング ライブラリであるJsonixの作成者です。
今日、新しいJSON Schema 生成機能を備えたJsonix Schema Compilerの新しいバージョンをリリースしました。
たとえば、発注書スキーマを見てみましょう。ここにフラグメントがあります:
<xsd:element name="purchaseOrder" type="PurchaseOrderType"/>
<xsd:complexType name="PurchaseOrderType">
<xsd:sequence>
<xsd:element name="shipTo" type="USAddress"/>
<xsd:element name="billTo" type="USAddress"/>
<xsd:element ref="comment" minOccurs="0"/>
<xsd:element name="items" type="Items"/>
</xsd:sequence>
<xsd:attribute name="orderDate" type="xsd:date"/>
</xsd:complexType>
提供されているコマンドライン ツールを使用して、このスキーマをコンパイルできます。
java -jar jsonix-schema-compiler-full.jar
-generateJsonSchema
-p PO
schemas/purchaseorder.xsd
コンパイラは、 Jsonix マッピングと、一致する JSON Schemaを生成します。
結果は次のようになります (簡潔にするために編集されています)。
{
"id":"PurchaseOrder.jsonschema#",
"definitions":{
"PurchaseOrderType":{
"type":"object",
"title":"PurchaseOrderType",
"properties":{
"shipTo":{
"title":"shipTo",
"allOf":[
{
"$ref":"#/definitions/USAddress"
}
]
},
"billTo":{
"title":"billTo",
"allOf":[
{
"$ref":"#/definitions/USAddress"
}
]
}, ...
}
},
"USAddress":{ ... }, ...
},
"anyOf":[
{
"type":"object",
"properties":{
"name":{
"$ref":"http://www.jsonix.org/jsonschemas/w3c/2001/XMLSchema.jsonschema#/definitions/QName"
},
"value":{
"$ref":"#/definitions/PurchaseOrderType"
}
},
"elementName":{
"localPart":"purchaseOrder",
"namespaceURI":""
}
}
]
}
現在、この JSON スキーマは元の XML スキーマから派生しています。厳密には 1:1 変換ではありませんが、非常に近い変換です。
生成された JSON スキーマは、生成された Jsonix マッピングと一致します。したがって、XML<->JSON 変換に Jsonix を使用すると、生成された JSON スキーマで JSON を検証できるはずです。また、元の XML スキーマから必要なすべてのメタデータ (要素、属性、型名など) も含まれています。
免責事項:現時点では、これは新しい実験的な機能です。特定の既知の制限と不足している機能があります。しかし、私はこれが非常に早く現れて成熟することを期待しています.
リンク:
- NPM のデモ発注プロジェクト- チェックアウトして、
npm install
- ドキュメンテーション
- 現在のリリース
- npmjs.com の Jsonix スキーマ コンパイラ
JSON スキーマは、XML スキーマと同等の機能を意図したものではありません。一方には機能がありますが、他方にはありません。
一般に、XML から JSON へのマッピングとその逆のマッピングを作成できますが、XML スキーマと JSON スキーマの場合はそうではありません。
とはいえ、XML ファイルを JSON にマップした場合、XSD が XML を検証するのとほぼ同じ方法でその JSON を検証する JSON スキーマを作成することはかなり可能です。しかし、それは直接のマッピングではありません。また、XSD が XML を検証するのとまったく同じように JSON を検証することを保証することはできません。
このため、2 つの仕様が 100% の機能互換性を持たない限り、検証システムを XML/XSD から JSON/JSON スキーマに移行するには人間の介入が必要になります。
確かに、xmlspy で json を xml に変換した後、trang アプリケーション (http://www.thaiopensource.com/relaxng/trang.html) を使用して、xml ファイルから xsd を作成できます。