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?
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:
-
Demo Purchase Project for NPM - just check out and
npm install
- Documentação
- Corrente libertação
- compilador de esquemas Jsonix ligado npmjs.com
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.
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}.*$"
}
},
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.
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.