2010-10-13 25 views
47

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

+1

Creo que la verdadera pregunta es: "¿Es posible hacer una asignación entre el Esquema JSON y el Esquema XML?" no está fuera de tema. Tal vez la pregunta pueda ser reformulada. –

+0

Falco Nogatz hizo una tesis de BSc en 2013 dando como resultado [xsd2json] (https://github.com/fnogatz/xsd2json). – supervacuo

Respuesta

10

Un año después de que se formuló 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 implementan el desarrollo, edición o conversión de esquemas JSON.

+3

Los últimos borradores del borrador de IETF expiraron en agosto de 2013 y parece que nadie está siguiendo este esfuerzo por más tiempo. –

+0

Otorgo esto es viejo, pero incluso en el contexto histórico esto no responde a la pregunta. – vossad01

-3

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

+5

pero va en la dirección incorrecta – vipw

6

El Esquema JSON no está destinado a 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 en JSON, es bastante posible crear un esquema JSON que valide ese JSON casi de la misma forma 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.

+0

No entiendo esto. ¿Puedes dar un ejemplo? – Fenil

+2

Digamos que usted tiene algo así como Se podría definir una asignación para representar a la entidad en JSON, por ejemplo: { "tipo" : "hombre", nombre: "Fred", mascotas: [{type: 'perro', nombre: 'Rex'}]} Pero no hay garantía de que pueda crear una asignación de XSD a Json Schema que coincida con mismo conjunto de documentos –

25

Negación: yo soy el autor de Jsonix, un poderoso XML de código abierto < - biblioteca mapping> JSON JavaScript.

Hoy he lanzado la nueva versión de Jsonix Schema Compiler, con la nueva función JSON Schema generation.

Tomemos el esquema Purchase Order por ejemplo. He aquí un fragmento:

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

puede compilar este esquema por medio de la herramienta de línea de comandos proporcionada:

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

el compilador genera Jsonix mappings así la matching JSON Schema.

Esto es lo que el resultado se parece a (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 bien, 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. Entonces, si usa Jsonix para XML < -> Conversión 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).

Exención de responsabilidad: Por el momento esta es una función nueva y experimental.Hay ciertos conocidos limitations and missing functionality. Pero espero que esto se manifieste y madure muy rápido.

Enlaces:

2

responsabilidad: yo soy el autor de jgeXml.

jgexml tiene 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 necesite editar manualmente la salida para mejorar la validación del esquema JSON, pero se ha utilizado para representar un esquema XML complejo dentro de un OpenAPI) definición.

Una muestra de la 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}.*$" 
    } 
    }, 
0

Copie su esquema XML aquí & obtener el código de esquema JSON a la online tools que están disponibles para generar esquema JSON de esquema XML .

Cuestiones relacionadas