82

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

4

5 に答える 5

46

免責事項: 私は、強力なオープンソースの 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 スキーマから必要なすべてのメタデータ (要素、属性、型名など) も含まれています。

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

リンク:

于 2015-05-02T20:13:47.520 に答える
10

JSON スキーマは、XML スキーマと同等の機能を意図したものではありません。一方には機能がありますが、他方にはありません。

一般に、XML から JSON へのマッピングとその逆のマッピングを作成できますが、XML スキーマと JSON スキーマの場合はそうではありません。

とはいえ、XML ファイルを JSON にマップした場合、XSD が XML を検証するのとほぼ同じ方法でその JSON を検証する JSON スキーマを作成することはかなり可能です。しかし、それは直接のマッピングではありません。また、XSD が XML を検証するのとまったく同じように JSON を検証することを保証することはできません。

このため、2 つの仕様が 100% の機能互換性を持たない限り、検証システムを XML/XSD から JSON/JSON スキーマに移行するには人間の介入が必要になります。

于 2012-05-10T21:55:21.390 に答える
-5

確かに、xmlspy で json を xml に変換した後、trang アプリケーション (http://www.thaiopensource.com/relaxng/trang.html) を使用して、xml ファイルから xsd を作成できます。

于 2012-04-04T12:56:28.530 に答える