<xs:schema targetNamespace='http://www.bluestream.com/xstreamdb' xmlns='http://www.bluestream.com/xstreamdb' xmlns:xs='http://www.w3.org/2001/XMLSchema' elementFormDefault='qualified'>
	<xs:include schemaLocation='XdbCommon.xsd'></xs:include>
	<xs:include schemaLocation='XdbSecurity.xsd'></xs:include>
	<xs:include schemaLocation='XdbResource.xsd'></xs:include>
	<!-- remember - default for element is minOccurs 1, maxOccurs 1. -->
	<!-- *********************************************  ServerInfo -->
	<xs:complexType name='ConfigInfo' abstract='true'>
		<xs:attribute name='objectId' type='DSObjectId'></xs:attribute>
		<!-- super type for all config info -->
		<!-- this is a type relative object id as defined in identity spec. -->
	</xs:complexType>
	<xs:complexType name='SessionList'>
		<xs:sequence>
			<xs:element name='session'>
				<xs:complexType>
					<xs:attribute name='id' type='xs:integer'></xs:attribute>
					<xs:attribute name='active' type='xs:boolean'></xs:attribute>
					<xs:attribute name='username' type='xs:string'></xs:attribute>
					<xs:attribute name='ip' type='xs:string'></xs:attribute>
					<!-- client ip -->
				</xs:complexType>
			</xs:element>
		</xs:sequence>
		<!-- client/server session objects -->
	</xs:complexType>
	<xs:complexType name='DBSessionMgrInfo'>
		<xs:attribute name='limit' type='xs:integer'></xs:attribute>
		<xs:attribute name='count' type='xs:integer'></xs:attribute>
		<xs:attribute name='used' type='xs:integer'></xs:attribute>
		<xs:attribute name='unused' type='xs:integer'></xs:attribute>
		<!-- DBObjects level individual database sessions -->
	</xs:complexType>
	<xs:complexType name='ServerInfo'>
		<xs:annotation>
			<xs:documentation>
			   Server information.
			</xs:documentation>
		</xs:annotation>
		<xs:complexContent>
			<xs:extension base='ConfigInfo'>
				<xs:sequence>
					<xs:element name='schema'>
						<xs:complexType>
							<xs:sequence>
								<xs:element name='typeCheck' type='xs:string'></xs:element>
							</xs:sequence>
						</xs:complexType>
						<!-- schema related stuff -->
					</xs:element>
					<xs:element name='connection'>
						<xs:complexType>
							<xs:sequence>
								<xs:element name='serverPort' type='xs:string'></xs:element>
								<xs:element name='controlPort' type='xs:string'></xs:element>
								<xs:element name='sessionList' type='SessionList'></xs:element>
								<xs:element name='dbsessionMgrInfo' type='DBSessionMgrInfo'></xs:element>
							</xs:sequence>
						</xs:complexType>
					</xs:element>
					<xs:element name='results'>
						<xs:complexType>
							<xs:sequence>
								<xs:element name='cacheSize' type='xs:integer'></xs:element>
								<!-- in bytes -->
							</xs:sequence>
						</xs:complexType>
					</xs:element>
					<xs:element name='module'>
						<xs:complexType>
							<xs:sequence>
								<xs:element name='functionPoolSize' type='xs:string'></xs:element>
							</xs:sequence>
						</xs:complexType>
					</xs:element>
					<xs:element name='logging'>
						<xs:complexType>
							<xs:sequence>
								<xs:element name='queryPlan' type='OnOff'></xs:element>
							</xs:sequence>
						</xs:complexType>
					</xs:element>
					<xs:element name='transactions'>
						<xs:complexType>
							<xs:sequence>
								<xs:element name='globalTranCount' type='xs:integer'></xs:element>
							</xs:sequence>
						</xs:complexType>
					</xs:element>
					<xs:element name='processInfo'>
						<xs:complexType>
							<xs:sequence>
								<xs:element name='uptime' type='xs:integer'></xs:element>
								<xs:element name='usedMemory' type='xs:integer'></xs:element>
								<!-- in milliseconds -->
								<!-- in bytes -->
							</xs:sequence>
						</xs:complexType>
					</xs:element>
				</xs:sequence>
			</xs:extension>
		</xs:complexContent>
	</xs:complexType>
	<xs:element name='serverInfo' type='ServerInfo'></xs:element>
	<!-- *********************************************  DatabaseInfo -->
	<xs:complexType name='DatabaseInfo'>
		<xs:complexContent>
			<xs:extension base='ConfigInfo'>
				<xs:sequence>
					<xs:element name='name' type='xs:string'></xs:element>
					<xs:element name='location' type='xs:string'></xs:element>
					<xs:element name='size' type='xs:long'></xs:element>
					<xs:element name='createDate' type='xs:dateTime'></xs:element>
				</xs:sequence>
			</xs:extension>
		</xs:complexContent>
	</xs:complexType>
	<xs:element name='databaseInfo' type='DatabaseInfo'></xs:element>
	<!-- *********************************************  RootInfo -->
	<xs:complexType name='RootInfo'>
		<xs:complexContent>
			<xs:extension base='ConfigInfo'>
				<xs:sequence>
					<xs:element name='name' type='xs:string'></xs:element>
					<xs:element name='docCnt' type='xs:integer'></xs:element>
					<xs:element name='schemaName' type='xs:string'></xs:element>
					<xs:element name='rootElementName' type='xs:string'></xs:element>
					<xs:element name='enableGuid' type='xs:boolean'></xs:element>
					<xs:element name='enableCounter' type='xs:boolean'></xs:element>
					<!-- root element of schema -->
				</xs:sequence>
			</xs:extension>
		</xs:complexContent>
	</xs:complexType>
	<xs:element name='rootInfo' type='RootInfo'></xs:element>
	<!-- *********************************************  ValueIndexInfo -->
	<xs:complexType name='ValueIndexInfo'>
		<xs:complexContent>
			<xs:extension base='ConfigInfo'>
				<xs:sequence>
					<xs:element name='name' type='xs:string'></xs:element>
					<xs:element name='dataType' type='xs:string'></xs:element>
					<xs:element name='path' type='xs:string'></xs:element>
					<xs:element name='enforceUniqueKey' type='xs:boolean'></xs:element>
					<xs:element name='uniqueKeyCnt' type='xs:integer'></xs:element>
					<xs:element name='refCnt' type='xs:integer'></xs:element>
					<!-- The short name of this index -->
					<!-- XML schema type no namespace prefix -->
					<!-- path to the data -->
					<!-- are keys enforced unique -->
					<!-- count of unique keys -->
					<!-- references in index, usually docIds -->
				</xs:sequence>
			</xs:extension>
		</xs:complexContent>
	</xs:complexType>
	<xs:element name='valueIndexInfo' type='ValueIndexInfo'></xs:element>
	<!-- *********************************************  FullTextIndexInfo -->
	<xs:complexType name='FullTextIndexInfo'>
		<xs:complexContent>
			<xs:extension base='ConfigInfo'>
				<xs:sequence>
					<xs:element name='wordDelimiters' type='xs:string'></xs:element>
					<xs:element name='collectionCnt' type='xs:integer'></xs:element>
					<xs:element name='uniqueWordCnt' type='xs:integer'></xs:element>
					<xs:element name='pathCnt' type='xs:integer'></xs:element>
					<xs:element name='refCnt' type='xs:integer'></xs:element>
					<!-- words in dictionary -->
					<!-- paths in dictionary -->
					<!-- references to words as recorded in  the index, reflects number of word instances. -->
				</xs:sequence>
			</xs:extension>
		</xs:complexContent>
	</xs:complexType>
	<xs:element name='fullTextIndexInfo' type='FullTextIndexInfo'></xs:element>
	<!-- *********************************************  TriggerInfo -->
	<xs:complexType name='TriggerInfo'>
		<xs:complexContent>
			<xs:extension base='ConfigInfo'>
				<xs:sequence>
					<xs:element name='trigger' type='TriggerType'></xs:element>
				</xs:sequence>
			</xs:extension>
		</xs:complexContent>
	</xs:complexType>
	<xs:complexType name='TriggerType'>
		<xs:sequence>
			<xs:element name='name' type='xs:string'></xs:element>
			<xs:element name='priority' type='xs:integer'></xs:element>
			<xs:element name='action' type='TriggerActionType'></xs:element>
			<xs:element name='timing' type='TriggerTimingType'></xs:element>
			<xs:element name='xquery' type='xs:string'></xs:element>
			<!-- contains CData of XQuery -->
		</xs:sequence>
	</xs:complexType>
	<xs:simpleType name='TriggerActionType'>
		<xs:restriction base='xs:string'>
			<xs:enumeration value='INSERT'></xs:enumeration>
			<xs:enumeration value='UPDATE'></xs:enumeration>
			<xs:enumeration value='DELETE'></xs:enumeration>
		</xs:restriction>
	</xs:simpleType>
	<xs:simpleType name='TriggerTimingType'>
		<xs:restriction base='xs:string'>
			<xs:enumeration value='BEFORE'></xs:enumeration>
			<xs:enumeration value='AFTER'></xs:enumeration>
		</xs:restriction>
	</xs:simpleType>
	<xs:element name='triggerInfo' type='TriggerInfo'></xs:element>
	<!-- *********************************************  ModuleInfo -->
	<xs:complexType name='ModuleInfo'>
		<xs:complexContent>
			<xs:extension base='ConfigInfo'>
				<xs:sequence>
					<xs:element name='FunctionModule'>
						<xs:complexType>
							<xs:sequence>
								<xs:element name='Functions' type='FunctionsType'></xs:element>
							</xs:sequence>
							<xs:attribute name='Name' type='xs:string'></xs:attribute>
						</xs:complexType>
					</xs:element>
				</xs:sequence>
			</xs:extension>
		</xs:complexContent>
	</xs:complexType>
	<xs:complexType name='FunctionsType'>
		<xs:sequence>
			<xs:element name='Function' maxOccurs='unbounded'>
				<xs:complexType>
					<xs:sequence>
						<xs:element name='DefineFunctionText' type='xs:string'></xs:element>
						<!-- contains CData of function -->
					</xs:sequence>
					<xs:attribute name='Name' type='xs:string'></xs:attribute>
				</xs:complexType>
			</xs:element>
		</xs:sequence>
		<!-- list of functions -->
	</xs:complexType>
	<xs:element name='moduleInfo' type='ModuleInfo'></xs:element>
	<!-- *********************************************  ModuleInfo -->
	<xs:complexType name='GroupInfo'>
		<xs:annotation>
			<xs:documentation>
                          GroupInfo. group including user members.
                         </xs:documentation>
		</xs:annotation>
		<xs:complexContent>
			<xs:extension base='ConfigInfo'>
				<xs:sequence>
					<xs:element name='group' type='Group'></xs:element>
				</xs:sequence>
			</xs:extension>
		</xs:complexContent>
	</xs:complexType>
	<xs:element name='groupInfo' type='GroupInfo'></xs:element>
	<!-- *********************************************  UserInfo -->
	<xs:complexType name='UserInfo'>
		<xs:annotation>
			<xs:documentation>
                         UserInfo
                         </xs:documentation>
		</xs:annotation>
		<xs:complexContent>
			<xs:extension base='ConfigInfo'>
				<xs:sequence>
					<xs:element name='user' type='User'></xs:element>
				</xs:sequence>
			</xs:extension>
		</xs:complexContent>
	</xs:complexType>
	<xs:element name='userInfo' type='UserInfo'></xs:element>
	<!-- *********************************************  Trees -->
	<!-- here are list of objects that contain other config objects making up a tree -->
	<!-- *********************************************  DatabaseTree -->
	<xs:complexType name='DatabaseTree'>
		<xs:sequence>
			<xs:element name='listItem' minOccurs='0' maxOccurs='unbounded'>
				<xs:complexType>
					<xs:sequence>
						<xs:element ref='databaseInfo'></xs:element>
						<xs:element name='rootTree' type='RootTree'></xs:element>
					</xs:sequence>
				</xs:complexType>
			</xs:element>
		</xs:sequence>
	</xs:complexType>
	<xs:element name='databaseTree' type='DatabaseTree'></xs:element>
	<!-- *********************************************  RootTree -->
	<xs:complexType name='RootTree'>
		<xs:sequence>
			<xs:element name='listItem' minOccurs='0' maxOccurs='unbounded'>
				<xs:complexType>
					<xs:sequence>
						<xs:element ref='rootInfo'></xs:element>
						<xs:element name='indexTree' type='IndexTree'></xs:element>
						<xs:element name='triggerTree' type='TriggerTree'></xs:element>
					</xs:sequence>
				</xs:complexType>
			</xs:element>
		</xs:sequence>
	</xs:complexType>
	<xs:element name='rootTree' type='RootTree'></xs:element>
	<!-- *********************************************  IndexTree -->
	<xs:complexType name='IndexTree'>
		<xs:sequence>
			<xs:element name='listItem' minOccurs='0' maxOccurs='unbounded'>
				<xs:complexType>
					<xs:choice>
						<xs:element ref='valueIndexInfo'></xs:element>
						<xs:element ref='fullTextIndexInfo'></xs:element>
						<!-- This should always be the last listItem if present. -->
					</xs:choice>
				</xs:complexType>
			</xs:element>
		</xs:sequence>
	</xs:complexType>
	<xs:element name='indexTree' type='IndexTree'></xs:element>
	<!-- *********************************************  TriggerTree -->
	<xs:complexType name='TriggerTree'>
		<xs:sequence>
			<xs:element name='listItem' minOccurs='0' maxOccurs='unbounded'>
				<xs:complexType>
					<xs:sequence>
						<xs:element ref='triggerInfo'></xs:element>
					</xs:sequence>
				</xs:complexType>
			</xs:element>
		</xs:sequence>
	</xs:complexType>
	<xs:element name='triggerTree' type='TriggerTree'></xs:element>
	<!-- *********************************************  CollectionInfo -->
	<xs:complexType name='CollectionInfo'>
		<xs:annotation>
			<xs:documentation>
                         CollectionInfo  idea here is to have info about an individual collection - not returned in tree.
                         </xs:documentation>
		</xs:annotation>
		<xs:complexContent>
			<xs:extension base='ConfigInfo'>
				<xs:sequence>
					<xs:element ref='collectionItem'></xs:element>
				</xs:sequence>
			</xs:extension>
		</xs:complexContent>
	</xs:complexType>
	<xs:element name='collectionInfo' type='CollectionInfo'></xs:element>
	<!-- *********************************************  CollectionNode -->
	<xs:complexType name='CollectionNode'>
		<xs:annotation>
			<xs:documentation>
                         CollectionNode - a node in the collection tree - recursive
                         </xs:documentation>
		</xs:annotation>
		<xs:sequence>
		     <!-- the collection Item is the payload -->
			<xs:element ref='collectionItem'></xs:element>
			<!-- zero or many child nodes. -->
			<xs:element ref='collectionNode' minOccurs='0' maxOccurs='unbounded'></xs:element>
		</xs:sequence>
	</xs:complexType>
	<xs:element name='collectionNode' type='CollectionNode'></xs:element>
	<!-- *********************************************  CollectionTree -->
	<xs:complexType name='CollectionTree'>
		<xs:sequence>
		     <!-- only one for the root node -->
			<xs:element ref='collectionNode' minOccurs='1' maxOccurs='1'></xs:element>
		</xs:sequence>
	</xs:complexType>
	<xs:element name='collectionTree' type='CollectionTree'></xs:element>
</xs:schema>