<?xml version="1.0" encoding="UTF-8"?>
<xs:schema xmlns:xs="http://www.w3.org/2001/XMLSchema" elementFormDefault="qualified">
  <xs:element name="unmschedule">
    <xs:complexType>
      <xs:sequence>
        <xs:element ref="usage"/>
        <xs:element ref="lookups"/>
        <xs:element ref="semester"/>
      </xs:sequence>
      <xs:attribute name="pubdate" use="required" type="xs:NMTOKEN"/>
      <xs:attribute name="source" use="required" type="xs:NCName"/>
      <xs:attribute name="version" use="required" type="xs:NMTOKEN"/>
    </xs:complexType>
  </xs:element>
  <xs:element name="usage">
    <xs:complexType>
      <xs:sequence>
        <xs:element ref="guideline"/>
      </xs:sequence>
    </xs:complexType>
  </xs:element>
  <xs:element name="guideline">
    <xs:complexType>
      <xs:attribute name="url" use="required" type="xs:anyURI"/>
    </xs:complexType>
  </xs:element>
  <xs:element name="lookups">
    <xs:complexType>
      <xs:sequence>
        <xs:element ref="parts-of-term"/>
        <xs:element ref="statuses"/>
      </xs:sequence>
    </xs:complexType>
  </xs:element>
  <xs:element name="parts-of-term">
    <xs:complexType>
      <xs:sequence>
        <xs:element maxOccurs="unbounded" ref="part-of-term"/>
      </xs:sequence>
    </xs:complexType>
  </xs:element>
  <xs:element name="part-of-term">
    <xs:complexType mixed="true">
      <xs:attribute name="code" use="required" type="xs:NMTOKEN"/>
    </xs:complexType>
  </xs:element>
  <xs:element name="statuses">
    <xs:complexType>
      <xs:sequence>
        <xs:element maxOccurs="unbounded" ref="status"/>
      </xs:sequence>
    </xs:complexType>
  </xs:element>
  <xs:element name="status">
    <xs:complexType mixed="true">
      <xs:attribute name="code" use="required" type="xs:NCName"/>
    </xs:complexType>
  </xs:element>
  <xs:element name="semester">
    <xs:complexType>
      <xs:sequence>
        <xs:element maxOccurs="unbounded" ref="campus"/>
      </xs:sequence>
      <xs:attribute name="code" use="required" type="xs:integer"/>
      <xs:attribute name="index" use="required" type="xs:integer"/>
      <xs:attribute name="name" use="required"/>
    </xs:complexType>
  </xs:element>
  <xs:element name="campus">
    <xs:complexType>
      <xs:sequence>
        <xs:element maxOccurs="unbounded" ref="college"/>
      </xs:sequence>
      <xs:attribute name="code" use="required" type="xs:NCName"/>
      <xs:attribute name="name" use="required"/>
    </xs:complexType>
  </xs:element>
  <xs:element name="college">
    <xs:complexType>
      <xs:sequence>
        <xs:element maxOccurs="unbounded" ref="department"/>
      </xs:sequence>
      <xs:attribute name="code" use="required" type="xs:NCName"/>
      <xs:attribute name="name" use="required"/>
    </xs:complexType>
  </xs:element>
  <xs:element name="department">
    <xs:complexType>
      <xs:sequence>
        <xs:element maxOccurs="unbounded" ref="subject"/>
      </xs:sequence>
      <xs:attribute name="code" use="required" type="xs:NMTOKEN"/>
      <xs:attribute name="name" use="required"/>
    </xs:complexType>
  </xs:element>
  <xs:element name="subject">
    <xs:complexType>
      <xs:sequence>
        <xs:element maxOccurs="unbounded" ref="course"/>
      </xs:sequence>
      <xs:attribute name="code" use="required" type="xs:NCName"/>
      <xs:attribute name="name" use="required"/>
    </xs:complexType>
  </xs:element>
  <xs:element name="course">
    <xs:complexType>
      <xs:sequence>
        <xs:element ref="catalog-description"/>
        <xs:element maxOccurs="unbounded" ref="section"/>
      </xs:sequence>
      <xs:attribute name="number" use="required" type="xs:NMTOKEN"/>
      <xs:attribute name="title" use="required"/>
    </xs:complexType>
  </xs:element>
  <xs:element name="catalog-description" type="xs:string"/>
  <xs:element name="section">
    <xs:complexType>
      <xs:sequence>
        <xs:sequence minOccurs="0">
          <xs:element ref="section-title"/>
          <xs:element ref="text"/>
          <xs:element ref="instructional-method"/>
          <xs:element ref="delivery-type"/>
          <xs:element ref="enrollment"/>
          <xs:element ref="waitlist"/>
          <xs:element ref="credits"/>
          <xs:element ref="fees"/>
          <xs:element ref="instructors"/>
          <xs:element ref="meeting-times"/>
        </xs:sequence>
        <xs:element minOccurs="0" ref="crosslists"/>
      </xs:sequence>
      <xs:attribute name="crn" use="required" type="xs:integer"/>
      <xs:attribute name="number" use="required" type="xs:NMTOKEN"/>
      <xs:attribute name="part-of-term" type="xs:NMTOKEN"/>
      <xs:attribute name="status" type="xs:NCName"/>
      <xs:attribute name="subject" type="xs:NCName"/>
    </xs:complexType>
  </xs:element>
  <xs:element name="section-title" type="xs:string"/>
  <xs:element name="text" type="xs:string"/>
  <xs:element name="instructional-method">
    <xs:complexType mixed="true">
      <xs:attribute name="code" use="required"/>
    </xs:complexType>
  </xs:element>
  <xs:element name="delivery-type">
    <xs:complexType mixed="true">
      <xs:attribute name="code" use="required" type="xs:NCName"/>
    </xs:complexType>
  </xs:element>
  <xs:element name="enrollment">
    <xs:complexType>
      <xs:simpleContent>
        <xs:extension base="xs:integer">
          <xs:attribute name="max" use="required" type="xs:integer"/>
        </xs:extension>
      </xs:simpleContent>
    </xs:complexType>
  </xs:element>
  <xs:element name="waitlist">
    <xs:complexType>
      <xs:simpleContent>
        <xs:extension base="xs:integer">
          <xs:attribute name="max" use="required" type="xs:integer"/>
        </xs:extension>
      </xs:simpleContent>
    </xs:complexType>
  </xs:element>
  <xs:element name="credits" type="xs:string"/>
  <xs:element name="fees" type="xs:decimal"/>
  <xs:element name="instructors">
    <xs:complexType>
      <xs:sequence>
        <xs:element minOccurs="0" maxOccurs="unbounded" ref="instructor"/>
      </xs:sequence>
    </xs:complexType>
  </xs:element>
  <xs:element name="instructor">
    <xs:complexType>
      <xs:sequence>
        <xs:element ref="first"/>
        <xs:element ref="last"/>
        <xs:element ref="middleInitial"/>
        <xs:element ref="email"/>
      </xs:sequence>
      <xs:attribute name="primary" use="required" type="xs:NCName"/>
    </xs:complexType>
  </xs:element>
  <xs:element name="first" type="xs:string"/>
  <xs:element name="last" type="xs:string"/>
  <xs:element name="middleInitial" type="xs:string"/>
  <xs:element name="email" type="xs:string"/>
  <xs:element name="meeting-times">
    <xs:complexType>
      <xs:sequence>
        <xs:element minOccurs="0" maxOccurs="unbounded" ref="meeting-time"/>
      </xs:sequence>
    </xs:complexType>
  </xs:element>
  <xs:element name="meeting-time">
    <xs:complexType>
      <xs:sequence>
        <xs:element ref="start-date"/>
        <xs:element ref="end-date"/>
        <xs:element ref="days"/>
        <xs:element ref="start-time"/>
        <xs:element ref="end-time"/>
        <xs:element ref="bldg"/>
        <xs:element minOccurs="0" ref="room"/>
      </xs:sequence>
    </xs:complexType>
  </xs:element>
  <xs:element name="start-date" type="xs:date"/>
  <xs:element name="end-date" type="xs:date"/>
  <xs:element name="days">
    <xs:complexType>
      <xs:sequence>
        <xs:element minOccurs="0" maxOccurs="unbounded" ref="day"/>
      </xs:sequence>
    </xs:complexType>
  </xs:element>
  <xs:element name="day" type="xs:NCName"/>
  <xs:element name="start-time" type="xs:string"/>
  <xs:element name="end-time" type="xs:string"/>
  <xs:element name="bldg">
    <xs:complexType mixed="true">
      <xs:attribute name="code" use="required"/>
    </xs:complexType>
  </xs:element>
  <xs:element name="room" type="xs:string"/>
  <xs:element name="crosslists">
    <xs:complexType>
      <xs:sequence>
        <xs:element minOccurs="0" maxOccurs="unbounded" ref="section"/>
      </xs:sequence>
    </xs:complexType>
  </xs:element>
</xs:schema>
