<?xml version="1.0" encoding="UTF-8"?>
<!-- edited with XML Spy v4.0 U (http://www.xmlspy.com) by Ozgur Balsoy (Florida State University) -->
<xsd:schema xmlns:xsd="http://www.w3.org/2001/XMLSchema" elementFormDefault="qualified">
	<xsd:complexType name="BaseXMLObject">
		<xsd:annotation>
			<xsd:documentation>This is the base object definition. Used for nothing. If needed, any addition to this object will affect all the decendants.</xsd:documentation>
		</xsd:annotation>
	</xsd:complexType>
	<xsd:element name="Address">
		<xsd:annotation>
			<xsd:documentation>Can be multiple addresses. addresstype attribute needs to be set if multiple.</xsd:documentation>
		</xsd:annotation>
		<xsd:complexType>
			<xsd:complexContent>
				<xsd:extension base="BaseXMLObject">
					<xsd:sequence>
						<xsd:element name="Street" type="xsd:string"/>
						<xsd:element name="Extension" type="xsd:string" minOccurs="0" maxOccurs="unbounded"/>
						<xsd:element name="City" type="xsd:string"/>
						<xsd:element name="State" type="xsd:string"/>
						<xsd:element name="Zip">
							<xsd:simpleType>
								<xsd:restriction base="xsd:string">
									<xsd:pattern value="\d{5}"/>
								</xsd:restriction>
							</xsd:simpleType>
						</xsd:element>
					</xsd:sequence>
					<xsd:attribute name="type" type="xsd:string"/>
				</xsd:extension>
			</xsd:complexContent>
		</xsd:complexType>
	</xsd:element>
	<xsd:element name="Phone">
		<xsd:annotation>
			<xsd:documentation>Can be multiple phone numbers. phonetype needs to be set if multiple.</xsd:documentation>
		</xsd:annotation>
		<xsd:complexType>
			<xsd:complexContent>
				<xsd:extension base="BaseXMLObject">
					<xsd:sequence>
						<xsd:element name="AreaCode" default="812" minOccurs="0">
							<xsd:simpleType>
								<xsd:restriction base="xsd:string">
									<xsd:pattern value="\d{3}"/>
								</xsd:restriction>
							</xsd:simpleType>
						</xsd:element>
						<xsd:element name="Number">
							<xsd:simpleType>
								<xsd:restriction base="xsd:string">
									<xsd:pattern value="\d{7}"/>
								</xsd:restriction>
							</xsd:simpleType>
						</xsd:element>
						<xsd:element name="Extension" minOccurs="0">
							<xsd:complexType>
								<xsd:simpleContent>
									<xsd:extension base="xsd:string">
										<xsd:attribute name="type"/>
									</xsd:extension>
								</xsd:simpleContent>
							</xsd:complexType>
						</xsd:element>
					</xsd:sequence>
					<xsd:attribute name="type" type="xsd:string"/>
				</xsd:extension>
			</xsd:complexContent>
		</xsd:complexType>
	</xsd:element>
	<xsd:element name="Email">
		<xsd:annotation>
			<xsd:documentation>Can be multiple addresses. emailtype attribute needs to be set if multiple.</xsd:documentation>
		</xsd:annotation>
		<xsd:complexType>
			<xsd:simpleContent>
				<xsd:extension base="xsd:string">
					<xsd:attribute name="type" type="xsd:string" use="optional"/>
				</xsd:extension>
			</xsd:simpleContent>
		</xsd:complexType>
	</xsd:element>
	<xsd:attributeGroup name="CourseInfo">
		<xsd:attribute name="courseid" use="required">
			<xsd:simpleType>
				<xsd:restriction base="xsd:string">
					<xsd:pattern value="[A-Z]{3}\d{4}"/>
				</xsd:restriction>
			</xsd:simpleType>
		</xsd:attribute>
		<xsd:attribute name="section" use="optional">
			<xsd:simpleType>
				<xsd:restriction base="xsd:string">
					<xsd:pattern value="\d{2}"/>
				</xsd:restriction>
			</xsd:simpleType>
		</xsd:attribute>
		<xsd:attribute name="refnum" use="optional">
			<xsd:simpleType>
				<xsd:restriction base="xsd:string">
					<xsd:pattern value="\d{5}"/>
				</xsd:restriction>
			</xsd:simpleType>
		</xsd:attribute>
	</xsd:attributeGroup>
	<xsd:complexType name="CourseRef">
		<xsd:complexContent>
			<xsd:extension base="BaseXMLObject">
				<xsd:attributeGroup ref="CourseInfo"/>
			</xsd:extension>
		</xsd:complexContent>
	</xsd:complexType>
	<xsd:complexType name="Section">
		<xsd:complexContent>
			<xsd:extension base="CourseRef">
				<xsd:sequence>
					<xsd:element name="Title" type="xsd:string"/>
					<xsd:element name="Description" type="xsd:string" minOccurs="0"/>
					<xsd:element name="TA" type="xsd:string" minOccurs="0"/>
					<xsd:element name="Where" type="xsd:string" minOccurs="0"/>
					<xsd:element name="Days" type="xsd:string" minOccurs="0"/>
					<xsd:element name="Begin" type="xsd:time" minOccurs="0"/>
					<xsd:element name="End" type="xsd:time" minOccurs="0"/>
					<xsd:element name="URL" type="xsd:anyURI" minOccurs="0"/>
					<xsd:element name="Seats" type="xsd:nonNegativeInteger" minOccurs="0"/>
					<xsd:element name="Prerequisites" minOccurs="0">
						<xsd:complexType>
							<xsd:sequence>
								<xsd:element name="Prerequisite" type="xsd:string" maxOccurs="unbounded"/>
							</xsd:sequence>
						</xsd:complexType>
					</xsd:element>
				</xsd:sequence>
			</xsd:extension>
		</xsd:complexContent>
	</xsd:complexType>
	<xsd:complexType name="Schedule">
		<xsd:complexContent>
			<xsd:extension base="BaseXMLObject">
				<xsd:sequence>
					<xsd:element name="Term" minOccurs="0">
						<xsd:complexType>
							<xsd:sequence>
								<xsd:element name="Course" type="CourseRef" maxOccurs="unbounded"/>
							</xsd:sequence>
							<xsd:attributeGroup ref="TermInfo"/>
						</xsd:complexType>
					</xsd:element>
				</xsd:sequence>
			</xsd:extension>
		</xsd:complexContent>
	</xsd:complexType>
	<xsd:complexType name="ContactInfo">
		<xsd:sequence>
			<xsd:element ref="Address" minOccurs="0" maxOccurs="unbounded"/>
			<xsd:element ref="Phone" minOccurs="0" maxOccurs="unbounded"/>
			<xsd:element ref="Email" minOccurs="0" maxOccurs="unbounded"/>
		</xsd:sequence>
	</xsd:complexType>
	<xsd:complexType name="Individual">
		<xsd:annotation>
			<xsd:documentation>A top level person object which defines basic properties for a person.</xsd:documentation>
		</xsd:annotation>
		<xsd:complexContent>
			<xsd:extension base="BaseXMLObject">
				<xsd:sequence>
					<xsd:element name="Name">
						<xsd:complexType>
							<xsd:sequence>
								<xsd:element name="Title" minOccurs="0"/>
								<xsd:element name="First"/>
								<xsd:element name="Middle" minOccurs="0"/>
								<xsd:element name="Last"/>
								<xsd:element name="Suffix" minOccurs="0"/>
							</xsd:sequence>
						</xsd:complexType>
					</xsd:element>
					<xsd:element name="ContactInfo" type="ContactInfo" minOccurs="0"/>
					<xsd:element name="Identifiers">
						<xsd:complexType>
							<xsd:sequence>
								<xsd:element name="SSN">
									<xsd:simpleType>
										<xsd:restriction base="xsd:string">
											<xsd:pattern value="\d{3}-\d{2}-\d{4}"/>
										</xsd:restriction>
									</xsd:simpleType>
								</xsd:element>
								<xsd:element name="ID" type="xsd:string" minOccurs="0"/>
								<xsd:element name="Login" type="xsd:string" minOccurs="0"/>
							</xsd:sequence>
						</xsd:complexType>
					</xsd:element>
				</xsd:sequence>
			</xsd:extension>
		</xsd:complexContent>
	</xsd:complexType>
	<xsd:complexType name="StudentType">
		<xsd:complexContent>
			<xsd:extension base="Individual">
				<xsd:sequence>
					<xsd:element name="Class">
						<xsd:simpleType>
							<xsd:restriction base="xsd:string">
								<xsd:enumeration value="Freshman"/>
								<xsd:enumeration value="Sophomore"/>
								<xsd:enumeration value="Junior"/>
								<xsd:enumeration value="Senior"/>
								<xsd:enumeration value="Graduate"/>
							</xsd:restriction>
						</xsd:simpleType>
					</xsd:element>
					<xsd:element name="Department" type="xsd:string"/>
					<xsd:element name="Schedule" type="Schedule" minOccurs="0"/>
				</xsd:sequence>
			</xsd:extension>
		</xsd:complexContent>
	</xsd:complexType>
	<xsd:complexType name="Employee">
		<xsd:complexContent>
			<xsd:extension base="Individual">
				<xsd:sequence>
					<xsd:element name="SalaryInfo" minOccurs="0">
						<xsd:complexType>
							<xsd:sequence>
								<xsd:element name="BankName" type="xsd:string" minOccurs="0"/>
								<xsd:element name="AccountNumber" type="xsd:string" minOccurs="0"/>
								<xsd:element name="Amount" type="xsd:nonNegativeInteger"/>
							</xsd:sequence>
							<xsd:attribute name="paymenttype" use="required">
								<xsd:simpleType>
									<xsd:restriction base="xsd:string">
										<xsd:enumeration value="check"/>
										<xsd:enumeration value="deposit"/>
									</xsd:restriction>
								</xsd:simpleType>
							</xsd:attribute>
						</xsd:complexType>
					</xsd:element>
					<xsd:element name="JobTitle">
						<xsd:simpleType>
							<xsd:restriction base="xsd:string">
								<xsd:enumeration value="Chair"/>
								<xsd:enumeration value="Professor"/>
								<xsd:enumeration value="Associate Professor"/>
								<xsd:enumeration value="Assistant Professor"/>
								<xsd:enumeration value="Instructor"/>
								<xsd:enumeration value="Staff"/>
							</xsd:restriction>
						</xsd:simpleType>
					</xsd:element>
				</xsd:sequence>
			</xsd:extension>
		</xsd:complexContent>
	</xsd:complexType>
	<xsd:complexType name="Faculty">
		<xsd:complexContent>
			<xsd:extension base="Employee">
				<xsd:sequence>
					<xsd:element name="Schedule" type="Schedule" minOccurs="0"/>
					<xsd:element name="Room" type="xsd:string" minOccurs="0"/>
					<xsd:element name="OfficeHours" type="xsd:string" minOccurs="0"/>
				</xsd:sequence>
			</xsd:extension>
		</xsd:complexContent>
	</xsd:complexType>
	<xsd:element name="Department">
		<xsd:complexType>
			<xsd:complexContent>
				<xsd:extension base="BaseXMLObject">
					<xsd:sequence>
						<xsd:element name="Title" type="xsd:string"/>
						<xsd:element name="ContactInfo" type="ContactInfo" minOccurs="0"/>
						<xsd:element name="Faculty" minOccurs="0">
							<xsd:complexType>
								<xsd:sequence>
									<xsd:element name="Person" type="Faculty" minOccurs="0" maxOccurs="unbounded"/>
								</xsd:sequence>
							</xsd:complexType>
						</xsd:element>
						<xsd:element name="CourseOfferings" minOccurs="0">
							<xsd:complexType>
								<xsd:sequence>
									<xsd:element name="Term">
										<xsd:complexType>
											<xsd:sequence>
												<xsd:element name="Course" type="Section" minOccurs="0" maxOccurs="unbounded"/>
											</xsd:sequence>
											<xsd:attributeGroup ref="TermInfo"/>
										</xsd:complexType>
									</xsd:element>
								</xsd:sequence>
							</xsd:complexType>
						</xsd:element>
						<xsd:element name="Students" minOccurs="0">
							<xsd:complexType>
								<xsd:sequence>
									<xsd:element name="Student" type="StudentType" minOccurs="0" maxOccurs="unbounded"/>
								</xsd:sequence>
							</xsd:complexType>
						</xsd:element>
						<xsd:element name="DeptStaff" minOccurs="0">
							<xsd:complexType>
								<xsd:sequence>
									<xsd:element name="Staff" type="Employee" minOccurs="0" maxOccurs="unbounded"/>
								</xsd:sequence>
							</xsd:complexType>
						</xsd:element>
					</xsd:sequence>
					<xsd:attribute name="code" type="xsd:string" use="required"/>
				</xsd:extension>
			</xsd:complexContent>
		</xsd:complexType>
	</xsd:element>
	<xsd:attributeGroup name="TermInfo">
		<xsd:attribute name="semester" use="required">
			<xsd:simpleType>
				<xsd:restriction base="xsd:string">
					<xsd:enumeration value="Fall"/>
					<xsd:enumeration value="Spring"/>
					<xsd:enumeration value="Summer"/>
				</xsd:restriction>
			</xsd:simpleType>
		</xsd:attribute>
		<xsd:attribute name="year" use="required">
			<xsd:simpleType>
				<xsd:restriction base="xsd:string">
					<xsd:pattern value="\d{2}"/>
				</xsd:restriction>
			</xsd:simpleType>
		</xsd:attribute>
	</xsd:attributeGroup>
</xsd:schema>
