webentwicklung-frage-antwort-db.com.de

Json-Schema aus XML-Schema (XSD) generieren

Weiß jemand, wie man aus einem vorhandenen XML-Schema (XSD-Datei) ein JSON-Schema generiert? Gibt es dafür Tools?

69
JB Hurteaux

Haftungsausschluss : Ich bin der Autor von Jsonix , einer leistungsstarken Open-Source-XML <-> JSON-JavaScript-Zuordnungsbibliothek.

Heute habe ich die neue Version von Jsonix Schema Compiler mit der neuen Funktion JSON Schema Generation veröffentlicht.

Nehmen wir zum Beispiel das Schema Bestellung . Hier ist ein Fragment:

  <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>

Sie können dieses Schema mit dem bereitgestellten Befehlszeilentool kompilieren:

Java -jar jsonix-schema-compiler-full.jar
    -generateJsonSchema
    -p PO
    schemas/purchaseorder.xsd

Der Compiler generiert Jsonix-Mappings sowie passendes JSON-Schema .

So sieht das Ergebnis aus (der Kürze halber bearbeitet):

{
    "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":""
            }
        }
    ]
}

Dieses JSON-Schema wird nun vom ursprünglichen XML-Schema abgeleitet. Es ist nicht gerade eine 1: 1-Transformation, aber sehr, sehr nahe.

Das generierte JSON-Schema entspricht den generierten Jsonix-Zuordnungen. Wenn Sie also Jsonix für die XML <-> JSON-Konvertierung verwenden, sollten Sie JSON mit dem generierten JSON-Schema validieren können. Es enthält auch alle erforderlichen Metadaten aus dem ursprünglichen XML-Schema (wie Element-, Attribut- und Typnamen).

Haftungsausschluss: Im Moment ist dies eine neue und experimentelle Funktion. Es gibt bestimmte bekannte Einschränkungen und fehlende Funktionalität . Aber ich erwarte, dass sich dies sehr schnell manifestiert und reift.

Links:

33
lexicore

Ein Jahr nachdem diese Frage ursprünglich gestellt wurde, bleibt JSON Schema ein IETF-Entwurfsdokument. Zum jetzigen Zeitpunkt (18. Oktober 2011) versucht die Arbeitsgruppe, eine Einigung über den Entwurf 4 der Spezifikation zu erzielen. Obwohl es einige spekulative Validierungsimplementierungen gibt (siehe http://json-schema.org/ ), haben die meisten Toolanbieter nicht viel Aufwand in Tools investiert, die die Entwicklung, Bearbeitung oder Konvertierung von JSON-Schemas implementieren.

10
J Edward Ellis

Das JSON-Schema soll nicht mit dem XML-Schema identisch sein. Es gibt Merkmale in einem, aber nicht in dem anderen.

Im Allgemeinen können Sie eine Zuordnung von XML zu JSON und zurück erstellen, dies ist jedoch bei XML-Schemas und JSON-Schemas nicht der Fall.

Wenn Sie jedoch eine XML-Datei JSON zugeordnet haben, ist es durchaus möglich, ein JSON-Schema zu erstellen, das diese JSON-Datei auf nahezu dieselbe Weise wie die XSD-Datei validiert. Es ist aber keine direkte Abbildung. Und es kann nicht garantiert werden, dass JSON genauso validiert wird, wie XSD XML validiert.

Aus diesem Grund erfordert die Migration eines Validierungssystems von XML/XSD zu JSON/JSON-Schema einen Benutzereingriff, sofern die beiden Spezifikationen nicht zu 100% funktionskompatibel sind.

7
Eric Hartford

Haftungsausschluss: Ich bin der Autor von jgeXml.

jgexml hat das auf Node.js basierende Dienstprogramm xsd2json, das eine Transformation zwischen einem XML-Schema (XSD) und einer JSON-Schemadatei ausführt.

Wie bei anderen Optionen handelt es sich nicht um eine 1: 1-Konvertierung. Möglicherweise müssen Sie die Ausgabe manuell bearbeiten, um die JSON-Schemaüberprüfung zu verbessern. Sie wurde jedoch verwendet, um ein komplexes XML-Schema in einer OpenAPI-Definition (swagger) darzustellen.

Ein Beispiel der Datei purchaseorder.xsd, die in einer anderen Antwort angegeben ist, wird wie folgt wiedergegeben:

"PurchaseOrderType": {
  "type": "object",
  "properties": {
    "shipTo": {
      "$ref": "#/definitions/USAddress"
    },
    "billTo": {
      "$ref": "#/definitions/USAddress"
    },
    "comment": {
      "$ref": "#/definitions/comment"
    },
    "items": {
      "$ref": "#/definitions/Items"
    },
    "orderDate": {
      "type": "string",
      "pattern": "^[0-9]{4}-[0-9]{2}-[0-9]{2}.*$"
    }
  },
4
MikeRalphson

Kopieren Sie Ihr XML-Schema hierher und geben Sie den JSON-Schema-Code in die Online-Tools ein, mit denen Sie aus dem XML-Schema ein JSON-Schema generieren können.

0
Karl Parker