<xsd:schema xmlns:xsd="http://www.w3.org/2000/10/XMLSchema">
  <xsd:element name="CONTROLSCHEDULE">
    <xsd:complexType>
      <xsd:sequence>
        <xsd:element ref="MODULE" minOccurs="0" maxOccurs="unbounded"/>
        <xsd:element ref="STATE" minOccurs="0" maxOccurs="unbounded"/>
        <xsd:element ref="TRIGGER" minOccurs="0" maxOccurs="unbounded"/>
      </xsd:sequence>
    </xsd:complexType>
  </xsd:element>
  <xsd:element name="MODULE">
    <xsd:complexType>
      <xsd:sequence>
        <xsd:element ref="ADDRESS"/>
        <xsd:element ref="TYPE" minOccurs="0"/>
        <xsd:element ref="DESCRIPTION" minOccurs="0"/>
      </xsd:sequence>
    </xsd:complexType>
  </xsd:element>
  <xsd:element name="ADDRESS">
    <xsd:complexType>
      <xsd:sequence>
        <xsd:element ref="HOUSE"/>
        <xsd:element ref="UNIT"/>
      </xsd:sequence>
    </xsd:complexType>
  </xsd:element>
  <xsd:element name="HOUSE" type="xsd:string"/>
  <xsd:element name="UNIT" type="xsd:integer"/>
  <xsd:element name="TYPE" type="xsd:string"/>
  <xsd:element name="DESCRIPTION" type="xsd:string"/>
  <xsd:element name="STATE">
    <xsd:complexType>
      <xsd:sequence>
        <xsd:element ref="NAME"/>
        <xsd:element ref="DESCRIPTION" minOccurs="0"/>
        <xsd:element ref="COMPONENT" maxOccurs="unbounded"/>
      </xsd:sequence>
    </xsd:complexType>
  </xsd:element>
  <xsd:element name="COMPONENT">
    <xsd:complexType>
      <xsd:sequence>
        <xsd:element ref="DESCRIPTION" minOccurs="0"/>
        <xsd:element ref="ADDRESS"/>
        <xsd:element ref="POSITION"/>
      </xsd:sequence>
    </xsd:complexType>
  </xsd:element>
  <xsd:element name="POSITION" type="xsd:string"/>
  <xsd:element name="TRIGGER">
    <xsd:complexType>
      <xsd:sequence>
        <xsd:element ref="STATENAME"/>
        <xsd:element ref="TIMED" minOccurs="0" maxOccurs="unbounded"/>
        <xsd:element ref="SWITCH" minOccurs="0" maxOccurs="unbounded"/>
      </xsd:sequence>
    </xsd:complexType>
  </xsd:element>
  <xsd:element name="STATENAME" type="xsd:string"/>
  <xsd:element name="TIMED">
    <xsd:complexType>
      <xsd:sequence>
        <xsd:choice>
          <xsd:element ref="DAILY"/>
          <xsd:element ref="WEEKLY"/>
          <xsd:element ref="DATE"/>
        </xsd:choice>
        <xsd:element ref="TIME"/>
      </xsd:sequence>
    </xsd:complexType>
  </xsd:element>

  <xsd:element name="DAILY">
    <xsd:complexType>
      <xsd:sequence/> <!-- Empty element -->?
    </xsd:complexType>
  </xsd:element>
  <xsd:element name="WEEKLY">
    <xsd:complexType>
      <xsd:sequence>
        <xsd:element ref="WEEKDAY" minOccurs="0" maxOccurs="7"/> <!--Limited to 7 days -->
      </xsd:sequence>
    </xsd:complexType>
  </xsd:element>
  <xsd:element name="WEEKDAY">
    <xsd:simpleType>
      <xsd:restriction base = "xsd:string">
         <xsd:enumeration value = "MON"/> 
         <xsd:enumeration value = "TUES"/>
         <xsd:enumeration value = "WED"/>
         <xsd:enumeration value = "THURS"/>
         <xsd:enumeration value = "FRI"/>
         <xsd:enumeration value = "SAT"/>
         <xsd:enumeration value = "SUN"/>
      </xsd:restriction>
    </xsd:simpleType>
  </xsd:element>
  <xsd:element name="DATE" type="xsd:recurringDate"/>
  <xsd:element name="TIME" type="xsd:time"/>
  <xsd:element name="SWITCH" type="xsd:string"/>
  <xsd:element name="NAME" type="xsd:string"/>
</xsd:schema>
