Handle elements with substitutionGroup and not abstract
Opened this issue · 0 comments
lcahlander commented
The following XML Schema should generate the JSON Schema below.
XML Schema
<xsd:schema xmlns:xsd="http://www.w3.org/2001/XMLSchema">
<xsd:element name="root">
<xsd:complexType>
<xsd:sequence minOccurs="1">
<xsd:element ref="digit"/>
</xsd:sequence>
</xsd:complexType>
</xsd:element>
<xsd:element name="digit" type="AAA"/>
<xsd:simpleType name="AAA">
<xsd:restriction base="xsd:integer">
<xsd:minInclusive value="1"/>
<xsd:maxInclusive value="9"/>
</xsd:restriction>
</xsd:simpleType>
<xsd:element name="odd" substitutionGroup="digit">
<xsd:simpleType>
<xsd:restriction base="AAA">
<xsd:enumeration value="1"/>
<xsd:enumeration value="3"/>
<xsd:enumeration value="5"/>
<xsd:enumeration value="7"/>
<xsd:enumeration value="9"/>
</xsd:restriction>
</xsd:simpleType>
</xsd:element>
<xsd:element name="even" substitutionGroup="digit">
<xsd:simpleType>
<xsd:restriction base="AAA">
<xsd:enumeration value="2"/>
<xsd:enumeration value="4"/>
<xsd:enumeration value="6"/>
<xsd:enumeration value="8"/>
</xsd:restriction>
</xsd:simpleType>
</xsd:element>
</xsd:schema>
JSON Schema
{
"$schema": "http://json-schema.org/draft-04/schema#",
"id": "element-substitution.json#",
"version": "0.0.1",
"type": "object",
"definitions": {"AAA": {
"maximum": 9,
"exclusiveMaximum": false,
"xsdType": "integer",
"xsdMapping": "restrictive",
"minimum": 1,
"exclusiveMinimum": false,
"type": "integer"
}},
"oneOf": [
{
"properties": {"digit": {
"maximum": 9,
"exclusiveMaximum": false,
"xsdType": "integer",
"xsdMapping": "restrictive",
"minimum": 1,
"exclusiveMinimum": false,
"type": "integer"
}},
"additionalProperties": false,
"type": "object",
"required": ["digit"]
},
{
"properties": {"odd": {
"maximum": 9,
"enum": [
1,
3,
5,
7,
9
],
"exclusiveMaximum": false,
"xsdType": "integer",
"xsdMapping": "restrictive",
"xsdEnum": [
{
"value": 1,
"description": ""
},
{
"value": 3,
"description": ""
},
{
"value": 5,
"description": ""
},
{
"value": 7,
"description": ""
},
{
"value": 9,
"description": ""
}
],
"minimum": 1,
"exclusiveMinimum": false,
"type": "integer"
}},
"additionalProperties": false,
"type": "object",
"required": ["odd"]
},
{
"properties": {"even": {
"maximum": 9,
"enum": [
2,
4,
6,
8
],
"exclusiveMaximum": false,
"xsdType": "integer",
"xsdMapping": "restrictive",
"xsdEnum": [
{
"value": 2,
"description": ""
},
{
"value": 4,
"description": ""
},
{
"value": 6,
"description": ""
},
{
"value": 8,
"description": ""
}
],
"minimum": 1,
"exclusiveMinimum": false,
"type": "integer"
}},
"additionalProperties": false,
"type": "object",
"required": ["even"]
}
],
"additionalProperties": false
}
Valid JSON Documents
Case 1
a
{"digit": 1}
b
{"digit": 2}
Case 2
{"odd": 3}
Case 3
{"even": 4}