1. ホーム
  2. xml

[解決済み] XMLスキーマ(XSD)からJsonスキーマを生成する【非公開

2023-07-21 18:45:46

質問

を生成する方法をご存知の方はいらっしゃいますか? JSON スキーマ を既存の XML スキーマ (XSD ファイル) から生成する方法を知っていますか? このために利用できるツールはあるのでしょうか?

どのように解決するのですか?

免責事項 : の著者です。 Jsonix は、強力なオープンソースの XML<->JSON JavaScript マッピングライブラリです。

今日、私は新しいバージョンの Jsonix スキーマ コンパイラ を、新しい JSON スキーマ生成 という機能があります。

それでは 購入注文 スキーマを例にとってみましょう。以下はその断片です。

  <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スキーマ .

結果はこんな感じです(簡潔にするために編集しています)。

{
    "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 Schemaは元のXML Schemaから派生したものです。正確に1:1変換ではありませんが、非常に近いものです。

生成されたJSON Schemaは、生成されたJsonixのマッピングと一致します。したがって、XML<->JSONの変換にJsonixを使用している場合、生成されたJSON SchemaでJSONの検証を行うことができるようになるはずです。また、生成されたJSON Schemaには、元のXML Schemaから必要なすべてのメタデータ(要素、属性、型名など)が含まれています。

免責事項です。 現時点では、これは新しく、実験的な機能です。特定の既知の の制限と不足している機能があります。 . しかし、私は、これが非常に速く現れ、成熟することを期待しています。

リンク集です。