﻿<?xml version="1.0" encoding="utf-8"?>
<xs:schema xmlns:xs="http://www.w3.org/2001/XMLSchema" attributeFormDefault="unqualified" elementFormDefault="qualified" 
		   targetNamespace="http://www.yndigoblue.com/velocity" xmlns:vl="http://www.yndigoblue.com/velocity">
	<xs:complexType name="velocity_schema">
		<xs:sequence>
			<xs:element name="tables">
				<xs:complexType>
					<xs:sequence>
						<xs:element maxOccurs="unbounded" name="table">
							<xs:complexType>
								<xs:sequence>
									<xs:element name="columns">
										<xs:complexType>
											<xs:sequence>
												<xs:element maxOccurs="unbounded" name="column">
													<xs:complexType>
														<xs:simpleContent>
															<xs:extension base="xs:string">
																<xs:attribute name="type" use="required" >
																	<xs:simpleType>
																		<xs:restriction base="xs:string">
																			<xs:enumeration value="blob" />
																			<xs:enumeration value="boolean" />
																			<xs:enumeration value="byte" />
																			<xs:enumeration value="char" />
																			<xs:enumeration value="clob" />
																			<xs:enumeration value="date" />
																			<xs:enumeration value="datetime" />
																			<xs:enumeration value="decimal" />
																			<xs:enumeration value="double" />
																			<xs:enumeration value="float" />
																			<xs:enumeration value="geography" />
																			<xs:enumeration value="geometry" />
																			<xs:enumeration value="integer" />
																			<xs:enumeration value="long" />
																			<xs:enumeration value="short" />
																			<xs:enumeration value="timestamp" />
																			<xs:enumeration value="varchar" />
																		</xs:restriction>
																	</xs:simpleType>
																</xs:attribute>
																<xs:attribute name="notnull" type="xs:boolean" use="optional" />
																<xs:attribute name="autogenerate" type="xs:boolean" use="optional" />
																<xs:attribute name="size" type="xs:unsignedInt" use="optional" />
																<xs:attribute name="precision" type="xs:unsignedByte" use="optional"/>
																<xs:attribute name="scale" type="xs:unsignedByte" use="optional"/>
																<xs:attribute name="schemaupdate" type="xs:boolean" use="optional" />
																<xs:attribute name="columnupdate" type="xs:boolean" use="optional" />
																<xs:attribute name="existingrowtype" use="optional" >
																	<xs:simpleType>
																		<xs:restriction base="xs:string">
																			<xs:enumeration value="number" />
																			<xs:enumeration value="string" />
																			<xs:enumeration value="date" />
																			<xs:enumeration value="datetime" />
																			<xs:enumeration value="timestamp" />
																			<xs:enumeration value="boolean" />
																			<xs:enumeration value="function" />
																		</xs:restriction>
																	</xs:simpleType>
																</xs:attribute>
																<xs:attribute name="existingrowvalue" type="xs:string" use="optional" />
															</xs:extension>
														</xs:simpleContent>														
													</xs:complexType>
												</xs:element>
											</xs:sequence>
										</xs:complexType>
									</xs:element>
									<xs:element name="constraints" minOccurs="0">
										<xs:complexType>
											<xs:sequence>
												<xs:element minOccurs="1" maxOccurs="unbounded" name="constraint">
													<xs:complexType>
														<xs:sequence>
															<xs:element minOccurs="0" name="default">
																<xs:complexType>
																	<xs:sequence>
																		<xs:element name="defaultcolumn" type="xs:string" />
																		<xs:element name="defaultvalue">
																			<xs:complexType>
																				<xs:simpleContent>
																					<xs:extension base="xs:string">
																						<xs:attribute name="type" use="required" >
																							<xs:simpleType>
																								<xs:restriction base="xs:string">
																									<xs:enumeration value="number" />
																									<xs:enumeration value="string" />
																									<xs:enumeration value="date" />
																									<xs:enumeration value="datetime" />
																									<xs:enumeration value="timestamp" />
																									<xs:enumeration value="boolean" />
																									<xs:enumeration value="function" />
																								</xs:restriction>
																							</xs:simpleType>
																						</xs:attribute>
																					</xs:extension>
																				</xs:simpleContent>
																			</xs:complexType>
																		</xs:element>
																	</xs:sequence>
																</xs:complexType>
															</xs:element>
															<xs:element minOccurs="0" name="check">
																<xs:complexType>
																	<xs:sequence>
																		<xs:element minOccurs="1" maxOccurs="unbounded" name="checkpart">
																			<xs:complexType>
																				<xs:simpleContent>
																					<xs:extension base="xs:string">
																						<xs:attribute name="type" use="required" >
																							<xs:simpleType>
																								<xs:restriction base="xs:string">
																									<xs:enumeration value="column" />
																									<xs:enumeration value="operator" />
																									<xs:enumeration value="number" />
																									<xs:enumeration value="string" />
																									<xs:enumeration value="date" />
																									<xs:enumeration value="datetime" />
																									<xs:enumeration value="timestamp" />
																									<xs:enumeration value="snippet" />
																									<xs:enumeration value="function" />
																								</xs:restriction>
																							</xs:simpleType>
																						</xs:attribute>
																					</xs:extension>
																				</xs:simpleContent>
																			</xs:complexType>
																		</xs:element>
																	</xs:sequence>
																	<xs:attribute name="name" type="xs:string" use="required" />
																</xs:complexType>
															</xs:element>
															<xs:element minOccurs="0" name="foreignkey">
																<xs:complexType>
																	<xs:sequence>
																		<xs:element minOccurs="0" name="sourcecolumns">
																			<xs:complexType>
																				<xs:sequence>
																					<xs:element minOccurs="1" maxOccurs="unbounded" name="sourcecolumn" type="xs:string" />
																				</xs:sequence>
																			</xs:complexType>
																		</xs:element>
																		<xs:element name="lookupschema" type="xs:string" />
																		<xs:element name="lookuptable" type="xs:string" />
																		<xs:element minOccurs="0" name="lookupcolumns">
																			<xs:complexType>
																				<xs:sequence>
																					<xs:element minOccurs="1" maxOccurs="unbounded" name="lookupcolumn" type="xs:string" />
																				</xs:sequence>
																			</xs:complexType>
																		</xs:element>
																	</xs:sequence>
																	<xs:attribute name="name" type="xs:string" use="required" />
																	<xs:attribute name="deleterule" use="required" >
																		<xs:simpleType>
																			<xs:restriction base="xs:string">
																				<xs:enumeration value="cascade" />
																				<xs:enumeration value="noaction" />
																				<xs:enumeration value="restrict" />
																				<xs:enumeration value="setnull" />
																				<xs:enumeration value="setdefault" />
																			</xs:restriction>
																		</xs:simpleType>
																	</xs:attribute>
																	<xs:attribute name="updaterule" use="required" >
																		<xs:simpleType>
																			<xs:restriction base="xs:string">
																				<xs:enumeration value="cascade" />
																				<xs:enumeration value="noaction" />
																				<xs:enumeration value="restrict" />
																				<xs:enumeration value="setnull" />
																				<xs:enumeration value="setdefault" />
																			</xs:restriction>
																		</xs:simpleType>
																	</xs:attribute>
																</xs:complexType>
															</xs:element>
															<xs:element minOccurs="0" name="unique">
																<xs:complexType>
																	<xs:sequence>
																		<xs:element minOccurs="1" maxOccurs="unbounded" name="uniquecolumn" type="xs:string" />
																	</xs:sequence>
																	<xs:attribute name="name" type="xs:string" use="required" />
																</xs:complexType>
															</xs:element>
															<xs:element minOccurs="0" maxOccurs="1" name="primarykey">
																<xs:complexType>
																	<xs:sequence>
																		<xs:element minOccurs="1" maxOccurs="unbounded" name="keycolumn" type="xs:string" />
																	</xs:sequence>
																	<xs:attribute name="name" type="xs:string" use="required" />
																</xs:complexType>
															</xs:element>
														</xs:sequence>
														<xs:attribute name="type" use="required" >
															<xs:simpleType>
																<xs:restriction base="xs:string">
																	<xs:enumeration value="primarykey" />
																	<xs:enumeration value="unique" />
																	<xs:enumeration value="foreignkey" />
																	<xs:enumeration value="check" />
																	<xs:enumeration value="default" />
																</xs:restriction>
															</xs:simpleType>
														</xs:attribute>
														<xs:attribute name="schemaupdate" type="xs:boolean" use="optional" />
													</xs:complexType>
												</xs:element>
											</xs:sequence>
										</xs:complexType>
									</xs:element>
									<xs:element name="indexes" minOccurs="0">
										<xs:complexType>
											<xs:sequence>
												<xs:element minOccurs="0" maxOccurs="unbounded" name="index">
													<xs:complexType>
														<xs:sequence>
															<xs:element maxOccurs="unbounded" name="indexcolumn">
																<xs:complexType>
																	<xs:simpleContent>
																		<xs:extension base="xs:string">
																			<xs:attribute name="order" use="required">
																				<xs:simpleType>
																					<xs:restriction base="xs:string">
																						<xs:enumeration value="ascending" />
																						<xs:enumeration value="descending" />
																					</xs:restriction>
																				</xs:simpleType>
																			</xs:attribute>
																		</xs:extension>
																	</xs:simpleContent>
																</xs:complexType>
															</xs:element>
														</xs:sequence>
														<xs:attribute name="name" type="xs:string" use="required" />
														<xs:attribute name="schemaupdate" type="xs:boolean" use="optional" />
													</xs:complexType>
												</xs:element>
											</xs:sequence>
										</xs:complexType>
									</xs:element>
									<xs:element name="spatial" minOccurs="0" maxOccurs="1">
										<xs:complexType>
											<xs:sequence>
												<xs:element minOccurs="1" maxOccurs="1" name="column">
													<xs:complexType>
														<xs:simpleContent>
															<xs:extension base="xs:string">
															</xs:extension>
														</xs:simpleContent>
													</xs:complexType>
												</xs:element>
											</xs:sequence>
											<xs:attribute name="name" type="xs:string" use="required" />
											<xs:attribute name="xmin" type="xs:double" use="required"/>
											<xs:attribute name="ymin" type="xs:double" use="required"/>
											<xs:attribute name="xmax" type="xs:double" use="required"/>
											<xs:attribute name="ymax" type="xs:double" use="required"/>
											<xs:attribute name="smallGridSize" type="xs:double" use="required"/>
											<xs:attribute name="mediumGridSize" type="xs:double" use="required"/>
											<xs:attribute name="largeGridSize" type="xs:double" use="required"/>
											<xs:attribute name="schemaupdate" type="xs:boolean" use="optional" />
										</xs:complexType>
									</xs:element>
									<xs:element name="fulltext" minOccurs="0">
										<xs:complexType>
											<xs:sequence>
												<xs:element maxOccurs="unbounded" name="column">
													<xs:complexType>
														<xs:simpleContent>
															<xs:extension base="xs:string">
															</xs:extension>
														</xs:simpleContent>
													</xs:complexType>
												</xs:element>
											</xs:sequence>
											<xs:attribute name="name" type="xs:string" use="required" />
											<xs:attribute name="schemaupdate" type="xs:boolean" use="optional" />
										</xs:complexType>
									</xs:element>
								</xs:sequence>
								<xs:attribute name="name" type="xs:string" use="required" />
								<xs:attribute name="schemaupdate" type="xs:boolean" use="optional" />
							</xs:complexType>
						</xs:element>
					</xs:sequence>
				</xs:complexType>
			</xs:element>
			<xs:element name="views" minOccurs="0">
				<xs:complexType>
					<xs:sequence>
						<xs:element maxOccurs="unbounded" minOccurs="0" name="view">
							<xs:complexType>
								<xs:simpleContent>
									<xs:extension base="xs:string">
										<xs:attribute name="name" type="xs:string" use="required" />
										<xs:attribute name="schemaupdate" type="xs:boolean" use="optional" />
										<xs:attribute name="type" use="required" >
											<xs:simpleType>
												<xs:restriction base="xs:string">
													<xs:enumeration value="sql" />
													<xs:enumeration value="code" />
												</xs:restriction>
											</xs:simpleType>
										</xs:attribute>
									</xs:extension>
								</xs:simpleContent>
							</xs:complexType>
						</xs:element>
					</xs:sequence>
				</xs:complexType>
			</xs:element>
		</xs:sequence>
		<xs:attribute name="name" type="xs:string" use="required" />
	</xs:complexType>
</xs:schema>