Gerar o esquema Json a partir do esquema XML (XSD) [fechado]

Alguém sabe como gerar um esquema JSON a partir de um esquema XML existente (ficheiro XSD)? Há alguma ferramenta disponível para isso?

Author: konung, 2010-10-13

6 answers

Disclaimer : I am the author of Jsonix , a powerful open-source XML JSON JavaScript mapping library.

Hoje eu lancei a nova versão do compilador Jsonix Schema , com a nova versãoJSON Schema generation .

Por exemplo, o esquema de compra. Aqui está um 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>

Poderá compilar este esquema usando a ferramenta de linha de comandos indicada:

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

O compilador gera os mapeamentos Jsonix assim como o esquema JSON correspondente.

Aqui está o resultado (editado por brevidade):
{
    "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":""
            }
        }
    ]
}

Agora este esquema JSON é derivado do esquema XML original. Não é exatamente 1: 1 transformação, mas muito perto.

O esquema JSON gerado corresponde aos mapeamentos generatd Jsonix. Por isso, se usar o Jsonix para a conversão XMLJSON, deverá ser capaz de validar o JSON com o esquema JSON gerado. Também contém todas as metadados necessários do esquema XML de origem (como os nomes dos elementos, atributos e tipos).

Disclaimer: At the moment this is a new and experimental feature. Existem certas limitações conhecidas e falta de funcionalidade. Mas espero que isto se manifeste e amadureça muito depressa.

Ligações:

 26
Author: lexicore, 2015-05-02 20:13:47
Um ano depois de esta pergunta ter sido originalmente feita, o JSON Schema continua a ser um projecto de documento da IETF. A partir desta escrita (18 de outubro de 2011), o grupo de trabalho está tentando chegar a acordo sobre o projeto 4 do caderno de especificações. Embora existam algumas implementações de validação especulativas (ver http://json-schema.org/), a maioria dos fornecedores de ferramentas não investiu muito esforço em ferramentas que implementam o desenvolvimento, edição ou conversão do esquema JSON.
 10
Author: J Edward Ellis, 2011-10-18 21:39:47

O esquema JSON não se destina a ser equivalente ao esquema XML. Há características em um, mas não no outro.

De um modo geral, poderá criar um mapeamento de XML para JSON e de volta, mas esse não é o caso do XML schema e do JSON schema.

Dito isto, se você mapeou um arquivo XML para JSON, é bastante possível criar um esquema JSON que valida esse JSON quase da mesma forma que o XSD valida o XML. Mas não é um mapeamento directo. E é não é possível garantir que validará o JSON exatamente da mesma forma que o XSD valida o XML.

Por esta razão, e a menos que as duas especificações sejam compatíveis com 100% das funcionalidades, migrar um sistema de validação de XML/XSD para JSON/JSON Schema exigirá intervenção humana.

 6
Author: Eric Hartford, 2012-05-10 21:55:21

Disclaimer: eu sou o autor de jgeXml.

Jgexml tem nó.utilitário baseado em js xsd2json que faz uma transformação entre um esquema XML (XSD) e um ficheiro schema JSON.

Como Acontece com outras opções, não é uma conversão 1:1, e você pode precisar de editar manualmente o resultado para melhorar a validação do esquema JSON, mas foi usado para representar um esquema XML complexo dentro de uma definição OpenAPI (swagger).

Uma amostra da ordem de compra.xsd dado em outra resposta é renderizado 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}.*$"
    }
  },
 3
Author: MikeRalphson, 2017-07-31 08:28:33

Copie aqui o seu esquema XML e obtenha o código do esquema JSON para as ferramentas 'online' que estão disponíveis para gerar o esquema JSON a partir do esquema XML.

 0
Author: Karl Parker, 2017-11-14 11:40:23

Verdadeiro, mas depois de transformar o json em xml com o xmlspy, poderá usar a aplicação trang (http://www.thaiopensource.com/relaxng/trang.html) para criar um xsd a partir de arquivos xml.

 -3
Author: Spokk, 2012-04-04 12:56:28