<JSONSchemaDocumentation xmlns="http://www.altova.com/documentation" xmlns:doc="http://www.altova.com/documentation">
	<Document title="Sample.json" application="XMLSpy" homepage="http://www.altova.com/xmlspy"/>
	<DocumentationSettings>
		<Includes overview="true" definitions="true" properties="true" patternProperties="true" propertyWildcards="true" propertyNamesSchemas="true" arrayItems="true" operatorSubschemas="true" conditionalParts="true" schemaDependencies="true" externalSchemas="true"/>
		<Details diagram="true" location="true" specifying="true" propertyDetails="true" schemaDetails="true" type="true" typeConstraints="true" enumerations="true" arrayItems="true" properties="true" operators="true" conditional="true" sourceCode="true" usedBy="true"/>
	</DocumentationSettings>
	<SchemaDocument location="Sample.json" href="Sample.json" version="draft-04">
		<Schema id="Link1" name="Document schema">
			<Path>
				<Step style="FileName">Sample.json</Step>
			</Path>
			<Diagram src="Sample_diagrams/Sample_p1.png" width="293" height="130">
				<Area ref="Link2" coords="187,38,268,85"/>
			</Diagram>
			<Location href="./Sample.json">Sample.json</Location>
			<SchemaDetails>
				<Detail name="Description">JSON Schema generated by XMLSpy v2016 rel. 2 (x64) (http://www.altova.com)</Detail>
			</SchemaDetails>
			<Type>Object</Type>
			<Properties>
				<Property occurrence="Required">
					<Name ref="Link2" style="Name">Artists</Name>
				</Property>
			</Properties>
			<SourceCode>{
    &quot;$schema&quot;: &quot;http://json-schema.org/draft-04/schema#&quot;,
    &quot;description&quot;: &quot;JSON Schema generated by XMLSpy v2016 rel. 2 (x64) (http://www.altova.com)&quot;,
    &quot;type&quot;: &quot;object&quot;,
    &quot;properties&quot;: {
        &quot;Artists&quot;: {
            &quot;type&quot;: &quot;array&quot;,
            &quot;items&quot;: {
                &quot;$ref&quot;: &quot;#/definitions/artist&quot;
            }
        }
    },
    &quot;required&quot;: [
        &quot;Artists&quot;
    ],
    &quot;additionalProperties&quot;: false
}</SourceCode>
			<Schema id="Link2" name="Property">
				<Path>
					<Step ref="Link1" style="FileName">Sample.json</Step>
					<Step style="Name">Artists</Step>
				</Path>
				<Diagram src="Sample_diagrams/Sample_p2.png" width="247" height="135">
					<Area ref="Link3" coords="133,38,222,107"/>
				</Diagram>
				<PropertyDetails occurrence="Required"/>
				<Type>Array</Type>
				<ArrayItems>
					<Item ref="Link3" style="Name" name="[0]+">artist</Item>
				</ArrayItems>
				<SourceCode>&quot;Artists&quot;: {
    &quot;type&quot;: &quot;array&quot;,
    &quot;items&quot;: {
        &quot;$ref&quot;: &quot;#/definitions/artist&quot;
    }
}</SourceCode>
			</Schema>
		</Schema>
		<Schema id="Link3" name="Schema definition">
			<Path>
				<Step style="Name">artist</Step>
			</Path>
			<Diagram src="Sample_diagrams/Sample_p3.png" width="328" height="191">
				<Area ref="Link4" coords="156,38,303,104"/>
				<Area ref="Link5" coords="156,116,243,163"/>
			</Diagram>
			<Location href="./Sample.json">Sample.json</Location>
			<Type>Object</Type>
			<Properties>
				<Property occurrence="Required">
					<Name ref="Link4" style="Name">Name</Name>
				</Property>
				<Property occurrence="Required">
					<Name ref="Link5" style="Name">Albums</Name>
				</Property>
			</Properties>
			<UsedBy>
				<Path>
					<Step style="FileName">Sample.json</Step>
					<Step ref="Link2" style="Name">Artists</Step>
				</Path>
			</UsedBy>
			<SourceCode>&quot;artist&quot;: {
    &quot;type&quot;: &quot;object&quot;,
    &quot;properties&quot;: {
        &quot;Name&quot;: {
            &quot;type&quot;: &quot;string&quot;,
            &quot;minLength&quot;: 1
        },
        &quot;Albums&quot;: {
            &quot;title&quot;: &quot;Albums&quot;,
            &quot;type&quot;: &quot;array&quot;,
            &quot;items&quot;: {
                &quot;$ref&quot;: &quot;#/definitions/album&quot;
            }
        }
    },
    &quot;required&quot;: [
        &quot;Name&quot;,
        &quot;Albums&quot;
    ],
    &quot;additionalProperties&quot;: false
}</SourceCode>
			<Schema id="Link4" name="Property">
				<Path>
					<Step ref="Link3" style="Name">artist</Step>
					<Step style="Name">Name</Step>
				</Path>
				<Diagram src="Sample_diagrams/Sample_p4.png" width="167" height="76"/>
				<PropertyDetails occurrence="Required"/>
				<Type>String</Type>
				<StringConstraints>
					<Detail name="Min Length">1</Detail>
				</StringConstraints>
				<SourceCode>&quot;Name&quot;: {
    &quot;type&quot;: &quot;string&quot;,
    &quot;minLength&quot;: 1
}</SourceCode>
			</Schema>
			<Schema id="Link5" name="Property">
				<Path>
					<Step ref="Link3" style="Name">artist</Step>
					<Step style="Name">Albums</Step>
				</Path>
				<Diagram src="Sample_diagrams/Sample_p5.png" width="253" height="135">
					<Area ref="Link6" coords="139,38,228,107"/>
				</Diagram>
				<PropertyDetails occurrence="Required"/>
				<SchemaDetails>
					<Detail name="Title">Albums</Detail>
				</SchemaDetails>
				<Type>Array</Type>
				<ArrayItems>
					<Item ref="Link6" style="Name" name="[0]+">album</Item>
				</ArrayItems>
				<SourceCode>&quot;Albums&quot;: {
    &quot;title&quot;: &quot;Albums&quot;,
    &quot;type&quot;: &quot;array&quot;,
    &quot;items&quot;: {
        &quot;$ref&quot;: &quot;#/definitions/album&quot;
    }
}</SourceCode>
			</Schema>
		</Schema>
		<Schema id="Link6" name="Schema definition">
			<Path>
				<Step style="Name">album</Step>
			</Path>
			<Diagram src="Sample_diagrams/Sample_p6.png" width="383" height="406">
				<Area ref="Link7" coords="156,38,303,104"/>
				<Area ref="Link8" coords="156,116,234,163"/>
				<Area ref="Link9" coords="156,175,358,241"/>
				<Area ref="LinkA" coords="156,253,237,300"/>
				<Area ref="LinkB" coords="156,312,301,378"/>
			</Diagram>
			<Location href="./Sample.json">Sample.json</Location>
			<Type>Object</Type>
			<Properties>
				<Property occurrence="Required">
					<Name ref="Link7" style="Name">Name</Name>
				</Property>
				<Property occurrence="Optional">
					<Name ref="Link8" style="Name">Genre</Name>
				</Property>
				<Property occurrence="Optional">
					<Name ref="Link9" style="Name">ReleaseDate</Name>
				</Property>
				<Property occurrence="Optional">
					<Name ref="LinkA" style="Name">Label</Name>
				</Property>
				<Property occurrence="Required">
					<Name ref="LinkB" style="Name">Tracks</Name>
				</Property>
			</Properties>
			<UsedBy>
				<Path>
					<Step style="Name">artist</Step>
					<Step ref="Link5" style="Name">Albums</Step>
				</Path>
			</UsedBy>
			<SourceCode>&quot;album&quot;: {
    &quot;type&quot;: &quot;object&quot;,
    &quot;properties&quot;: {
        &quot;Name&quot;: {
            &quot;type&quot;: &quot;string&quot;,
            &quot;minLength&quot;: 1
        },
        &quot;Genre&quot;: {
            &quot;oneOf&quot;: [
                {
                    &quot;$ref&quot;: &quot;#/definitions/genre&quot;
                },
                {
                    &quot;type&quot;: &quot;array&quot;,
                    &quot;minItems&quot;: 1,
                    &quot;uniqueItems&quot;: true,
                    &quot;items&quot;: {
                        &quot;$ref&quot;: &quot;#/definitions/genre&quot;
                    }
                }
            ]
        },
        &quot;ReleaseDate&quot;: {
            &quot;type&quot;: &quot;string&quot;,
            &quot;pattern&quot;: &quot;^[0-9]{4}-[0-9]{2}-[0-9]{2}$&quot;
        },
        &quot;Label&quot;: {
            &quot;type&quot;: &quot;string&quot;
        },
        &quot;Tracks&quot;: {
            &quot;type&quot;: &quot;array&quot;,
            &quot;minItems&quot;: 1,
            &quot;items&quot;: {
                &quot;$ref&quot;: &quot;#/definitions/track&quot;
            }
        }
    },
    &quot;required&quot;: [
        &quot;Name&quot;,
        &quot;Tracks&quot;
    ],
    &quot;additionalProperties&quot;: false
}</SourceCode>
			<Schema id="Link7" name="Property">
				<Path>
					<Step ref="Link6" style="Name">album</Step>
					<Step style="Name">Name</Step>
				</Path>
				<Diagram src="Sample_diagrams/Sample_p7.png" width="167" height="76"/>
				<PropertyDetails occurrence="Required"/>
				<Type>String</Type>
				<StringConstraints>
					<Detail name="Min Length">1</Detail>
				</StringConstraints>
				<SourceCode>&quot;Name&quot;: {
    &quot;type&quot;: &quot;string&quot;,
    &quot;minLength&quot;: 1
}</SourceCode>
			</Schema>
			<Schema id="Link8" name="Property">
				<Path>
					<Step ref="Link6" style="Name">album</Step>
					<Step style="Name">Genre</Step>
				</Path>
				<Diagram src="Sample_diagrams/Sample_p8.png" width="392" height="406">
					<Area ref="LinkC" coords="180,235,382,323"/>
					<Area ref="LinkD" coords="180,335,368,401"/>
				</Diagram>
				<PropertyDetails occurrence="Optional"/>
				<Type>Any</Type>
				<ArrayItems>
					<Item style="StaticName" name="[0]+">Unconstrained</Item>
				</ArrayItems>
				<PropertyWildcard>
					<Definition style="StaticName">Unconstrained</Definition>
				</PropertyWildcard>
				<OneOf>
					<SchemaRef ref="LinkC" style="Name">genre</SchemaRef>
					<SchemaRef ref="LinkD" style="StaticName">Schema</SchemaRef>
				</OneOf>
				<SourceCode>&quot;Genre&quot;: {
    &quot;oneOf&quot;: [
        {
            &quot;$ref&quot;: &quot;#/definitions/genre&quot;
        },
        {
            &quot;type&quot;: &quot;array&quot;,
            &quot;minItems&quot;: 1,
            &quot;uniqueItems&quot;: true,
            &quot;items&quot;: {
                &quot;$ref&quot;: &quot;#/definitions/genre&quot;
            }
        }
    ]
}</SourceCode>
				<Schema id="LinkD" name="Operator subschema">
					<Path>
						<Step ref="Link6" style="Name">album</Step>
						<Step ref="Link8" style="Name" internal="one of (1)">Genre</Step>
						<Step style="StaticName">Schema</Step>
					</Path>
					<Diagram src="Sample_diagrams/Sample_p9.png" width="467" height="154">
						<Area ref="LinkC" coords="240,38,442,126"/>
					</Diagram>
					<Type>Array</Type>
					<ArrayConstraints>
						<Detail name="Min Items">1</Detail>
						<Detail name="Unique Items">true</Detail>
					</ArrayConstraints>
					<ArrayItems>
						<Item ref="LinkC" style="Name" name="[0]+">genre</Item>
					</ArrayItems>
					<SourceCode>{
    &quot;type&quot;: &quot;array&quot;,
    &quot;minItems&quot;: 1,
    &quot;uniqueItems&quot;: true,
    &quot;items&quot;: {
        &quot;$ref&quot;: &quot;#/definitions/genre&quot;
    }
}</SourceCode>
				</Schema>
			</Schema>
			<Schema id="Link9" name="Property">
				<Path>
					<Step ref="Link6" style="Name">album</Step>
					<Step style="Name">ReleaseDate</Step>
				</Path>
				<Diagram src="Sample_diagrams/Sample_p10.png" width="222" height="76"/>
				<PropertyDetails occurrence="Optional"/>
				<Type>String</Type>
				<StringConstraints>
					<Detail name="Pattern">^[0-9]{4}-[0-9]{2}-[0-9]{2}$</Detail>
				</StringConstraints>
				<SourceCode>&quot;ReleaseDate&quot;: {
    &quot;type&quot;: &quot;string&quot;,
    &quot;pattern&quot;: &quot;^[0-9]{4}-[0-9]{2}-[0-9]{2}$&quot;
}</SourceCode>
			</Schema>
			<Schema id="LinkA" name="Property">
				<Path>
					<Step ref="Link6" style="Name">album</Step>
					<Step style="Name">Label</Step>
				</Path>
				<Diagram src="Sample_diagrams/Sample_p11.png" width="101" height="57"/>
				<PropertyDetails occurrence="Optional"/>
				<Type>String</Type>
				<SourceCode>&quot;Label&quot;: {
    &quot;type&quot;: &quot;string&quot;
}</SourceCode>
			</Schema>
			<Schema id="LinkB" name="Property">
				<Path>
					<Step ref="Link6" style="Name">album</Step>
					<Step style="Name">Tracks</Step>
				</Path>
				<Diagram src="Sample_diagrams/Sample_p12.png" width="311" height="135">
					<Area ref="LinkE" coords="197,38,286,107"/>
				</Diagram>
				<PropertyDetails occurrence="Required"/>
				<Type>Array</Type>
				<ArrayConstraints>
					<Detail name="Min Items">1</Detail>
				</ArrayConstraints>
				<ArrayItems>
					<Item ref="LinkE" style="Name" name="[0]+">track</Item>
				</ArrayItems>
				<SourceCode>&quot;Tracks&quot;: {
    &quot;type&quot;: &quot;array&quot;,
    &quot;minItems&quot;: 1,
    &quot;items&quot;: {
        &quot;$ref&quot;: &quot;#/definitions/track&quot;
    }
}</SourceCode>
			</Schema>
		</Schema>
		<Schema id="LinkE" name="Schema definition">
			<Path>
				<Step style="Name">track</Step>
			</Path>
			<Diagram src="Sample_diagrams/Sample_p13.png" width="383" height="288">
				<Area ref="LinkF" coords="156,38,303,104"/>
				<Area ref="Link10" coords="156,116,358,182"/>
				<Area ref="Link11" coords="156,194,303,260"/>
			</Diagram>
			<Location href="./Sample.json">Sample.json</Location>
			<Type>Object</Type>
			<Properties>
				<Property occurrence="Required">
					<Name ref="LinkF" style="Name">Title</Name>
				</Property>
				<Property occurrence="Optional">
					<Name ref="Link10" style="Name">Duration</Name>
				</Property>
				<Property occurrence="Optional">
					<Name ref="Link11" style="Name">Writer</Name>
				</Property>
			</Properties>
			<UsedBy>
				<Path>
					<Step style="Name">album</Step>
					<Step ref="LinkB" style="Name">Tracks</Step>
				</Path>
			</UsedBy>
			<SourceCode>&quot;track&quot;: {
    &quot;type&quot;: &quot;object&quot;,
    &quot;properties&quot;: {
        &quot;Title&quot;: {
            &quot;type&quot;: &quot;string&quot;,
            &quot;minLength&quot;: 1
        },
        &quot;Duration&quot;: {
            &quot;type&quot;: &quot;string&quot;,
            &quot;pattern&quot;: &quot;^[0-9]{2}:[0-9]{2}$&quot;
        },
        &quot;Writer&quot;: {
            &quot;type&quot;: &quot;string&quot;,
            &quot;minLength&quot;: 1
        }
    },
    &quot;required&quot;: [
        &quot;Title&quot;
    ],
    &quot;additionalProperties&quot;: false
}</SourceCode>
			<Schema id="LinkF" name="Property">
				<Path>
					<Step ref="LinkE" style="Name">track</Step>
					<Step style="Name">Title</Step>
				</Path>
				<Diagram src="Sample_diagrams/Sample_p14.png" width="167" height="76"/>
				<PropertyDetails occurrence="Required"/>
				<Type>String</Type>
				<StringConstraints>
					<Detail name="Min Length">1</Detail>
				</StringConstraints>
				<SourceCode>&quot;Title&quot;: {
    &quot;type&quot;: &quot;string&quot;,
    &quot;minLength&quot;: 1
}</SourceCode>
			</Schema>
			<Schema id="Link10" name="Property">
				<Path>
					<Step ref="LinkE" style="Name">track</Step>
					<Step style="Name">Duration</Step>
				</Path>
				<Diagram src="Sample_diagrams/Sample_p15.png" width="222" height="76"/>
				<PropertyDetails occurrence="Optional"/>
				<Type>String</Type>
				<StringConstraints>
					<Detail name="Pattern">^[0-9]{2}:[0-9]{2}$</Detail>
				</StringConstraints>
				<SourceCode>&quot;Duration&quot;: {
    &quot;type&quot;: &quot;string&quot;,
    &quot;pattern&quot;: &quot;^[0-9]{2}:[0-9]{2}$&quot;
}</SourceCode>
			</Schema>
			<Schema id="Link11" name="Property">
				<Path>
					<Step ref="LinkE" style="Name">track</Step>
					<Step style="Name">Writer</Step>
				</Path>
				<Diagram src="Sample_diagrams/Sample_p16.png" width="167" height="76"/>
				<PropertyDetails occurrence="Optional"/>
				<Type>String</Type>
				<StringConstraints>
					<Detail name="Min Length">1</Detail>
				</StringConstraints>
				<SourceCode>&quot;Writer&quot;: {
    &quot;type&quot;: &quot;string&quot;,
    &quot;minLength&quot;: 1
}</SourceCode>
			</Schema>
		</Schema>
		<Schema id="LinkC" name="Schema definition">
			<Path>
				<Step style="Name">genre</Step>
			</Path>
			<Diagram src="Sample_diagrams/Sample_p17.png" width="222" height="76"/>
			<Location href="./Sample.json">Sample.json</Location>
			<Type>String</Type>
			<Enumerations>
				<Enumeration type="string" value="Classic"/>
				<Enumeration type="string" value="Country"/>
				<Enumeration type="string" value="Folk"/>
				<Enumeration type="string" value="Jazz"/>
				<Enumeration type="string" value="Pop"/>
				<Enumeration type="string" value="Pop punk"/>
				<Enumeration type="string" value="Punk"/>
				<Enumeration type="string" value="Punk rock"/>
				<Enumeration type="string" value="Rap"/>
				<Enumeration type="string" value="Rock"/>
				<Enumeration type="string" value="R&amp;B"/>
				<Enumeration type="string" value="Other"/>
			</Enumerations>
			<UsedBy>
				<Path>
					<Step style="Name">album</Step>
					<Step ref="Link8" style="Name">Genre</Step>
				</Path>
				<Path>
					<Step style="Name">album</Step>
					<Step style="Name" internal="one of (1)">Genre</Step>
					<Step ref="LinkD" style="StaticName">Schema</Step>
				</Path>
			</UsedBy>
			<SourceCode>&quot;genre&quot;: {
    &quot;type&quot;: &quot;string&quot;,
    &quot;enum&quot;: [
        &quot;Classic&quot;,
        &quot;Country&quot;,
        &quot;Folk&quot;,
        &quot;Jazz&quot;,
        &quot;Pop&quot;,
        &quot;Pop punk&quot;,
        &quot;Punk&quot;,
        &quot;Punk rock&quot;,
        &quot;Rap&quot;,
        &quot;Rock&quot;,
        &quot;R&amp;B&quot;,
        &quot;Other&quot;
    ]
}</SourceCode>
		</Schema>
	</SchemaDocument>
</JSONSchemaDocumentation>