<?xml version="1.0" encoding="UTF-8"?>
<xs:schema
	attributeFormDefault="unqualified" elementFormDefault="qualified"
	xmlns:xs="http://www.w3.org/2001/XMLSchema"
	xmlns:ds="http://www.w3.org/2000/09/xmldsig#"
	xmlns="https://pub.ants.gouv.fr/2D-DOC/V2/PRD/05_XSD/"
	targetNamespace="https://pub.ants.gouv.fr/2D-DOC/V2/PRD/05_XSD/">

	<xs:import namespace="https://pub.ants.gouv.fr/2D-DOC/V2/PRD/05_XSD/EXTENSIONS/" schemaLocation="http://pub.ants.gouv.fr/2D-DOC/V2/PRD/05_XSD/EXTENSIONS/XSD_EXTENSIONS_ISO22376_ANTS.xsd"/>
	<xs:import namespace="http://www.w3.org/XML/1998/namespace" schemaLocation="http://www.w3.org/2009/01/xml.xsd"/>
	<xs:import namespace="http://www.w3.org/2000/09/xmldsig#" schemaLocation="http://www.w3.org/TR/2002/REC-xmldsig-core-20020212/xmldsig-core-schema.xsd"/>

	<xs:element name="Manifest" type="ManifestType">
		<xs:annotation>
			<xs:documentation>Root element for a Use Case descriptor.</xs:documentation>
		</xs:annotation>
	</xs:element>
	<xs:element name="Id">
		<xs:annotation>
			<xs:documentation>Use Case unique identifier. Restriction: 4 chars hexadecimal.</xs:documentation>
		</xs:annotation>
		<xs:simpleType>
			<xs:restriction base="xs:string">
				<xs:pattern value="[0-9a-fA-F]{6}" />
			</xs:restriction>
		</xs:simpleType>
	</xs:element>
	<xs:element name="Version">
		<xs:annotation>
			<xs:documentation>Use Case version. To be incremented when a breaking change is introduced.Restriction: 1-255</xs:documentation>
		</xs:annotation>
		<xs:simpleType>
			<xs:restriction base="xs:string">
				<xs:pattern value="[0-9a-fA-F]{2}" />
			</xs:restriction>
		</xs:simpleType>
	</xs:element>
	<xs:element name="Name" type="NameType">
		<xs:annotation>
			<xs:documentation>Use Case name. Multilingual.Restriction: At least 1 name must be defined.</xs:documentation>
		</xs:annotation>
	</xs:element>
	<xs:element name="Description" type="DescriptionType">
		<xs:annotation>
			<xs:documentation>Use Case description. Multilingual.Restriction: At least 1 description must be defined.</xs:documentation>
		</xs:annotation>
	</xs:element>
	<xs:element name="Schema" type="SchemaType">
		<xs:annotation>
			<xs:documentation>Use Case data schema. Used to decode a VDS payload.Restriction: Exactly 1 schema MUST be defined.</xs:documentation>
		</xs:annotation>
	</xs:element>
	<xs:element name="Extensions" type="ExtensionsType">
		<xs:annotation>
			<xs:documentation>
				Defines an extension point where new features (proprietary or not) can be added.
				Default extensions are:
				- Policies: Validation policies
				- Presentation views: Templates used to render VDS content
			</xs:documentation>
		</xs:annotation>
	</xs:element>
	<xs:complexType name="ValueType">
		<xs:annotation>
			<xs:documentation>
				Element used to define a translatable value. Translation is based on the xml:lang	provide, ie a 2 letter language code.
			</xs:documentation>
		</xs:annotation>
		<xs:simpleContent>
			<xs:extension base="xs:string">
				<xs:attribute ref="xml:lang"/>
			</xs:extension>
		</xs:simpleContent>
	</xs:complexType>
	<xs:complexType name="NameType">
		<xs:sequence>
			<xs:element type="ValueType" name="Value" maxOccurs="unbounded" minOccurs="1" />
		</xs:sequence>
	</xs:complexType>
	<xs:complexType name="DescriptionType">
		<xs:sequence>
			<xs:element type="ValueType" name="Value" maxOccurs="unbounded" minOccurs="1" />
		</xs:sequence>
	</xs:complexType>
	<xs:complexType name="BaseConstraintsType" abstract="true">
		<xs:sequence>
			<xs:element type="xs:string" name="Nillable" nillable="true" minOccurs="0">
				<xs:annotation>
					<xs:documentation>Sets an element as Nillable. By default, an element is not nillable.</xs:documentation>
				</xs:annotation>
			</xs:element>
		</xs:sequence>
	</xs:complexType>
	<xs:complexType name="StringConstraintsType">
		<xs:annotation>
			<xs:documentation>Sets constraints on a String field.</xs:documentation>
		</xs:annotation>
		<xs:complexContent>
			<xs:extension base="BaseConstraintsType">
				<xs:sequence>
					<xs:choice minOccurs="0" maxOccurs="4">
						<xs:element type="xs:unsignedInt" name="MinLength" minOccurs="0">
							<xs:annotation>
								<xs:documentation>Minimum string length. Optional. Values from 0 to 4,294,967,295.</xs:documentation>
							</xs:annotation>
						</xs:element>
						<xs:element type="xs:unsignedInt" name="MaxLength" minOccurs="0">
							<xs:annotation>
								<xs:documentation>Maximum string length. Optional. Values from 0 to 4,294,967,295.</xs:documentation>
							</xs:annotation>
						</xs:element>
						<xs:element type="xs:string" name="Pattern" minOccurs="0">
							<xs:annotation>
								<xs:documentation>Allowed string pattern. Supports JavaScript RegEx. Optional.</xs:documentation>
							</xs:annotation>
						</xs:element>
						<xs:element name="Encoding" minOccurs="0">
							<xs:annotation>
								<xs:documentation>The field value encoding. If specified, the restrictions are validated against the decoded value.</xs:documentation>
							</xs:annotation>
							<xs:simpleType>
								<xs:restriction base="xs:string">
									<xs:enumeration value="BASE32" />
									<xs:enumeration value="BASE64" />
									<xs:enumeration value="C40" />
								</xs:restriction>
							</xs:simpleType>
						</xs:element>
					</xs:choice>
				</xs:sequence>
			</xs:extension>
		</xs:complexContent>
	</xs:complexType>
	<xs:complexType name="TypeDef" abstract="true">
		<xs:annotation>
			<xs:documentation>Base entity for a schema field.</xs:documentation>
		</xs:annotation>
		<xs:attribute type="xs:string" name="name" use="required">
			<xs:annotation>
				<xs:documentation>Field name. Required</xs:documentation>
			</xs:annotation>
		</xs:attribute>
	</xs:complexType>
	<xs:complexType name="StringType">
		<xs:annotation>
			<xs:documentation>Field representing a sequence of characters.Restrictions can be applied using StringConStraints element.</xs:documentation>
		</xs:annotation>
		<xs:complexContent>
			<xs:extension base="TypeDef">
				<xs:sequence>
					<xs:element type="StringConstraintsType" name="StringConstraints" minOccurs="0">
						<xs:annotation>
							<xs:documentation>Value restrictions. Optional.</xs:documentation>
						</xs:annotation>
					</xs:element>
					<xs:element name="Extension" minOccurs="0">
						<xs:annotation>
							<xs:documentation>Value restrictions. Optional.</xs:documentation>
						</xs:annotation>
					</xs:element>
				</xs:sequence>
			</xs:extension>
		</xs:complexContent>
	</xs:complexType>
	<xs:complexType name="BooleanConstraintsType">
		<xs:annotation>
			<xs:documentation>Boolean field restrictions.</xs:documentation>
		</xs:annotation>
		<xs:complexContent>
			<xs:extension base="BaseConstraintsType" />
		</xs:complexContent>
	</xs:complexType>
	<xs:complexType name="BooleanType">
		<xs:annotation>
			<xs:documentation> Booleanfield type.</xs:documentation>
		</xs:annotation>
		<xs:complexContent>
			<xs:extension base="TypeDef">
				<xs:sequence>
					<xs:element type="BooleanConstraintsType" name="BooleanConstraints" minOccurs="0">
						<xs:annotation>
							<xs:documentation>Boolean field restrictions.</xs:documentation>
						</xs:annotation>
					</xs:element>
				</xs:sequence>
			</xs:extension>
		</xs:complexContent>
	</xs:complexType>
	<xs:complexType name="IntegerConstraintsType">
		<xs:annotation>
			<xs:documentation>Integer field restrictions.</xs:documentation>
		</xs:annotation>
		<xs:complexContent>
			<xs:extension base="BaseConstraintsType">
				<xs:sequence>
					<xs:choice minOccurs="0" maxOccurs="3">
						<xs:element type="xs:long" name="Min" minOccurs="0">
							<xs:annotation>
								<xs:documentation>Minimum value. Optional.Values from -9,223,372,036,854,775,808 to 9,223,372,036,854,775,807.</xs:documentation>
							</xs:annotation>
						</xs:element>
						<xs:element type="xs:long" name="Max" minOccurs="0">
							<xs:annotation>
								<xs:documentation>Maximum value. Optional.Values from -9,223,372,036,854,775,808 to 9,223,372,036,854,775,807.</xs:documentation>
							</xs:annotation>
						</xs:element>
						<xs:element type="xs:string" name="Pattern" minOccurs="0">
							<xs:annotation>
								<xs:documentation>Allowed int pattern. Optional.</xs:documentation>
							</xs:annotation>
						</xs:element>
					</xs:choice>
				</xs:sequence>
			</xs:extension>
		</xs:complexContent>
	</xs:complexType>
	<xs:complexType name="IntegerType">
		<xs:annotation>
			<xs:documentation>Integer type field.</xs:documentation>
		</xs:annotation>
		<xs:complexContent>
			<xs:extension base="TypeDef">
				<xs:sequence>
					<xs:element type="IntegerConstraintsType" name="IntegerConstraints" minOccurs="0">
						<xs:annotation>
							<xs:documentation>Integer field restrictions. Optional.</xs:documentation>
						</xs:annotation>
					</xs:element>
				</xs:sequence>
			</xs:extension>
		</xs:complexContent>
	</xs:complexType>
	<xs:complexType name="FloatConstraintsType">
		<xs:annotation>
			<xs:documentation>Float field restrictions.</xs:documentation>
		</xs:annotation>
		<xs:complexContent>
			<xs:extension base="BaseConstraintsType">
				<xs:sequence>
					<xs:choice minOccurs="0" maxOccurs="2">
						<xs:element type="xs:decimal" name="Min" minOccurs="0">
							<xs:annotation>
								<xs:documentation>
									Minimum value. Optional.
									The decimal separator is always a point (.), and no separation at the
									thousand mark may be added. There is no support for scientific notation.
									Allows any number of insignificant leading and trailing zeros
									(after the decimal point).
								</xs:documentation>
							</xs:annotation>
						</xs:element>
						<xs:element type="xs:decimal" name="Max" minOccurs="0">
							<xs:annotation>
								<xs:documentation>
									Maximum value. Optional.
									The decimal separator is always a point (.), and no separation at the
									thousand mark may be added. There is no support for scientific notation.
									Allows any number of insignificant leading and trailing zeros
									(after the decimal point).
								</xs:documentation>
							</xs:annotation>
						</xs:element>
					</xs:choice>
				</xs:sequence>
			</xs:extension>
		</xs:complexContent>
	</xs:complexType>
	<xs:complexType name="FloatType">
		<xs:annotation>
			<xs:documentation> Float type field.</xs:documentation>
		</xs:annotation>
		<xs:complexContent>
			<xs:extension base="TypeDef">
				<xs:sequence>
					<xs:element type="FloatConstraintsType" name="FloatConstraints" minOccurs="0">
						<xs:annotation>
							<xs:documentation>Float field restrictions. Optional.</xs:documentation>
						</xs:annotation>
					</xs:element>
				</xs:sequence>
			</xs:extension>
		</xs:complexContent>
	</xs:complexType>
	<xs:complexType name="DateConstraintsType">
		<xs:annotation>
			<xs:documentation>Date field restrictions.</xs:documentation>
		</xs:annotation>
		<xs:complexContent>
			<xs:extension base="BaseConstraintsType">
				<xs:sequence>
					<xs:choice minOccurs="0" maxOccurs="3">
						<xs:element type="xs:date" name="NotBefore" minOccurs="0">
							<xs:annotation>
								<xs:documentation>
									Minimum date allowed. Optional.
									Date must have the following format: yyyy-MM-dd.
								</xs:documentation>
							</xs:annotation>
						</xs:element>
						<xs:element type="xs:date" name="NotAfter" minOccurs="0">
							<xs:annotation>
								<xs:documentation>
									Maximum date allowed. Optional.
									Date must have the following format: yyyy-MM-dd.
								</xs:documentation>
							</xs:annotation>
						</xs:element>
						<xs:element type="xs:date" name="From" minOccurs="0">
							<xs:annotation>
								<xs:documentation>
									Date from which to calculate the number of days. Optional. Must be
									a date format (yyyy-MM-dd)
								</xs:documentation>
							</xs:annotation>
						</xs:element>
					</xs:choice>
				</xs:sequence>
			</xs:extension>
		</xs:complexContent>
	</xs:complexType>
	<xs:complexType name="DateType">
		<xs:annotation>
			<xs:documentation>
				Date type field. Represents the number of days from 2000-01-01, to a
				maximum of 65535 days (2 bytes).
			</xs:documentation>
		</xs:annotation>
		<xs:complexContent>
			<xs:extension base="TypeDef">
				<xs:sequence>
					<xs:element type="DateConstraintsType" name="DateConstraints" minOccurs="0">
						<xs:annotation>
							<xs:documentation>Date field restrictions. Optional</xs:documentation>
						</xs:annotation>
					</xs:element>
					<xs:element name="Extension" minOccurs="0">
						<xs:annotation>
							<xs:documentation>Value restrictions. Optional.</xs:documentation>
						</xs:annotation>
					</xs:element>
				</xs:sequence>
			</xs:extension>
		</xs:complexContent>
	</xs:complexType>
	<xs:complexType name="TimestampConstraintsType">
		<xs:annotation>
			<xs:documentation>Timestamp field restrictions.</xs:documentation>
		</xs:annotation>
		<xs:complexContent>
			<xs:extension base="BaseConstraintsType">
				<xs:sequence>
					<xs:choice minOccurs="0" maxOccurs="2">
						<xs:element type="xs:dateTime" name="NotBefore" minOccurs="0">
							<xs:annotation>
								<xs:documentation>
									Minimum date allowed. Optional.
									The dateTime is specified in the following form "YYYY-MM-DDThh:mm:ss".
								</xs:documentation>
							</xs:annotation>
						</xs:element>
						<xs:element type="xs:dateTime" name="NotAfter" minOccurs="0">
							<xs:annotation>
								<xs:documentation>
									Maximum date allowed. Optional.
									The dateTime is specified in the following form "YYYY-MM-DDThh:mm:ss".
								</xs:documentation>
							</xs:annotation>
						</xs:element>
					</xs:choice>
				</xs:sequence>
			</xs:extension>
		</xs:complexContent>
	</xs:complexType>
	<xs:complexType name="TimestampType">
		<xs:complexContent>
			<xs:extension base="TypeDef">
				<xs:sequence>
					<xs:element type="TimestampConstraintsType" name="TimestampConstraints" minOccurs="0">
						<xs:annotation>
							<xs:documentation>Timestamp field restrictions. Optional</xs:documentation>
						</xs:annotation>
					</xs:element>
				</xs:sequence>
			</xs:extension>
		</xs:complexContent>
	</xs:complexType>
	<xs:complexType name="ObjectConstraintsType">
		<xs:annotation>
			<xs:documentation>Base constraints type.</xs:documentation>
		</xs:annotation>
		<xs:complexContent>
			<xs:extension base="BaseConstraintsType" />
		</xs:complexContent>
	</xs:complexType>
	<xs:complexType name="ObjectType">
		<xs:annotation>
			<xs:documentation> Objecttype field.</xs:documentation>
		</xs:annotation>
		<xs:complexContent>
			<xs:extension base="TypeDef">
				<xs:sequence>
					<xs:element type="ObjectConstraintsType" name="ObjectConstraints" minOccurs="0"/>
				</xs:sequence>
				<xs:attribute type="xs:string" name="type" use="required">
					<xs:annotation>
						<xs:documentation>Type of object. Must be a reference to an object defined in Types.</xs:documentation>
					</xs:annotation>
				</xs:attribute>
			</xs:extension>
		</xs:complexContent>
	</xs:complexType>
	<xs:complexType name="BinaryConstraintsType">
		<xs:annotation>
			<xs:documentation>Binary field restrictions.</xs:documentation>
		</xs:annotation>
		<xs:complexContent>
			<xs:extension base="BaseConstraintsType">
				<xs:sequence>
					<xs:choice minOccurs="0" maxOccurs="4">
						<xs:element type="xs:unsignedInt" name="MinLength" minOccurs="0">
							<xs:annotation>
								<xs:documentation>Minimum binary length. Optional. Values from 0 to 4,294,967,295.</xs:documentation>
							</xs:annotation>
						</xs:element>
						<xs:element type="xs:unsignedInt" name="MaxLength" minOccurs="0">
							<xs:annotation>
								<xs:documentation>Maximum binary length. Optional. Values from 0 to 4,294,967,295.</xs:documentation>
							</xs:annotation>
						</xs:element>
						<xs:element type="xs:string" name="Pattern" minOccurs="0">
							<xs:annotation>
								<xs:documentation>Allowed binary pattern. Supports JavaScript RegEx. Optional.</xs:documentation>
							</xs:annotation>
						</xs:element>
					</xs:choice>
				</xs:sequence>
			</xs:extension>
		</xs:complexContent>
	</xs:complexType>
	<xs:complexType name="BinaryType">
		<xs:annotation>
			<xs:documentation> Binary type.</xs:documentation>
		</xs:annotation>
		<xs:complexContent>
			<xs:extension base="TypeDef">
				<xs:sequence>
					<xs:element type="BinaryConstraintsType" name="BinaryConstraints" minOccurs="0">
						<xs:annotation>
							<xs:documentation>Binary field restrictions.</xs:documentation>
						</xs:annotation>
					</xs:element>
					<xs:element name="Extension" minOccurs="0">
						<xs:annotation>
							<xs:documentation>Value restrictions. Optional.</xs:documentation>
						</xs:annotation>
					</xs:element>
				</xs:sequence>
			</xs:extension>
		</xs:complexContent>
	</xs:complexType>
	<xs:complexType name="ArrayConstraintsType">
		<xs:annotation>
			<xs:documentation>
				Restrictions common to all Array field type.
			</xs:documentation>
		</xs:annotation>
		<xs:complexContent>
			<xs:extension base="BaseConstraintsType">
				<xs:sequence>
					<xs:choice minOccurs="0" maxOccurs="2">
						<xs:element type="xs:unsignedInt" name="MinSize" minOccurs="0">
							<xs:annotation>
								<xs:documentation>
									Minimum array size. Optional. Values from 0 to 4,294,967,295.
								</xs:documentation>
							</xs:annotation>
						</xs:element>
						<xs:element type="xs:unsignedInt" name="MaxSize" minOccurs="0">
							<xs:annotation>
								<xs:documentation>
									Maximum array size. Optional. Values from 0 to 4,294,967,295.
								</xs:documentation>
							</xs:annotation>
						</xs:element>
					</xs:choice>
				</xs:sequence>
			</xs:extension>
		</xs:complexContent>
	</xs:complexType>
	<xs:complexType name="ArrayType">
		<xs:annotation>
			<xs:documentation>
				Base type for Array fields.
			</xs:documentation>
		</xs:annotation>
		<xs:complexContent>
			<xs:extension base="TypeDef">
				<xs:sequence>
					<xs:element type="ArrayConstraintsType" name="ArrayConstraints" minOccurs="0">
						<xs:annotation>
							<xs:documentation>
								Array field restrictions. Optional.
							</xs:documentation>
						</xs:annotation>
					</xs:element>
				</xs:sequence>
			</xs:extension>
		</xs:complexContent>
	</xs:complexType>
	<xs:complexType name="StringArrayType">
		<xs:annotation>
			<xs:documentation>
				String array field type.
			</xs:documentation>
		</xs:annotation>
		<xs:complexContent>
			<xs:extension base="ArrayType">
				<xs:sequence>
					<xs:element type="StringConstraintsType" name="StringConstraints" minOccurs="0">
						<xs:annotation>
							<xs:documentation>
								String value restrictions. Optional.
							</xs:documentation>
						</xs:annotation>
					</xs:element>
				</xs:sequence>
			</xs:extension>
		</xs:complexContent>
	</xs:complexType>
	<xs:complexType name="BooleanArrayType">
		<xs:annotation>
			<xs:documentation>
				Boolean array field type.
			</xs:documentation>
		</xs:annotation>
		<xs:complexContent>
			<xs:extension base="ArrayType">
				<xs:sequence>
					<xs:element type="BooleanConstraintsType" name="BooleanConstraints" minOccurs="0">
						<xs:annotation>
							<xs:documentation>
								Boolean restrictions. Optional.
							</xs:documentation>
						</xs:annotation>
					</xs:element>
				</xs:sequence>
			</xs:extension>
		</xs:complexContent>
	</xs:complexType>
	<xs:complexType name="IntegerArrayType">
		<xs:annotation>
			<xs:documentation>
				Integer array field type.
			</xs:documentation>
		</xs:annotation>
		<xs:complexContent>
			<xs:extension base="ArrayType">
				<xs:sequence>
					<xs:element type="IntegerConstraintsType" name="IntegerConstraints" minOccurs="0">
						<xs:annotation>
							<xs:documentation>
								Integer value restrictions. Optional.
							</xs:documentation>
						</xs:annotation>
					</xs:element>
				</xs:sequence>
			</xs:extension>
		</xs:complexContent>
	</xs:complexType>
	<xs:complexType name="FloatArrayType">
		<xs:annotation>
			<xs:documentation>
				Float array field type.
			</xs:documentation>
		</xs:annotation>
		<xs:complexContent>
			<xs:extension base="ArrayType">
				<xs:sequence>
					<xs:element type="FloatConstraintsType" name="FloatConstraints" minOccurs="0">
						<xs:annotation>
							<xs:documentation>
								Float value restrictions. Optional.
							</xs:documentation>
						</xs:annotation>
					</xs:element>
				</xs:sequence>
			</xs:extension>
		</xs:complexContent>
	</xs:complexType>
	<xs:complexType name="DateArrayType">
		<xs:annotation>
			<xs:documentation>
				Date array field type.
			</xs:documentation>
		</xs:annotation>
		<xs:complexContent>
			<xs:extension base="ArrayType">
				<xs:sequence>
					<xs:element type="DateConstraintsType" name="DateConstraints" minOccurs="0">
						<xs:annotation>
							<xs:documentation>
								Date value restrictions. Optional.
							</xs:documentation>
						</xs:annotation>
					</xs:element>
				</xs:sequence>
			</xs:extension>
		</xs:complexContent>
	</xs:complexType>
	<xs:complexType name="TimestampArrayType">
		<xs:annotation>
			<xs:documentation>
				Timestamp array field type.
			</xs:documentation>
		</xs:annotation>
		<xs:complexContent>
			<xs:extension base="ArrayType">
				<xs:sequence>
					<xs:element type="TimestampConstraintsType" name="TimestampConstraints" minOccurs="0">
						<xs:annotation>
							<xs:documentation>Timestamp value restrictions. Optional.</xs:documentation>
						</xs:annotation>
					</xs:element>
				</xs:sequence>
			</xs:extension>
		</xs:complexContent>
	</xs:complexType>
	<xs:complexType name="ObjectArrayType">
		<xs:annotation>
			<xs:documentation>
				Object array field type.
			</xs:documentation>
		</xs:annotation>
		<xs:complexContent>
			<xs:extension base="ArrayType">
				<xs:sequence>
					<xs:element type="ObjectConstraintsType" name="ObjectConstraints" minOccurs="0">
						<xs:annotation>
							<xs:documentation>
								Object value restrictions. Optional.
							</xs:documentation>
						</xs:annotation>
					</xs:element>
				</xs:sequence>
				<xs:attribute type="xs:string" name="type" use="required" />
			</xs:extension>
		</xs:complexContent>
	</xs:complexType>
	<xs:complexType name="BinaryArrayType">
		<xs:annotation>
			<xs:documentation>
				Binary array field type.
			</xs:documentation>
		</xs:annotation>
		<xs:complexContent>
			<xs:extension base="ArrayType">
				<xs:sequence>
					<xs:element type="BinaryConstraintsType" name="BinaryConstraints" minOccurs="0">
						<xs:annotation>
							<xs:documentation>
								Binary value restrictions. Optional.
							</xs:documentation>
						</xs:annotation>
					</xs:element>
				</xs:sequence>
			</xs:extension>
		</xs:complexContent>
	</xs:complexType>
	<xs:complexType name="PayloadType">
		<xs:sequence>
			<xs:element type="FieldsType" name="Fields">
				<xs:annotation>
					<xs:documentation>
						List of fields defined in the payload.
					</xs:documentation>
				</xs:annotation>
			</xs:element>
		</xs:sequence>
	</xs:complexType>
	<xs:complexType name="AuxDataType">
		<xs:sequence>
			<xs:element type="FieldsType" name="Fields" minOccurs="0">
				<xs:annotation>
					<xs:documentation>
						List of fields defined in the Auxiliary Data. Optional.
						If not specified, this means there are no auxiliary data.
					</xs:documentation>
				</xs:annotation>
			</xs:element>
		</xs:sequence>
	</xs:complexType>
	<xs:complexType name="TypeType">
		<xs:sequence>
			<xs:element type="FieldsType" name="Fields" minOccurs="0"/>
		</xs:sequence>
		<xs:attribute type="xs:string" name="name" use="required">
			<xs:annotation>
				<xs:documentation>
					Type name. Required. Must match any object in schema with same type.
				</xs:documentation>
			</xs:annotation>
		</xs:attribute>
	</xs:complexType>
	<xs:complexType name="TypesType">
		<xs:sequence>
			<xs:element type="TypeType" name="Type" maxOccurs="unbounded" minOccurs="0" />
		</xs:sequence>
	</xs:complexType>
	<xs:complexType name="FieldsType">
		<xs:choice minOccurs="0" maxOccurs="unbounded">
			<xs:element type="StringType" name="String" maxOccurs="unbounded" minOccurs="0" />
			<xs:element type="BooleanType" name="Boolean" maxOccurs="unbounded" minOccurs="0" />
			<xs:element type="IntegerType" name="Integer" maxOccurs="unbounded" minOccurs="0" />
			<xs:element type="FloatType" name="Float" maxOccurs="unbounded" minOccurs="0" />
			<xs:element type="DateType" name="Date" maxOccurs="unbounded" minOccurs="0" />
			<xs:element type="TimestampType" name="Timestamp" maxOccurs="unbounded" minOccurs="0"/>
			<xs:element type="ObjectType" name="Object" maxOccurs="unbounded" minOccurs="0" />
			<xs:element type="BinaryType" name="Binary" maxOccurs="unbounded" minOccurs="0" />
			<xs:element type="StringArrayType" name="StringArray" maxOccurs="unbounded" minOccurs="0" />
			<xs:element type="BooleanArrayType" name="BooleanArray" maxOccurs="unbounded" minOccurs="0" />
			<xs:element type="IntegerArrayType" name="IntegerArray" maxOccurs="unbounded" minOccurs="0" />
			<xs:element type="FloatArrayType" name="FloatArray" maxOccurs="unbounded" minOccurs="0" />
			<xs:element type="DateArrayType" name="DateArray" maxOccurs="unbounded" minOccurs="0"/>
			<xs:element type="TimestampArrayType" name="TimestampArray" maxOccurs="unbounded" minOccurs="0"/>
			<xs:element type="ObjectArrayType" name="ObjectArray" maxOccurs="unbounded" minOccurs="0" />
			<xs:element type="BinaryArrayType" name="BinaryArray" maxOccurs="unbounded" minOccurs="0" />
		</xs:choice>
	</xs:complexType>
	<xs:complexType name="SchemaType">
		<xs:sequence>
			<xs:element type="PayloadType" name="Payload">
				<xs:annotation>
					<xs:documentation>
						Payload definition
					</xs:documentation>
				</xs:annotation>
			</xs:element>
			<xs:element type="AuxDataType" name="AuxData" minOccurs="0">
				<xs:annotation>
					<xs:documentation>
						Auxiliary Data definition. Optional
					</xs:documentation>
				</xs:annotation>
			</xs:element>
			<xs:element type="TypesType" name="Types" minOccurs="0">
				<xs:annotation>
					<xs:documentation>
						List of custom object types defined by this schema.
					</xs:documentation>
				</xs:annotation>
			</xs:element>
		</xs:sequence>
	</xs:complexType>
	<xs:complexType name="ExtensionType" abstract="true">
		<xs:annotation>
			<xs:documentation>
				Base type for an extension.
			</xs:documentation>
		</xs:annotation>
	</xs:complexType>
	<xs:complexType name="ExtensionsType">
		<xs:sequence>
			<xs:element type="ExtensionType" name="Extension" minOccurs="0" maxOccurs="unbounded" />
		</xs:sequence>
	</xs:complexType>
	<xs:complexType name="FieldExtensionType" abstract="true">
	<xs:annotation>
		<xs:documentation>Base type for a field extension.</xs:documentation>
	</xs:annotation>
	</xs:complexType>
	<xs:complexType name="PoliciesExtensionType">
		<xs:complexContent>
			<xs:extension base="ExtensionType">
				<xs:sequence>
					<xs:element type="AuthorizedUsageType" name="AuthorizedUsage" minOccurs="0" />
				</xs:sequence>
			</xs:extension>
		</xs:complexContent>
	</xs:complexType>
	<xs:complexType name="AuthorizedUsageType">
		<xs:annotation>
			<xs:documentation>
				Ensures that the signing certificate is legitimately authorized to
				produce VDS for this use case. The signing certificate must include the ID in the
				OID aigcev.policies.usageList
			</xs:documentation>
		</xs:annotation>
		<xs:sequence>
			<xs:element name="oid" minOccurs="1" maxOccurs="1">
				<xs:annotation>
					<xs:documentation>Object identifier (OID).</xs:documentation>
				</xs:annotation>
				<xs:simpleType>
					<xs:restriction base="xs:string">
						<xs:pattern value="([0-2](\.[0-9]+)+)" />
					</xs:restriction>
				</xs:simpleType>
			</xs:element>
			<xs:element name="uuid" minOccurs="1" maxOccurs="1">
				<xs:annotation>
					<xs:documentation>Universally unique identifier (UUID) of the signing certificate. The UUID is a 128-bit long, as defined in ISO 9834-8.</xs:documentation>
				</xs:annotation>
				<xs:simpleType>
					<xs:restriction base="xs:string">
						<xs:pattern value="[a-f0-9A-Z]{32}" />
					</xs:restriction>
				</xs:simpleType>
			</xs:element>
		</xs:sequence>
	</xs:complexType>
	<xs:complexType name="ManifestType">
		<xs:sequence>
			<xs:element ref="Id" />
			<xs:element ref="Version" />
			<xs:element ref="Name" />
			<xs:element ref="Description" />
			<xs:element ref="Schema" />
			<xs:element ref="Extensions" minOccurs="0"/>
			<xs:element ref="ds:Signature" minOccurs="0"/>
		</xs:sequence>
		<xs:attribute type="xs:int" name="version" use="required" fixed="1">
			<xs:annotation>
				<xs:documentation>
					Manifest format version. MUST be 1.
				</xs:documentation>
			</xs:annotation>
		</xs:attribute>
	</xs:complexType>
</xs:schema>
