Generare lo schema Json dallo schema XML (XSD)

Qualcuno sa come generare uno schema JSON da uno schema XML esistente (file XSD)? Ci sono strumenti disponibili per questo?

Dichiarazione di non responsabilità : sono l’autore di Jsonix , una potente libreria di mapping JSON JavaScript open source XML <->.

Oggi ho rilasciato la nuova versione di Jsonix Schema Compiler , con la nuova funzionalità di generazione dello schema JSON .

Prendiamo ad esempio lo schema dell’ordine d’acquisto . Ecco un frammento:

          

È ansible compilare questo schema utilizzando lo strumento da riga di comando fornito:

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

Il compilatore genera anche i mapping Jsonix e lo schema JSON corrispondente .

Ecco come appare il risultato (modificato per brevità):

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

Ora questo schema JSON è derivato dallo schema XML originale. Non è esattamente la trasformazione 1: 1, ma molto molto vicino.

Lo schema JSON generato corrisponde ai mapping generati di Jsonix. Pertanto, se si utilizza la conversione JSON JSON per XML <->, si dovrebbe essere in grado di convalidare JSON con lo schema JSON generato. Contiene anche tutti i metadati richiesti dallo schema XML di origine (come elemento, nome di attributo e tipo).

Disclaimer: al momento questa è una funzionalità nuova e sperimentale. Esistono alcune limitazioni note e funzionalità mancanti . Ma mi aspetto che questo si manifesti e maturi molto velocemente.

link:

  • Demo Progetto ordine d’acquisto per NPM : basta controllare e npm install
  • Documentazione
  • Versione corrente
  • Compilatore di schema Jsonix su npmjs.com

Un anno dopo la domanda iniziale, JSON Schema rimane una bozza di documento IETF. Al momento della stesura di questo documento (18 ottobre 2011) il gruppo di lavoro sta cercando di ottenere un accordo sul progetto 4 del disciplinare. Sebbene esistano alcune implementazioni di convalida speculative (vedi http://json-schema.org/ ), la maggior parte dei venditori di strumenti non ha investito molto impegno in strumenti che implementano lo sviluppo, la modifica o la conversione dello schema JSON.

Lo schema JSON non è progettato per essere equivalente alle funzioni con lo schema XML. Ci sono funzionalità in una ma non nell’altra.

In generale è ansible creare un mapping da XML a JSON e viceversa, ma questo non è il caso per lo schema XML e lo schema JSON.

Detto questo, se hai mappato un file XML su JSON, è abbastanza ansible creare uno schema JSON che convalida quel JSON quasi nello stesso modo in cui l’XSD convalida l’XML. Ma non è una mapping diretta. E non è ansible garantire che convalidi il JSON esattamente come l’XSD convalida l’XML.

Per questo motivo, e a meno che le due specifiche non siano compatibili al 100%, la migrazione di un sistema di convalida da XML / XSD a schema JSON / JSON richiederà l’intervento umano.

Disclaimer: sono l’autore di jgeXml.

jgexml ha l’utility xsd2json basata su Node.js che esegue una trasformazione tra uno schema XML (XSD) e un file di schema JSON.

Come con altre opzioni, non è una conversione 1: 1 e potrebbe essere necessario modificare manualmente l’output per migliorare la convalida dello schema JSON, ma è stato utilizzato per rappresentare uno schema XML complesso all’interno di una definizione OpenAPI (swagger).

Un esempio dell’acquistoorder.xsd dato in un’altra risposta è reso come:

 "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}.*$" } }, 

Copia qui lo schema XML e ottieni il codice dello schema JSON sugli strumenti online disponibili per generare lo schema JSON dallo schema XML.

È vero, ma dopo aver trasformato json in xml con xmlspy, puoi usare l’applicazione trang (http://www.thaiopensource.com/relaxng/trang.html) per creare un xsd dai file xml.