<?xml version="1.0" encoding="UTF-8"?>

<xs:schema
  version         = "1.0"
  xmlns:xs        = "http://www.w3.org/2001/XMLSchema"
  targetNamespace = "http://www.nrao.edu/namespaces/sss"
  xmlns:sss       = "http://www.nrao.edu/namespaces/sss"
  elementFormDefault = "qualified">

  <!-- ================================================== -->
  <!-- ||||||||||||||||  COMPLEX TYPES  ||||||||||||||||| -->
  <!-- ================================================== -->


  <xs:group name="userTrackable">
    <xs:sequence>
      <xs:element name="createdBy"     type="xs:long"    />
      <xs:element name="createdOn"     type="xs:dateTime"/>
      <xs:element name="lastUpdatedBy" type="xs:long"    />
      <xs:element name="lastUpdatedOn" type="xs:dateTime"/>
    </xs:sequence>
  </xs:group>
                                                           
  <xs:complexType name="userPriorityPair">
    <xs:attribute name="userId" type="xs:long" use="required"/>
    <xs:attribute name="value"  type="xs:int"  use="required"/>
  </xs:complexType>
                          
  <xs:complexType name="userPriorityList">
    <xs:sequence minOccurs="1" maxOccurs="unbounded">
      <xs:element name="userPriority" type="sss:userPriorityPair"/>
    </xs:sequence>
  </xs:complexType>
              
  <xs:complexType name="noteList">
    <xs:sequence minOccurs="0" maxOccurs="unbounded">
      <xs:element name="note" type="xs:string"/>
    </xs:sequence>
  </xs:complexType>
                                
  <xs:complexType name="keyValueStringString">
    <xs:attribute name="key"   type="xs:string" use="required"/>
    <xs:attribute name="value" type="xs:string" use="required"/>
  </xs:complexType>
            
  <xs:complexType name="userDefinedValueList">
    <xs:sequence minOccurs="1" maxOccurs="unbounded">
      <xs:element name="userDefinedValue" type="sss:keyValueStringString"/>
    </xs:sequence>
  </xs:complexType>
  
  <!-- ================================================== -->
  <!-- ||||||||||||||||  SIMPLE TYPES  |||||||||||||||||| -->
  <!-- ================================================== -->

  <xs:simpleType name="positiveInt">
    <xs:restriction base="xs:int">
      <xs:minInclusive value="1"/>
    </xs:restriction>
  </xs:simpleType>

  <xs:simpleType name="nonNegativeDouble">
    <xs:restriction base="xs:double">
      <xs:minInclusive value="0.0"/>
    </xs:restriction>
  </xs:simpleType>

  <xs:simpleType name="nonNegativeDecimal">
    <xs:restriction base="xs:decimal">
      <xs:minInclusive value="0.0"/>
    </xs:restriction>
  </xs:simpleType>
  
  <xs:simpleType name="textList">
    <xs:list itemType="xs:string"/>
  </xs:simpleType>
  
  <!--
     We wish to restrict the characters for the names of some objects
     in our model.  Note that human names are NOT such objects.
    -->
  <xs:simpleType name="nameString">
    <xs:restriction base="xs:string">
      <xs:pattern value="[a-zA-Z0-9 #_=\(\)\[\]/\.\-\+\*]*"/>
    </xs:restriction>
  </xs:simpleType>
  
  <!-- ================================================== -->
  <!-- ||||||||||||||||  ENUMERATIONS  |||||||||||||||||| -->
  <!-- ================================================== -->
      
  <xs:simpleType name="eventStatus">
    <xs:restriction base="xs:string">
      <xs:enumeration value="NOT_READY_TO_BE_SCHEDULED"/>
      <xs:enumeration value="NOT_YET_SCHEDULED"/>
      <xs:enumeration value="SCHEDULED_BUT_NOT_STARTED"/>
      <xs:enumeration value="IN_PROGRESS"/>
      <xs:enumeration value="COMPLETED"/>
      <xs:enumeration value="ON_HOLD"/>
      <xs:enumeration value="CANCELED"/>
    </xs:restriction>
  </xs:simpleType>
      
  <xs:simpleType name="eventSetStatus">
    <xs:restriction base="xs:string">
      <xs:enumeration value="NOT_READY_TO_BE_SCHEDULED"/>
      <xs:enumeration value="NOT_YET_SCHEDULED"/>
      <xs:enumeration value="SCHEDULED_BUT_NOT_STARTED"/>
      <xs:enumeration value="UNDER_WAY"/>
      <xs:enumeration value="IN_PROGRESS"/>
      <xs:enumeration value="COMPLETED"/>
      <xs:enumeration value="ON_HOLD"/>
      <xs:enumeration value="CANCELED"/>
    </xs:restriction>
  </xs:simpleType>

</xs:schema>
