转换XSD到JSON模式(Jsonix,XMLSpy的)
我想的XML模式转换成JSON模式。转换XSD到JSON模式(Jsonix,XMLSpy的)
由于某些原因,我得到的json模式很奇怪,而且不正确。我用Jsonix和Altova的XMLSpy的2017年
例如,这是给定的XSD
<?xml version="1.0" encoding="UTF-8"?> <schema xmlns="http://www.w3.org/2001/XMLSchema" targetNamespace="http://jaxb.vo.dozer.org/Employee" xmlns:tns="http://jaxb.vo.dozer.org/Employee">
<complexType name="EmployeeType">
<sequence>
<element name="FirstName" type="string" minOccurs="1" maxOccurs="1"></element>
<element name="BirthDate" type="date" minOccurs="0" maxOccurs="1"></element>
<element name="LastName" type="string" minOccurs="1" maxOccurs="1"></element>
</sequence>
</complexType>
<element name="Employee" type="tns:EmployeeType"></element>
<element name="EmployeeWithInnerClass">
<complexType>
<sequence>
<element name="FirstName" type="string" minOccurs="1" maxOccurs="1"></element>
<element name="BirthDate" type="date" minOccurs="0" maxOccurs="1"></element>
<element name="LastName" type="string" minOccurs="1" maxOccurs="1"></element>
<element name="Address">
<complexType>
<sequence>
<element name="Street" type="string"></element>
</sequence>
</complexType>
</element>
</sequence>
</complexType>
</element>
</schema>
这是JSON模式,我从Jsonix有:
var org_dozer_vo_jaxb_employee_Module_Factory = function() { var org_dozer_vo_jaxb_employee = {
name: 'org_dozer_vo_jaxb_employee',
typeInfos: [{
localName: 'EmployeeType',
typeName: {
namespaceURI: 'http:\/\/jaxb.vo.dozer.org\/Employee',
localPart: 'EmployeeType'
},
propertyInfos: [{
name: 'firstName',
required: true,
elementName: {
localPart: 'FirstName'
}
}, {
name: 'birthDate',
elementName: {
localPart: 'BirthDate'
},
typeInfo: 'Date'
}, {
name: 'lastName',
required: true,
elementName: {
localPart: 'LastName'
}
}]
}, {
localName: 'EmployeeWithInnerClass.Address',
typeName: null,
propertyInfos: [{
name: 'street',
required: true,
elementName: {
localPart: 'Street'
}
}]
}, {
localName: 'EmployeeWithInnerClass',
typeName: null,
propertyInfos: [{
name: 'firstName',
required: true,
elementName: {
localPart: 'FirstName'
}
}, {
name: 'birthDate',
elementName: {
localPart: 'BirthDate'
},
typeInfo: 'Date'
}, {
name: 'lastName',
required: true,
elementName: {
localPart: 'LastName'
}
}, {
name: 'address',
required: true,
elementName: {
localPart: 'Address'
},
typeInfo: '.EmployeeWithInnerClass.Address'
}]
}],
elementInfos: [{
typeInfo: '.EmployeeWithInnerClass',
elementName: {
localPart: 'EmployeeWithInnerClass',
namespaceURI: 'http:\/\/jaxb.vo.dozer.org\/Employee'
}
}, {
typeInfo: '.EmployeeType',
elementName: {
localPart: 'Employee',
namespaceURI: 'http:\/\/jaxb.vo.dozer.org\/Employee'
}
}]
};
return {
org_dozer_vo_jaxb_employee: org_dozer_vo_jaxb_employee
};
};
if (typeof define === 'function' && define.amd) {
define([], org_dozer_vo_jaxb_employee_Module_Factory);
}
else {
var org_dozer_vo_jaxb_employee_Module = org_dozer_vo_jaxb_employee_Module_Factory();
if (typeof module !== 'undefined' && module.exports) {
module.exports.org_dozer_vo_jaxb_employee = org_dozer_vo_jaxb_employee_Module.org_dozer_vo_jaxb_employee;
}
else {
var org_dozer_vo_jaxb_employee = org_dozer_vo_jaxb_employee_Module.org_dozer_vo_jaxb_employee;
}
}
为什么我得到了这一切在那里工作?我做了一些蠕虫?
随着Altova的XMLSpy的结果是不同的,在所有:
{ "$schema": "http://json-schema.org/draft-04/schema#",
"additionalProperties": false,
"definitions": {
".tns:Employee": {
"$ref": "#/definitions/tns:EmployeeType"
},
".tns:EmployeeWithInnerClass": {
"additionalProperties": false,
"patternProperties": {
"^\\?\\w+$": {
"type": "string"
}
},
"properties": {
"Address": {
"additionalProperties": false,
"patternProperties": {
"^\\?\\w+$": {
"type": "string"
}
},
"properties": {
"Street": {
"additionalProperties": false,
"patternProperties": {
"^\\?\\w+$": {
"type": "string"
}
},
"properties": {
"$": {
"$ref": "#/definitions/xs:string"
}
},
"type": "object"
}
},
"required": [
"Street"
],
"type": "object"
},
"BirthDate": {
"additionalProperties": false,
"patternProperties": {
"^\\?\\w+$": {
"type": "string"
}
},
"properties": {
"$": {
"$ref": "#/definitions/xs:date"
}
},
"type": "object"
},
"FirstName": {
"additionalProperties": false,
"patternProperties": {
"^\\?\\w+$": {
"type": "string"
}
},
"properties": {
"$": {
"$ref": "#/definitions/xs:string"
}
},
"type": "object"
},
"LastName": {
"additionalProperties": false,
"patternProperties": {
"^\\?\\w+$": {
"type": "string"
}
},
"properties": {
"$": {
"$ref": "#/definitions/xs:string"
}
},
"type": "object"
}
},
"required": [
"Address",
"FirstName",
"LastName"
],
"type": "object"
},
"tns:EmployeeType": {
"additionalProperties": false,
"patternProperties": {
"^\\?\\w+$": {
"type": "string"
}
},
"properties": {
"BirthDate": {
"additionalProperties": false,
"patternProperties": {
"^\\?\\w+$": {
"type": "string"
}
},
"properties": {
"$": {
"$ref": "#/definitions/xs:date"
}
},
"type": "object"
},
"FirstName": {
"additionalProperties": false,
"patternProperties": {
"^\\?\\w+$": {
"type": "string"
}
},
"properties": {
"$": {
"$ref": "#/definitions/xs:string"
}
},
"type": "object"
},
"LastName": {
"additionalProperties": false,
"patternProperties": {
"^\\?\\w+$": {
"type": "string"
}
},
"properties": {
"$": {
"$ref": "#/definitions/xs:string"
}
},
"type": "object"
}
},
"required": [
"FirstName",
"LastName"
],
"type": "object"
},
"xs:date": {
"type": "string"
},
"xs:string": {
"type": "string"
}
},
"description": "JSON Schema generated by XMLSpy v2017 sp1 (x64) (http://www.altova.com)",
"patternProperties": {
"^\\?\\w+$": {
"type": "string"
}
},
"properties": {
"@xmlns:tns": {
"default": "http://jaxb.vo.dozer.org/Employee"
},
"@xmlns:xs": {
"default": "http://www.w3.org/2001/XMLSchema"
},
"tns:Employee": {
"$ref": "#/definitions/.tns:Employee"
},
"tns:EmployeeWithInnerClass": {
"$ref": "#/definitions/.tns:EmployeeWithInnerClass"
}
},
"type": "object"
}
感谢
回答:
我的Jsonix作者。
您发布的Jsonix输出不是JSON模式,它是您的模式的Jsonix mappings。如果要生成JSON模式,请添加-generateJsonSchema
参数。请参阅here。
这里是Jsonix会为您的架构:
{ "id":"#",
"definitions":{
"EmployeeWithInnerClass":{
"type":"object",
"title":"EmployeeWithInnerClass",
"required":[
"firstName",
"lastName",
"address"
],
"properties":{
"firstName":{
"title":"firstName",
"allOf":[
{
"$ref":"http://www.jsonix.org/jsonschemas/w3c/2001/XMLSchema.jsonschema#/definitions/string"
}
],
"propertyType":"element",
"elementName":{
"localPart":"FirstName",
"namespaceURI":""
}
},
"birthDate":{
"title":"birthDate",
"allOf":[
{
"$ref":"http://www.jsonix.org/jsonschemas/w3c/2001/XMLSchema.jsonschema#/definitions/date"
}
],
"propertyType":"element",
"elementName":{
"localPart":"BirthDate",
"namespaceURI":""
}
},
"lastName":{
"title":"lastName",
"allOf":[
{
"$ref":"http://www.jsonix.org/jsonschemas/w3c/2001/XMLSchema.jsonschema#/definitions/string"
}
],
"propertyType":"element",
"elementName":{
"localPart":"LastName",
"namespaceURI":""
}
},
"address":{
"title":"address",
"allOf":[
{
"$ref":"#/definitions/EmployeeWithInnerClass.Address"
}
],
"propertyType":"element",
"elementName":{
"localPart":"Address",
"namespaceURI":""
}
}
},
"typeType":"classInfo",
"propertiesOrder":[
"firstName",
"birthDate",
"lastName",
"address"
]
},
"EmployeeWithInnerClass.Address":{
"type":"object",
"title":"EmployeeWithInnerClass.Address",
"required":[
"street"
],
"properties":{
"street":{
"title":"street",
"allOf":[
{
"$ref":"http://www.jsonix.org/jsonschemas/w3c/2001/XMLSchema.jsonschema#/definitions/string"
}
],
"propertyType":"element",
"elementName":{
"localPart":"Street",
"namespaceURI":""
}
}
},
"typeType":"classInfo",
"propertiesOrder":[
"street"
]
},
"EmployeeType":{
"type":"object",
"title":"EmployeeType",
"required":[
"firstName",
"lastName"
],
"properties":{
"firstName":{
"title":"firstName",
"allOf":[
{
"$ref":"http://www.jsonix.org/jsonschemas/w3c/2001/XMLSchema.jsonschema#/definitions/string"
}
],
"propertyType":"element",
"elementName":{
"localPart":"FirstName",
"namespaceURI":""
}
},
"birthDate":{
"title":"birthDate",
"allOf":[
{
"$ref":"http://www.jsonix.org/jsonschemas/w3c/2001/XMLSchema.jsonschema#/definitions/date"
}
],
"propertyType":"element",
"elementName":{
"localPart":"BirthDate",
"namespaceURI":""
}
},
"lastName":{
"title":"lastName",
"allOf":[
{
"$ref":"http://www.jsonix.org/jsonschemas/w3c/2001/XMLSchema.jsonschema#/definitions/string"
}
],
"propertyType":"element",
"elementName":{
"localPart":"LastName",
"namespaceURI":""
}
}
},
"typeType":"classInfo",
"typeName":{
"localPart":"EmployeeType",
"namespaceURI":"http://jaxb.vo.dozer.org/Employee"
},
"propertiesOrder":[
"firstName",
"birthDate",
"lastName"
]
}
},
"anyOf":[
{
"type":"object",
"properties":{
"name":{
"allOf":[
{
"$ref":"http://www.jsonix.org/jsonschemas/w3c/2001/XMLSchema.jsonschema#/definitions/QName"
},
{
"type":"object",
"properties":{
"localPart":{
"enum":[
"Employee"
]
},
"namespaceURI":{
"enum":[
"http://jaxb.vo.dozer.org/Employee"
]
}
}
}
]
},
"value":{
"$ref":"#/definitions/EmployeeType"
}
},
"elementName":{
"localPart":"Employee",
"namespaceURI":"http://jaxb.vo.dozer.org/Employee"
}
},
{
"type":"object",
"properties":{
"name":{
"allOf":[
{
"$ref":"http://www.jsonix.org/jsonschemas/w3c/2001/XMLSchema.jsonschema#/definitions/QName"
},
{
"type":"object",
"properties":{
"localPart":{
"enum":[
"EmployeeWithInnerClass"
]
},
"namespaceURI":{
"enum":[
"http://jaxb.vo.dozer.org/Employee"
]
}
}
}
]
},
"value":{
"$ref":"#/definitions/EmployeeWithInnerClass"
}
},
"elementName":{
"localPart":"EmployeeWithInnerClass",
"namespaceURI":"http://jaxb.vo.dozer.org/Employee"
}
}
]
}
以上是 转换XSD到JSON模式(Jsonix,XMLSpy的) 的全部内容, 来源链接: utcz.com/qa/263147.html