<?xml version="1.0" encoding="UTF-8"?>
<xs:schema targetNamespace="http://aspen.csit.fsu.edu/project/gxos/config" xmlns="http://aspen.csit.fsu.edu/project/gxos/config" xmlns:xs="http://www.w3.org/2001/XMLSchema" elementFormDefault="qualified" attributeFormDefault="unqualified">
	<xs:complexType name="ConfigurationType">
		<xs:annotation>
			<xs:documentation>Version attribute of configuration types is required.</xs:documentation>
		</xs:annotation>
		<xs:choice>
			<xs:element name="ConfigFile">
				<xs:annotation>
					<xs:documentation>This element holds the location of the configuration file. In a complete configuration file, this element cannot exist. If this elements exists, then the rest of the file will be disregarded and configuration information will be uploaded from either FileURL or FileLocation.</xs:documentation>
				</xs:annotation>
				<xs:complexType>
					<xs:choice>
						<xs:element name="FileURL" type="xs:string">
							<xs:annotation>
								<xs:documentation>File URLs are platform independent addresses for files, i.e. file:///home/user or file://c:/documents/user. First this element is checked. If it does not exist, then FileLocation is tried.</xs:documentation>
							</xs:annotation>
						</xs:element>
						<xs:element name="FileLocation" type="xs:string">
							<xs:annotation>
								<xs:documentation>This holds the physical location of the configuration file, and it is file system dependent name. It is checked after FileURL is tried.</xs:documentation>
							</xs:annotation>
						</xs:element>
					</xs:choice>
				</xs:complexType>
			</xs:element>
			<xs:sequence>
				<xs:element name="DatabaseManager">
					<xs:annotation>
						<xs:documentation>Configuration information for the database manager. All the database implementations need to be registered through here.</xs:documentation>
					</xs:annotation>
					<xs:complexType>
						<xs:sequence>
							<xs:element name="Database" maxOccurs="unbounded">
								<xs:complexType>
									<xs:sequence>
										<xs:element name="URINamespace" type="xs:string">
											<xs:annotation>
												<xs:documentation>This is the namespace prefix which is associated with the given database implementation, i.e. gxos as in gxos://database/xmlobject/a/b/c</xs:documentation>
											</xs:annotation>
										</xs:element>
										<xs:element name="DBImplementer" type="xs:string">
											<xs:annotation>
												<xs:documentation>Java class name of the database implementer. This is a vendor/developer specific name and must implement org.gxos.xml.Database interface.</xs:documentation>
											</xs:annotation>
										</xs:element>
										<xs:element name="Parameters" minOccurs="0">
											<xs:annotation>
												<xs:documentation>Parameters are name/value pairs. These value are inserted into a hashtable before sent to database initialization. These values are implementation specific.</xs:documentation>
											</xs:annotation>
											<xs:complexType>
												<xs:sequence>
													<xs:element name="Parameter" maxOccurs="unbounded">
														<xs:complexType>
															<xs:simpleContent>
																<xs:extension base="xs:string">
																	<xs:attribute name="name" type="xs:string" use="required"/>
																</xs:extension>
															</xs:simpleContent>
														</xs:complexType>
													</xs:element>
												</xs:sequence>
											</xs:complexType>
										</xs:element>
									</xs:sequence>
								</xs:complexType>
							</xs:element>
							<xs:element name="UserInformation">
								<xs:complexType>
									<xs:sequence>
										<xs:element name="UserImplementer" type="xs:string">
											<xs:annotation>
												<xs:documentation>Java class name of the personal information interface, org.gxos.users.PersonalInfo.</xs:documentation>
											</xs:annotation>
										</xs:element>
									</xs:sequence>
								</xs:complexType>
							</xs:element>
						</xs:sequence>
					</xs:complexType>
				</xs:element>
				<xs:element name="CustomObjects" minOccurs="0">
					<xs:annotation>
						<xs:documentation>This is a list of user defined GXOS objects. At the time initialization, all of these Java classes are loaded into memory and registered with the XML unmarshaller.</xs:documentation>
					</xs:annotation>
					<xs:complexType>
						<xs:sequence>
							<xs:element name="CustomObject" type="xs:string" maxOccurs="unbounded"/>
						</xs:sequence>
					</xs:complexType>
				</xs:element>
			</xs:sequence>
		</xs:choice>
		<xs:attribute name="version" type="xs:string" use="required"/>
	</xs:complexType>
	<xs:element name="Configuration">
		<xs:annotation>
			<xs:documentation>Configuration file cannot have ConfigFile with DatabaseManager and CustomObjects elements defined at the same time.</xs:documentation>
		</xs:annotation>
		<xs:complexType>
			<xs:complexContent>
				<xs:extension base="ConfigurationType"/>
			</xs:complexContent>
		</xs:complexType>
	</xs:element>
</xs:schema>
