<?xml version="1.0" encoding="UTF-8"?>
<xs:schema xmlns="http://www.altova.com/documentation" xmlns:xs="http://www.w3.org/2001/XMLSchema" targetNamespace="http://www.altova.com/documentation" elementFormDefault="qualified" attributeFormDefault="unqualified">
	<xs:include schemaLocation="../Documentation.xsd"/>
	<xs:element name="JSONSchemaDocumentation">
		<xs:annotation>
			<xs:documentation>Root element of the JSON Schema documentation</xs:documentation>
		</xs:annotation>
		<xs:complexType>
			<xs:sequence>
				<xs:element ref="Document"/>
				<xs:element name="DocumentationSettings">
					<xs:complexType>
						<xs:sequence>
							<xs:element name="Includes">
								<xs:complexType>
									<xs:attribute name="overview" type="xs:boolean" use="required"/>
									<xs:attribute name="definitions" type="xs:boolean" use="required"/>
									<xs:attribute name="properties" type="xs:boolean" use="required"/>
									<xs:attribute name="patternProperties" type="xs:boolean" use="required"/>
									<xs:attribute name="propertyWildcards" type="xs:boolean" use="required"/>
									<xs:attribute name="propertyNamesSchemas" type="xs:boolean" use="required"/>
									<xs:attribute name="arrayItems" type="xs:boolean" use="required"/>
									<xs:attribute name="operatorSubschemas" type="xs:boolean" use="required"/>
									<xs:attribute name="conditionalParts" type="xs:boolean" use="required"/>
									<xs:attribute name="schemaDependencies" type="xs:boolean" use="required"/>
									<xs:attribute name="externalSchemas" type="xs:boolean" use="required"/>
								</xs:complexType>
							</xs:element>
							<xs:element name="Details">
								<xs:complexType>
									<xs:attribute name="diagram" type="xs:boolean" use="required"/>
									<xs:attribute name="location" type="xs:boolean" use="required"/>
									<xs:attribute name="specifying" type="xs:boolean" use="required"/>
									<xs:attribute name="propertyDetails" type="xs:boolean" use="required"/>
									<xs:attribute name="schemaDetails" type="xs:boolean" use="required"/>
									<xs:attribute name="type" type="xs:boolean" use="required"/>
									<xs:attribute name="typeConstraints" type="xs:boolean" use="required"/>
									<xs:attribute name="enumerations" type="xs:boolean" use="required"/>
									<xs:attribute name="arrayItems" type="xs:boolean" use="required"/>
									<xs:attribute name="properties" type="xs:boolean" use="required"/>
									<xs:attribute name="operators" type="xs:boolean" use="required"/>
									<xs:attribute name="conditional" type="xs:boolean" use="required"/>
									<xs:attribute name="sourceCode" type="xs:boolean" use="required"/>
									<xs:attribute name="usedBy" type="xs:boolean" use="required"/>
								</xs:complexType>
							</xs:element>
						</xs:sequence>
					</xs:complexType>
				</xs:element>
				<xs:sequence>
					<xs:element name="SchemaDocument" minOccurs="0" maxOccurs="unbounded">
						<xs:complexType>
							<xs:sequence>
								<xs:element ref="Schema" minOccurs="0" maxOccurs="unbounded"/>
							</xs:sequence>
							<xs:attribute name="location" type="xs:anyURI"/>
							<xs:attribute name="version" type="xs:string"/>
							<xs:attribute name="href" type="xs:anyURI" use="optional"/>
						</xs:complexType>
					</xs:element>
				</xs:sequence>
			</xs:sequence>
		</xs:complexType>
	</xs:element>
	<xs:element name="Schema">
		<xs:complexType mixed="true">
			<xs:complexContent>
				<xs:extension base="TNamedItem">
					<xs:sequence>
						<xs:element ref="Path"/>
						<xs:element ref="Diagram" minOccurs="0"/>
						<xs:element name="Location" type="THRefText" minOccurs="0">
							<xs:annotation>
								<xs:documentation>Location of global schema definition</xs:documentation>
							</xs:annotation>
						</xs:element>
						<xs:choice>
							<xs:element name="Details" minOccurs="0">
								<xs:annotation>
									<xs:documentation>Specific details</xs:documentation>
								</xs:annotation>
								<xs:complexType>
									<xs:complexContent>
										<xs:extension base="TDetails">
											<xs:attribute name="name" type="xs:string" use="required"/>
										</xs:extension>
									</xs:complexContent>
								</xs:complexType>
							</xs:element>
							<xs:element name="PropertyDetails" minOccurs="0">
								<xs:annotation>
									<xs:documentation>Property specific details</xs:documentation>
								</xs:annotation>
								<xs:complexType>
									<xs:sequence>
										<xs:element ref="DependentOn" minOccurs="0"/>
										<xs:element ref="Dependencies" minOccurs="0"/>
									</xs:sequence>
									<xs:attribute name="occurrence" type="xs:string" use="required"/>
								</xs:complexType>
							</xs:element>
						</xs:choice>
						<xs:choice>
							<xs:element ref="SpecifiedBy"/>
							<xs:element name="Reference">
								<xs:annotation>
									<xs:documentation>In case of a global (alias) schema or a (pattern) property referencing a schema definition</xs:documentation>
								</xs:annotation>
								<xs:complexType>
									<xs:sequence>
										<xs:element ref="SchemaRef"/>
									</xs:sequence>
									<xs:attribute name="name" type="xs:string"/>
								</xs:complexType>
							</xs:element>
							<xs:sequence>
								<xs:annotation>
									<xs:documentation>Schema content</xs:documentation>
								</xs:annotation>
								<xs:element name="SchemaDetails" type="TDetails" minOccurs="0"/>
								<xs:element name="Type" type="xs:string" minOccurs="0"/>
								<xs:element name="StringConstraints" type="TDetails" minOccurs="0"/>
								<xs:element name="NumericConstraints" type="TDetails" minOccurs="0"/>
								<xs:element name="ObjectConstraints" type="TDetails" minOccurs="0"/>
								<xs:element name="ArrayConstraints" type="TDetails" minOccurs="0"/>
								<xs:element name="Enumerations" minOccurs="0">
									<xs:complexType>
										<xs:sequence>
											<xs:element name="Enumeration" maxOccurs="unbounded">
												<xs:complexType>
													<xs:attribute name="type" use="required">
														<xs:simpleType>
															<xs:restriction base="xs:string">
																<xs:enumeration value="string"/>
																<xs:enumeration value="number"/>
																<xs:enumeration value="boolean"/>
																<xs:enumeration value="null"/>
																<xs:enumeration value="array"/>
																<xs:enumeration value="object"/>
															</xs:restriction>
														</xs:simpleType>
													</xs:attribute>
													<xs:attribute name="value" type="xs:string" use="required"/>
												</xs:complexType>
											</xs:element>
										</xs:sequence>
									</xs:complexType>
								</xs:element>
								<xs:element name="Examples" minOccurs="0">
									<xs:complexType>
										<xs:sequence>
											<xs:element name="Example" maxOccurs="unbounded">
												<xs:complexType>
													<xs:attribute name="type" use="required">
														<xs:simpleType>
															<xs:restriction base="xs:string">
																<xs:enumeration value="string"/>
																<xs:enumeration value="number"/>
																<xs:enumeration value="boolean"/>
																<xs:enumeration value="null"/>
																<xs:enumeration value="array"/>
																<xs:enumeration value="object"/>
															</xs:restriction>
														</xs:simpleType>
													</xs:attribute>
													<xs:attribute name="value" type="xs:string" use="required"/>
												</xs:complexType>
											</xs:element>
										</xs:sequence>
									</xs:complexType>
								</xs:element>
								<xs:element name="ArrayItems" minOccurs="0">
									<xs:complexType>
										<xs:sequence>
											<xs:element name="Item" maxOccurs="unbounded">
												<xs:complexType>
													<xs:complexContent>
														<xs:extension base="TStyledText">
															<xs:attribute name="name" type="xs:string" use="required"/>
														</xs:extension>
													</xs:complexContent>
												</xs:complexType>
											</xs:element>
										</xs:sequence>
									</xs:complexType>
								</xs:element>
								<xs:element name="Properties" minOccurs="0">
									<xs:complexType>
										<xs:sequence>
											<xs:element name="Property" maxOccurs="unbounded">
												<xs:complexType>
													<xs:sequence>
														<xs:element name="Name" type="TStyledText"/>
														<xs:element ref="SpecifiedBy" minOccurs="0"/>
														<xs:element ref="DependentOn" minOccurs="0"/>
														<xs:element ref="Dependencies" minOccurs="0"/>
													</xs:sequence>
													<xs:attribute name="occurrence" type="xs:string" use="required"/>
												</xs:complexType>
											</xs:element>
										</xs:sequence>
									</xs:complexType>
								</xs:element>
								<xs:element name="PatternProperties" minOccurs="0">
									<xs:complexType>
										<xs:sequence>
											<xs:element name="PatternProperty" maxOccurs="unbounded">
												<xs:complexType>
													<xs:sequence>
														<xs:element name="Pattern" type="TStyledText"/>
														<xs:element ref="Specifying" minOccurs="0"/>
													</xs:sequence>
												</xs:complexType>
											</xs:element>
										</xs:sequence>
									</xs:complexType>
								</xs:element>
								<xs:element name="PropertyWildcard" minOccurs="0">
									<xs:complexType>
										<xs:sequence>
											<xs:element name="Definition" type="TStyledText"/>
											<xs:element ref="Specifying" minOccurs="0"/>
										</xs:sequence>
									</xs:complexType>
								</xs:element>
								<xs:element name="PropertyNamesSchema" minOccurs="0">
									<xs:complexType>
										<xs:sequence>
											<xs:element ref="SchemaRef"/>
										</xs:sequence>
									</xs:complexType>
								</xs:element>
								<xs:element name="AllOf" type="TSchemaRefs" minOccurs="0"/>
								<xs:element name="AnyOf" type="TSchemaRefs" minOccurs="0"/>
								<xs:element name="OneOf" type="TSchemaRefs" minOccurs="0"/>
								<xs:element name="Not" minOccurs="0">
									<xs:complexType>
										<xs:sequence>
											<xs:element ref="SchemaRef"/>
										</xs:sequence>
									</xs:complexType>
								</xs:element>
								<xs:element name="Conditional" minOccurs="0">
									<xs:complexType>
										<xs:sequence>
											<xs:element name="Part" maxOccurs="unbounded">
												<xs:complexType>
													<xs:complexContent>
														<xs:extension base="TStyledText">
															<xs:attribute name="clause" type="xs:string" use="required"/>
														</xs:extension>
													</xs:complexContent>
												</xs:complexType>
											</xs:element>
										</xs:sequence>
									</xs:complexType>
								</xs:element>
							</xs:sequence>
						</xs:choice>
						<xs:element name="UsedBy" minOccurs="0">
							<xs:annotation>
								<xs:documentation>List of schemas referencing this global schema definition</xs:documentation>
							</xs:annotation>
							<xs:complexType>
								<xs:sequence>
									<xs:element ref="Path" maxOccurs="unbounded"/>
								</xs:sequence>
							</xs:complexType>
						</xs:element>
						<xs:element ref="Specifying" minOccurs="0"/>
						<xs:element name="SourceCode" type="xs:string" minOccurs="0">
							<xs:annotation>
								<xs:documentation>Contains pretty-printed JSON.</xs:documentation>
							</xs:annotation>
						</xs:element>
						<xs:element ref="Schema" minOccurs="0" maxOccurs="unbounded"/>
					</xs:sequence>
					<xs:attribute name="newFile" type="xs:anyURI" use="optional">
						<xs:annotation>
							<xs:documentation>Whether to write this schema and its children to a new file.</xs:documentation>
						</xs:annotation>
					</xs:attribute>
				</xs:extension>
			</xs:complexContent>
		</xs:complexType>
	</xs:element>
	<xs:element name="Path">
		<xs:complexType>
			<xs:sequence>
				<xs:element name="Step" maxOccurs="unbounded">
					<xs:complexType>
						<xs:complexContent>
							<xs:extension base="TStyledText">
								<xs:attribute name="internal" type="xs:string"/>
							</xs:extension>
						</xs:complexContent>
					</xs:complexType>
				</xs:element>
			</xs:sequence>
		</xs:complexType>
	</xs:element>
	<xs:element name="SpecifiedBy" type="TSchemaRefs">
		<xs:annotation>
			<xs:documentation>In case of a property implicitly specified by pattern properties or a property wildcard</xs:documentation>
		</xs:annotation>
	</xs:element>
	<xs:element name="DependentOn" type="TSchemaRefs">
		<xs:annotation>
			<xs:documentation>Container of properties on which this property depends.</xs:documentation>
		</xs:annotation>
	</xs:element>
	<xs:element name="Dependencies" type="TSchemaRefs">
		<xs:annotation>
			<xs:documentation>Container of dependent properties or schema dependency.</xs:documentation>
		</xs:annotation>
	</xs:element>
	<xs:element name="Specifying" type="TSchemaRefs">
		<xs:annotation>
			<xs:documentation>In case of a pattern property or a property wildcard implicitly specifying one or more properties.</xs:documentation>
		</xs:annotation>
	</xs:element>
	<xs:element name="SchemaRef" type="TStyledText"/>
	<xs:complexType name="TSchemaRefs">
		<xs:sequence>
			<xs:element ref="SchemaRef" maxOccurs="unbounded"/>
		</xs:sequence>
	</xs:complexType>
	<xs:complexType name="TDetails">
		<xs:sequence>
			<xs:element name="Detail" type="TNamedText" maxOccurs="unbounded"/>
		</xs:sequence>
	</xs:complexType>
	<xs:complexType name="TStyledText">
		<xs:complexContent>
			<xs:extension base="TText">
				<xs:attribute name="style" type="xs:string" use="required"/>
			</xs:extension>
		</xs:complexContent>
	</xs:complexType>
</xs:schema>
