lcahlander/xsd2json

Handle recursion

Opened this issue · 0 comments

Recursion currently crashes the script.

Case 1

XML Schema

<xs:schema xmlns:xs="http://www.w3.org/2001/XMLSchema">
  <xs:element name="node" type="recursive" />

  <xs:complexType name="recursive">
    <xs:sequence minOccurs="0" maxOccurs="unbounded">
      <xs:element name="node" type="recursive" />
    </xs:sequence>
  </xs:complexType>
</xs:schema>

JSON Schema

{
    "$schema": "http://json-schema.org/draft-04/schema#",
    "id": "schema_recursive.json#",
    "version": "0.0.1",
    "type": "object",
    "definitions": {"recursive": {
        "required": ["node"],
        "type": "object",
        "properties": {"node": {"$ref": "#/definitions/recursive"}},
        "additionalProperties": false
    }},
    "allOf": [{"$ref": "#/definitions/recursive"}],
    "additionalProperties": false
}

Case 2

XML Schema

<xs:schema xmlns:xs="http://www.w3.org/2001/XMLSchema">
  <xs:element name="node" type="recursive1"/>

  <xs:complexType name="recursive1">
    <xs:sequence minOccurs="0" maxOccurs="unbounded">
      <xs:element name="node" type="recursive2"/>
    </xs:sequence>
  </xs:complexType>

  <xs:complexType name="recursive2">
    <xs:sequence minOccurs="0" maxOccurs="unbounded">
      <xs:element name="node" type="recursive1"/>
    </xs:sequence>
  </xs:complexType>
</xs:schema>

JSON Schema

{
    "$schema": "http://json-schema.org/draft-04/schema#",
    "id": "schema_recursive2.json#",
    "version": "0.0.1",
    "type": "object",
    "definitions": {
        "recursive1": {
            "required": ["node"],
            "type": "object",
            "properties": {"node": {"$ref": "#/definitions/recursive2"}},
            "additionalProperties": false
        },
        "recursive2": {
            "required": ["node"],
            "type": "object",
            "properties": {"node": {"$ref": "#/definitions/recursive1"}},
            "additionalProperties": false
        }
    },
    "allOf": [{"$ref": "#/definitions/recursive1"}],
    "additionalProperties": false
}