Genere el esquema de Json a partir del esquema XML (XSD)

¿Alguien sabe cómo generar un esquema JSON a partir de un esquema XML existente (archivo XSD)? ¿Hay alguna herramienta disponible para esto?

Descargo de responsabilidad : soy el autor de Jsonix , una poderosa biblioteca de mapeo JavaScript JSON XML < ->.

Hoy he lanzado la nueva versión del comstackdor de esquemas Jsonix , con la nueva característica de generación de esquema JSON .

Tomemos el esquema de orden de compra, por ejemplo. Aquí hay un fragmento:

          

Puede comstackr este esquema utilizando la herramienta de línea de comandos proporcionada:

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

El comstackdor genera mapeos Jsonix y el esquema JSON correspondiente .

Así es como se ve el resultado (editado por brevedad):

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

Ahora este esquema JSON se deriva del esquema XML original. No es exactamente una transformación 1: 1, pero muy muy cerca.

El esquema JSON generado coincide con los mapeos generados Jsonix. Por lo tanto, si usa Jsonix para la conversión XML < -> JSON, debería poder validar JSON con el esquema JSON generado. También contiene todos los metadatos requeridos del Esquema XML de origen (como los nombres de elementos, atributos y tipos).

Descargo de responsabilidad: por el momento esta es una característica nueva y experimental. Hay ciertas limitaciones conocidas y funcionalidad faltante . Pero espero que esto se manifieste y madure muy rápido.

Campo de golf:

  • Proyecto de orden de compra de demostración para NPM : solo echa un vistazo y npm install
  • Documentación
  • Lanzamiento actual
  • Comstackdor de esquemas Jsonix en npmjs.com

Un año después de que se formulara originalmente esta pregunta, JSON Schema sigue siendo un borrador del documento IETF. Al momento de escribir esto (18 de octubre de 2011), el grupo de trabajo está tratando de lograr un acuerdo sobre el borrador 4 de la especificación. Aunque hay algunas implementaciones de validación especulativa (ver http://json-schema.org/ ), la mayoría de los vendedores de herramientas no han invertido mucho esfuerzo en herramientas que implementen el desarrollo, edición o conversión de esquemas JSON.

El Esquema JSON no pretende ser una característica equivalente con el Esquema XML. Hay características en una pero no en la otra.

En general, puede crear una asignación de XML a JSON y viceversa, pero ese no es el caso para el esquema XML y el esquema JSON.

Dicho esto, si ha mapeado un archivo XML a JSON, es bastante posible crear un esquema JSON que valide ese JSON casi de la misma manera que el XSD valida el XML. Pero no es un mapeo directo. Y no es posible garantizar que valide el JSON exactamente igual que el XSD valida el XML.

Por esta razón, y a menos que las dos especificaciones estén hechas para ser compatibles al 100%, la migración de un sistema de validación de XML / XSD a JSON / JSON Schema requerirá la intervención humana.

Descargo de responsabilidad: soy el autor de jgeXml.

jgexml tiene la utilidad basada en Node.js xsd2json que realiza una transformación entre un esquema XML (XSD) y un archivo de esquema JSON.

Al igual que con otras opciones, no es una conversión 1: 1, y es posible que deba editar a mano el resultado para mejorar la validación del esquema JSON, pero se ha utilizado para representar un esquema XML complejo dentro de una definición de OpenAPI (swagger).

Una muestra de purchaseorder.xsd dada en otra respuesta se representa como:

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

Copie su esquema XML aquí y obtenga el código de esquema JSON para las herramientas en línea que están disponibles para generar el esquema JSON a partir del esquema XML.

Es cierto, pero después de convertir json en xml con xmlspy, puede usar la aplicación de trang (http://www.thaiopensource.com/relaxng/trang.html) para crear un archivo xsd a partir de xml.