XML Schema to JSON Schema Transform - Development and Test Environment
The options that are supported are:
- 'keepNamespaces' - set to true if keeping prefices in the property names is required otherwise prefixes are eliminated. - default is false
- 'schemaId' - the name of the schema - default is 'output.json'
- 'restrictive' - Maps the XSD data types to the more restrictive properties. - default is true
The Gist link for the library module is https://gist.github.com/lcahlander/0eecf499dfe307d7aecbb15f775bd4f2
- Saxon 9 EE (licensed copy is needed to use XQuery 3.1 features)
java -cp /usr/share/java/saxon.jar net.sf.saxon.Query -q:generate.xqy -s:schema.xsd -o:schema.json keepNamespace=true schemaId=schema.json restrictive=false
{
'xsdType': 'anySimpleType',
'oneOf': [
{ 'type': 'integer' },
{ 'type': 'string' },
{ 'type': 'number' },
{ 'type': 'boolean' },
{ 'type': 'null' }
]
}
{
'type': 'string',
'xsdType': 'anyURI',
'pattern': '^(([^:/?#]+):)?(//([^/?#]*))?([^?#]*)(\\?([^#]*))?(#(.*))?'
}
{
'type': 'string',
'xsdType': 'anyURI'
}
{
'type': 'string',
'xsdType': 'base64Binary',
'pattern': '^(?:[A-Za-z0-9+/]{4})*(?:[A-Za-z0-9+/]{2}==|[A-Za-z0-9+/]{3}=)?$'
}
{
'type': 'string',
'xsdType': 'base64Binary'
}
{
'type': 'boolean',
'xsdType': 'boolean'
}
{
'type': 'boolean',
'xsdType': 'boolean'
}
{
'type': 'integer',
'xsdType': 'byte',
'minimum': -128,
'maximum': 127,
'exclusiveMinimum': false,
'exclusiveMaximum': false
}
{
'type': 'integer',
'xsdType': 'byte'
}
{
'type': 'string',
'xsdType': 'date',
'pattern': '^\\d{4}-(0[1-9]|1[012])-(0[1-9]|[12][0-9]|3[01])$'
}
{
'type': 'string',
'xsdType': 'date',
'pattern': '^\\d{4}-(0[1-9]|1[012])-(0[1-9]|[12][0-9]|3[01])$'
}
{
'type': 'string',
'xsdType': 'dateTime',
'pattern': '^([\\+-]?\\d{4}(?!\\d{2}\\b))((-?)((0[1-9]|1[0-2])(\\3([12]\\d|0[1-9]|3[01]))?|W([0-4]\\d|5[0-2])(-?[1-7])?|(00[1-9]|0[1-9]\\d|[12]\\d{2}|3([0-5]\\d|6[1-6])))(T((([01]\\d|2[0-3])((:?)[0-5]\\d)?|24\\:?00)([\\.,]\\d+(?!:))?)?(\\17[0-5]\\d([\\.,]\\d+)?)?([zZ]|([\\+-])([01]\\d|2[0-3]):?([0-5]\\d)?)?)?)?$'
}
{
'type': 'string',
'xsdType': 'dateTime',
'pattern': '^([\\+-]?\\d{4}(?!\\d{2}\\b))((-?)((0[1-9]|1[0-2])(\\3([12]\\d|0[1-9]|3[01]))?|W([0-4]\\d|5[0-2])(-?[1-7])?|(00[1-9]|0[1-9]\\d|[12]\\d{2}|3([0-5]\\d|6[1-6])))(T((([01]\\d|2[0-3])((:?)[0-5]\\d)?|24\\:?00)([\\.,]\\d+(?!:))?)?(\\17[0-5]\\d([\\.,]\\d+)?)?([zZ]|([\\+-])([01]\\d|2[0-3]):?([0-5]\\d)?)?)?)?$'
}
{
'type': 'number',
'xsdType': 'decimal'
}
{
'type': 'number',
'xsdType': 'decimal'
}
{
'type': 'number',
'xsdType': 'decimal'
}
{
'type': 'number',
'xsdType': 'decimal'
}
{
'type': 'number',
'xsdType': 'double'
}
{
'type': 'number',
'xsdType': 'double'
}
{
'type': 'string',
'xsdType': 'duration',
'pattern': '^P(?!$)(\\d+Y)?(\\d+M)?(\\d+W)?(\\d+D)?(T(?=\\d+[HMS])(\\d+H)?(\\d+M)?(\\d+S)?)?$'
}
{
'type': 'string',
'xsdType': 'duration',
'pattern': '^P(?!$)(\\d+Y)?(\\d+M)?(\\d+W)?(\\d+D)?(T(?=\\d+[HMS])(\\d+H)?(\\d+M)?(\\d+S)?)?$'
}
{
'type': 'array',
'xsdType': 'ENTITIES',
'items': {
'type': 'string',
'pattern': '^[A-Z_a-z\\u00C0-\\u00D6\\u00D8-\\u00F6\\u00F8-\\u02FF\\u0370-\\u037D\\u037F-\\u1FFF\\u200C-\\u200D\\u2070-\\u218F\\u2C00-\\u2FEF\\u3001-\\uD7FF\\uF900-\\uFDCF\\uFDF0-\\uFFFD][-.0-9A-Z_a-z\\u00B7\\u00C0-\\u00D6\\u00D8-\\u00F6\\u00F8-\\u037D\\u037F-\\u1FFF\\u200C-\\u200D\\u203F\\u2040\\u2070-\\u218F\\u2C00-\\u2FEF\\u3001-\\uD7FF\\uF900-\\uFDCF\\uFDF0-\\uFFFD]*$'
}
}
{
'type': 'array',
'xsdType': 'ENTITIES',
'items': {
'type': 'string'
}
}
{
'type': 'string',
'xsdType': 'ENTITY',
'pattern': '^[A-Z_a-z\\u00C0-\\u00D6\\u00D8-\\u00F6\\u00F8-\\u02FF\\u0370-\\u037D\\u037F-\\u1FFF\\u200C-\\u200D\\u2070-\\u218F\\u2C00-\\u2FEF\\u3001-\\uD7FF\\uF900-\\uFDCF\\uFDF0-\\uFFFD][-.0-9A-Z_a-z\\u00B7\\u00C0-\\u00D6\\u00D8-\\u00F6\\u00F8-\\u037D\\u037F-\\u1FFF\\u200C-\\u200D\\u203F\\u2040\\u2070-\\u218F\\u2C00-\\u2FEF\\u3001-\\uD7FF\\uF900-\\uFDCF\\uFDF0-\\uFFFD]*$'
}
{
'type': 'string',
'xsdType': 'ENTITY'
}
{
'type': 'number',
'xsdType': 'float'
}
{
'type': 'number',
'xsdType': 'float'
}
{
'type': 'string',
'xsdType': 'gDay',
'pattern': '^(0[1-9]|[12][0-9]|3[01])$'
}
{
'type': 'string',
'xsdType': 'gDay',
'pattern': '^(0[1-9]|[12][0-9]|3[01])$'
}
{
'type': 'string',
'xsdType': 'gMonthDay',
'pattern': '^(0[1-9]|1[012])-(0[1-9]|[12][0-9]|3[01])$'
}
{
'type': 'string',
'xsdType': 'gMonthDay',
'pattern': '^(0[1-9]|1[012])-(0[1-9]|[12][0-9]|3[01])$'
}
{
'type': 'string',
'xsdType': 'gMonth',
'pattern': '^(0[1-9]|1[012])$'
}
{
'type': 'string',
'xsdType': 'gMonth',
'pattern': '^(0[1-9]|1[012])$'
}
{
'type': 'string',
'xsdType': 'gYearMonth',
'pattern': '^(19|20)\\d\\d-(0[1-9]|1[012])$'
}
{
'type': 'string',
'xsdType': 'gYearMonth',
'pattern': '^(19|20)\\d\\d-(0[1-9]|1[012])$'
}
{
'type': 'string',
'xsdType': 'gYear',
'pattern': '^(19|20)\\d\\d$'
}
{
'type': 'string',
'xsdType': 'gYear',
'pattern': '^(19|20)\\d\\d$'
}
{
'type': 'string',
'xsdType': 'hexBinary',
'pattern': '^([0-9a-fA-F]{2})*$'
}
{
'type': 'string',
'xsdType': 'hexBinary'
}
{
'type': 'string',
'xsdType': 'IDREF',
'pattern': '^[A-Z_a-z\\u00C0-\\u00D6\\u00D8-\\u00F6\\u00F8-\\u02FF\\u0370-\\u037D\\u037F-\\u1FFF\\u200C-\\u200D\\u2070-\\u218F\\u2C00-\\u2FEF\\u3001-\\uD7FF\\uF900-\\uFDCF\\uFDF0-\\uFFFD][-.0-9A-Z_a-z\\u00B7\\u00C0-\\u00D6\\u00D8-\\u00F6\\u00F8-\\u037D\\u037F-\\u1FFF\\u200C-\\u200D\\u203F\\u2040\\u2070-\\u218F\\u2C00-\\u2FEF\\u3001-\\uD7FF\\uF900-\\uFDCF\\uFDF0-\\uFFFD]*$'
}
{
'type': 'string',
'xsdType': 'IDREF'
}
{
'type': 'string',
'xsdType': 'IDREFS',
'pattern': '^[A-Z_a-z\\u00C0-\\u00D6\\u00D8-\\u00F6\\u00F8-\\u02FF\\u0370-\\u037D\\u037F-\\u1FFF\\u200C-\\u200D\\u2070-\\u218F\\u2C00-\\u2FEF\\u3001-\\uD7FF\\uF900-\\uFDCF\\uFDF0-\\uFFFD][-.0-9A-Z_a-z\\u00B7\\u00C0-\\u00D6\\u00D8-\\u00F6\\u00F8-\\u037D\\u037F-\\u1FFF\\u200C-\\u200D\\u203F\\u2040\\u2070-\\u218F\\u2C00-\\u2FEF\\u3001-\\uD7FF\\uF900-\\uFDCF\\uFDF0-\\uFFFD]*$'
}
{
'type': 'string',
'xsdType': 'IDREFS'
}
{
'type': 'string',
'xsdType': 'ID',
'pattern': '^[A-Z_a-z\\u00C0-\\u00D6\\u00D8-\\u00F6\\u00F8-\\u02FF\\u0370-\\u037D\\u037F-\\u1FFF\\u200C-\\u200D\\u2070-\\u218F\\u2C00-\\u2FEF\\u3001-\\uD7FF\\uF900-\\uFDCF\\uFDF0-\\uFFFD][-.0-9A-Z_a-z\\u00B7\\u00C0-\\u00D6\\u00D8-\\u00F6\\u00F8-\\u037D\\u037F-\\u1FFF\\u200C-\\u200D\\u203F\\u2040\\u2070-\\u218F\\u2C00-\\u2FEF\\u3001-\\uD7FF\\uF900-\\uFDCF\\uFDF0-\\uFFFD]*$'
}
{
'type': 'string',
'xsdType': 'ID'
}
{
'type': 'integer',
'xsdType': 'integer'
}
{
'type': 'integer',
'xsdType': 'integer'
}
{
'type': 'integer',
'xsdType': 'int',
'minimum': -2147483648,
'maximum': 2147483647,
'exclusiveMinimum': false,
'exclusiveMaximum': false
}
{
'type': 'integer',
'xsdType': 'int'
}
{
'type': 'string',
'xsdType': 'language',
'pattern': '^[a-zA-Z]{1,8}(-[a-zA-Z0-9]{1,8})*$'
}
{
'type': 'string',
'xsdType': 'language'
}
{
'type': 'integer',
'xsdType': 'long',
'minimum': -9223372036854775808,
'maximum': 9223372036854775807,
'exclusiveMinimum': false,
'exclusiveMaximum': false
}
{
'type': 'integer',
'xsdType': 'long'
}
{
'type': 'string',
'xsdType': 'Name',
'pattern': '^[:A-Z_a-z\\u00C0-\\u00D6\\u00D8-\\u00F6\\u00F8-\\u02FF\\u0370-\\u037D\\u037F-\\u1FFF\\u200C-\\u200D\\u2070-\\u218F\\u2C00-\\u2FEF\\u3001-\\uD7FF\\uF900-\\uFDCF\\uFDF0-\\uFFFD][-.0-9:A-Z_a-z\\u00B7\\u00C0-\\u00D6\\u00D8-\\u00F6\\u00F8-\\u037D\\u037F-\\u1FFF\\u200C-\\u200D\\u203F\\u2040\\u2070-\\u218F\\u2C00-\\u2FEF\\u3001-\\uD7FF\\uF900-\\uFDCF\\uFDF0-\\uFFFD]*$'
}
{
'type': 'string',
'xsdType': 'Name'
}
{
'type': 'string',
'xsdType': 'NCName',
'pattern': '^[A-Z_a-z\\u00C0-\\u00D6\\u00D8-\\u00F6\\u00F8-\\u02FF\\u0370-\\u037D\\u037F-\\u1FFF\\u200C-\\u200D\\u2070-\\u218F\\u2C00-\\u2FEF\\u3001-\\uD7FF\\uF900-\\uFDCF\\uFDF0-\\uFFFD][-.0-9A-Z_a-z\\u00B7\\u00C0-\\u00D6\\u00D8-\\u00F6\\u00F8-\\u037D\\u037F-\\u1FFF\\u200C-\\u200D\\u203F\\u2040\\u2070-\\u218F\\u2C00-\\u2FEF\\u3001-\\uD7FF\\uF900-\\uFDCF\\uFDF0-\\uFFFD]*$'
}
{
'type': 'string',
'xsdType': 'NCName'
}
{
'type': 'integer',
'xsdType': 'negativeInteger',
'maximum': 0,
'exclusiveMinimum': true
}
{
'type': 'integer',
'xsdType': 'negativeInteger',
'maximum': 0,
'exclusiveMinimum': true
}
{
'type': 'string',
'xsdType': 'NMTOKEN',
'pattern': '^[A-Z_a-z\\u00C0-\\u00D6\\u00D8-\\u00F6\\u00F8-\\u02FF\\u0370-\\u037D\\u037F-\\u1FFF\\u200C-\\u200D\\u2070-\\u218F\\u2C00-\\u2FEF\\u3001-\\uD7FF\\uF900-\\uFDCF\\uFDF0-\\uFFFD][-.0-9A-Z_a-z\\u00B7\\u00C0-\\u00D6\\u00D8-\\u00F6\\u00F8-\\u037D\\u037F-\\u1FFF\\u200C-\\u200D\\u203F\\u2040\\u2070-\\u218F\\u2C00-\\u2FEF\\u3001-\\uD7FF\\uF900-\\uFDCF\\uFDF0-\\uFFFD]*$'
}
{
'type': 'string',
'xsdType': 'NMTOKEN'
}
{
'type': 'array',
'xsdType': 'NMTOKENS',
'items': {
'type': 'string',
'pattern': '^[A-Z_a-z\\u00C0-\\u00D6\\u00D8-\\u00F6\\u00F8-\\u02FF\\u0370-\\u037D\\u037F-\\u1FFF\\u200C-\\u200D\\u2070-\\u218F\\u2C00-\\u2FEF\\u3001-\\uD7FF\\uF900-\\uFDCF\\uFDF0-\\uFFFD][-.0-9A-Z_a-z\\u00B7\\u00C0-\\u00D6\\u00D8-\\u00F6\\u00F8-\\u037D\\u037F-\\u1FFF\\u200C-\\u200D\\u203F\\u2040\\u2070-\\u218F\\u2C00-\\u2FEF\\u3001-\\uD7FF\\uF900-\\uFDCF\\uFDF0-\\uFFFD]*$'
}
}
{
'type': 'array',
'xsdType': 'NMTOKENS',
'items': {
'type': 'string'
}
}
{
'type': 'integer',
'xsdType': 'nonNegativeInteger',
'minimum': 0,
'exclusiveMinimum': false
}
{
'type': 'integer',
'xsdType': 'nonNegativeInteger',
'minimum': 0,
'exclusiveMinimum': false
}
{
'type': 'integer',
'xsdType': 'nonPositiveInteger',
'maximum': 0,
'exclusiveMaximum': false
}
{
'type': 'integer',
'xsdType': 'nonPositiveInteger',
'maximum': 0,
'exclusiveMaximum': false
}
{
'type': 'string'
'xsdType': 'normalizedString',
}
{
'type': 'string'
'xsdType': 'normalizedString',
}
{
'type': 'integer',
'xsdType': 'positiveInteger',
'minimum': 0,
'exclusiveMinimum': true
}
{
'type': 'integer',
'xsdType': 'positiveInteger',
'minimum': 0,
'exclusiveMinimum': true
}
{
'type': 'string',
'xsdType': 'QName',
'pattern': '^[A-Z_a-z\\u00C0-\\u00D6\\u00D8-\\u00F6\\u00F8-\\u02FF\\u0370-\\u037D\\u037F-\\u1FFF\\u200C-\\u200D\\u2070-\\u218F\\u2C00-\\u2FEF\\u3001-\\uD7FF\\uF900-\\uFDCF\\uFDF0-\\uFFFD][-.0-9A-Z_a-z\\u00B7\\u00C0-\\u00D6\\u00D8-\\u00F6\\u00F8-\\u037D\\u037F-\\u1FFF\\u200C-\\u200D\\u203F\\u2040\\u2070-\\u218F\\u2C00-\\u2FEF\\u3001-\\uD7FF\\uF900-\\uFDCF\\uFDF0-\\uFFFD]*:[A-Z_a-z\\u00C0-\\u00D6\\u00D8-\\u00F6\\u00F8-\\u02FF\\u0370-\\u037D\\u037F-\\u1FFF\\u200C-\\u200D\\u2070-\\u218F\\u2C00-\\u2FEF\\u3001-\\uD7FF\\uF900-\\uFDCF\\uFDF0-\\uFFFD][-.0-9A-Z_a-z\\u00B7\\u00C0-\\u00D6\\u00D8-\\u00F6\\u00F8-\\u037D\\u037F-\\u1FFF\\u200C-\\u200D\\u203F\\u2040\\u2070-\\u218F\\u2C00-\\u2FEF\\u3001-\\uD7FF\\uF900-\\uFDCF\\uFDF0-\\uFFFD]*$'
}
{
'type': 'string',
'xsdType': 'QName'
}
{
'type': 'integer',
'xsdType': 'short',
'minimum': -32768,
'maximum': 32767,
'exclusiveMinimum': false,
'exclusiveMaximum': false
}
{
'type': 'integer',
'xsdType': 'short'
}
{
'type': 'string',
'xsdType': 'string'
}
{
'type': 'string',
'xsdType': 'string'
}
{
'type': 'string',
'xsdType': 'time',
'pattern': '^([01]\\d|2[0-3]):([0-5]\\d)(?::([0-5]\\d)(.(\\d{3}))?)?$'
}
{
'type': 'string',
'xsdType': 'time',
'pattern': '^([01]\\d|2[0-3]):([0-5]\\d)(?::([0-5]\\d)(.(\\d{3}))?)?$'
}
{
'type': 'string',
'xsdType': 'token'
}
{
'type': 'string',
'xsdType': 'token'
}
{
'type': 'integer',
'xsdType': 'unsignedByte',
'minimum': 0,
'maximum': 255,
'exclusiveMinimum': false,
'exclusiveMaximum': false
}
{
'type': 'integer',
'xsdType': 'unsignedByte',
'minimum': 0,
'exclusiveMinimum': false
}
{
'type': 'integer',
'xsdType': 'unsignedInt',
'minimum': 0,
'maximum': 4294967295,
'exclusiveMinimum': false,
'exclusiveMaximum': false
}
{
'type': 'integer',
'xsdType': 'unsignedInt',
'minimum': 0,
'exclusiveMinimum': false
}
{
'type': 'integer',
'xsdType': 'unsignedLong',
'minimum': 0,
'maximum': 18446744073709551615,
'exclusiveMinimum': false,
'exclusiveMaximum': false
}
{
'type': 'integer',
'xsdType': 'unsignedLong',
'minimum': 0,
'exclusiveMinimum': false
}
{
'type': 'integer',
'xsdType': 'unsignedShort',
'minimum': 0,
'maximum': 65535,
'exclusiveMinimum': false,
'exclusiveMaximum': false
}
{
'type': 'integer',
'xsdType': 'unsignedShort',
'minimum': 0,
'exclusiveMinimum': false
}