<?xml version="1.0" encoding="UTF-8"?>
<xs:schema xmlns:entites="http://www.slc.co.uk/course/entities/1.0" xmlns:types="http://www.slc.co.uk/course/types/1.0" xmlns:xs="http://www.w3.org/2001/XMLSchema" targetNamespace="http://www.slc.co.uk/course/entities/1.0" elementFormDefault="unqualified" attributeFormDefault="unqualified">
	<xs:annotation>
		<xs:documentation>SLC Course Database Schema</xs:documentation>
		<xs:documentation>Author: John McTeague</xs:documentation>
		<xs:documentation>Version: 1.0</xs:documentation>
		<xs:documentation>Simple schema based on existing DB schema</xs:documentation>
	</xs:annotation>
	<xs:import namespace="http://www.slc.co.uk/course/types/1.0" schemaLocation="./HEICourseDatabaseTypes.xsd"/>
	<xs:complexType name="institution">
		<xs:annotation>
			<xs:documentation>
				Top level element for describing a higher education institution. The high level institution details are
				common across all academic years.
			</xs:documentation>
		</xs:annotation>
		<xs:sequence>
			<xs:element name="heiCode" type="types:heiCode"/>
			<xs:element name="fullName" type="types:institutionFullName"/>
			<xs:element name="shortName" type="types:institutionShortName"/>
			<xs:element name="country" type="types:institutionCountry" minOccurs="0"/>
            <xs:element name="ucasCollegeCode" type="types:ucasCollegeCode" minOccurs="0"/>
			<xs:element name="location" type="entites:location" minOccurs="0" maxOccurs="unbounded"/>
			<xs:element name="institutionYear" type="entites:institutionYear" minOccurs="0"/>
			<xs:element name="course" type="entites:course" minOccurs="0" maxOccurs="unbounded"/>
			<xs:element name="liveDate" type="types:timeStamp" minOccurs="0"/>	
			<xs:element name="lastUpdatedDateTime" type="types:timeStamp" minOccurs="0" maxOccurs="1"/>		
		</xs:sequence>
	</xs:complexType>
	<xs:complexType name="course">
		<xs:annotation>
			<xs:documentation>
				Element representing a course at an institution. Each course can be run over multiple academic years,
				for multiple years of study within that academic year, and within that year there may be multiple terms.
			</xs:documentation>
		</xs:annotation>
		<xs:sequence>
			<xs:element name="slcCourseCode" type="types:slcCourseCode" minOccurs="0"/>
			<xs:element name="code" type="types:code" minOccurs="0" maxOccurs="unbounded"/>
			<xs:element name="title" type="types:courseTitle" minOccurs="0"/>
			<xs:element name="shortName" type="types:courseShortName"/>
			<xs:element name="description" type="types:courseDescription" minOccurs="0"/>
			<xs:element name="duration" type="types:courseDuration" minOccurs="0"/>
			<xs:element name="type" type="types:courseTypes"/>
			<xs:element name="qualification" type="types:qualificationCode" minOccurs="0"/>
			<xs:element name="methodOfAttendance" type="types:methodOfAttendance"/>
			<xs:element name="status" type="types:courseStatus"/>
			<xs:element name="ucasCourse" type="types:yesNo" minOccurs="0"/>
			<xs:element name="ucasSuffix" type="types:campus" minOccurs="0"/>
			<xs:element name="lastUpdatedDateTime" type="types:timeStamp" minOccurs="0" maxOccurs="1"/>
			<xs:element name="courseAcademicYear" type="entites:courseAcademicYear" minOccurs="0"/>
			<xs:element name="liveDate" type="types:timeStamp" minOccurs="0"/>	
			<xs:element name="heiCourseCode" type="types:courseHeiCourseCode" minOccurs="0"/>					
		</xs:sequence>
	</xs:complexType>
	<xs:complexType name="courseAcademicYear">
		<xs:annotation>
			<xs:documentation>
				Element representing a course at an institution. Each course can be run over multiple academic years,
				for multiple years of study within that academic year, and within that year there may be multiple terms.
			</xs:documentation>
		</xs:annotation>
		<xs:sequence>
			<xs:element name="courseYear" type="entites:courseYear" minOccurs="0" maxOccurs="unbounded"/>
			<xs:element name="academicYear" type="types:academicYear"/>
		</xs:sequence>
	</xs:complexType>
	<xs:complexType name="courseYear">
		<xs:annotation>
			<xs:documentation>Information about a course that varies year on year</xs:documentation>
		</xs:annotation>
		<xs:sequence>
			<xs:element name="yearOfStudy" type="types:courseYearYearOfStudy"/>
			<xs:element name="feeCap" type="types:courseYearFeeCap" minOccurs="0"/>
			<xs:element name="term" type="entites:courseTerm" minOccurs="0" maxOccurs="unbounded"/>
			<xs:element name="liveDate" type="types:timeStamp" minOccurs="0"/>	
		</xs:sequence>
	</xs:complexType>
	<xs:complexType name="courseTerm">
		<xs:annotation>
			<xs:documentation>
			    A term has a number, start and end dates.
			    Note that the campus element identifies the location at which
			    the course term takes place and must refer to a pre-existing location
			    entity.
			</xs:documentation>
		</xs:annotation>
		<xs:sequence>
			<xs:element name="number" type="types:courseTermNumber"/>
			<xs:element name="campus" type="types:campus"/>
			<xs:element name="start" type="types:date" minOccurs="0"/>
			<xs:element name="end" type="types:date" minOccurs="0"/>
			<xs:element name="liveDate" type="types:timeStamp" minOccurs="0"/>	
		</xs:sequence>
	</xs:complexType>
	<xs:complexType name="institutionYear">
		<xs:annotation>
			<xs:documentation>Information about an institution that can vary year on year</xs:documentation>
		</xs:annotation>
		<xs:sequence>
			<xs:element name="academicYear" type="types:academicYear"/>
			<xs:element name="variableFees" type="types:yesNo"/>
			<xs:element name="feeCap" type="types:institutionYearFeeCap" minOccurs="0"/>
			<xs:element name="predictedNumberOfCourses" type="types:institutionYearPredictedNumberOfCourses" minOccurs="0"/>
			<xs:element name="lastUpdatedDateTime" type="types:timeStamp" minOccurs="0" maxOccurs="1"/>
			<xs:element name="liveDate" type="types:timeStamp" minOccurs="0"/>	
		</xs:sequence>
	</xs:complexType>
	<xs:complexType name="location">
		<xs:annotation>
			<xs:documentation>
				A location for an institution. Does not vary year on year, is simply active or not. There should only be
				one location that is primary
			</xs:documentation>
		</xs:annotation>
		<xs:sequence>
			<xs:element name="heiCode" type="types:heiCode"/>
			<xs:element name="campus" type="types:campus"/>
			<xs:element name="franchise" type="types:yesNo"/>
			<xs:element name="primary" type="types:yesNo"/>
			<xs:element name="name" type="types:locationName"/>
			<xs:element name="addressLine1" type="types:locationAddressLine" minOccurs="0"/>
			<xs:element name="addressLine2" type="types:locationAddressLine" minOccurs="0"/>
			<xs:element name="addressLine3" type="types:locationAddressLine" minOccurs="0"/>
			<xs:element name="addressLine4" type="types:locationAddressLine" minOccurs="0"/>
			<xs:element name="addressLine5" type="types:locationAddressLine" minOccurs="0"/>
			<xs:element name="postCode" type="types:postcode" minOccurs="0"/>
			<xs:element name="phoneNumber" type="types:phoneNumber" minOccurs="0"/>
			<xs:element name="faxNumber" type="types:phoneNumber" minOccurs="0"/>
			<xs:element name="emailAddress" type="types:emailAddress" minOccurs="0"/>
			<xs:element name="active" type="types:yesNo" minOccurs="0"/>
			<xs:element name="lastUpdatedDateTime" type="types:timeStamp" minOccurs="0" maxOccurs="1"/>
			<xs:element name="liveDate" type="types:timeStamp" minOccurs="0"/>				
		</xs:sequence>
	</xs:complexType>
	<xs:complexType name="qualification">
		<xs:annotation>
			<xs:documentation>
				A qualification that is attained as a result of successfully attending a course.
			</xs:documentation>
		</xs:annotation>
		<xs:sequence>
			<xs:element name="code" type="types:qualificationCode"/>
			<xs:element name="description" type="types:qualificationDescription"/>
		</xs:sequence>
	</xs:complexType>
</xs:schema>

