<!--
		SIF Implementation Specification (United Kingdom) 1.3 (July 5, 2010) Infrastructure Version: 2.4
	-->
<xs:schema xmlns:xs="http://www.w3.org/2001/XMLSchema" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" targetNamespace="http://www.sifinfo.org/infrastructure/2.x" xmlns:sif="http://www.sifinfo.org/infrastructure/2.x" elementFormDefault="qualified">
  <xs:import namespace="http://www.w3.org/XML/1998/namespace" schemaLocation="imports/xml/xml.xsd" />

  <!--Infrastructure Common Elements-->


  <!--SIF_Message-->

  <xs:complexType name="SIF_MessageType">
    <xs:annotation>
      <xs:documentation>Contains one of the SIF message types.</xs:documentation>
    </xs:annotation>
    <xs:choice>
      <xs:element ref="sif:SIF_Ack" />
      <xs:element ref="sif:SIF_Event" />
      <xs:element ref="sif:SIF_Provide" />
      <xs:element ref="sif:SIF_Provision" />
      <xs:element ref="sif:SIF_Register" />
      <xs:element ref="sif:SIF_Request" />
      <xs:element ref="sif:SIF_Response" />
      <xs:element ref="sif:SIF_Subscribe" />
      <xs:element ref="sif:SIF_SystemControl" />
      <xs:element ref="sif:SIF_Unprovide" />
      <xs:element ref="sif:SIF_Unregister" />
      <xs:element ref="sif:SIF_Unsubscribe" />
      <xs:element ref="sif:SIF_ServiceInput" />
      <xs:element ref="sif:SIF_ServiceOutput" />
      <xs:element ref="sif:SIF_ServiceNotify" />
    </xs:choice>
    <!--<xs:attribute name="xmlns" use="optional" type="xs:anyURI">
  <xs:annotation>
    <xs:documentation>
            The xmlns attribute specifies the XML namespace for SIF messages.
            For this version of the specification, the value of this attribute MUST be 
              
              http://www.sifinfo.org/uk/infrastructure/2.x
            . This XML namespace value will remain the same until the next major release of SIF (3.0).
          </xs:documentation>
  </xs:annotation>
</xs:attribute>-->
    <xs:attribute name="Version" use="required" type="sif:VersionType">
      <xs:annotation>
        <xs:documentation>
            The version of the SIF Implementation Specification that defines this message's XML structure.
            For this version of the specification, the value of this attribute is 2.4.
            This attribute can be used by ZIS and agent implementations to choose schema files to
            validate the message's XML.
          </xs:documentation>
      </xs:annotation>
    </xs:attribute>
  </xs:complexType>

  <xs:element name="SIF_Message" type="sif:SIF_MessageType" />


  <!--SIF_Header-->

  <xs:complexType name="SIF_HeaderType">
    <xs:annotation>
      <xs:documentation>Header information associated with a message.</xs:documentation>
    </xs:annotation>
    <xs:sequence>
      <xs:element name="SIF_MsgId" type="sif:MsgIdType">
        <xs:annotation>
          <xs:documentation>SIF_MsgId is a globally unique message identifier from the Agent or ZIS that sends out the message.
          </xs:documentation>
        </xs:annotation>
      </xs:element>
      <xs:element name="SIF_Timestamp" type="xs:dateTime">
        <xs:annotation>
          <xs:documentation>Timestamp of when the message was sent.</xs:documentation>
        </xs:annotation>
      </xs:element>
      <xs:element name="SIF_Security" minOccurs="0">
        <xs:complexType>
          <xs:sequence>
            <xs:element name="SIF_SecureChannel">
              <xs:complexType>
                <xs:sequence>
                  <xs:element ref="sif:SIF_AuthenticationLevel" />
                  <xs:element ref="sif:SIF_EncryptionLevel" />
                </xs:sequence>
              </xs:complexType>
            </xs:element>
          </xs:sequence>
        </xs:complexType>
      </xs:element>
      <xs:element name="SIF_SourceId">
        <xs:simpleType>
          <xs:restriction base="xs:token">
            <xs:annotation>
              <xs:documentation>
            The SIF_SourceId is the ID of the originator of the message. Each source needs to have a zone unique case-sensitive identifier.
          </xs:documentation>
            </xs:annotation>
            <xs:maxLength value="64" xmlns:xs="http://www.w3.org/2001/XMLSchema" />
          </xs:restriction>
        </xs:simpleType>
      </xs:element>
      <xs:element name="SIF_DestinationId" minOccurs="0">
        <xs:simpleType>
          <xs:restriction base="xs:token">
            <xs:annotation>
              <xs:documentation>This element represents the ID of the recipient of the message and may be present as follows:</xs:documentation>
            </xs:annotation>
            <xs:maxLength value="64" xmlns:xs="http://www.w3.org/2001/XMLSchema" />
          </xs:restriction>
        </xs:simpleType>
      </xs:element>
      <xs:element ref="sif:SIF_Contexts" minOccurs="0" />
      <xs:element name="SIF_TargetedEventDistribution" minOccurs="0">
        <xs:complexType>
          <xs:sequence>
            <xs:element name="SIF_SourceIdList" maxOccurs="unbounded" type="sif:SIF_SourceIdType">
              <xs:annotation>
                <xs:documentation>Agent  SourceIdList.</xs:documentation>
              </xs:annotation>
            </xs:element>
          </xs:sequence>
        </xs:complexType>
      </xs:element>
    </xs:sequence>
  </xs:complexType>

  <xs:element name="SIF_Header" type="sif:SIF_HeaderType" />


  <!--SIF_EncryptionLevel-->

  <xs:simpleType name="SIF_EncryptionLevelType">
    <xs:restriction base="xs:unsignedInt">
      <xs:annotation>
        <xs:documentation>The minimum level of encryption required by the message originator to be considered a secure channel upon message delivery to other agents.</xs:documentation>
      </xs:annotation>
      <xs:enumeration value="0">
        <xs:annotation>
          <xs:documentation>No encryption required</xs:documentation>
        </xs:annotation>
      </xs:enumeration>
      <xs:enumeration value="1">
        <xs:annotation>
          <xs:documentation>Symmetric key length of at least 40 bits is to be used</xs:documentation>
        </xs:annotation>
      </xs:enumeration>
      <xs:enumeration value="2">
        <xs:annotation>
          <xs:documentation>Symmetric key length of at least 56 bits is to be used</xs:documentation>
        </xs:annotation>
      </xs:enumeration>
      <xs:enumeration value="3">
        <xs:annotation>
          <xs:documentation>Symmetric key length of at least 80 bits is to be used</xs:documentation>
        </xs:annotation>
      </xs:enumeration>
      <xs:enumeration value="4">
        <xs:annotation>
          <xs:documentation>Symmetric key length of at least 128 bits is to be used</xs:documentation>
        </xs:annotation>
      </xs:enumeration>
    </xs:restriction>
  </xs:simpleType>

  <xs:element name="SIF_EncryptionLevel" type="sif:SIF_EncryptionLevelType" />


  <!--SIF_AuthenticationLevel-->

  <xs:simpleType name="SIF_AuthenticationLevelType">
    <xs:restriction base="xs:unsignedInt">
      <xs:annotation>
        <xs:documentation>The minimum level of authentication required by the message originator to be considered a secure channel upon message delivery to other agents.</xs:documentation>
      </xs:annotation>
      <xs:enumeration value="0">
        <xs:annotation>
          <xs:documentation>No authentication required and a valid certificate does not need to be presented.</xs:documentation>
        </xs:annotation>
      </xs:enumeration>
      <xs:enumeration value="1">
        <xs:annotation>
          <xs:documentation>A valid certificate must be presented.</xs:documentation>
        </xs:annotation>
      </xs:enumeration>
      <xs:enumeration value="2">
        <xs:annotation>
          <xs:documentation>
              A valid certificate from a trusted certificate
              authority must be presented.
            </xs:documentation>
        </xs:annotation>
      </xs:enumeration>
      <xs:enumeration value="3">
        <xs:annotation>
          <xs:documentation>
              A valid certificate from a trusted certificate
              authority must be presented and the CN field of the certificate's
              Subject entry must match the host sending the certificate.
            </xs:documentation>
        </xs:annotation>
      </xs:enumeration>
    </xs:restriction>
  </xs:simpleType>

  <xs:element name="SIF_AuthenticationLevel" type="sif:SIF_AuthenticationLevelType" />


  <!--SIF_Contexts-->

  <xs:complexType name="SIF_ContextsType">
    <xs:annotation>
      <xs:documentation>
            A list of SIF contexts that applies to a message or operation.  Typically where used as an optional element,
            the omission of this element implies the SIF_Default context applies.
          </xs:documentation>
    </xs:annotation>
    <xs:sequence>
      <xs:element ref="sif:SIF_Context" maxOccurs="unbounded" />
    </xs:sequence>
  </xs:complexType>

  <xs:element name="SIF_Contexts" type="sif:SIF_ContextsType" />


  <!--SIF_Context-->

  <xs:simpleType name="SIF_ContextType">
    <xs:restriction>
      <xs:simpleType>
        <xs:restriction base="xs:token">
          <xs:annotation>
            <xs:documentation>The name of a SIF Context that applies to a message or operation.</xs:documentation>
          </xs:annotation>
          <xs:maxLength value="64" xmlns:xs="http://www.w3.org/2001/XMLSchema" />
        </xs:restriction>
      </xs:simpleType>
    </xs:restriction>
  </xs:simpleType>

  <xs:element name="SIF_Context" type="sif:SIF_ContextType" />


  <!--SIF_Protocol-->

  <xs:complexType name="SIF_ProtocolType">
    <xs:annotation>
      <xs:documentation>Contains protocol information regarding a ZIS or Agent.</xs:documentation>
    </xs:annotation>
    <xs:sequence>
      <xs:element name="SIF_URL" minOccurs="0">
        <xs:simpleType>
          <xs:restriction base="xs:anyURI">
            <xs:annotation>
              <xs:documentation>
            This element is required if the protocol is HTTPS or HTTP.
            It contains the https or http URL for contacting the agent.
          </xs:documentation>
            </xs:annotation>
            <xs:maxLength value="256" xmlns:xs="http://www.w3.org/2001/XMLSchema" />
          </xs:restriction>
        </xs:simpleType>
      </xs:element>
      <xs:element name="SIF_Property" minOccurs="0" maxOccurs="unbounded">
        <xs:complexType>
          <xs:sequence>
            <xs:element name="SIF_Name">
              <xs:simpleType>
                <xs:restriction base="xs:token">
                  <xs:annotation>
                    <xs:documentation>
            Property name.
          </xs:documentation>
                  </xs:annotation>
                  <xs:maxLength value="64" xmlns:xs="http://www.w3.org/2001/XMLSchema" />
                </xs:restriction>
              </xs:simpleType>
            </xs:element>
            <xs:element name="SIF_Value">
              <xs:simpleType>
                <xs:restriction base="xs:string">
                  <xs:annotation>
                    <xs:documentation>
            Property value.
          </xs:documentation>
                  </xs:annotation>
                  <xs:maxLength value="256" xmlns:xs="http://www.w3.org/2001/XMLSchema" />
                </xs:restriction>
              </xs:simpleType>
            </xs:element>
          </xs:sequence>
        </xs:complexType>
      </xs:element>
    </xs:sequence>
    <xs:attribute name="Type" use="required">
      <xs:annotation>
        <xs:documentation>
            The type of protocol to use (HTTPS, HTTP or an implementation-defined protocol).
          </xs:documentation>
      </xs:annotation>
      <xs:simpleType>
        <xs:union>
          <xs:simpleType>
            <xs:restriction base="sif:DefinedProtocolsType" />
          </xs:simpleType>
          <xs:simpleType>
            <xs:restriction base="xs:token" />
          </xs:simpleType>
        </xs:union>
      </xs:simpleType>
    </xs:attribute>
    <xs:attribute name="Secure" use="required">
      <xs:annotation>
        <xs:documentation>Whether the protocol provides a secure channel.</xs:documentation>
      </xs:annotation>
      <xs:simpleType>
        <xs:restriction base="xs:token">
          <xs:enumeration value="Yes" />
          <xs:enumeration value="No" />
        </xs:restriction>
      </xs:simpleType>
    </xs:attribute>
  </xs:complexType>

  <xs:element name="SIF_Protocol" type="sif:SIF_ProtocolType" />


  <!--SIF_Status-->

  <xs:complexType name="SIF_StatusType">
    <xs:annotation>
      <xs:documentation>This element is used to signal a successful response.</xs:documentation>
    </xs:annotation>
    <xs:sequence>
      <xs:element name="SIF_Code" type="sif:InfrastructureStatusCodeType" />
      <xs:element name="SIF_Desc" minOccurs="0">
        <xs:simpleType>
          <xs:restriction base="xs:string">
            <xs:annotation>
              <xs:documentation>
            An optional textual description/equivalent of SIF_Code.
          </xs:documentation>
            </xs:annotation>
            <xs:maxLength value="1024" xmlns:xs="http://www.w3.org/2001/XMLSchema" />
          </xs:restriction>
        </xs:simpleType>
      </xs:element>
      <xs:element name="SIF_Data" minOccurs="0">
        <xs:annotation>
          <xs:documentation>
            Optional element to hold data related to a successful operation.  This data is currently limited
            to a SIF_Message returned by the ZIS in response to a Pull-Mode Agent's SIF_GetMessage,
            SIF_AgentACL returned by the ZIS in response to SIF_Register and SIF_GetAgentACL,
            and SIF_ZoneStatus returned by the ZIS in response to SIF_GetZoneStatus.
          </xs:documentation>
        </xs:annotation>
        <xs:complexType>
          <xs:choice>
            <xs:element ref="sif:SIF_Message" />
            <xs:element name="SIF_AgentACL" type="sif:SIF_AgentACLInfrastructureType" />
            <xs:element name="SIF_ZoneStatus" type="sif:SIF_ZoneStatusInfrastructureType" />
          </xs:choice>
        </xs:complexType>
      </xs:element>
    </xs:sequence>
  </xs:complexType>

  <xs:element name="SIF_Status" type="sif:SIF_StatusType" />


  <!--SIF_Error-->

  <xs:complexType name="SIF_ErrorType">
    <xs:annotation>
      <xs:documentation>This element is used to signal an unsuccessful response.</xs:documentation>
    </xs:annotation>
    <xs:sequence>
      <xs:element name="SIF_Category" type="sif:InfrastructureErrorCategoryType" />
      <xs:element name="SIF_Code">
        <xs:annotation>
          <xs:documentation>
            See Error Codes.
          </xs:documentation>
        </xs:annotation>
        <xs:simpleType>
          <xs:union>
            <xs:simpleType>
              <xs:restriction base="sif:InfrastructureXMLValidationErrorType" />
            </xs:simpleType>
            <xs:simpleType>
              <xs:restriction base="sif:InfrastructureEncryptionErrorType" />
            </xs:simpleType>
            <xs:simpleType>
              <xs:restriction base="sif:InfrastructureAuthenticationErrorType" />
            </xs:simpleType>
            <xs:simpleType>
              <xs:restriction base="sif:InfrastructureAccessAndPermissionErrorType" />
            </xs:simpleType>
            <xs:simpleType>
              <xs:restriction base="sif:InfrastructureRegistrationErrorType" />
            </xs:simpleType>
            <xs:simpleType>
              <xs:restriction base="sif:InfrastructureProvisionErrorType" />
            </xs:simpleType>
            <xs:simpleType>
              <xs:restriction base="sif:InfrastructureSubscriptionErrorType" />
            </xs:simpleType>
            <xs:simpleType>
              <xs:restriction base="sif:InfrastructureRequestAndResponseErrorType" />
            </xs:simpleType>
            <xs:simpleType>
              <xs:restriction base="sif:InfrastructureEventReportingAndProcessingErrorType" />
            </xs:simpleType>
            <xs:simpleType>
              <xs:restriction base="sif:InfrastructureTransportErrorType" />
            </xs:simpleType>
            <xs:simpleType>
              <xs:restriction base="sif:InfrastructureSystemErrorType" />
            </xs:simpleType>
            <xs:simpleType>
              <xs:restriction base="sif:InfrastructureGenericMessageHandlingErrorType" />
            </xs:simpleType>
            <xs:simpleType>
              <xs:restriction base="xs:token" />
            </xs:simpleType>
          </xs:union>
        </xs:simpleType>
      </xs:element>
      <xs:element name="SIF_Desc">
        <xs:simpleType>
          <xs:restriction base="xs:string">
            <xs:annotation>
              <xs:documentation>A simple, easy to understand, description of the error. The primary consumer of this message is the application user. Example: "Unable to open database."</xs:documentation>
            </xs:annotation>
            <xs:maxLength value="1024" xmlns:xs="http://www.w3.org/2001/XMLSchema" />
          </xs:restriction>
        </xs:simpleType>
      </xs:element>
      <xs:element name="SIF_ExtendedDesc" minOccurs="0" type="xs:string">
        <xs:annotation>
          <xs:documentation>An optional error description that is more complete and technical in nature. It is to be used as a diagnostic message in trouble-shooting procedures. Example: "The 'Students' table is opened in exclusive mode by user 'ADM1' (dbm.cpp, line 300)."</xs:documentation>
        </xs:annotation>
      </xs:element>
    </xs:sequence>
  </xs:complexType>

  <xs:element name="SIF_Error" type="sif:SIF_ErrorType" />


  <!--SIF_Query-->

  <xs:complexType name="SIF_QueryType">
    <xs:annotation>
      <xs:documentation>SIF's default query mechanism.</xs:documentation>
    </xs:annotation>
    <xs:sequence>
      <xs:element name="SIF_QueryObject">
        <xs:complexType>
          <xs:sequence>
            <xs:element name="SIF_Element" minOccurs="0" maxOccurs="unbounded" type="xs:normalizedString">
              <xs:annotation>
                <xs:documentation>
            Individual elements/attributes being requested of matching object.  See SIF_Element Syntax
             below.
            If specified, only the elements/attributes requested are returned in the SIF_Response (with any parent elements/attributes);
            otherwise, all elements supported by the provider's object are returned.
          </xs:documentation>
              </xs:annotation>
            </xs:element>
          </xs:sequence>
          <xs:attribute name="ObjectName" use="required" type="sif:SIF_RequestObjectNamesType">
            <xs:annotation>
              <xs:documentation>The actual name of the object that is being queried for.</xs:documentation>
            </xs:annotation>
          </xs:attribute>
        </xs:complexType>
      </xs:element>
      <xs:choice minOccurs="0">
        <xs:element name="SIF_ConditionGroup">
          <xs:complexType>
            <xs:sequence>
              <xs:element name="SIF_Conditions" maxOccurs="unbounded">
                <xs:complexType>
                  <xs:sequence>
                    <xs:element name="SIF_Condition" maxOccurs="unbounded">
                      <xs:complexType>
                        <xs:sequence>
                          <xs:element name="SIF_Element" type="xs:normalizedString">
                            <xs:annotation>
                              <xs:documentation>This is the element/attribute being queried.  See below for syntax.</xs:documentation>
                            </xs:annotation>
                          </xs:element>
                          <xs:element name="SIF_Operator">
                            <xs:annotation>
                              <xs:documentation>The comparison operator for the condition.</xs:documentation>
                            </xs:annotation>
                            <xs:simpleType>
                              <xs:restriction base="xs:token">
                                <xs:enumeration value="EQ">
                                  <xs:annotation>
                                    <xs:documentation>Equals</xs:documentation>
                                  </xs:annotation>
                                </xs:enumeration>
                                <xs:enumeration value="LT">
                                  <xs:annotation>
                                    <xs:documentation>Less Than</xs:documentation>
                                  </xs:annotation>
                                </xs:enumeration>
                                <xs:enumeration value="GT">
                                  <xs:annotation>
                                    <xs:documentation>Greater Than</xs:documentation>
                                  </xs:annotation>
                                </xs:enumeration>
                                <xs:enumeration value="LE">
                                  <xs:annotation>
                                    <xs:documentation>Less Than Or Equals</xs:documentation>
                                  </xs:annotation>
                                </xs:enumeration>
                                <xs:enumeration value="GE">
                                  <xs:annotation>
                                    <xs:documentation>Greater Than Or Equals</xs:documentation>
                                  </xs:annotation>
                                </xs:enumeration>
                                <xs:enumeration value="NE">
                                  <xs:annotation>
                                    <xs:documentation>Not Equals</xs:documentation>
                                  </xs:annotation>
                                </xs:enumeration>
                              </xs:restriction>
                            </xs:simpleType>
                          </xs:element>
                          <xs:element name="SIF_Value" type="xs:string">
                            <xs:annotation>
                              <xs:documentation>SIF_Value is the data that is used to compare with the value of the element or attribute.
            </xs:documentation>
                            </xs:annotation>
                          </xs:element>
                        </xs:sequence>
                      </xs:complexType>
                    </xs:element>
                  </xs:sequence>
                  <xs:attribute name="Type" use="required">
                    <xs:annotation>
                      <xs:documentation>
              The boolean operator for joining conditions (SIF_Condition elements) within this element.  Note that None should be used if there
              is only one SIF_Condition element.
            </xs:documentation>
                    </xs:annotation>
                    <xs:simpleType>
                      <xs:restriction base="xs:token">
                        <xs:enumeration value="And" />
                        <xs:enumeration value="Or" />
                        <xs:enumeration value="None" />
                      </xs:restriction>
                    </xs:simpleType>
                  </xs:attribute>
                </xs:complexType>
              </xs:element>
            </xs:sequence>
            <xs:attribute name="Type" use="required">
              <xs:annotation>
                <xs:documentation>
              The Boolean operator for joining conditions (SIF_Conditions elements) within this element.  Note that None should be used if there is only one
              SIF_Conditions element.
            </xs:documentation>
              </xs:annotation>
              <xs:simpleType>
                <xs:restriction base="xs:token">
                  <xs:enumeration value="And" />
                  <xs:enumeration value="Or" />
                  <xs:enumeration value="None" />
                </xs:restriction>
              </xs:simpleType>
            </xs:attribute>
          </xs:complexType>
        </xs:element>
        <xs:element name="SIF_Example" type="sif:SIF_ExampleObjectType">
          <xs:annotation>
            <xs:documentation>
              An example SIF object that serves as a template for matching objects.  There is an implied EQ operator
              for every element/attribute value present and an implied And group of all resulting conditions.  Currently
              this is an experimental feature and limited to use with select objects; wider use may be considered in future
              versions of this specification.
            </xs:documentation>
          </xs:annotation>
        </xs:element>
      </xs:choice>
    </xs:sequence>
  </xs:complexType>

  <xs:element name="SIF_Query" type="sif:SIF_QueryType" />


  <!--SIF_ExtendedQuery-->

  <xs:complexType name="SIF_ExtendedQueryType">
    <xs:annotation>
      <xs:documentation>
            SIF's default query mechanism for SIF_Request, SIF_Query, has several limitations that limit its usefulness when creating reporting applications
            that process data from a SIF zone.  SIF_Query is limited to matching only one object type per query, requiring applications to
            manually join together results as needed for reporting and general data processing.  SIF_ExtendedQuery is designed to allow for joins on
            object identifiers/RefIds and to allow retrieval of data in a row/column fashion similar to SQL.  Each returned column may contain hierarchical XML elements/objects.
            Providers and Responders in a Zone may support SIF_ExtendedQuery
            in addition to SIF_Query.  Support for SIF_ExtendedQuery can be declared in and retrieved from the Zone is various Infrastructure
            messages and objects.
          </xs:documentation>
    </xs:annotation>
    <xs:sequence>
      <xs:element name="SIF_DestinationProvider" minOccurs="0" type="sif:SIF_RequestObjectNamesType">
        <xs:annotation>
          <xs:documentation>
            If no SIF_DestinationId applies to the request and this element is supplied, the Requester specifies that the
            extended query be routed to the Provider on record for the given object name.  If this element is omitted and no SIF_DestinationId
            applies to the request, the ZIS routes the request to the Provider on record for the object name in SIF_From.
          </xs:documentation>
        </xs:annotation>
      </xs:element>
      <xs:element name="SIF_Select">
        <xs:complexType>
          <xs:sequence>
            <xs:element name="SIF_Element" maxOccurs="unbounded">
              <xs:annotation>
                <xs:documentation>
            Indicates the element/attribute to return as a column.  Contents can be left empty to return the whole object specified in ObjectName,
            or * can be designated to return all attributes and immediate child elements of the object specified in ObjectName, or
            SIF_Element Syntax
             can be specified, relative to the object specified in ObjectName.  Requested attributes
            are to be returned as the text value of the corresponding attribute, elements as a copy of the XML element itself including attributes if they exist.
          </xs:documentation>
              </xs:annotation>
              <xs:complexType>
                <xs:simpleContent>
                  <xs:extension base="xs:normalizedString">
                    <xs:attribute name="Alias" use="optional">
                      <xs:simpleType>
                        <xs:restriction base="xs:normalizedString">
                          <xs:annotation>
                            <xs:documentation>Optional caption for the column.</xs:documentation>
                          </xs:annotation>
                          <xs:maxLength value="64" xmlns:xs="http://www.w3.org/2001/XMLSchema" />
                        </xs:restriction>
                      </xs:simpleType>
                    </xs:attribute>
                    <xs:attribute name="ObjectName" use="required" type="sif:SIF_RequestObjectNamesType">
                      <xs:annotation>
                        <xs:documentation>The name of the object from which to retrieve element/attributes.</xs:documentation>
                      </xs:annotation>
                    </xs:attribute>
                  </xs:extension>
                </xs:simpleContent>
              </xs:complexType>
            </xs:element>
          </xs:sequence>
          <xs:attribute name="Distinct" use="required" type="xs:boolean">
            <xs:annotation>
              <xs:documentation>
            Specifies whether query results should return all rows (false) or just distinct ones (true).  Rows are distinct if
            at least one column differs between them.
          </xs:documentation>
            </xs:annotation>
          </xs:attribute>
          <xs:attribute name="RowCount" use="required">
            <xs:annotation>
              <xs:documentation>
            The maximum number of rows to return.  If All, return all rows, otherwise return the top rows up to the maximum
            row count indicated.
          </xs:documentation>
            </xs:annotation>
            <xs:simpleType>
              <xs:union>
                <xs:simpleType>
                  <xs:restriction base="xs:positiveInteger" />
                </xs:simpleType>
                <xs:simpleType>
                  <xs:restriction base="xs:token">
                    <xs:enumeration value="All" />
                  </xs:restriction>
                </xs:simpleType>
              </xs:union>
            </xs:simpleType>
          </xs:attribute>
        </xs:complexType>
      </xs:element>
      <xs:element name="SIF_From">
        <xs:complexType>
          <xs:sequence>
            <xs:element name="SIF_Join" minOccurs="0" maxOccurs="unbounded">
              <xs:complexType>
                <xs:sequence>
                  <xs:element name="SIF_JoinOn" maxOccurs="unbounded">
                    <xs:complexType>
                      <xs:sequence>
                        <xs:element name="SIF_LeftElement">
                          <xs:annotation>
                            <xs:documentation>Specifies the left-side element/attribute on which to constrain the join.  Currently only support for keys/RefIds/RefId references is required.</xs:documentation>
                          </xs:annotation>
                          <xs:complexType>
                            <xs:simpleContent>
                              <xs:extension base="xs:normalizedString">
                                <xs:attribute name="ObjectName" use="required" type="sif:SIF_RequestObjectNamesType">
                                  <xs:annotation>
                                    <xs:documentation>Name of the object that contains the element/attribute.</xs:documentation>
                                  </xs:annotation>
                                </xs:attribute>
                              </xs:extension>
                            </xs:simpleContent>
                          </xs:complexType>
                        </xs:element>
                        <xs:element name="SIF_RightElement">
                          <xs:annotation>
                            <xs:documentation>Specifies right left-side element/attribute on which to constrain the join.  Currently only support for keys/RefIds/RefId references is required.</xs:documentation>
                          </xs:annotation>
                          <xs:complexType>
                            <xs:simpleContent>
                              <xs:extension base="xs:normalizedString">
                                <xs:attribute name="ObjectName" use="required" type="sif:SIF_RequestObjectNamesType">
                                  <xs:annotation>
                                    <xs:documentation>Name of the object that contains the element/attribute.</xs:documentation>
                                  </xs:annotation>
                                </xs:attribute>
                              </xs:extension>
                            </xs:simpleContent>
                          </xs:complexType>
                        </xs:element>
                      </xs:sequence>
                    </xs:complexType>
                  </xs:element>
                </xs:sequence>
                <xs:attribute name="Type" use="required">
                  <xs:annotation>
                    <xs:documentation>Type of relational join.</xs:documentation>
                  </xs:annotation>
                  <xs:simpleType>
                    <xs:restriction base="xs:token">
                      <xs:enumeration value="Inner" />
                      <xs:enumeration value="LeftOuter" />
                      <xs:enumeration value="RightOuter" />
                      <xs:enumeration value="FullOuter" />
                    </xs:restriction>
                  </xs:simpleType>
                </xs:attribute>
              </xs:complexType>
            </xs:element>
          </xs:sequence>
          <xs:attribute name="ObjectName" use="required" type="sif:SIF_RequestObjectNamesType">
            <xs:annotation>
              <xs:documentation>The name of the object to query.</xs:documentation>
            </xs:annotation>
          </xs:attribute>
        </xs:complexType>
      </xs:element>
      <xs:element name="SIF_Where" minOccurs="0">
        <xs:complexType>
          <xs:sequence>
            <xs:element name="SIF_ConditionGroup">
              <xs:complexType>
                <xs:sequence>
                  <xs:element name="SIF_Conditions" maxOccurs="unbounded">
                    <xs:complexType>
                      <xs:sequence>
                        <xs:element name="SIF_Condition" maxOccurs="unbounded">
                          <xs:complexType>
                            <xs:sequence>
                              <xs:element name="SIF_Element">
                                <xs:annotation>
                                  <xs:documentation>This is the element/attribute being queried.</xs:documentation>
                                </xs:annotation>
                                <xs:complexType>
                                  <xs:simpleContent>
                                    <xs:extension base="xs:normalizedString">
                                      <xs:attribute name="ObjectName" use="required" type="sif:SIF_RequestObjectNamesType">
                                        <xs:annotation>
                                          <xs:documentation>The name of the object containing the element/attribute.</xs:documentation>
                                        </xs:annotation>
                                      </xs:attribute>
                                    </xs:extension>
                                  </xs:simpleContent>
                                </xs:complexType>
                              </xs:element>
                              <xs:element name="SIF_Operator">
                                <xs:annotation>
                                  <xs:documentation>The comparison operator for the condition.</xs:documentation>
                                </xs:annotation>
                                <xs:simpleType>
                                  <xs:restriction base="xs:token">
                                    <xs:enumeration value="EQ">
                                      <xs:annotation>
                                        <xs:documentation>Equals</xs:documentation>
                                      </xs:annotation>
                                    </xs:enumeration>
                                    <xs:enumeration value="LT">
                                      <xs:annotation>
                                        <xs:documentation>Less Than</xs:documentation>
                                      </xs:annotation>
                                    </xs:enumeration>
                                    <xs:enumeration value="GT">
                                      <xs:annotation>
                                        <xs:documentation>Greater Than</xs:documentation>
                                      </xs:annotation>
                                    </xs:enumeration>
                                    <xs:enumeration value="LE">
                                      <xs:annotation>
                                        <xs:documentation>Less Than Or Equals</xs:documentation>
                                      </xs:annotation>
                                    </xs:enumeration>
                                    <xs:enumeration value="GE">
                                      <xs:annotation>
                                        <xs:documentation>Greater Than Or Equals</xs:documentation>
                                      </xs:annotation>
                                    </xs:enumeration>
                                    <xs:enumeration value="NE">
                                      <xs:annotation>
                                        <xs:documentation>Not Equals</xs:documentation>
                                      </xs:annotation>
                                    </xs:enumeration>
                                  </xs:restriction>
                                </xs:simpleType>
                              </xs:element>
                              <xs:element name="SIF_Value" type="xs:string">
                                <xs:annotation>
                                  <xs:documentation>SIF_Value is the data that is used to compare with the value of the element or attribute.
          </xs:documentation>
                                </xs:annotation>
                              </xs:element>
                            </xs:sequence>
                          </xs:complexType>
                        </xs:element>
                      </xs:sequence>
                      <xs:attribute name="Type" use="required">
                        <xs:annotation>
                          <xs:documentation>
            The boolean operator for joining conditions (SIF_Condition elements) within this element.  Note that None should be used if there
            is only one SIF_Condition element.
          </xs:documentation>
                        </xs:annotation>
                        <xs:simpleType>
                          <xs:restriction base="xs:token">
                            <xs:enumeration value="And" />
                            <xs:enumeration value="Or" />
                            <xs:enumeration value="None" />
                          </xs:restriction>
                        </xs:simpleType>
                      </xs:attribute>
                    </xs:complexType>
                  </xs:element>
                </xs:sequence>
                <xs:attribute name="Type" use="required">
                  <xs:annotation>
                    <xs:documentation>
            The Boolean operator for joining conditions (SIF_Conditions elements) within this element.  Note that None should be used if there is only one
            SIF_Conditions element.
          </xs:documentation>
                  </xs:annotation>
                  <xs:simpleType>
                    <xs:restriction base="xs:token">
                      <xs:enumeration value="And" />
                      <xs:enumeration value="Or" />
                      <xs:enumeration value="None" />
                    </xs:restriction>
                  </xs:simpleType>
                </xs:attribute>
              </xs:complexType>
            </xs:element>
          </xs:sequence>
        </xs:complexType>
      </xs:element>
      <xs:element name="SIF_OrderBy" minOccurs="0">
        <xs:complexType>
          <xs:sequence>
            <xs:element name="SIF_Element" maxOccurs="unbounded">
              <xs:annotation>
                <xs:documentation>
            Indicates the element/attribute by which to sort.
          </xs:documentation>
              </xs:annotation>
              <xs:complexType>
                <xs:simpleContent>
                  <xs:extension base="xs:normalizedString">
                    <xs:attribute name="ObjectName" use="required" type="sif:SIF_RequestObjectNamesType">
                      <xs:annotation>
                        <xs:documentation>The name of the object containing the element/attribute.</xs:documentation>
                      </xs:annotation>
                    </xs:attribute>
                    <xs:attribute name="Ordering" use="required">
                      <xs:annotation>
                        <xs:documentation>Whether to order the element/attribute in ascending or descending order.</xs:documentation>
                      </xs:annotation>
                      <xs:simpleType>
                        <xs:restriction base="xs:token">
                          <xs:enumeration value="Ascending" />
                          <xs:enumeration value="Descending" />
                        </xs:restriction>
                      </xs:simpleType>
                    </xs:attribute>
                  </xs:extension>
                </xs:simpleContent>
              </xs:complexType>
            </xs:element>
          </xs:sequence>
        </xs:complexType>
      </xs:element>
    </xs:sequence>
  </xs:complexType>

  <xs:element name="SIF_ExtendedQuery" type="sif:SIF_ExtendedQueryType" />


  <!--SIF_ExtendedQueryResults-->

  <xs:complexType name="SIF_ExtendedQueryResultsType">
    <xs:annotation>
      <xs:documentation>
            This element provides a wrapper for data returned in response to a SIF_ExtendedQuery.  Used in SIF_Response
            and SIF_ReportObject.
          </xs:documentation>
    </xs:annotation>
    <xs:sequence>
      <xs:element name="SIF_ColumnHeaders">
        <xs:complexType>
          <xs:sequence>
            <xs:element name="SIF_Element" maxOccurs="unbounded">
              <xs:annotation>
                <xs:documentation>
            The element/attribute specified for the column in SIF_ExtendedQuery.
          </xs:documentation>
              </xs:annotation>
              <xs:complexType>
                <xs:simpleContent>
                  <xs:extension base="xs:normalizedString">
                    <xs:attribute name="ObjectName" use="required" type="sif:SIF_RequestObjectNamesType">
                      <xs:annotation>
                        <xs:documentation>The object in which the element/attribute occurs.</xs:documentation>
                      </xs:annotation>
                    </xs:attribute>
                    <xs:attribute name="Alias" use="optional">
                      <xs:simpleType>
                        <xs:restriction base="xs:normalizedString">
                          <xs:annotation>
                            <xs:documentation>
            The caption for the column, if specified in SIF_ExtendedQuery.
          </xs:documentation>
                          </xs:annotation>
                          <xs:maxLength value="64" xmlns:xs="http://www.w3.org/2001/XMLSchema" />
                        </xs:restriction>
                      </xs:simpleType>
                    </xs:attribute>
                    <!--<xs:attribute ref="xsi:type" use="optional" />-->
                  </xs:extension>
                </xs:simpleContent>
              </xs:complexType>
            </xs:element>
          </xs:sequence>
        </xs:complexType>
      </xs:element>
      <xs:element name="SIF_Rows">
        <xs:complexType>
          <xs:sequence>
            <xs:element name="R" minOccurs="0" maxOccurs="unbounded">
              <xs:complexType>
                <xs:sequence>
                  <xs:element name="C" maxOccurs="unbounded" type="sif:SelectedContentType">
                    <xs:annotation>
                      <xs:documentation>
            Contains the value of each column specified in SIF_ExtendedQuery/SIF_Select.
            The order of the columns must correspond to the order of the elements as requested in SIF_ExtendedQuery.
            Note the number of columns may be expanded from the requested columns if * is indicated
            one or more times in the SIF_Select clause.
          </xs:documentation>
                    </xs:annotation>
                  </xs:element>
                </xs:sequence>
              </xs:complexType>
            </xs:element>
          </xs:sequence>
        </xs:complexType>
      </xs:element>
    </xs:sequence>
  </xs:complexType>

  <xs:element name="SIF_ExtendedQueryResults" type="sif:SIF_ExtendedQueryResultsType" />


  <!--Infrastructure Messages-->


  <!--SIF_Ack-->

  <xs:complexType name="SIF_AckType">
    <xs:annotation>
      <xs:documentation>This message is used as an acknowledgement to an infrastructure message.</xs:documentation>
    </xs:annotation>
    <xs:sequence>
      <xs:element ref="sif:SIF_Header" />
      <xs:element name="SIF_OriginalSourceId" nillable="true" type="xs:token">
        <xs:annotation>
          <xs:documentation>
            The SIF_SourceId of the infrastructure message for which the SIF_Ack serves as a response.
          </xs:documentation>
        </xs:annotation>
      </xs:element>
      <xs:element name="SIF_OriginalMsgId" nillable="true" type="sif:MsgIdType">
        <xs:annotation>
          <xs:documentation>
            The SIF_MsgId of the infrastructure message for which the SIF_Ack message serves as a response.
          </xs:documentation>
        </xs:annotation>
      </xs:element>
      <xs:choice>
        <xs:element ref="sif:SIF_Status" />
        <xs:element ref="sif:SIF_Error" />
      </xs:choice>
    </xs:sequence>
  </xs:complexType>

  <xs:element name="SIF_Ack" type="sif:SIF_AckType" />


  <!--SIF_Event-->

  <xs:complexType name="SIF_EventType">
    <xs:annotation>
      <xs:documentation>SIF_Event is used to deliver event objects as defined in SIF.
          </xs:documentation>
    </xs:annotation>
    <xs:sequence>
      <xs:element ref="sif:SIF_Header" />
      <xs:element name="SIF_ObjectData">
        <xs:complexType>
          <xs:sequence>
            <xs:element name="SIF_EventObject">
              <xs:complexType>
                <xs:annotation>
                  <xs:documentation>Contains the actual object (partial or whole) that is being added, changed or deleted.</xs:documentation>
                </xs:annotation>
                <xs:complexContent>
                  <xs:extension base="sif:SIF_EventObjectType">
                    <xs:attribute name="ObjectName" use="required" type="sif:SIF_SubscribeObjectNamesType">
                      <xs:annotation>
                        <xs:documentation>This is the name of the object being added, changed or deleted.</xs:documentation>
                      </xs:annotation>
                    </xs:attribute>
                    <xs:attribute name="Action" use="required">
                      <xs:annotation>
                        <xs:documentation>
            This is the action associated with the object that is being conveyed by this SIF_Event.
          </xs:documentation>
                      </xs:annotation>
                      <xs:simpleType>
                        <xs:restriction base="xs:token">
                          <xs:enumeration value="Add" />
                          <xs:enumeration value="Delete" />
                          <xs:enumeration value="Change" />
                        </xs:restriction>
                      </xs:simpleType>
                    </xs:attribute>
                  </xs:extension>
                </xs:complexContent>
              </xs:complexType>
            </xs:element>
          </xs:sequence>
        </xs:complexType>
      </xs:element>
    </xs:sequence>
  </xs:complexType>

  <xs:element name="SIF_Event" type="sif:SIF_EventType" />


  <!--SIF_Provide-->

  <xs:complexType name="SIF_ProvideType">
    <xs:annotation>
      <xs:documentation>
            The SIF_Provide message is used for advertising the provision of data objects.
          </xs:documentation>
    </xs:annotation>
    <xs:sequence>
      <xs:element ref="sif:SIF_Header" />
      <xs:element name="SIF_Object" maxOccurs="unbounded">
        <xs:complexType>
          <xs:sequence>
            <xs:element name="SIF_ExtendedQuerySupport" minOccurs="0" type="xs:boolean">
              <xs:annotation>
                <xs:documentation>
            Whether or not the Agent supports SIF_ExtendedQuery for this object.
          </xs:documentation>
              </xs:annotation>
            </xs:element>
            <xs:element ref="sif:SIF_Contexts" minOccurs="0" />
          </xs:sequence>
          <xs:attribute name="ObjectName" use="required" type="sif:SIF_ProvideObjectNamesType">
            <xs:annotation>
              <xs:documentation>The actual name of the object that is being provided.</xs:documentation>
            </xs:annotation>
          </xs:attribute>
        </xs:complexType>
      </xs:element>
    </xs:sequence>
  </xs:complexType>

  <xs:element name="SIF_Provide" type="sif:SIF_ProvideType" />


  <!--SIF_Provision-->

  <xs:complexType name="SIF_ProvisionType">
    <xs:annotation>
      <xs:documentation>
            Once registered, this message allows an agent to announce to the ZIS the functionality the agent will provide.
            The ZIS compares the functionality to its access control list and either returns a failure or a success.  Upon success,
            the ZIS performs an atomic update of its provide/subscribe database entries for the agent to match the objects listed in this message and atomically
            updates other stored settings for the agent.
            A ZIS must not allow an agent to perform operations that it did not successfully announce.  Agents should be aware that if the access control
            list changes after a successful SIF_Provision, some operations may still be rejected with access control errors.
          </xs:documentation>
    </xs:annotation>
    <xs:sequence>
      <xs:element ref="sif:SIF_Header" />
      <xs:element name="SIF_ProvideObjects">
        <xs:complexType>
          <xs:sequence>
            <xs:element name="SIF_Object" minOccurs="0" maxOccurs="unbounded">
              <xs:complexType>
                <xs:sequence>
                  <xs:element name="SIF_ExtendedQuerySupport" minOccurs="0" type="xs:boolean">
                    <xs:annotation>
                      <xs:documentation>
            Whether or not SIF_ExtendedQuery is supported with regard to this object.
          </xs:documentation>
                    </xs:annotation>
                  </xs:element>
                  <xs:element ref="sif:SIF_Contexts" minOccurs="0" />
                </xs:sequence>
                <xs:attribute name="ObjectName" use="required" type="sif:SIF_ProvideObjectNamesType">
                  <xs:annotation>
                    <xs:documentation>The name of each object.</xs:documentation>
                  </xs:annotation>
                </xs:attribute>
              </xs:complexType>
            </xs:element>
          </xs:sequence>
        </xs:complexType>
      </xs:element>
      <xs:element name="SIF_SubscribeObjects">
        <xs:complexType>
          <xs:sequence>
            <xs:element name="SIF_Object" minOccurs="0" maxOccurs="unbounded">
              <xs:complexType>
                <xs:sequence>
                  <xs:element ref="sif:SIF_Contexts" minOccurs="0" />
                </xs:sequence>
                <xs:attribute name="ObjectName" use="required" type="sif:SIF_SubscribeObjectNamesType">
                  <xs:annotation>
                    <xs:documentation>The name of each object.</xs:documentation>
                  </xs:annotation>
                </xs:attribute>
              </xs:complexType>
            </xs:element>
          </xs:sequence>
        </xs:complexType>
      </xs:element>
      <xs:element name="SIF_PublishAddObjects">
        <xs:complexType>
          <xs:sequence>
            <xs:element name="SIF_Object" minOccurs="0" maxOccurs="unbounded">
              <xs:complexType>
                <xs:sequence>
                  <xs:element ref="sif:SIF_Contexts" minOccurs="0" />
                </xs:sequence>
                <xs:attribute name="ObjectName" use="required" type="sif:SIF_SubscribeObjectNamesType">
                  <xs:annotation>
                    <xs:documentation>The name of each object.</xs:documentation>
                  </xs:annotation>
                </xs:attribute>
              </xs:complexType>
            </xs:element>
          </xs:sequence>
        </xs:complexType>
      </xs:element>
      <xs:element name="SIF_PublishChangeObjects">
        <xs:complexType>
          <xs:sequence>
            <xs:element name="SIF_Object" minOccurs="0" maxOccurs="unbounded">
              <xs:complexType>
                <xs:sequence>
                  <xs:element ref="sif:SIF_Contexts" minOccurs="0" />
                </xs:sequence>
                <xs:attribute name="ObjectName" use="required" type="sif:SIF_SubscribeObjectNamesType">
                  <xs:annotation>
                    <xs:documentation>The name of each object.</xs:documentation>
                  </xs:annotation>
                </xs:attribute>
              </xs:complexType>
            </xs:element>
          </xs:sequence>
        </xs:complexType>
      </xs:element>
      <xs:element name="SIF_PublishDeleteObjects">
        <xs:complexType>
          <xs:sequence>
            <xs:element name="SIF_Object" minOccurs="0" maxOccurs="unbounded">
              <xs:complexType>
                <xs:sequence>
                  <xs:element ref="sif:SIF_Contexts" minOccurs="0" />
                </xs:sequence>
                <xs:attribute name="ObjectName" use="required" type="sif:SIF_SubscribeObjectNamesType">
                  <xs:annotation>
                    <xs:documentation>The name of each object.</xs:documentation>
                  </xs:annotation>
                </xs:attribute>
              </xs:complexType>
            </xs:element>
          </xs:sequence>
        </xs:complexType>
      </xs:element>
      <xs:element name="SIF_RequestObjects">
        <xs:complexType>
          <xs:sequence>
            <xs:element name="SIF_Object" minOccurs="0" maxOccurs="unbounded">
              <xs:complexType>
                <xs:sequence>
                  <xs:element name="SIF_ExtendedQuerySupport" minOccurs="0" type="xs:boolean">
                    <xs:annotation>
                      <xs:documentation>
            Optionally specify whether or not SIF_ExtendedQuery may be sent in requests for this object.
          </xs:documentation>
                    </xs:annotation>
                  </xs:element>
                  <xs:element ref="sif:SIF_Contexts" minOccurs="0" />
                </xs:sequence>
                <xs:attribute name="ObjectName" use="required" type="sif:SIF_RequestObjectNamesType">
                  <xs:annotation>
                    <xs:documentation>The name of each object.</xs:documentation>
                  </xs:annotation>
                </xs:attribute>
              </xs:complexType>
            </xs:element>
          </xs:sequence>
        </xs:complexType>
      </xs:element>
      <xs:element name="SIF_RespondObjects">
        <xs:complexType>
          <xs:sequence>
            <xs:element name="SIF_Object" minOccurs="0" maxOccurs="unbounded">
              <xs:complexType>
                <xs:sequence>
                  <xs:element name="SIF_ExtendedQuerySupport" minOccurs="0" type="xs:boolean">
                    <xs:annotation>
                      <xs:documentation>
            Whether or not SIF_ExtendedQuery is supported with regard to this object.
          </xs:documentation>
                    </xs:annotation>
                  </xs:element>
                  <xs:element ref="sif:SIF_Contexts" minOccurs="0" />
                </xs:sequence>
                <xs:attribute name="ObjectName" use="required" type="sif:SIF_RequestObjectNamesType">
                  <xs:annotation>
                    <xs:documentation>The name of each object.</xs:documentation>
                  </xs:annotation>
                </xs:attribute>
              </xs:complexType>
            </xs:element>
          </xs:sequence>
        </xs:complexType>
      </xs:element>
      <xs:element name="SIF_ProvideService" minOccurs="0">
        <xs:complexType>
          <xs:sequence>
            <xs:element name="SIF_Service" minOccurs="0" maxOccurs="unbounded">
              <xs:complexType>
                <xs:sequence>
                  <xs:element ref="sif:SIF_Contexts" minOccurs="0" />
                </xs:sequence>
                <xs:attribute name="ServiceName" use="required" type="xs:token">
                  <xs:annotation>
                    <xs:documentation>The name of the SIF Zone Service as defined by a SIF Zone Service specification</xs:documentation>
                  </xs:annotation>
                </xs:attribute>
              </xs:complexType>
            </xs:element>
          </xs:sequence>
        </xs:complexType>
      </xs:element>
      <xs:element name="SIF_RespondService" minOccurs="0">
        <xs:complexType>
          <xs:sequence>
            <xs:element name="SIF_Service" minOccurs="0" maxOccurs="unbounded">
              <xs:complexType>
                <xs:sequence>
                  <xs:element ref="sif:SIF_Contexts" minOccurs="0" />
                </xs:sequence>
                <xs:attribute name="ServiceName" use="required" type="xs:token">
                  <xs:annotation>
                    <xs:documentation>The name of the SIF Zone Service as defined by a SIF Zone Service specification</xs:documentation>
                  </xs:annotation>
                </xs:attribute>
              </xs:complexType>
            </xs:element>
          </xs:sequence>
        </xs:complexType>
      </xs:element>
      <xs:element name="SIF_RequestService" minOccurs="0">
        <xs:complexType>
          <xs:sequence>
            <xs:element name="SIF_Service" minOccurs="0" maxOccurs="unbounded">
              <xs:complexType>
                <xs:sequence>
                  <xs:element ref="sif:SIF_Contexts" minOccurs="0" />
                  <xs:element name="SIF_Operations" minOccurs="0">
                    <xs:complexType>
                      <xs:sequence>
                        <xs:element name="SIF_Operation" maxOccurs="unbounded" type="xs:token">
                          <xs:annotation>
                            <xs:documentation>A specific method that the agent invokes the specified SIF Zone Service</xs:documentation>
                          </xs:annotation>
                        </xs:element>
                      </xs:sequence>
                    </xs:complexType>
                  </xs:element>
                </xs:sequence>
                <xs:attribute name="ServiceName" use="required" type="xs:token">
                  <xs:annotation>
                    <xs:documentation>The name of the SIF Zone Service as defined by a SIF Zone Service specification</xs:documentation>
                  </xs:annotation>
                </xs:attribute>
              </xs:complexType>
            </xs:element>
          </xs:sequence>
        </xs:complexType>
      </xs:element>
      <xs:element name="SIF_SubscribeService" minOccurs="0">
        <xs:complexType>
          <xs:sequence>
            <xs:element name="SIF_Service" minOccurs="0" maxOccurs="unbounded">
              <xs:complexType>
                <xs:sequence>
                  <xs:element ref="sif:SIF_Contexts" minOccurs="0" />
                  <xs:element name="SIF_Operations" minOccurs="0">
                    <xs:complexType>
                      <xs:sequence>
                        <xs:element name="SIF_Operation" maxOccurs="unbounded" type="xs:token">
                          <xs:annotation>
                            <xs:documentation>A specific event that the agent desires to subscribe to</xs:documentation>
                          </xs:annotation>
                        </xs:element>
                      </xs:sequence>
                    </xs:complexType>
                  </xs:element>
                </xs:sequence>
                <xs:attribute name="ServiceName" use="required" type="xs:token">
                  <xs:annotation>
                    <xs:documentation>The name of the SIF Zone Service as defined by a SIF Zone Service specification</xs:documentation>
                  </xs:annotation>
                </xs:attribute>
              </xs:complexType>
            </xs:element>
          </xs:sequence>
        </xs:complexType>
      </xs:element>
    </xs:sequence>
  </xs:complexType>

  <xs:element name="SIF_Provision" type="sif:SIF_ProvisionType" />


  <!--SIF_Register-->

  <xs:complexType name="SIF_RegisterType">
    <xs:annotation>
      <xs:documentation>SIF_Register is the message for registering an agent with a ZIS.
          </xs:documentation>
    </xs:annotation>
    <xs:sequence>
      <xs:element ref="sif:SIF_Header" />
      <xs:element name="SIF_Name">
        <xs:simpleType>
          <xs:restriction base="xs:normalizedString">
            <xs:annotation>
              <xs:documentation>This is the descriptive name of the agent that is registering (i.e. Ramsey Media Center).</xs:documentation>
            </xs:annotation>
            <xs:maxLength value="64" xmlns:xs="http://www.w3.org/2001/XMLSchema" />
          </xs:restriction>
        </xs:simpleType>
      </xs:element>
      <xs:element name="SIF_Version" maxOccurs="unbounded" type="sif:VersionWithWildcardsType">
        <xs:annotation>
          <xs:documentation>Specifies the SIF Implementation Specification version(s) defining messages the agent can receive. If the ZIS cannot communicate in this format, it should reject the request.</xs:documentation>
        </xs:annotation>
      </xs:element>
      <xs:element name="SIF_MaxBufferSize" type="xs:unsignedInt">
        <xs:annotation>
          <xs:documentation>Specifies the maximum size of a packet to be returned by the ZIS. The ZIS may return packets smaller than, or equal to, the maximum value.</xs:documentation>
        </xs:annotation>
      </xs:element>
      <xs:element name="SIF_Mode">
        <xs:annotation>
          <xs:documentation>Specifies the communication mode (Pull or Push) as chosen by the message sender.</xs:documentation>
        </xs:annotation>
        <xs:simpleType>
          <xs:restriction base="xs:token">
            <xs:enumeration value="Push" />
            <xs:enumeration value="Pull" />
          </xs:restriction>
        </xs:simpleType>
      </xs:element>
      <xs:element ref="sif:SIF_Protocol" minOccurs="0" />
      <xs:element name="SIF_NodeVendor" minOccurs="0">
        <xs:simpleType>
          <xs:restriction base="xs:normalizedString">
            <xs:annotation>
              <xs:documentation>The vendor of the SIF agent.</xs:documentation>
            </xs:annotation>
            <xs:maxLength value="256" xmlns:xs="http://www.w3.org/2001/XMLSchema" />
          </xs:restriction>
        </xs:simpleType>
      </xs:element>
      <xs:element name="SIF_NodeVersion" minOccurs="0">
        <xs:simpleType>
          <xs:restriction base="xs:normalizedString">
            <xs:annotation>
              <xs:documentation>
            The agent version number.  The format of this field is undefined, but it should
            match the format used in the agent's conformance statement, if the agent is SIF Certified.
          </xs:documentation>
            </xs:annotation>
            <xs:maxLength value="32" xmlns:xs="http://www.w3.org/2001/XMLSchema" />
          </xs:restriction>
        </xs:simpleType>
      </xs:element>
      <xs:element name="SIF_Application" minOccurs="0">
        <xs:complexType>
          <xs:sequence>
            <xs:element name="SIF_Vendor">
              <xs:simpleType>
                <xs:restriction base="xs:normalizedString">
                  <xs:annotation>
                    <xs:documentation>The name of the company of the product that this agent supports.</xs:documentation>
                  </xs:annotation>
                  <xs:maxLength value="256" xmlns:xs="http://www.w3.org/2001/XMLSchema" />
                </xs:restriction>
              </xs:simpleType>
            </xs:element>
            <xs:element name="SIF_Product">
              <xs:simpleType>
                <xs:restriction base="xs:normalizedString">
                  <xs:annotation>
                    <xs:documentation>The name of the product that this agent supports.</xs:documentation>
                  </xs:annotation>
                  <xs:maxLength value="256" xmlns:xs="http://www.w3.org/2001/XMLSchema" />
                </xs:restriction>
              </xs:simpleType>
            </xs:element>
            <xs:element name="SIF_Version">
              <xs:simpleType>
                <xs:restriction base="xs:normalizedString">
                  <xs:annotation>
                    <xs:documentation>The version of the product. This field is informative only.</xs:documentation>
                  </xs:annotation>
                  <xs:maxLength value="32" xmlns:xs="http://www.w3.org/2001/XMLSchema" />
                </xs:restriction>
              </xs:simpleType>
            </xs:element>
          </xs:sequence>
        </xs:complexType>
      </xs:element>
      <xs:element name="SIF_Icon" minOccurs="0" type="xs:anyURI">
        <xs:annotation>
          <xs:documentation>
            HTTP URL referencing an icon for graphical representation of the application/agent.
            Should range from 16x16 pixels to 128x128 pixels and be of an image MIME type commonly supported by Web browsers (e.g. PNG, JPEG, GIF).
            Agents may optionally follow the more restrictive guidelines at [FAVICON].
          </xs:documentation>
        </xs:annotation>
      </xs:element>
    </xs:sequence>
  </xs:complexType>

  <xs:element name="SIF_Register" type="sif:SIF_RegisterType" />


  <!--SIF_Request-->

  <xs:complexType name="SIF_RequestType">
    <xs:annotation>
      <xs:documentation>SIF_Request is used to request information in SIF data objects from other SIF nodes.
          </xs:documentation>
    </xs:annotation>
    <xs:sequence>
      <xs:element ref="sif:SIF_Header" />
      <xs:element name="SIF_Version" maxOccurs="unbounded" type="sif:VersionWithWildcardsType">
        <xs:annotation>
          <xs:documentation>
            Specifies which SIF Implementation Specification version should be used when returning the response data; wildcards are allowed.
            The responding agent SHOULD return data using the highest version it supports
            that falls within the specified versions.
          </xs:documentation>
        </xs:annotation>
      </xs:element>
      <xs:element name="SIF_MaxBufferSize" type="xs:unsignedInt">
        <xs:annotation>
          <xs:documentation>
            Specifies the maximum size of a response packet to be returned to the requester.
            The responder may return packets smaller than, or equal to, the maximum value.
            To guarantee delivery of response packets, requesting agents must not specify a SIF_MaxBufferSize greater than its registered SIF_Register/SIF_MaxBufferSize.
          </xs:documentation>
        </xs:annotation>
      </xs:element>
      <xs:choice>
        <xs:element ref="sif:SIF_Query" />
        <xs:element ref="sif:SIF_ExtendedQuery" />
      </xs:choice>
    </xs:sequence>
  </xs:complexType>

  <xs:element name="SIF_Request" type="sif:SIF_RequestType" />


  <!--SIF_Response-->

  <xs:complexType name="SIF_ResponseType">
    <xs:annotation>
      <xs:documentation>SIF_Response is used to respond to a SIF_Request message.
          </xs:documentation>
    </xs:annotation>
    <xs:sequence>
      <xs:element ref="sif:SIF_Header" />
      <xs:element name="SIF_RequestMsgId" type="sif:MsgIdType">
        <xs:annotation>
          <xs:documentation>
            This is the message ID of the SIF_Request message being processed. It provides a unique match between a SIF_Response and a previous SIF_Request. Since the ID of each message from an agent is unique, the receiver of a SIF_Response message will be able to relate the SIF_Response to a SIF_Request that it sent out previously.
          </xs:documentation>
        </xs:annotation>
      </xs:element>
      <xs:element name="SIF_PacketNumber" type="xs:positiveInteger">
        <xs:annotation>
          <xs:documentation>
            This element represents the index of the SIF_Response message in the sequence of packets that make up a complete response. Its value must be in the range of 1 through n, with n equal to the total number of packets that make up a response.
          </xs:documentation>
        </xs:annotation>
      </xs:element>
      <xs:element name="SIF_MorePackets">
        <xs:annotation>
          <xs:documentation>This element provides an indication as to whether there are more packets besides this one to make up a complete response.</xs:documentation>
        </xs:annotation>
        <xs:simpleType>
          <xs:restriction base="xs:token">
            <xs:enumeration value="Yes" />
            <xs:enumeration value="No" />
          </xs:restriction>
        </xs:simpleType>
      </xs:element>
      <xs:choice>
        <xs:element ref="sif:SIF_Error" />
        <xs:element name="SIF_ObjectData" type="sif:SIF_ResponseObjectsType">
          <xs:annotation>
            <xs:documentation>
              The SIF_ObjectData element contains the data objects matching the supplied criteria in the SIF_Request message if the
              SIF_Request contained SIF_Query.  If the SIF_Request contained SIF_ExtendedQuery, include SIF_ExtendedQueryResults.
            </xs:documentation>
          </xs:annotation>
        </xs:element>
        <xs:element ref="sif:SIF_ExtendedQueryResults" />
      </xs:choice>
    </xs:sequence>
  </xs:complexType>

  <xs:element name="SIF_Response" type="sif:SIF_ResponseType" />


  <!--SIF_Subscribe-->

  <xs:complexType name="SIF_SubscribeType">
    <xs:annotation>
      <xs:documentation>This message is used to subscribe to event objects that are contained in this message.</xs:documentation>
    </xs:annotation>
    <xs:sequence>
      <xs:element ref="sif:SIF_Header" />
      <xs:element name="SIF_Object" maxOccurs="unbounded">
        <xs:complexType>
          <xs:sequence>
            <xs:element ref="sif:SIF_Contexts" minOccurs="0" />
          </xs:sequence>
          <xs:attribute name="ObjectName" use="required" type="sif:SIF_SubscribeObjectNamesType">
            <xs:annotation>
              <xs:documentation>
            The actual name of the object that is being subscribed to. All valid SIF_Events for this object will be routed to the subscriber.
          </xs:documentation>
            </xs:annotation>
          </xs:attribute>
        </xs:complexType>
      </xs:element>
    </xs:sequence>
  </xs:complexType>

  <xs:element name="SIF_Subscribe" type="sif:SIF_SubscribeType" />


  <!--SIF_SystemControl-->

  <xs:complexType name="SIF_SystemControlType">
    <xs:annotation>
      <xs:documentation>
            This message is designed to control the flow of data an agent and ZIS or vice-versa, and to synchronously
            retrieve data available from the ZIS.
          </xs:documentation>
    </xs:annotation>
    <xs:sequence>
      <xs:element ref="sif:SIF_Header" />
      <xs:element name="SIF_SystemControlData">
        <xs:annotation>
          <xs:documentation>This element holds the sub-message being sent.</xs:documentation>
        </xs:annotation>
        <xs:complexType>
          <xs:choice>
            <xs:element ref="sif:SIF_Ping" />
            <xs:element ref="sif:SIF_Sleep" />
            <xs:element ref="sif:SIF_Wakeup" />
            <xs:element ref="sif:SIF_GetMessage" />
            <xs:element ref="sif:SIF_GetZoneStatus" />
            <xs:element ref="sif:SIF_GetAgentACL" />
            <xs:element ref="sif:SIF_CancelRequests" />
          </xs:choice>
        </xs:complexType>
      </xs:element>
    </xs:sequence>
  </xs:complexType>

  <xs:element name="SIF_SystemControl" type="sif:SIF_SystemControlType" />


  <!--SIF_Ping-->

  <xs:complexType name="SIF_PingType">
    <xs:annotation>
      <xs:documentation>This sub-message detects if an a Push-Mode Agent or ZIS is ready to receive and process messages.</xs:documentation>
    </xs:annotation>
  </xs:complexType>

  <xs:element name="SIF_Ping" type="sif:SIF_PingType" />


  <!--SIF_Sleep-->

  <xs:complexType name="SIF_SleepType">
    <xs:annotation>
      <xs:documentation>This sub-message tells a receiver not to send any more messages to the sender.</xs:documentation>
    </xs:annotation>
  </xs:complexType>

  <xs:element name="SIF_Sleep" type="sif:SIF_SleepType" />


  <!--SIF_Wakeup-->

  <xs:complexType name="SIF_WakeupType">
    <xs:annotation>
      <xs:documentation>This message tells a receiver that the sender is able to process messages.</xs:documentation>
    </xs:annotation>
  </xs:complexType>

  <xs:element name="SIF_Wakeup" type="sif:SIF_WakeupType" />


  <!--SIF_GetMessage-->

  <xs:complexType name="SIF_GetMessageType">
    <xs:annotation>
      <xs:documentation>This message tells the ZIS to return the first available message to the agent, subject to Selective Message Blocking.</xs:documentation>
    </xs:annotation>
  </xs:complexType>

  <xs:element name="SIF_GetMessage" type="sif:SIF_GetMessageType" />


  <!--SIF_GetZoneStatus-->

  <xs:complexType name="SIF_GetZoneStatusType">
    <xs:annotation>
      <xs:documentation>
            This message tells the ZIS to return the current SIF_ZoneStatus in a SIF_Ack.
          </xs:documentation>
    </xs:annotation>
  </xs:complexType>

  <xs:element name="SIF_GetZoneStatus" type="sif:SIF_GetZoneStatusType" />


  <!--SIF_GetAgentACL-->

  <xs:complexType name="SIF_GetAgentACLType">
    <xs:annotation>
      <xs:documentation>
            This message tells the ZIS to return the Agent's ACL permissions in a SIF_Ack.
          </xs:documentation>
    </xs:annotation>
  </xs:complexType>

  <xs:element name="SIF_GetAgentACL" type="sif:SIF_GetAgentACLType" />


  <!--SIF_CancelRequests-->

  <xs:complexType name="SIF_CancelRequestsType">
    <xs:annotation>
      <xs:documentation>
            This sub-message asks a receiver (ZIS or Push-Mode Agent) to cancel the specified SIF_Requests, pending or in process.
          </xs:documentation>
    </xs:annotation>
    <xs:sequence>
      <xs:element name="SIF_NotificationType">
        <xs:simpleType>
          <xs:restriction base="xs:token">
            <xs:enumeration value="Standard">
              <xs:annotation>
                <xs:documentation>
              ZIS will send a "final" SIF_Response for each cancelled SIF_Request.
            </xs:documentation>
              </xs:annotation>
            </xs:enumeration>
            <xs:enumeration value="None">
              <xs:annotation>
                <xs:documentation>
              No further SIF_Responses for these requests will be placed in the Agent's queue.
            </xs:documentation>
              </xs:annotation>
            </xs:enumeration>
          </xs:restriction>
        </xs:simpleType>
      </xs:element>
      <xs:element name="SIF_RequestMsgIds">
        <xs:complexType>
          <xs:sequence>
            <xs:element name="SIF_RequestMsgId" maxOccurs="unbounded" type="sif:MsgIdType">
              <xs:annotation>
                <xs:documentation>
          This is the </xs:documentation>
              </xs:annotation>
            </xs:element>
          </xs:sequence>
        </xs:complexType>
      </xs:element>
    </xs:sequence>
  </xs:complexType>

  <xs:element name="SIF_CancelRequests" type="sif:SIF_CancelRequestsType" />


  <!--SIF_CancelServiceInputs-->

  <xs:complexType name="SIF_CancelServiceInputsType">
    <xs:annotation>
      <xs:documentation>
			  The SIF_SystemControl message is already part of the SIF Infrastructure. This messages allows for synchronous communication between an agent and a ZIS. The SIF_SystemControl - SIF_CancelServiceInputs allows an agent or ZIS to notify the other party that the specified SIF_ServiceInput should be cancelled.
		  </xs:documentation>
    </xs:annotation>
    <xs:sequence>
      <xs:element name="SIF_NotificationType">
        <xs:simpleType>
          <xs:restriction base="xs:token">
            <xs:enumeration value="Standard">
              <xs:annotation>
                <xs:documentation>
              ZIS will send a "final" SIF_ServiceOutput for each cancelled SIF_ServiceInput.
            </xs:documentation>
              </xs:annotation>
            </xs:enumeration>
            <xs:enumeration value="None">
              <xs:annotation>
                <xs:documentation>
              No further SIF_ServiceOutputs for these requests will be placed in the Agent's queue.
            </xs:documentation>
              </xs:annotation>
            </xs:enumeration>
          </xs:restriction>
        </xs:simpleType>
      </xs:element>
      <xs:element name="SIF_ServiceMsgIds">
        <xs:complexType>
          <xs:sequence>
            <xs:element name="SIF_ServiceMsgId" maxOccurs="unbounded" type="sif:MsgIdType">
              <xs:annotation>
                <xs:documentation>
          This is the </xs:documentation>
              </xs:annotation>
            </xs:element>
          </xs:sequence>
        </xs:complexType>
      </xs:element>
    </xs:sequence>
  </xs:complexType>

  <xs:element name="SIF_CancelServiceInputs" type="sif:SIF_CancelServiceInputsType" />


  <!--SIF_Unprovide-->

  <xs:complexType name="SIF_UnprovideType">
    <xs:annotation>
      <xs:documentation>
            This message performs the opposite function of SIF_Provide.
          </xs:documentation>
    </xs:annotation>
    <xs:sequence>
      <xs:element ref="sif:SIF_Header" />
      <xs:element name="SIF_Object" maxOccurs="unbounded">
        <xs:complexType>
          <xs:sequence>
            <xs:element ref="sif:SIF_Contexts" minOccurs="0" />
          </xs:sequence>
          <xs:attribute name="ObjectName" use="required" type="sif:SIF_ProvideObjectNamesType">
            <xs:annotation>
              <xs:documentation>The actual name of the object that is being removed.</xs:documentation>
            </xs:annotation>
          </xs:attribute>
        </xs:complexType>
      </xs:element>
    </xs:sequence>
  </xs:complexType>

  <xs:element name="SIF_Unprovide" type="sif:SIF_UnprovideType" />


  <!--SIF_Unregister-->

  <xs:complexType name="SIF_UnregisterType">
    <xs:annotation>
      <xs:documentation>This message is used to unregister an agent from a Zone.</xs:documentation>
    </xs:annotation>
    <xs:sequence>
      <xs:element ref="sif:SIF_Header" />
    </xs:sequence>
  </xs:complexType>

  <xs:element name="SIF_Unregister" type="sif:SIF_UnregisterType" />


  <!--SIF_Unsubscribe-->

  <xs:complexType name="SIF_UnsubscribeType">
    <xs:annotation>
      <xs:documentation>
            This message is used to unsubscribe from SIF_Events.
          </xs:documentation>
    </xs:annotation>
    <xs:sequence>
      <xs:element ref="sif:SIF_Header" />
      <xs:element name="SIF_Object" maxOccurs="unbounded">
        <xs:complexType>
          <xs:sequence>
            <xs:element ref="sif:SIF_Contexts" minOccurs="0" />
          </xs:sequence>
          <xs:attribute name="ObjectName" use="required" type="sif:SIF_SubscribeObjectNamesType">
            <xs:annotation>
              <xs:documentation>The actual name of the object from which the agent should be unsubscribed. Events pertaining to this object published after successful unsubscription will no longer be queued for delivery to the agent. Events already queued for delivery to the agent prior to unsubscription will be delivered.</xs:documentation>
            </xs:annotation>
          </xs:attribute>
        </xs:complexType>
      </xs:element>
    </xs:sequence>
  </xs:complexType>

  <xs:element name="SIF_Unsubscribe" type="sif:SIF_UnsubscribeType" />


  <!--SIF_ServiceInput-->

  <xs:complexType name="SIF_ServiceInputType">
    <xs:annotation>
      <xs:documentation>SIF_ServiceInput is used to invoke a method that is exposed by a SIF Zone Service.</xs:documentation>
    </xs:annotation>
    <xs:sequence>
      <xs:element ref="sif:SIF_Header" />
      <xs:element name="SIF_Service" type="xs:normalizedString">
        <xs:annotation>
          <xs:documentation>The name of the SIF Zone Service that is being invoked.</xs:documentation>
        </xs:annotation>
      </xs:element>
      <xs:element name="SIF_Operation" type="xs:normalizedString">
        <xs:annotation>
          <xs:documentation>This is the name of the service operation that is being invoked.</xs:documentation>
        </xs:annotation>
      </xs:element>
      <xs:element name="SIF_ServiceMsgId" type="sif:GUIDType">
        <xs:annotation>
          <xs:documentation>The unique ID of this service request invocation. Multiple SIF_ServiceInput packets may be sent with this same SIF_ServiceMsgId</xs:documentation>
        </xs:annotation>
      </xs:element>
      <xs:element name="SIF_Version" minOccurs="0" maxOccurs="unbounded" type="sif:VersionWithWildcardsType">
        <xs:annotation>
          <xs:documentation>Specifies which SIF Specification version should be used when returning the response data. If a responder cannot return response data in this format, it should reject the SIF_ServiceInput. It is recommended that clients use a wildcard version for the “minor” portion of the version, such as "2.*".</xs:documentation>
        </xs:annotation>
      </xs:element>
      <xs:element name="SIF_MaxBufferSize" minOccurs="0" type="xs:unsignedInt">
        <xs:annotation>
          <xs:documentation>Specifies the maximum size of a response packet to be returned to the requester. The responder may return packets smaller than, or equal to, the maximum value. If the maximum size is too small to contain a single whole response object, the responder should reject the SIF_ServiceInput. To guarantee delivery of response packets, requesting agents must not specify a SIF_MaxBufferSize greater than its registered SIF_Register/SIF_MaxBufferSize.</xs:documentation>
        </xs:annotation>
      </xs:element>
      <xs:element name="SIF_PacketNumber" type="xs:positiveInteger">
        <xs:annotation>
          <xs:documentation>This element represents the index of the SIF_ServiceInput message in the sequence of packets that make up a complete response. Its value must be in the range of 1 through n, with n equal to the total number of packets that make up a response.</xs:documentation>
        </xs:annotation>
      </xs:element>
      <xs:element name="SIF_MorePackets">
        <xs:annotation>
          <xs:documentation>This element provides an indication as to whether there are more packets besides this one to make up a complete service request. The value of this element can only be "Yes" or "No".</xs:documentation>
        </xs:annotation>
        <xs:simpleType>
          <xs:restriction base="xs:token">
            <xs:enumeration value="Yes" />
            <xs:enumeration value="No" />
          </xs:restriction>
        </xs:simpleType>
      </xs:element>
      <xs:element ref="sif:SIF_Error" minOccurs="0" />
      <xs:element name="SIF_Body" minOccurs="0" type="sif:ExtendedContentType">
        <xs:annotation>
          <xs:documentation>SIF_Body contains a single child element that has the same name as the value of the SIF_Operation element. The structure of this element is defined by the XML Schema that is defined for the Service.</xs:documentation>
        </xs:annotation>
      </xs:element>
    </xs:sequence>
  </xs:complexType>

  <xs:element name="SIF_ServiceInput" type="sif:SIF_ServiceInputType" />


  <!--SIF_ServiceOutput-->

  <xs:complexType name="SIF_ServiceOutputType">
    <xs:annotation>
      <xs:documentation>SIF_ServiceOutput is used to respond to a SIF_ServiceInput message. </xs:documentation>
    </xs:annotation>
    <xs:sequence>
      <xs:element ref="sif:SIF_Header" />
      <xs:element name="SIF_ServiceMsgId" type="sif:GUIDType">
        <xs:annotation>
          <xs:documentation>This element represents the value of the SIF_ServiceMsgId that was sent as part of the original SIF_ServiceInput message stream, and should contain the same value to allow the client and the ZIS to associate each SIF_ServiceOutput packet with the SIF_ServiceInput message stream. This value uniquely identifies the entire set of SIF_ServiceInput and SIF_ServiceOutput messages involved in a single invocation of a SIF Zone Service method.</xs:documentation>
        </xs:annotation>
      </xs:element>
      <xs:element name="SIF_PacketNumber" type="xs:unsignedInt">
        <xs:annotation>
          <xs:documentation>This element represents the index of the SIF_ServiceOutput message in the sequence of packets that make up a complete response. Its value must be in the range of 1 through n, with n equal to the total number of packets that make up a response.</xs:documentation>
        </xs:annotation>
      </xs:element>
      <xs:element name="SIF_MorePackets">
        <xs:annotation>
          <xs:documentation>This element provides an indication as to whether there are more packets besides this one to make up a complete response. The value of this element can only be "Yes" or "No".</xs:documentation>
        </xs:annotation>
        <xs:simpleType>
          <xs:restriction base="xs:token">
            <xs:enumeration value="Yes" />
            <xs:enumeration value="No" />
          </xs:restriction>
        </xs:simpleType>
      </xs:element>
      <xs:element ref="sif:SIF_Error" minOccurs="0" />
      <xs:element name="SIF_Body" minOccurs="0" type="sif:ExtendedContentType">
        <xs:annotation>
          <xs:documentation>SIF_Body contains a single child element that has a name composed of the value of the SIF_Operation element concatenated with the string "Response". For example a SIF Zone Service Operation with the name "GetWeather" would have in it’s response SIF_Body a single child element with the name "GetWeatherResponse". The structure of this element is defined by the XML Schema that is defined for the Service.</xs:documentation>
        </xs:annotation>
      </xs:element>
    </xs:sequence>
  </xs:complexType>

  <xs:element name="SIF_ServiceOutput" type="sif:SIF_ServiceOutputType" />


  <!--SIF_ServiceNotify-->

  <xs:complexType name="SIF_ServiceNotifyType">
    <xs:annotation>
      <xs:documentation>SIF_ServiceNotify is used to deliver notifications to service clients that some state associated with the service has changed. </xs:documentation>
    </xs:annotation>
    <xs:sequence>
      <xs:element ref="sif:SIF_Header" />
      <xs:element name="SIF_Service" type="xs:normalizedString">
        <xs:annotation>
          <xs:documentation>The name of the SIF Zone Service that initiated the event</xs:documentation>
        </xs:annotation>
      </xs:element>
      <xs:element name="SIF_Operation" type="xs:normalizedString">
        <xs:annotation>
          <xs:documentation>The name of the notification message being sent</xs:documentation>
        </xs:annotation>
      </xs:element>
      <xs:element name="SIF_ServiceMsgId" type="sif:GUIDType">
        <xs:annotation>
          <xs:documentation>A unique IdRefType that has been assigned to this series of messages. All SIF_ServiceNotify messages that contain this ID correspond to the same event instance.</xs:documentation>
        </xs:annotation>
      </xs:element>
      <xs:element name="SIF_PacketNumber" type="xs:unsignedInt">
        <xs:annotation>
          <xs:documentation>This element represents the index of the SIF_ServiceNotify message in the sequence of packets that make up a complete notification message stream. Its value must be in the range of 1 through n, with n equal to the total number of packets that make up the message stream.</xs:documentation>
        </xs:annotation>
      </xs:element>
      <xs:element name="SIF_MorePackets">
        <xs:annotation>
          <xs:documentation>This element provides an indication as to whether there are more packets besides this one to make up a complete notification message stream. The value of this element can only be "Yes" or "No".</xs:documentation>
        </xs:annotation>
        <xs:simpleType>
          <xs:restriction base="xs:token">
            <xs:enumeration value="Yes" />
            <xs:enumeration value="No" />
          </xs:restriction>
        </xs:simpleType>
      </xs:element>
      <xs:element ref="sif:SIF_Error" minOccurs="0" />
      <xs:element name="SIF_Body" minOccurs="0" type="sif:ExtendedContentType">
        <xs:annotation>
          <xs:documentation>SIF_Body contains a single child element that has the same name as the value of the SIF_Operation element. The structure of this element is defined by the XML Schema that is defined for the Service.</xs:documentation>
        </xs:annotation>
      </xs:element>
    </xs:sequence>
  </xs:complexType>

  <xs:element name="SIF_ServiceNotify" type="sif:SIF_ServiceNotifyType" />


  <!--Infrastructure Data Objects-->


  <!--SIF_AgentACL-->

  <xs:complexType name="SIF_AgentACLType">
    <xs:annotation>
      <xs:documentation>This object provides an Agent its access control list (ACL) settings in the Zone.</xs:documentation>
    </xs:annotation>
    <xs:sequence>
      <xs:element name="SIF_ProvideAccess">
        <xs:complexType>
          <xs:sequence>
            <xs:element name="SIF_Object" minOccurs="0" maxOccurs="unbounded">
              <xs:complexType>
                <xs:sequence>
                  <xs:element ref="sif:SIF_Contexts" />
                </xs:sequence>
                <xs:attribute name="ObjectName" use="required" type="sif:ObjectNameType">
                  <xs:annotation>
                    <xs:documentation>The name of each object.</xs:documentation>
                  </xs:annotation>
                </xs:attribute>
              </xs:complexType>
            </xs:element>
          </xs:sequence>
        </xs:complexType>
      </xs:element>
      <xs:element name="SIF_SubscribeAccess">
        <xs:complexType>
          <xs:sequence>
            <xs:element name="SIF_Object" minOccurs="0" maxOccurs="unbounded">
              <xs:complexType>
                <xs:sequence>
                  <xs:element ref="sif:SIF_Contexts" />
                </xs:sequence>
                <xs:attribute name="ObjectName" use="required" type="sif:ObjectNameType">
                  <xs:annotation>
                    <xs:documentation>The name of each object.</xs:documentation>
                  </xs:annotation>
                </xs:attribute>
              </xs:complexType>
            </xs:element>
          </xs:sequence>
        </xs:complexType>
      </xs:element>
      <xs:element name="SIF_PublishAddAccess">
        <xs:complexType>
          <xs:sequence>
            <xs:element name="SIF_Object" minOccurs="0" maxOccurs="unbounded">
              <xs:complexType>
                <xs:sequence>
                  <xs:element ref="sif:SIF_Contexts" />
                </xs:sequence>
                <xs:attribute name="ObjectName" use="required" type="sif:ObjectNameType">
                  <xs:annotation>
                    <xs:documentation>The name of each object.</xs:documentation>
                  </xs:annotation>
                </xs:attribute>
              </xs:complexType>
            </xs:element>
          </xs:sequence>
        </xs:complexType>
      </xs:element>
      <xs:element name="SIF_PublishChangeAccess">
        <xs:complexType>
          <xs:sequence>
            <xs:element name="SIF_Object" minOccurs="0" maxOccurs="unbounded">
              <xs:complexType>
                <xs:sequence>
                  <xs:element ref="sif:SIF_Contexts" />
                </xs:sequence>
                <xs:attribute name="ObjectName" use="required" type="sif:ObjectNameType">
                  <xs:annotation>
                    <xs:documentation>The name of each object.</xs:documentation>
                  </xs:annotation>
                </xs:attribute>
              </xs:complexType>
            </xs:element>
          </xs:sequence>
        </xs:complexType>
      </xs:element>
      <xs:element name="SIF_PublishDeleteAccess">
        <xs:complexType>
          <xs:sequence>
            <xs:element name="SIF_Object" minOccurs="0" maxOccurs="unbounded">
              <xs:complexType>
                <xs:sequence>
                  <xs:element ref="sif:SIF_Contexts" />
                </xs:sequence>
                <xs:attribute name="ObjectName" use="required" type="sif:ObjectNameType">
                  <xs:annotation>
                    <xs:documentation>The name of each object.</xs:documentation>
                  </xs:annotation>
                </xs:attribute>
              </xs:complexType>
            </xs:element>
          </xs:sequence>
        </xs:complexType>
      </xs:element>
      <xs:element name="SIF_RequestAccess">
        <xs:complexType>
          <xs:sequence>
            <xs:element name="SIF_Object" minOccurs="0" maxOccurs="unbounded">
              <xs:complexType>
                <xs:sequence>
                  <xs:element ref="sif:SIF_Contexts" />
                </xs:sequence>
                <xs:attribute name="ObjectName" use="required" type="sif:ObjectNameType">
                  <xs:annotation>
                    <xs:documentation>The name of each object.</xs:documentation>
                  </xs:annotation>
                </xs:attribute>
              </xs:complexType>
            </xs:element>
          </xs:sequence>
        </xs:complexType>
      </xs:element>
      <xs:element name="SIF_RespondAccess">
        <xs:complexType>
          <xs:sequence>
            <xs:element name="SIF_Object" minOccurs="0" maxOccurs="unbounded">
              <xs:complexType>
                <xs:sequence>
                  <xs:element ref="sif:SIF_Contexts" />
                </xs:sequence>
                <xs:attribute name="ObjectName" use="required" type="sif:ObjectNameType">
                  <xs:annotation>
                    <xs:documentation>The name of each object.</xs:documentation>
                  </xs:annotation>
                </xs:attribute>
              </xs:complexType>
            </xs:element>
          </xs:sequence>
        </xs:complexType>
      </xs:element>
      <xs:element name="SIF_ProvideService">
        <xs:complexType>
          <xs:sequence>
            <xs:element name="SIF_Service" minOccurs="0" maxOccurs="unbounded">
              <xs:complexType>
                <xs:sequence>
                  <xs:element ref="sif:SIF_Contexts" />
                </xs:sequence>
                <xs:attribute name="ServiceName" use="required" type="xs:token">
                  <xs:annotation>
                    <xs:documentation>The name of the SIF Zone Service as defined by a SIF Zone Service specification</xs:documentation>
                  </xs:annotation>
                </xs:attribute>
              </xs:complexType>
            </xs:element>
          </xs:sequence>
        </xs:complexType>
      </xs:element>
      <xs:element name="SIF_RespondService">
        <xs:complexType>
          <xs:sequence>
            <xs:element name="SIF_Service" minOccurs="0" maxOccurs="unbounded">
              <xs:complexType>
                <xs:sequence>
                  <xs:element ref="sif:SIF_Contexts" />
                </xs:sequence>
                <xs:attribute name="ServiceName" use="required" type="xs:token">
                  <xs:annotation>
                    <xs:documentation>The name of the SIF Zone Service as defined by a SIF Zone Service specification</xs:documentation>
                  </xs:annotation>
                </xs:attribute>
              </xs:complexType>
            </xs:element>
          </xs:sequence>
        </xs:complexType>
      </xs:element>
      <xs:element name="SIF_RequestService">
        <xs:complexType>
          <xs:sequence>
            <xs:element name="SIF_Service" minOccurs="0" maxOccurs="unbounded">
              <xs:complexType>
                <xs:sequence>
                  <xs:element ref="sif:SIF_Contexts" />
                  <xs:element name="SIF_Operations" minOccurs="0">
                    <xs:complexType>
                      <xs:sequence>
                        <xs:element name="SIF_Operation" maxOccurs="unbounded" type="xs:token">
                          <xs:annotation>
                            <xs:documentation>A specific operation that the agent has permission to invoke or subscribe to</xs:documentation>
                          </xs:annotation>
                        </xs:element>
                      </xs:sequence>
                    </xs:complexType>
                  </xs:element>
                </xs:sequence>
                <xs:attribute name="ServiceName" use="required" type="xs:token">
                  <xs:annotation>
                    <xs:documentation>The name of the SIF Zone Service as defined by a SIF Zone Service specification</xs:documentation>
                  </xs:annotation>
                </xs:attribute>
              </xs:complexType>
            </xs:element>
          </xs:sequence>
        </xs:complexType>
      </xs:element>
      <xs:element name="SIF_SubscribeService">
        <xs:complexType>
          <xs:sequence>
            <xs:element name="SIF_Service" minOccurs="0" maxOccurs="unbounded">
              <xs:complexType>
                <xs:sequence>
                  <xs:element ref="sif:SIF_Contexts" />
                  <xs:element name="SIF_Operations" minOccurs="0">
                    <xs:complexType>
                      <xs:sequence>
                        <xs:element name="SIF_Operation" maxOccurs="unbounded" type="xs:token">
                          <xs:annotation>
                            <xs:documentation>A specific operation that the agent has permission to invoke or subscribe to</xs:documentation>
                          </xs:annotation>
                        </xs:element>
                      </xs:sequence>
                    </xs:complexType>
                  </xs:element>
                </xs:sequence>
                <xs:attribute name="ServiceName" use="required" type="xs:token">
                  <xs:annotation>
                    <xs:documentation>The name of the SIF Zone Service as defined by a SIF Zone Service specification</xs:documentation>
                  </xs:annotation>
                </xs:attribute>
              </xs:complexType>
            </xs:element>
          </xs:sequence>
        </xs:complexType>
      </xs:element>
      <xs:element ref="sif:SIF_Metadata" minOccurs="0" />
      <xs:element ref="sif:SIF_ExtendedElements" minOccurs="0" />
    </xs:sequence>
  </xs:complexType>

  <xs:element name="SIF_AgentACL" type="sif:SIF_AgentACLType" />


  <!--SIF_AgentACLInfrastructure-->

  <xs:complexType name="SIF_AgentACLInfrastructureType">
    <xs:annotation>
      <xs:documentation>This object provides an Agent its access control list (ACL) settings in the Zone.</xs:documentation>
    </xs:annotation>
    <xs:sequence>
      <xs:element name="SIF_ProvideAccess">
        <xs:complexType>
          <xs:sequence>
            <xs:element name="SIF_Object" minOccurs="0" maxOccurs="unbounded">
              <xs:complexType>
                <xs:sequence>
                  <xs:element ref="sif:SIF_Contexts" />
                </xs:sequence>
                <xs:attribute name="ObjectName" use="required" type="sif:ObjectNameType">
                  <xs:annotation>
                    <xs:documentation>The name of each object.</xs:documentation>
                  </xs:annotation>
                </xs:attribute>
              </xs:complexType>
            </xs:element>
          </xs:sequence>
        </xs:complexType>
      </xs:element>
      <xs:element name="SIF_SubscribeAccess">
        <xs:complexType>
          <xs:sequence>
            <xs:element name="SIF_Object" minOccurs="0" maxOccurs="unbounded">
              <xs:complexType>
                <xs:sequence>
                  <xs:element ref="sif:SIF_Contexts" />
                </xs:sequence>
                <xs:attribute name="ObjectName" use="required" type="sif:ObjectNameType">
                  <xs:annotation>
                    <xs:documentation>The name of each object.</xs:documentation>
                  </xs:annotation>
                </xs:attribute>
              </xs:complexType>
            </xs:element>
          </xs:sequence>
        </xs:complexType>
      </xs:element>
      <xs:element name="SIF_PublishAddAccess">
        <xs:complexType>
          <xs:sequence>
            <xs:element name="SIF_Object" minOccurs="0" maxOccurs="unbounded">
              <xs:complexType>
                <xs:sequence>
                  <xs:element ref="sif:SIF_Contexts" />
                </xs:sequence>
                <xs:attribute name="ObjectName" use="required" type="sif:ObjectNameType">
                  <xs:annotation>
                    <xs:documentation>The name of each object.</xs:documentation>
                  </xs:annotation>
                </xs:attribute>
              </xs:complexType>
            </xs:element>
          </xs:sequence>
        </xs:complexType>
      </xs:element>
      <xs:element name="SIF_PublishChangeAccess">
        <xs:complexType>
          <xs:sequence>
            <xs:element name="SIF_Object" minOccurs="0" maxOccurs="unbounded">
              <xs:complexType>
                <xs:sequence>
                  <xs:element ref="sif:SIF_Contexts" />
                </xs:sequence>
                <xs:attribute name="ObjectName" use="required" type="sif:ObjectNameType">
                  <xs:annotation>
                    <xs:documentation>The name of each object.</xs:documentation>
                  </xs:annotation>
                </xs:attribute>
              </xs:complexType>
            </xs:element>
          </xs:sequence>
        </xs:complexType>
      </xs:element>
      <xs:element name="SIF_PublishDeleteAccess">
        <xs:complexType>
          <xs:sequence>
            <xs:element name="SIF_Object" minOccurs="0" maxOccurs="unbounded">
              <xs:complexType>
                <xs:sequence>
                  <xs:element ref="sif:SIF_Contexts" />
                </xs:sequence>
                <xs:attribute name="ObjectName" use="required" type="sif:ObjectNameType">
                  <xs:annotation>
                    <xs:documentation>The name of each object.</xs:documentation>
                  </xs:annotation>
                </xs:attribute>
              </xs:complexType>
            </xs:element>
          </xs:sequence>
        </xs:complexType>
      </xs:element>
      <xs:element name="SIF_RequestAccess">
        <xs:complexType>
          <xs:sequence>
            <xs:element name="SIF_Object" minOccurs="0" maxOccurs="unbounded">
              <xs:complexType>
                <xs:sequence>
                  <xs:element ref="sif:SIF_Contexts" />
                </xs:sequence>
                <xs:attribute name="ObjectName" use="required" type="sif:ObjectNameType">
                  <xs:annotation>
                    <xs:documentation>The name of each object.</xs:documentation>
                  </xs:annotation>
                </xs:attribute>
              </xs:complexType>
            </xs:element>
          </xs:sequence>
        </xs:complexType>
      </xs:element>
      <xs:element name="SIF_RespondAccess">
        <xs:complexType>
          <xs:sequence>
            <xs:element name="SIF_Object" minOccurs="0" maxOccurs="unbounded">
              <xs:complexType>
                <xs:sequence>
                  <xs:element ref="sif:SIF_Contexts" />
                </xs:sequence>
                <xs:attribute name="ObjectName" use="required" type="sif:ObjectNameType">
                  <xs:annotation>
                    <xs:documentation>The name of each object.</xs:documentation>
                  </xs:annotation>
                </xs:attribute>
              </xs:complexType>
            </xs:element>
          </xs:sequence>
        </xs:complexType>
      </xs:element>
      <xs:element name="SIF_ProvideService">
        <xs:complexType>
          <xs:sequence>
            <xs:element name="SIF_Service" minOccurs="0" maxOccurs="unbounded">
              <xs:complexType>
                <xs:sequence>
                  <xs:element ref="sif:SIF_Contexts" />
                </xs:sequence>
                <xs:attribute name="ServiceName" use="required" type="xs:token">
                  <xs:annotation>
                    <xs:documentation>The name of the SIF Zone Service as defined by a SIF Zone Service specification</xs:documentation>
                  </xs:annotation>
                </xs:attribute>
              </xs:complexType>
            </xs:element>
          </xs:sequence>
        </xs:complexType>
      </xs:element>
      <xs:element name="SIF_RespondService">
        <xs:complexType>
          <xs:sequence>
            <xs:element name="SIF_Service" minOccurs="0" maxOccurs="unbounded">
              <xs:complexType>
                <xs:sequence>
                  <xs:element ref="sif:SIF_Contexts" />
                </xs:sequence>
                <xs:attribute name="ServiceName" use="required" type="xs:token">
                  <xs:annotation>
                    <xs:documentation>The name of the SIF Zone Service as defined by a SIF Zone Service specification</xs:documentation>
                  </xs:annotation>
                </xs:attribute>
              </xs:complexType>
            </xs:element>
          </xs:sequence>
        </xs:complexType>
      </xs:element>
      <xs:element name="SIF_RequestService">
        <xs:complexType>
          <xs:sequence>
            <xs:element name="SIF_Service" minOccurs="0" maxOccurs="unbounded">
              <xs:complexType>
                <xs:sequence>
                  <xs:element ref="sif:SIF_Contexts" />
                  <xs:element name="SIF_Operations" minOccurs="0">
                    <xs:complexType>
                      <xs:sequence>
                        <xs:element name="SIF_Operation" maxOccurs="unbounded" type="xs:token">
                          <xs:annotation>
                            <xs:documentation>A specific operation that the agent has permission to invoke or subscribe to</xs:documentation>
                          </xs:annotation>
                        </xs:element>
                      </xs:sequence>
                    </xs:complexType>
                  </xs:element>
                </xs:sequence>
                <xs:attribute name="ServiceName" use="required" type="xs:token">
                  <xs:annotation>
                    <xs:documentation>The name of the SIF Zone Service as defined by a SIF Zone Service specification</xs:documentation>
                  </xs:annotation>
                </xs:attribute>
              </xs:complexType>
            </xs:element>
          </xs:sequence>
        </xs:complexType>
      </xs:element>
      <xs:element name="SIF_SubscribeService">
        <xs:complexType>
          <xs:sequence>
            <xs:element name="SIF_Service" minOccurs="0" maxOccurs="unbounded">
              <xs:complexType>
                <xs:sequence>
                  <xs:element ref="sif:SIF_Contexts" />
                  <xs:element name="SIF_Operations" minOccurs="0">
                    <xs:complexType>
                      <xs:sequence>
                        <xs:element name="SIF_Operation" maxOccurs="unbounded" type="xs:token">
                          <xs:annotation>
                            <xs:documentation>A specific operation that the agent has permission to invoke or subscribe to</xs:documentation>
                          </xs:annotation>
                        </xs:element>
                      </xs:sequence>
                    </xs:complexType>
                  </xs:element>
                </xs:sequence>
                <xs:attribute name="ServiceName" use="required" type="xs:token">
                  <xs:annotation>
                    <xs:documentation>The name of the SIF Zone Service as defined by a SIF Zone Service specification</xs:documentation>
                  </xs:annotation>
                </xs:attribute>
              </xs:complexType>
            </xs:element>
          </xs:sequence>
        </xs:complexType>
      </xs:element>
      <xs:element ref="sif:SIF_Metadata" minOccurs="0" />
      <xs:element ref="sif:SIF_ExtendedElements" minOccurs="0" />
    </xs:sequence>
  </xs:complexType>


  <!--SIF_LogEntry-->

  <xs:complexType name="SIF_LogEntryType">
    <xs:annotation>
      <xs:documentation>
        This object captures an occurrence within a SIF node (ZIS or agent)—error, warning or information—for storage in an optionally provided zone log.
        SIF_LogEntry Adds are reported and are used to post new log entries to the provider of the log.
        Of course, subscribing agents may also filter incoming Adds as part of their own logging mechanism.
        Any Change or Delete SIF_Events should be ignored at the agent level, but should be routed by the
        ZIS (though this should not be necessary). Use of the log is optional and voluntary, except where noted as mandatory in this specification.
        Nodes may post as much or as little log data as required with the expectation that if there is a provider of SIF_LogEntry that the logged entries be available
        for a provider-defined amount of time subject to provider-defined restrictions on the quantity of data
        logged by any given node.
      </xs:documentation>
    </xs:annotation>
    <xs:sequence>
      <xs:element name="SIF_LogEntryHeader">
        <xs:complexType>
          <xs:sequence>
            <xs:element ref="sif:SIF_Header" />
          </xs:sequence>
        </xs:complexType>
      </xs:element>
      <xs:element name="SIF_OriginalHeader" minOccurs="0">
        <xs:complexType>
          <xs:sequence>
            <xs:element ref="sif:SIF_Header" />
          </xs:sequence>
        </xs:complexType>
      </xs:element>
      <xs:element name="SIF_Category" minOccurs="0">
        <xs:annotation>
          <xs:documentation>A SIF_LogEntry category. May be omitted for informational-type postings, where typically a textual description will suffice.</xs:documentation>
        </xs:annotation>
        <xs:simpleType>
          <xs:restriction base="xs:token">
            <xs:enumeration value="1">
              <xs:annotation>
                <xs:documentation>Success</xs:documentation>
              </xs:annotation>
            </xs:enumeration>
            <xs:enumeration value="2">
              <xs:annotation>
                <xs:documentation>Data Issues with Success Result</xs:documentation>
              </xs:annotation>
            </xs:enumeration>
            <xs:enumeration value="3">
              <xs:annotation>
                <xs:documentation>Data Issues with Failure Result</xs:documentation>
              </xs:annotation>
            </xs:enumeration>
            <xs:enumeration value="4">
              <xs:annotation>
                <xs:documentation>Error Conditions</xs:documentation>
              </xs:annotation>
            </xs:enumeration>
          </xs:restriction>
        </xs:simpleType>
      </xs:element>
      <xs:element name="SIF_Code" minOccurs="0">
        <xs:annotation>
          <xs:documentation>A SIF_LogEntry code with regard to SIF_Category above. May be omitted for informational-type postings, where typically a textual description will suffice. If a SIF_Code is included, SIF_Category must be included as well.</xs:documentation>
        </xs:annotation>
        <xs:simpleType>
          <xs:union>
            <xs:simpleType>
              <xs:restriction base="sif:SIF_LogEntrySuccessCategoryType" />
            </xs:simpleType>
            <xs:simpleType>
              <xs:restriction base="sif:SIF_LogEntryDataIssuesWithSuccessResultType" />
            </xs:simpleType>
            <xs:simpleType>
              <xs:restriction base="sif:SIF_LogEntryDataIssuesWithFailureResultType" />
            </xs:simpleType>
            <xs:simpleType>
              <xs:restriction base="sif:SIF_LogEntryAgentErrorConditionType" />
            </xs:simpleType>
            <xs:simpleType>
              <xs:restriction base="sif:SIF_LogEntryZISErrorConditionType" />
            </xs:simpleType>
          </xs:union>
        </xs:simpleType>
      </xs:element>
      <xs:element name="SIF_ApplicationCode" minOccurs="0">
        <xs:simpleType>
          <xs:restriction base="xs:normalizedString">
            <xs:annotation>
              <xs:documentation>
        An error code specific to the application posting the entry.
        Can be used by vendors to query log entries for errors specific to their applications.
        If a SIF_ApplicationCode is included, SIF_Category must be included as well;
        i.e., application-specific error codes should fall within one of the defined log entry categories.
      </xs:documentation>
            </xs:annotation>
            <xs:maxLength value="64" xmlns:xs="http://www.w3.org/2001/XMLSchema" />
          </xs:restriction>
        </xs:simpleType>
      </xs:element>
      <xs:element name="SIF_Desc">
        <xs:simpleType>
          <xs:restriction base="xs:string">
            <xs:annotation>
              <xs:documentation>A textual description of the error.</xs:documentation>
            </xs:annotation>
            <xs:maxLength value="1024" xmlns:xs="http://www.w3.org/2001/XMLSchema" />
          </xs:restriction>
        </xs:simpleType>
      </xs:element>
      <xs:element name="SIF_ExtendedDesc" minOccurs="0" type="xs:string">
        <xs:annotation>
          <xs:documentation>Any extended error description.</xs:documentation>
        </xs:annotation>
      </xs:element>
      <xs:element name="SIF_LogObjects" minOccurs="0">
        <xs:complexType>
          <xs:sequence>
            <xs:element name="SIF_LogObject" maxOccurs="unbounded">
              <xs:complexType xmlns:xs="http://www.w3.org/2001/XMLSchema">
                <xs:sequence>
                  <xs:any processContents="skip" />
                </xs:sequence>
                <xs:attribute name="ObjectName" use="required" type="sif:SIF_RequestObjectNamesType" />
              </xs:complexType>
            </xs:element>
          </xs:sequence>
        </xs:complexType>
      </xs:element>
      <xs:element ref="sif:SIF_Metadata" minOccurs="0" />
      <xs:element ref="sif:SIF_ExtendedElements" minOccurs="0" />
    </xs:sequence>
    <xs:attribute name="Source" use="required">
      <xs:annotation>
        <xs:documentation>The SIF node that logged this entry.</xs:documentation>
      </xs:annotation>
      <xs:simpleType>
        <xs:restriction base="xs:token">
          <xs:enumeration value="Agent" />
          <xs:enumeration value="ZIS" />
        </xs:restriction>
      </xs:simpleType>
    </xs:attribute>
    <xs:attribute name="LogLevel" use="required">
      <xs:annotation>
        <xs:documentation>The level of the log entry herein described.</xs:documentation>
      </xs:annotation>
      <xs:simpleType>
        <xs:restriction base="xs:token">
          <xs:enumeration value="Info" />
          <xs:enumeration value="Warning" />
          <xs:enumeration value="Error" />
        </xs:restriction>
      </xs:simpleType>
    </xs:attribute>
  </xs:complexType>

  <xs:element name="SIF_LogEntry" type="sif:SIF_LogEntryType" />


  <!--SIF_LogEntryInfrastructure-->

  <xs:complexType name="SIF_LogEntryInfrastructureType">
    <xs:annotation>
      <xs:documentation>
        This object captures an occurrence within a SIF node (ZIS or agent)—error, warning or information—for storage in an optionally provided zone log.
        SIF_LogEntry Adds are reported and are used to post new log entries to the provider of the log.
        Of course, subscribing agents may also filter incoming Adds as part of their own logging mechanism.
        Any Change or Delete SIF_Events should be ignored at the agent level, but should be routed by the
        ZIS (though this should not be necessary). Use of the log is optional and voluntary, except where noted as mandatory in this specification.
        Nodes may post as much or as little log data as required with the expectation that if there is a provider of SIF_LogEntry that the logged entries be available
        for a provider-defined amount of time subject to provider-defined restrictions on the quantity of data
        logged by any given node.
      </xs:documentation>
    </xs:annotation>
    <xs:sequence>
      <xs:element name="SIF_LogEntryHeader">
        <xs:complexType>
          <xs:sequence>
            <xs:element ref="sif:SIF_Header" />
          </xs:sequence>
        </xs:complexType>
      </xs:element>
      <xs:element name="SIF_OriginalHeader" minOccurs="0">
        <xs:complexType>
          <xs:sequence>
            <xs:element ref="sif:SIF_Header" />
          </xs:sequence>
        </xs:complexType>
      </xs:element>
      <xs:element name="SIF_Category" minOccurs="0">
        <xs:annotation>
          <xs:documentation>A SIF_LogEntry category. May be omitted for informational-type postings, where typically a textual description will suffice.</xs:documentation>
        </xs:annotation>
        <xs:simpleType>
          <xs:restriction base="xs:token">
            <xs:enumeration value="1">
              <xs:annotation>
                <xs:documentation>Success</xs:documentation>
              </xs:annotation>
            </xs:enumeration>
            <xs:enumeration value="2">
              <xs:annotation>
                <xs:documentation>Data Issues with Success Result</xs:documentation>
              </xs:annotation>
            </xs:enumeration>
            <xs:enumeration value="3">
              <xs:annotation>
                <xs:documentation>Data Issues with Failure Result</xs:documentation>
              </xs:annotation>
            </xs:enumeration>
            <xs:enumeration value="4">
              <xs:annotation>
                <xs:documentation>Error Conditions</xs:documentation>
              </xs:annotation>
            </xs:enumeration>
          </xs:restriction>
        </xs:simpleType>
      </xs:element>
      <xs:element name="SIF_Code" minOccurs="0">
        <xs:annotation>
          <xs:documentation>A SIF_LogEntry code with regard to SIF_Category above. May be omitted for informational-type postings, where typically a textual description will suffice. If a SIF_Code is included, SIF_Category must be included as well.</xs:documentation>
        </xs:annotation>
        <xs:simpleType>
          <xs:union>
            <xs:simpleType>
              <xs:restriction base="sif:SIF_LogEntrySuccessCategoryType" />
            </xs:simpleType>
            <xs:simpleType>
              <xs:restriction base="sif:SIF_LogEntryDataIssuesWithSuccessResultType" />
            </xs:simpleType>
            <xs:simpleType>
              <xs:restriction base="sif:SIF_LogEntryDataIssuesWithFailureResultType" />
            </xs:simpleType>
            <xs:simpleType>
              <xs:restriction base="sif:SIF_LogEntryAgentErrorConditionType" />
            </xs:simpleType>
            <xs:simpleType>
              <xs:restriction base="sif:SIF_LogEntryZISErrorConditionType" />
            </xs:simpleType>
          </xs:union>
        </xs:simpleType>
      </xs:element>
      <xs:element name="SIF_ApplicationCode" minOccurs="0">
        <xs:simpleType>
          <xs:restriction base="xs:normalizedString">
            <xs:annotation>
              <xs:documentation>
        An error code specific to the application posting the entry.
        Can be used by vendors to query log entries for errors specific to their applications.
        If a SIF_ApplicationCode is included, SIF_Category must be included as well;
        i.e., application-specific error codes should fall within one of the defined log entry categories.
      </xs:documentation>
            </xs:annotation>
            <xs:maxLength value="64" xmlns:xs="http://www.w3.org/2001/XMLSchema" />
          </xs:restriction>
        </xs:simpleType>
      </xs:element>
      <xs:element name="SIF_Desc">
        <xs:simpleType>
          <xs:restriction base="xs:string">
            <xs:annotation>
              <xs:documentation>A textual description of the error.</xs:documentation>
            </xs:annotation>
            <xs:maxLength value="1024" xmlns:xs="http://www.w3.org/2001/XMLSchema" />
          </xs:restriction>
        </xs:simpleType>
      </xs:element>
      <xs:element name="SIF_ExtendedDesc" minOccurs="0" type="xs:string">
        <xs:annotation>
          <xs:documentation>Any extended error description.</xs:documentation>
        </xs:annotation>
      </xs:element>
      <xs:element name="SIF_LogObjects" minOccurs="0">
        <xs:complexType>
          <xs:sequence>
            <xs:element name="SIF_LogObject" maxOccurs="unbounded">
              <xs:complexType xmlns:xs="http://www.w3.org/2001/XMLSchema">
                <xs:sequence>
                  <xs:any processContents="skip" />
                </xs:sequence>
                <xs:attribute name="ObjectName" use="required" type="sif:SIF_RequestObjectNamesType" />
              </xs:complexType>
            </xs:element>
          </xs:sequence>
        </xs:complexType>
      </xs:element>
      <xs:element ref="sif:SIF_Metadata" minOccurs="0" />
      <xs:element ref="sif:SIF_ExtendedElements" minOccurs="0" />
    </xs:sequence>
    <xs:attribute name="Source" use="required">
      <xs:annotation>
        <xs:documentation>The SIF node that logged this entry.</xs:documentation>
      </xs:annotation>
      <xs:simpleType>
        <xs:restriction base="xs:token">
          <xs:enumeration value="Agent" />
          <xs:enumeration value="ZIS" />
        </xs:restriction>
      </xs:simpleType>
    </xs:attribute>
    <xs:attribute name="LogLevel" use="required">
      <xs:annotation>
        <xs:documentation>The level of the log entry herein described.</xs:documentation>
      </xs:annotation>
      <xs:simpleType>
        <xs:restriction base="xs:token">
          <xs:enumeration value="Info" />
          <xs:enumeration value="Warning" />
          <xs:enumeration value="Error" />
        </xs:restriction>
      </xs:simpleType>
    </xs:attribute>
  </xs:complexType>


  <!--SIF_ZoneStatus-->

  <xs:complexType name="SIF_ZoneStatusType">
    <xs:annotation>
      <xs:documentation>
        The SIF_ZoneStatus object is an object that is implicitly provided by all Zone Integration Servers to provide
        information about the ZIS. Zone Integration Servers MUST provide this object.
      </xs:documentation>
    </xs:annotation>
    <xs:sequence>
      <xs:element name="SIF_Name" type="xs:normalizedString">
        <xs:annotation>
          <xs:documentation>The descriptive name for the zone.</xs:documentation>
        </xs:annotation>
      </xs:element>
      <xs:element name="SIF_Icon" minOccurs="0" type="xs:anyURI">
        <xs:annotation>
          <xs:documentation>
        HTTP URL referencing an icon for graphical representation of the ZIS/Zone.
        Should range from 16x16 pixels to 128x128 pixels and be of an image MIME type commonly supported by Web browsers (e.g. PNG, JPEG, GIF).
        Agents may optionally follow the more restrictive guidelines at [FAVICON].
      </xs:documentation>
        </xs:annotation>
      </xs:element>
      <xs:element name="SIF_Vendor" minOccurs="0">
        <xs:complexType>
          <xs:sequence>
            <xs:element name="SIF_Name" type="xs:normalizedString">
              <xs:annotation>
                <xs:documentation>The name of the company that wrote the ZIS.</xs:documentation>
              </xs:annotation>
            </xs:element>
            <xs:element name="SIF_Product" type="xs:normalizedString">
              <xs:annotation>
                <xs:documentation>The product name assigned by the vendor to identify this ZIS.</xs:documentation>
              </xs:annotation>
            </xs:element>
            <xs:element name="SIF_Version" type="xs:normalizedString">
              <xs:annotation>
                <xs:documentation>The version of the vendor's product—not necessarily the SIF version.</xs:documentation>
              </xs:annotation>
            </xs:element>
          </xs:sequence>
        </xs:complexType>
      </xs:element>
      <xs:element name="SIF_Providers" minOccurs="0">
        <xs:complexType>
          <xs:sequence>
            <xs:element name="SIF_Provider" maxOccurs="unbounded">
              <xs:complexType>
                <xs:sequence>
                  <xs:element name="SIF_ObjectList">
                    <xs:complexType>
                      <xs:sequence>
                        <xs:element name="SIF_Object" maxOccurs="unbounded">
                          <xs:complexType>
                            <xs:sequence>
                              <xs:element name="SIF_ExtendedQuerySupport" type="xs:boolean" />
                              <xs:element ref="sif:SIF_Contexts" />
                            </xs:sequence>
                            <xs:attribute name="ObjectName" use="required" type="sif:ObjectNameType">
                              <xs:annotation>
                                <xs:documentation>The name of the object being provided by this SIF node.</xs:documentation>
                              </xs:annotation>
                            </xs:attribute>
                          </xs:complexType>
                        </xs:element>
                      </xs:sequence>
                    </xs:complexType>
                  </xs:element>
                </xs:sequence>
                <xs:attribute name="SourceId" use="required">
                  <xs:simpleType>
                    <xs:restriction base="xs:token">
                      <xs:annotation>
                        <xs:documentation>
        The identifier of the SIF node that is providing objects. This is the agent or ZIS identifier that would appear in the SIF_SourceId field of any SIF_Header created by the SIF node.
      </xs:documentation>
                      </xs:annotation>
                      <xs:maxLength value="64" xmlns:xs="http://www.w3.org/2001/XMLSchema" />
                    </xs:restriction>
                  </xs:simpleType>
                </xs:attribute>
              </xs:complexType>
            </xs:element>
          </xs:sequence>
        </xs:complexType>
      </xs:element>
      <xs:element name="SIF_Subscribers" minOccurs="0">
        <xs:complexType>
          <xs:sequence>
            <xs:element name="SIF_Subscriber" maxOccurs="unbounded">
              <xs:complexType>
                <xs:sequence>
                  <xs:element name="SIF_ObjectList">
                    <xs:complexType>
                      <xs:sequence>
                        <xs:element name="SIF_Object" maxOccurs="unbounded">
                          <xs:complexType>
                            <xs:sequence>
                              <xs:element ref="sif:SIF_Contexts" />
                            </xs:sequence>
                            <xs:attribute name="ObjectName" use="required" type="sif:ObjectNameType">
                              <xs:annotation>
                                <xs:documentation>The name of the object being subscribed to by this SIF node.</xs:documentation>
                              </xs:annotation>
                            </xs:attribute>
                          </xs:complexType>
                        </xs:element>
                      </xs:sequence>
                    </xs:complexType>
                  </xs:element>
                </xs:sequence>
                <xs:attribute name="SourceId" use="required">
                  <xs:simpleType>
                    <xs:restriction base="xs:token">
                      <xs:annotation>
                        <xs:documentation>
        The identifier of the SIF node that is subscribing to the object events. This is the agent or ZIS identifier that would appear in the SIF_SourceId field of any SIF_Header created by the SIF node.
      </xs:documentation>
                      </xs:annotation>
                      <xs:maxLength value="64" xmlns:xs="http://www.w3.org/2001/XMLSchema" />
                    </xs:restriction>
                  </xs:simpleType>
                </xs:attribute>
              </xs:complexType>
            </xs:element>
          </xs:sequence>
        </xs:complexType>
      </xs:element>
      <xs:element name="SIF_AddPublishers" minOccurs="0">
        <xs:complexType>
          <xs:sequence>
            <xs:element name="SIF_Publisher" maxOccurs="unbounded">
              <xs:complexType>
                <xs:sequence>
                  <xs:element name="SIF_ObjectList">
                    <xs:complexType>
                      <xs:sequence>
                        <xs:element name="SIF_Object" maxOccurs="unbounded">
                          <xs:complexType>
                            <xs:sequence>
                              <xs:element ref="sif:SIF_Contexts" />
                            </xs:sequence>
                            <xs:attribute name="ObjectName" use="required" type="sif:ObjectNameType">
                              <xs:annotation>
                                <xs:documentation>The name of the object being published by this agent.</xs:documentation>
                              </xs:annotation>
                            </xs:attribute>
                          </xs:complexType>
                        </xs:element>
                      </xs:sequence>
                    </xs:complexType>
                  </xs:element>
                </xs:sequence>
                <xs:attribute name="SourceId" use="required">
                  <xs:simpleType>
                    <xs:restriction base="xs:token">
                      <xs:annotation>
                        <xs:documentation>
        The identifier of the SIF node that can publish the SIF_Event. This is the agent identifier that would appear in the SIF_SourceId field of any SIF_Header created by the agent.
      </xs:documentation>
                      </xs:annotation>
                      <xs:maxLength value="64" xmlns:xs="http://www.w3.org/2001/XMLSchema" />
                    </xs:restriction>
                  </xs:simpleType>
                </xs:attribute>
              </xs:complexType>
            </xs:element>
          </xs:sequence>
        </xs:complexType>
      </xs:element>
      <xs:element name="SIF_ChangePublishers" minOccurs="0">
        <xs:complexType>
          <xs:sequence>
            <xs:element name="SIF_Publisher" maxOccurs="unbounded">
              <xs:complexType>
                <xs:sequence>
                  <xs:element name="SIF_ObjectList">
                    <xs:complexType>
                      <xs:sequence>
                        <xs:element name="SIF_Object" maxOccurs="unbounded">
                          <xs:complexType>
                            <xs:sequence>
                              <xs:element ref="sif:SIF_Contexts" />
                            </xs:sequence>
                            <xs:attribute name="ObjectName" use="required" type="sif:ObjectNameType">
                              <xs:annotation>
                                <xs:documentation>The name of the object being published by this agent.</xs:documentation>
                              </xs:annotation>
                            </xs:attribute>
                          </xs:complexType>
                        </xs:element>
                      </xs:sequence>
                    </xs:complexType>
                  </xs:element>
                </xs:sequence>
                <xs:attribute name="SourceId" use="required">
                  <xs:simpleType>
                    <xs:restriction base="xs:token">
                      <xs:annotation>
                        <xs:documentation>
        The identifier of the SIF node that can publish the SIF_Event. This is the agent identifier that would appear in the SIF_SourceId field of any SIF_Header created by the agent.
      </xs:documentation>
                      </xs:annotation>
                      <xs:maxLength value="64" xmlns:xs="http://www.w3.org/2001/XMLSchema" />
                    </xs:restriction>
                  </xs:simpleType>
                </xs:attribute>
              </xs:complexType>
            </xs:element>
          </xs:sequence>
        </xs:complexType>
      </xs:element>
      <xs:element name="SIF_DeletePublishers" minOccurs="0">
        <xs:complexType>
          <xs:sequence>
            <xs:element name="SIF_Publisher" maxOccurs="unbounded">
              <xs:complexType>
                <xs:sequence>
                  <xs:element name="SIF_ObjectList">
                    <xs:complexType>
                      <xs:sequence>
                        <xs:element name="SIF_Object" maxOccurs="unbounded">
                          <xs:complexType>
                            <xs:sequence>
                              <xs:element ref="sif:SIF_Contexts" />
                            </xs:sequence>
                            <xs:attribute name="ObjectName" use="required" type="sif:ObjectNameType">
                              <xs:annotation>
                                <xs:documentation>The name of the object being published by this agent.</xs:documentation>
                              </xs:annotation>
                            </xs:attribute>
                          </xs:complexType>
                        </xs:element>
                      </xs:sequence>
                    </xs:complexType>
                  </xs:element>
                </xs:sequence>
                <xs:attribute name="SourceId" use="required">
                  <xs:simpleType>
                    <xs:restriction base="xs:token">
                      <xs:annotation>
                        <xs:documentation>
        The identifier of the SIF node that can publish the SIF_Event. This is the agent identifier that would appear in the SIF_SourceId field of any SIF_Header created by the agent.
      </xs:documentation>
                      </xs:annotation>
                      <xs:maxLength value="64" xmlns:xs="http://www.w3.org/2001/XMLSchema" />
                    </xs:restriction>
                  </xs:simpleType>
                </xs:attribute>
              </xs:complexType>
            </xs:element>
          </xs:sequence>
        </xs:complexType>
      </xs:element>
      <xs:element name="SIF_Responders" minOccurs="0">
        <xs:complexType>
          <xs:sequence>
            <xs:element name="SIF_Responder" maxOccurs="unbounded">
              <xs:complexType>
                <xs:sequence>
                  <xs:element name="SIF_ObjectList">
                    <xs:complexType>
                      <xs:sequence>
                        <xs:element name="SIF_Object" maxOccurs="unbounded">
                          <xs:complexType>
                            <xs:sequence>
                              <xs:element name="SIF_ExtendedQuerySupport" type="xs:boolean" />
                              <xs:element ref="sif:SIF_Contexts" />
                            </xs:sequence>
                            <xs:attribute name="ObjectName" use="required" type="sif:ObjectNameType">
                              <xs:annotation>
                                <xs:documentation>The name of the object for which the agent can respond to requests.</xs:documentation>
                              </xs:annotation>
                            </xs:attribute>
                          </xs:complexType>
                        </xs:element>
                      </xs:sequence>
                    </xs:complexType>
                  </xs:element>
                </xs:sequence>
                <xs:attribute name="SourceId" use="required">
                  <xs:simpleType>
                    <xs:restriction base="xs:token">
                      <xs:annotation>
                        <xs:documentation>
        The identifier of the SIF node that can respond. This is the agent identifier that would appear in the SIF_SourceId field of any SIF_Header created by the agent.
      </xs:documentation>
                      </xs:annotation>
                      <xs:maxLength value="64" xmlns:xs="http://www.w3.org/2001/XMLSchema" />
                    </xs:restriction>
                  </xs:simpleType>
                </xs:attribute>
              </xs:complexType>
            </xs:element>
          </xs:sequence>
        </xs:complexType>
      </xs:element>
      <xs:element name="SIF_Requesters" minOccurs="0">
        <xs:complexType>
          <xs:sequence>
            <xs:element name="SIF_Requester" maxOccurs="unbounded">
              <xs:complexType>
                <xs:sequence>
                  <xs:element name="SIF_ObjectList">
                    <xs:complexType>
                      <xs:sequence>
                        <xs:element name="SIF_Object" maxOccurs="unbounded">
                          <xs:complexType>
                            <xs:sequence>
                              <xs:element name="SIF_ExtendedQuerySupport" type="xs:boolean" />
                              <xs:element ref="sif:SIF_Contexts" />
                            </xs:sequence>
                            <xs:attribute name="ObjectName" use="required" type="sif:ObjectNameType">
                              <xs:annotation>
                                <xs:documentation>The name of the object being requested by this agent.</xs:documentation>
                              </xs:annotation>
                            </xs:attribute>
                          </xs:complexType>
                        </xs:element>
                      </xs:sequence>
                    </xs:complexType>
                  </xs:element>
                </xs:sequence>
                <xs:attribute name="SourceId" use="required">
                  <xs:simpleType>
                    <xs:restriction base="xs:token">
                      <xs:annotation>
                        <xs:documentation>
        The identifier of the SIF node that can request an object. This is the agent identifier that would appear in the SIF_SourceId field of any SIF_Header created by the agent.
      </xs:documentation>
                      </xs:annotation>
                      <xs:maxLength value="64" xmlns:xs="http://www.w3.org/2001/XMLSchema" />
                    </xs:restriction>
                  </xs:simpleType>
                </xs:attribute>
              </xs:complexType>
            </xs:element>
          </xs:sequence>
        </xs:complexType>
      </xs:element>
      <xs:element name="SIF_SIFNodes" minOccurs="0">
        <xs:complexType>
          <xs:sequence>
            <xs:element name="SIF_SIFNode" maxOccurs="unbounded">
              <xs:complexType>
                <xs:sequence>
                  <xs:element name="SIF_Name" type="xs:normalizedString">
                    <xs:annotation>
                      <xs:documentation>The descriptive name of the SIF node (i.e. Ramsey Food Services).</xs:documentation>
                    </xs:annotation>
                  </xs:element>
                  <xs:element name="SIF_Icon" minOccurs="0" type="xs:anyURI">
                    <xs:annotation>
                      <xs:documentation>
        HTTP URL referencing an icon for graphical representation of the application/agent.
        Should range from 16x16 pixels to 128x128 pixels and be of an image MIME type commonly supported by Web browsers (e.g. PNG, JPEG, GIF).
        Agents may optionally follow the more restrictive guidelines at [FAVICON].
      </xs:documentation>
                    </xs:annotation>
                  </xs:element>
                  <xs:element name="SIF_NodeVendor" minOccurs="0">
                    <xs:simpleType>
                      <xs:restriction base="xs:normalizedString">
                        <xs:annotation>
                          <xs:documentation>The vendor of the SIF agent.</xs:documentation>
                        </xs:annotation>
                        <xs:maxLength value="256" xmlns:xs="http://www.w3.org/2001/XMLSchema" />
                      </xs:restriction>
                    </xs:simpleType>
                  </xs:element>
                  <xs:element name="SIF_NodeVersion" minOccurs="0">
                    <xs:simpleType>
                      <xs:restriction base="xs:normalizedString">
                        <xs:annotation>
                          <xs:documentation>
        The agent version number.  The format of this field is undefined, but it should
        match the format used in the agent's conformance statement, if the agent is SIF Certified.
      </xs:documentation>
                        </xs:annotation>
                        <xs:maxLength value="32" xmlns:xs="http://www.w3.org/2001/XMLSchema" />
                      </xs:restriction>
                    </xs:simpleType>
                  </xs:element>
                  <xs:element name="SIF_Application" minOccurs="0">
                    <xs:complexType>
                      <xs:sequence>
                        <xs:element name="SIF_Vendor">
                          <xs:simpleType>
                            <xs:restriction base="xs:normalizedString">
                              <xs:annotation>
                                <xs:documentation>The name of the company of the product that this agent supports.</xs:documentation>
                              </xs:annotation>
                              <xs:maxLength value="256" xmlns:xs="http://www.w3.org/2001/XMLSchema" />
                            </xs:restriction>
                          </xs:simpleType>
                        </xs:element>
                        <xs:element name="SIF_Product">
                          <xs:simpleType>
                            <xs:restriction base="xs:normalizedString">
                              <xs:annotation>
                                <xs:documentation>The name of the product that this agent supports.</xs:documentation>
                              </xs:annotation>
                              <xs:maxLength value="256" xmlns:xs="http://www.w3.org/2001/XMLSchema" />
                            </xs:restriction>
                          </xs:simpleType>
                        </xs:element>
                        <xs:element name="SIF_Version">
                          <xs:simpleType>
                            <xs:restriction base="xs:normalizedString">
                              <xs:annotation>
                                <xs:documentation>The version of the product. This field is informative only.</xs:documentation>
                              </xs:annotation>
                              <xs:maxLength value="32" xmlns:xs="http://www.w3.org/2001/XMLSchema" />
                            </xs:restriction>
                          </xs:simpleType>
                        </xs:element>
                      </xs:sequence>
                    </xs:complexType>
                  </xs:element>
                  <xs:element name="SIF_SourceId">
                    <xs:simpleType>
                      <xs:restriction base="xs:token">
                        <xs:annotation>
                          <xs:documentation>
        The agent or ZIS identifier. This is the same value that the SIF node would place in any SIF_Header that it would create.
      </xs:documentation>
                        </xs:annotation>
                        <xs:maxLength value="64" xmlns:xs="http://www.w3.org/2001/XMLSchema" />
                      </xs:restriction>
                    </xs:simpleType>
                  </xs:element>
                  <xs:element name="SIF_Mode">
                    <xs:annotation>
                      <xs:documentation>Specifies the communication mode (Pull or Push) as chosen by the message sender.</xs:documentation>
                    </xs:annotation>
                    <xs:simpleType>
                      <xs:restriction base="xs:token">
                        <xs:enumeration value="Push" />
                        <xs:enumeration value="Pull" />
                      </xs:restriction>
                    </xs:simpleType>
                  </xs:element>
                  <xs:element ref="sif:SIF_Protocol" minOccurs="0" />
                  <xs:element name="SIF_VersionList">
                    <xs:complexType>
                      <xs:sequence>
                        <xs:element name="SIF_Version" maxOccurs="unbounded" type="sif:VersionWithWildcardsType">
                          <xs:annotation>
                            <xs:documentation>
        This is the version or versions of the SIF Implementation Specification that define(s) the messages the SIF node can receive.
        For agents, this information was communicated when the SIF node registered with the ZIS.
      </xs:documentation>
                          </xs:annotation>
                        </xs:element>
                      </xs:sequence>
                    </xs:complexType>
                  </xs:element>
                  <xs:element ref="sif:SIF_AuthenticationLevel" minOccurs="0" />
                  <xs:element ref="sif:SIF_EncryptionLevel" minOccurs="0" />
                  <xs:element name="SIF_MaxBufferSize" type="xs:unsignedInt">
                    <xs:annotation>
                      <xs:documentation>
        Specifies that the ZIS should never send packets larger than this value. Query responses from other providers are controlled by the SIF_MaxBufferSize attribute in the SIF_Request message.
      </xs:documentation>
                    </xs:annotation>
                  </xs:element>
                  <xs:element name="SIF_Sleeping">
                    <xs:annotation>
                      <xs:documentation>This element shows whether the SIF node is ready to process messages.</xs:documentation>
                    </xs:annotation>
                    <xs:simpleType>
                      <xs:restriction base="xs:token">
                        <xs:enumeration value="No">
                          <xs:annotation>
                            <xs:documentation>The SIF node is ready to process messages</xs:documentation>
                          </xs:annotation>
                        </xs:enumeration>
                        <xs:enumeration value="Yes">
                          <xs:annotation>
                            <xs:documentation>The SIF node is sleeping and cannot process messages</xs:documentation>
                          </xs:annotation>
                        </xs:enumeration>
                      </xs:restriction>
                    </xs:simpleType>
                  </xs:element>
                </xs:sequence>
                <xs:attribute name="Type" use="required">
                  <xs:annotation>
                    <xs:documentation>
        The type of the node registered with the ZIS.  Note that ZIS is forward-looking and not used currently; all information about this
        Zone/ZIS is contained outside SIF_SIFNodes.
      </xs:documentation>
                  </xs:annotation>
                  <xs:simpleType>
                    <xs:restriction base="xs:token">
                      <xs:enumeration value="Agent" />
                      <xs:enumeration value="ZIS" />
                    </xs:restriction>
                  </xs:simpleType>
                </xs:attribute>
              </xs:complexType>
            </xs:element>
          </xs:sequence>
        </xs:complexType>
      </xs:element>
      <xs:element name="SIF_SupportedAuthentication" minOccurs="0">
        <xs:complexType>
          <xs:sequence>
            <xs:element name="SIF_ProtocolName" maxOccurs="unbounded">
              <xs:annotation>
                <xs:documentation>Describes a particular authentication protocol supported.</xs:documentation>
              </xs:annotation>
              <xs:simpleType>
                <xs:restriction base="xs:token">
                  <xs:enumeration value="X.509" />
                </xs:restriction>
              </xs:simpleType>
            </xs:element>
          </xs:sequence>
        </xs:complexType>
      </xs:element>
      <xs:element name="SIF_SupportedProtocols">
        <xs:complexType>
          <xs:sequence>
            <xs:element ref="sif:SIF_Protocol" maxOccurs="unbounded" />
          </xs:sequence>
        </xs:complexType>
      </xs:element>
      <xs:element name="SIF_SupportedVersions">
        <xs:complexType>
          <xs:sequence>
            <xs:element name="SIF_Version" maxOccurs="unbounded" type="sif:VersionType">
              <xs:annotation>
                <xs:documentation>Lists a specific SIF Implementation Specification version.</xs:documentation>
              </xs:annotation>
            </xs:element>
          </xs:sequence>
        </xs:complexType>
      </xs:element>
      <xs:element name="SIF_AdministrationURL" minOccurs="0" type="xs:anyURI">
        <xs:annotation>
          <xs:documentation>
        Should a ZIS vendor provide an administration interface for the zone via a URL, the ZIS can make the URL available in SIF_ZoneStatus. Agent administrators can use the URL to access zone administration features, should they have permission to do so.
      </xs:documentation>
        </xs:annotation>
      </xs:element>
      <xs:element ref="sif:SIF_Contexts" />
      <xs:element name="SIF_ServiceProviders" minOccurs="0">
        <xs:complexType>
          <xs:sequence>
            <xs:element name="SIF_ServiceProvider" minOccurs="0" maxOccurs="unbounded">
              <xs:complexType>
                <xs:sequence>
                  <xs:element name="SIF_ServiceList">
                    <xs:complexType>
                      <xs:sequence>
                        <xs:element name="SIF_Service" maxOccurs="unbounded">
                          <xs:complexType>
                            <xs:sequence>
                              <xs:element ref="sif:SIF_Contexts" minOccurs="0" />
                            </xs:sequence>
                            <xs:attribute name="ServiceName" use="required" type="xs:token">
                              <xs:annotation>
                                <xs:documentation>The name of the SIF Zone Service as defined by a SIF Zone Service specification</xs:documentation>
                              </xs:annotation>
                            </xs:attribute>
                          </xs:complexType>
                        </xs:element>
                      </xs:sequence>
                    </xs:complexType>
                  </xs:element>
                </xs:sequence>
                <xs:attribute name="SourceId" use="required" type="xs:token">
                  <xs:annotation>
                    <xs:documentation>The identifier of the SIF node that is providing SIF Services. This is the agent or ZIS identifier that would appear in the SIF_SourceId field of any SIF_Header created by the SIF node.</xs:documentation>
                  </xs:annotation>
                </xs:attribute>
              </xs:complexType>
            </xs:element>
          </xs:sequence>
        </xs:complexType>
      </xs:element>
      <xs:element name="SIF_ServiceResponders" minOccurs="0">
        <xs:complexType>
          <xs:sequence>
            <xs:element name="SIF_ServiceResponder" minOccurs="0" maxOccurs="unbounded">
              <xs:complexType>
                <xs:sequence>
                  <xs:element name="SIF_ServiceList">
                    <xs:complexType>
                      <xs:sequence>
                        <xs:element name="SIF_Service" maxOccurs="unbounded">
                          <xs:complexType>
                            <xs:sequence>
                              <xs:element ref="sif:SIF_Contexts" minOccurs="0" />
                            </xs:sequence>
                            <xs:attribute name="ServiceName" use="required" type="xs:token">
                              <xs:annotation>
                                <xs:documentation>The name of the SIF Zone Service as defined by a SIF Zone Service specification</xs:documentation>
                              </xs:annotation>
                            </xs:attribute>
                          </xs:complexType>
                        </xs:element>
                      </xs:sequence>
                    </xs:complexType>
                  </xs:element>
                </xs:sequence>
                <xs:attribute name="SourceId" use="required" type="xs:token">
                  <xs:annotation>
                    <xs:documentation>
		  The identifier of the SIF node that is providing SIF Services. This is the agent or ZIS identifier that would appear in the SIF_SourceId field of any SIF_Header created by the SIF node.

	  </xs:documentation>
                  </xs:annotation>
                </xs:attribute>
              </xs:complexType>
            </xs:element>
          </xs:sequence>
        </xs:complexType>
      </xs:element>
      <xs:element name="SIF_ServiceRequesters" minOccurs="0" maxOccurs="unbounded">
        <xs:complexType>
          <xs:sequence>
            <xs:element name="SIF_ServiceRequester" minOccurs="0" maxOccurs="unbounded">
              <xs:complexType>
                <xs:sequence>
                  <xs:element name="SIF_ServiceList">
                    <xs:complexType>
                      <xs:sequence>
                        <xs:element name="SIF_Service" maxOccurs="unbounded">
                          <xs:complexType>
                            <xs:sequence>
                              <xs:element name="SIF_Operations" minOccurs="0">
                                <xs:complexType>
                                  <xs:sequence>
                                    <xs:element name="SIF_Operation" maxOccurs="unbounded" type="xs:token">
                                      <xs:annotation>
                                        <xs:documentation>
		  A specific operation with a SIF Zone Service that the agent will invoke.
	  </xs:documentation>
                                      </xs:annotation>
                                    </xs:element>
                                  </xs:sequence>
                                </xs:complexType>
                              </xs:element>
                              <xs:element ref="sif:SIF_Contexts" minOccurs="0" />
                            </xs:sequence>
                            <xs:attribute name="ServiceName" use="required" type="xs:token">
                              <xs:annotation>
                                <xs:documentation>The name of the SIF Zone Service as defined by a SIF Zone Service specification</xs:documentation>
                              </xs:annotation>
                            </xs:attribute>
                          </xs:complexType>
                        </xs:element>
                      </xs:sequence>
                    </xs:complexType>
                  </xs:element>
                </xs:sequence>
                <xs:attribute name="SourceId" use="required" type="xs:token">
                  <xs:annotation>
                    <xs:documentation>
		  The identifier of the SIF node that will respond to SIF_ServiceInput messages. This is the agent or ZIS identifier that would appear in the SIF_SourceId field of any SIF_Header created by the SIF node.

	  </xs:documentation>
                  </xs:annotation>
                </xs:attribute>
              </xs:complexType>
            </xs:element>
          </xs:sequence>
        </xs:complexType>
      </xs:element>
      <xs:element name="SIF_ServiceSubscribers" minOccurs="0">
        <xs:complexType>
          <xs:sequence>
            <xs:element name="SIF_ServiceSubscriber" minOccurs="0" maxOccurs="unbounded">
              <xs:complexType>
                <xs:sequence>
                  <xs:element name="SIF_ServiceList">
                    <xs:complexType>
                      <xs:sequence>
                        <xs:element name="SIF_Service" maxOccurs="unbounded">
                          <xs:complexType>
                            <xs:sequence>
                              <xs:element name="SIF_Operations" minOccurs="0">
                                <xs:complexType>
                                  <xs:sequence>
                                    <xs:element name="SIF_Operation" maxOccurs="unbounded" type="xs:token">
                                      <xs:annotation>
                                        <xs:documentation>
		  A specific notification message that the agent is subscribed to
	  </xs:documentation>
                                      </xs:annotation>
                                    </xs:element>
                                  </xs:sequence>
                                </xs:complexType>
                              </xs:element>
                              <xs:element ref="sif:SIF_Contexts" minOccurs="0" />
                            </xs:sequence>
                            <xs:attribute name="ServiceName" use="required" type="xs:token">
                              <xs:annotation>
                                <xs:documentation>The name of the SIF Zone Service as defined by a SIF Zone Service specification</xs:documentation>
                              </xs:annotation>
                            </xs:attribute>
                          </xs:complexType>
                        </xs:element>
                      </xs:sequence>
                    </xs:complexType>
                  </xs:element>
                </xs:sequence>
                <xs:attribute name="SourceId" use="required" type="xs:token">
                  <xs:annotation>
                    <xs:documentation>The identifier of the SIF node that is providing SIF Services. This is the agent or ZIS identifier that would appear in the SIF_SourceId field of any SIF_Header created by the SIF node.</xs:documentation>
                  </xs:annotation>
                </xs:attribute>
              </xs:complexType>
            </xs:element>
          </xs:sequence>
        </xs:complexType>
      </xs:element>
      <xs:element ref="sif:SIF_Metadata" minOccurs="0" />
      <xs:element ref="sif:SIF_ExtendedElements" minOccurs="0" />
    </xs:sequence>
    <xs:attribute name="ZoneId" use="required" type="xs:token">
      <xs:annotation>
        <xs:documentation>
        The identifier for this Zone.
        It is the same as the SIF_SourceId that the ZIS would place in any SIF_Header that it creates.
      </xs:documentation>
      </xs:annotation>
    </xs:attribute>
  </xs:complexType>

  <xs:element name="SIF_ZoneStatus" type="sif:SIF_ZoneStatusType">
    <xs:key name="SIF_ZoneStatusKey1">
      <xs:selector xpath="." />
      <xs:field xpath="@ZoneId" />
    </xs:key>
  </xs:element>


  <!--SIF_ZoneStatusInfrastructure-->

  <xs:complexType name="SIF_ZoneStatusInfrastructureType">
    <xs:annotation>
      <xs:documentation>
        The SIF_ZoneStatus object is an object that is implicitly provided by all Zone Integration Servers to provide
        information about the ZIS. Zone Integration Servers MUST provide this object.
      </xs:documentation>
    </xs:annotation>
    <xs:sequence>
      <xs:element name="SIF_Name" type="xs:normalizedString">
        <xs:annotation>
          <xs:documentation>The descriptive name for the zone.</xs:documentation>
        </xs:annotation>
      </xs:element>
      <xs:element name="SIF_Icon" minOccurs="0" type="xs:anyURI">
        <xs:annotation>
          <xs:documentation>
        HTTP URL referencing an icon for graphical representation of the ZIS/Zone.
        Should range from 16x16 pixels to 128x128 pixels and be of an image MIME type commonly supported by Web browsers (e.g. PNG, JPEG, GIF).
        Agents may optionally follow the more restrictive guidelines at [FAVICON].
      </xs:documentation>
        </xs:annotation>
      </xs:element>
      <xs:element name="SIF_Vendor" minOccurs="0">
        <xs:complexType>
          <xs:sequence>
            <xs:element name="SIF_Name" type="xs:normalizedString">
              <xs:annotation>
                <xs:documentation>The name of the company that wrote the ZIS.</xs:documentation>
              </xs:annotation>
            </xs:element>
            <xs:element name="SIF_Product" type="xs:normalizedString">
              <xs:annotation>
                <xs:documentation>The product name assigned by the vendor to identify this ZIS.</xs:documentation>
              </xs:annotation>
            </xs:element>
            <xs:element name="SIF_Version" type="xs:normalizedString">
              <xs:annotation>
                <xs:documentation>The version of the vendor's product—not necessarily the SIF version.</xs:documentation>
              </xs:annotation>
            </xs:element>
          </xs:sequence>
        </xs:complexType>
      </xs:element>
      <xs:element name="SIF_Providers" minOccurs="0">
        <xs:complexType>
          <xs:sequence>
            <xs:element name="SIF_Provider" maxOccurs="unbounded">
              <xs:complexType>
                <xs:sequence>
                  <xs:element name="SIF_ObjectList">
                    <xs:complexType>
                      <xs:sequence>
                        <xs:element name="SIF_Object" maxOccurs="unbounded">
                          <xs:complexType>
                            <xs:sequence>
                              <xs:element name="SIF_ExtendedQuerySupport" type="xs:boolean" />
                              <xs:element ref="sif:SIF_Contexts" />
                            </xs:sequence>
                            <xs:attribute name="ObjectName" use="required" type="sif:ObjectNameType">
                              <xs:annotation>
                                <xs:documentation>The name of the object being provided by this SIF node.</xs:documentation>
                              </xs:annotation>
                            </xs:attribute>
                          </xs:complexType>
                        </xs:element>
                      </xs:sequence>
                    </xs:complexType>
                  </xs:element>
                </xs:sequence>
                <xs:attribute name="SourceId" use="required">
                  <xs:simpleType>
                    <xs:restriction base="xs:token">
                      <xs:annotation>
                        <xs:documentation>
        The identifier of the SIF node that is providing objects. This is the agent or ZIS identifier that would appear in the SIF_SourceId field of any SIF_Header created by the SIF node.
      </xs:documentation>
                      </xs:annotation>
                      <xs:maxLength value="64" xmlns:xs="http://www.w3.org/2001/XMLSchema" />
                    </xs:restriction>
                  </xs:simpleType>
                </xs:attribute>
              </xs:complexType>
            </xs:element>
          </xs:sequence>
        </xs:complexType>
      </xs:element>
      <xs:element name="SIF_Subscribers" minOccurs="0">
        <xs:complexType>
          <xs:sequence>
            <xs:element name="SIF_Subscriber" maxOccurs="unbounded">
              <xs:complexType>
                <xs:sequence>
                  <xs:element name="SIF_ObjectList">
                    <xs:complexType>
                      <xs:sequence>
                        <xs:element name="SIF_Object" maxOccurs="unbounded">
                          <xs:complexType>
                            <xs:sequence>
                              <xs:element ref="sif:SIF_Contexts" />
                            </xs:sequence>
                            <xs:attribute name="ObjectName" use="required" type="sif:ObjectNameType">
                              <xs:annotation>
                                <xs:documentation>The name of the object being subscribed to by this SIF node.</xs:documentation>
                              </xs:annotation>
                            </xs:attribute>
                          </xs:complexType>
                        </xs:element>
                      </xs:sequence>
                    </xs:complexType>
                  </xs:element>
                </xs:sequence>
                <xs:attribute name="SourceId" use="required">
                  <xs:simpleType>
                    <xs:restriction base="xs:token">
                      <xs:annotation>
                        <xs:documentation>
        The identifier of the SIF node that is subscribing to the object events. This is the agent or ZIS identifier that would appear in the SIF_SourceId field of any SIF_Header created by the SIF node.
      </xs:documentation>
                      </xs:annotation>
                      <xs:maxLength value="64" xmlns:xs="http://www.w3.org/2001/XMLSchema" />
                    </xs:restriction>
                  </xs:simpleType>
                </xs:attribute>
              </xs:complexType>
            </xs:element>
          </xs:sequence>
        </xs:complexType>
      </xs:element>
      <xs:element name="SIF_AddPublishers" minOccurs="0">
        <xs:complexType>
          <xs:sequence>
            <xs:element name="SIF_Publisher" maxOccurs="unbounded">
              <xs:complexType>
                <xs:sequence>
                  <xs:element name="SIF_ObjectList">
                    <xs:complexType>
                      <xs:sequence>
                        <xs:element name="SIF_Object" maxOccurs="unbounded">
                          <xs:complexType>
                            <xs:sequence>
                              <xs:element ref="sif:SIF_Contexts" />
                            </xs:sequence>
                            <xs:attribute name="ObjectName" use="required" type="sif:ObjectNameType">
                              <xs:annotation>
                                <xs:documentation>The name of the object being published by this agent.</xs:documentation>
                              </xs:annotation>
                            </xs:attribute>
                          </xs:complexType>
                        </xs:element>
                      </xs:sequence>
                    </xs:complexType>
                  </xs:element>
                </xs:sequence>
                <xs:attribute name="SourceId" use="required">
                  <xs:simpleType>
                    <xs:restriction base="xs:token">
                      <xs:annotation>
                        <xs:documentation>
        The identifier of the SIF node that can publish the SIF_Event. This is the agent identifier that would appear in the SIF_SourceId field of any SIF_Header created by the agent.
      </xs:documentation>
                      </xs:annotation>
                      <xs:maxLength value="64" xmlns:xs="http://www.w3.org/2001/XMLSchema" />
                    </xs:restriction>
                  </xs:simpleType>
                </xs:attribute>
              </xs:complexType>
            </xs:element>
          </xs:sequence>
        </xs:complexType>
      </xs:element>
      <xs:element name="SIF_ChangePublishers" minOccurs="0">
        <xs:complexType>
          <xs:sequence>
            <xs:element name="SIF_Publisher" maxOccurs="unbounded">
              <xs:complexType>
                <xs:sequence>
                  <xs:element name="SIF_ObjectList">
                    <xs:complexType>
                      <xs:sequence>
                        <xs:element name="SIF_Object" maxOccurs="unbounded">
                          <xs:complexType>
                            <xs:sequence>
                              <xs:element ref="sif:SIF_Contexts" />
                            </xs:sequence>
                            <xs:attribute name="ObjectName" use="required" type="sif:ObjectNameType">
                              <xs:annotation>
                                <xs:documentation>The name of the object being published by this agent.</xs:documentation>
                              </xs:annotation>
                            </xs:attribute>
                          </xs:complexType>
                        </xs:element>
                      </xs:sequence>
                    </xs:complexType>
                  </xs:element>
                </xs:sequence>
                <xs:attribute name="SourceId" use="required">
                  <xs:simpleType>
                    <xs:restriction base="xs:token">
                      <xs:annotation>
                        <xs:documentation>
        The identifier of the SIF node that can publish the SIF_Event. This is the agent identifier that would appear in the SIF_SourceId field of any SIF_Header created by the agent.
      </xs:documentation>
                      </xs:annotation>
                      <xs:maxLength value="64" xmlns:xs="http://www.w3.org/2001/XMLSchema" />
                    </xs:restriction>
                  </xs:simpleType>
                </xs:attribute>
              </xs:complexType>
            </xs:element>
          </xs:sequence>
        </xs:complexType>
      </xs:element>
      <xs:element name="SIF_DeletePublishers" minOccurs="0">
        <xs:complexType>
          <xs:sequence>
            <xs:element name="SIF_Publisher" maxOccurs="unbounded">
              <xs:complexType>
                <xs:sequence>
                  <xs:element name="SIF_ObjectList">
                    <xs:complexType>
                      <xs:sequence>
                        <xs:element name="SIF_Object" maxOccurs="unbounded">
                          <xs:complexType>
                            <xs:sequence>
                              <xs:element ref="sif:SIF_Contexts" />
                            </xs:sequence>
                            <xs:attribute name="ObjectName" use="required" type="sif:ObjectNameType">
                              <xs:annotation>
                                <xs:documentation>The name of the object being published by this agent.</xs:documentation>
                              </xs:annotation>
                            </xs:attribute>
                          </xs:complexType>
                        </xs:element>
                      </xs:sequence>
                    </xs:complexType>
                  </xs:element>
                </xs:sequence>
                <xs:attribute name="SourceId" use="required">
                  <xs:simpleType>
                    <xs:restriction base="xs:token">
                      <xs:annotation>
                        <xs:documentation>
        The identifier of the SIF node that can publish the SIF_Event. This is the agent identifier that would appear in the SIF_SourceId field of any SIF_Header created by the agent.
      </xs:documentation>
                      </xs:annotation>
                      <xs:maxLength value="64" xmlns:xs="http://www.w3.org/2001/XMLSchema" />
                    </xs:restriction>
                  </xs:simpleType>
                </xs:attribute>
              </xs:complexType>
            </xs:element>
          </xs:sequence>
        </xs:complexType>
      </xs:element>
      <xs:element name="SIF_Responders" minOccurs="0">
        <xs:complexType>
          <xs:sequence>
            <xs:element name="SIF_Responder" maxOccurs="unbounded">
              <xs:complexType>
                <xs:sequence>
                  <xs:element name="SIF_ObjectList">
                    <xs:complexType>
                      <xs:sequence>
                        <xs:element name="SIF_Object" maxOccurs="unbounded">
                          <xs:complexType>
                            <xs:sequence>
                              <xs:element name="SIF_ExtendedQuerySupport" type="xs:boolean" />
                              <xs:element ref="sif:SIF_Contexts" />
                            </xs:sequence>
                            <xs:attribute name="ObjectName" use="required" type="sif:ObjectNameType">
                              <xs:annotation>
                                <xs:documentation>The name of the object for which the agent can respond to requests.</xs:documentation>
                              </xs:annotation>
                            </xs:attribute>
                          </xs:complexType>
                        </xs:element>
                      </xs:sequence>
                    </xs:complexType>
                  </xs:element>
                </xs:sequence>
                <xs:attribute name="SourceId" use="required">
                  <xs:simpleType>
                    <xs:restriction base="xs:token">
                      <xs:annotation>
                        <xs:documentation>
        The identifier of the SIF node that can respond. This is the agent identifier that would appear in the SIF_SourceId field of any SIF_Header created by the agent.
      </xs:documentation>
                      </xs:annotation>
                      <xs:maxLength value="64" xmlns:xs="http://www.w3.org/2001/XMLSchema" />
                    </xs:restriction>
                  </xs:simpleType>
                </xs:attribute>
              </xs:complexType>
            </xs:element>
          </xs:sequence>
        </xs:complexType>
      </xs:element>
      <xs:element name="SIF_Requesters" minOccurs="0">
        <xs:complexType>
          <xs:sequence>
            <xs:element name="SIF_Requester" maxOccurs="unbounded">
              <xs:complexType>
                <xs:sequence>
                  <xs:element name="SIF_ObjectList">
                    <xs:complexType>
                      <xs:sequence>
                        <xs:element name="SIF_Object" maxOccurs="unbounded">
                          <xs:complexType>
                            <xs:sequence>
                              <xs:element name="SIF_ExtendedQuerySupport" type="xs:boolean" />
                              <xs:element ref="sif:SIF_Contexts" />
                            </xs:sequence>
                            <xs:attribute name="ObjectName" use="required" type="sif:ObjectNameType">
                              <xs:annotation>
                                <xs:documentation>The name of the object being requested by this agent.</xs:documentation>
                              </xs:annotation>
                            </xs:attribute>
                          </xs:complexType>
                        </xs:element>
                      </xs:sequence>
                    </xs:complexType>
                  </xs:element>
                </xs:sequence>
                <xs:attribute name="SourceId" use="required">
                  <xs:simpleType>
                    <xs:restriction base="xs:token">
                      <xs:annotation>
                        <xs:documentation>
        The identifier of the SIF node that can request an object. This is the agent identifier that would appear in the SIF_SourceId field of any SIF_Header created by the agent.
      </xs:documentation>
                      </xs:annotation>
                      <xs:maxLength value="64" xmlns:xs="http://www.w3.org/2001/XMLSchema" />
                    </xs:restriction>
                  </xs:simpleType>
                </xs:attribute>
              </xs:complexType>
            </xs:element>
          </xs:sequence>
        </xs:complexType>
      </xs:element>
      <xs:element name="SIF_SIFNodes" minOccurs="0">
        <xs:complexType>
          <xs:sequence>
            <xs:element name="SIF_SIFNode" maxOccurs="unbounded">
              <xs:complexType>
                <xs:sequence>
                  <xs:element name="SIF_Name" type="xs:normalizedString">
                    <xs:annotation>
                      <xs:documentation>The descriptive name of the SIF node (i.e. Ramsey Food Services).</xs:documentation>
                    </xs:annotation>
                  </xs:element>
                  <xs:element name="SIF_Icon" minOccurs="0" type="xs:anyURI">
                    <xs:annotation>
                      <xs:documentation>
        HTTP URL referencing an icon for graphical representation of the application/agent.
        Should range from 16x16 pixels to 128x128 pixels and be of an image MIME type commonly supported by Web browsers (e.g. PNG, JPEG, GIF).
        Agents may optionally follow the more restrictive guidelines at [FAVICON].
      </xs:documentation>
                    </xs:annotation>
                  </xs:element>
                  <xs:element name="SIF_NodeVendor" minOccurs="0">
                    <xs:simpleType>
                      <xs:restriction base="xs:normalizedString">
                        <xs:annotation>
                          <xs:documentation>The vendor of the SIF agent.</xs:documentation>
                        </xs:annotation>
                        <xs:maxLength value="256" xmlns:xs="http://www.w3.org/2001/XMLSchema" />
                      </xs:restriction>
                    </xs:simpleType>
                  </xs:element>
                  <xs:element name="SIF_NodeVersion" minOccurs="0">
                    <xs:simpleType>
                      <xs:restriction base="xs:normalizedString">
                        <xs:annotation>
                          <xs:documentation>
        The agent version number.  The format of this field is undefined, but it should
        match the format used in the agent's conformance statement, if the agent is SIF Certified.
      </xs:documentation>
                        </xs:annotation>
                        <xs:maxLength value="32" xmlns:xs="http://www.w3.org/2001/XMLSchema" />
                      </xs:restriction>
                    </xs:simpleType>
                  </xs:element>
                  <xs:element name="SIF_Application" minOccurs="0">
                    <xs:complexType>
                      <xs:sequence>
                        <xs:element name="SIF_Vendor">
                          <xs:simpleType>
                            <xs:restriction base="xs:normalizedString">
                              <xs:annotation>
                                <xs:documentation>The name of the company of the product that this agent supports.</xs:documentation>
                              </xs:annotation>
                              <xs:maxLength value="256" xmlns:xs="http://www.w3.org/2001/XMLSchema" />
                            </xs:restriction>
                          </xs:simpleType>
                        </xs:element>
                        <xs:element name="SIF_Product">
                          <xs:simpleType>
                            <xs:restriction base="xs:normalizedString">
                              <xs:annotation>
                                <xs:documentation>The name of the product that this agent supports.</xs:documentation>
                              </xs:annotation>
                              <xs:maxLength value="256" xmlns:xs="http://www.w3.org/2001/XMLSchema" />
                            </xs:restriction>
                          </xs:simpleType>
                        </xs:element>
                        <xs:element name="SIF_Version">
                          <xs:simpleType>
                            <xs:restriction base="xs:normalizedString">
                              <xs:annotation>
                                <xs:documentation>The version of the product. This field is informative only.</xs:documentation>
                              </xs:annotation>
                              <xs:maxLength value="32" xmlns:xs="http://www.w3.org/2001/XMLSchema" />
                            </xs:restriction>
                          </xs:simpleType>
                        </xs:element>
                      </xs:sequence>
                    </xs:complexType>
                  </xs:element>
                  <xs:element name="SIF_SourceId">
                    <xs:simpleType>
                      <xs:restriction base="xs:token">
                        <xs:annotation>
                          <xs:documentation>
        The agent or ZIS identifier. This is the same value that the SIF node would place in any SIF_Header that it would create.
      </xs:documentation>
                        </xs:annotation>
                        <xs:maxLength value="64" xmlns:xs="http://www.w3.org/2001/XMLSchema" />
                      </xs:restriction>
                    </xs:simpleType>
                  </xs:element>
                  <xs:element name="SIF_Mode">
                    <xs:annotation>
                      <xs:documentation>Specifies the communication mode (Pull or Push) as chosen by the message sender.</xs:documentation>
                    </xs:annotation>
                    <xs:simpleType>
                      <xs:restriction base="xs:token">
                        <xs:enumeration value="Push" />
                        <xs:enumeration value="Pull" />
                      </xs:restriction>
                    </xs:simpleType>
                  </xs:element>
                  <xs:element ref="sif:SIF_Protocol" minOccurs="0" />
                  <xs:element name="SIF_VersionList">
                    <xs:complexType>
                      <xs:sequence>
                        <xs:element name="SIF_Version" maxOccurs="unbounded" type="sif:VersionWithWildcardsType">
                          <xs:annotation>
                            <xs:documentation>
        This is the version or versions of the SIF Implementation Specification that define(s) the messages the SIF node can receive.
        For agents, this information was communicated when the SIF node registered with the ZIS.
      </xs:documentation>
                          </xs:annotation>
                        </xs:element>
                      </xs:sequence>
                    </xs:complexType>
                  </xs:element>
                  <xs:element ref="sif:SIF_AuthenticationLevel" minOccurs="0" />
                  <xs:element ref="sif:SIF_EncryptionLevel" minOccurs="0" />
                  <xs:element name="SIF_MaxBufferSize" type="xs:unsignedInt">
                    <xs:annotation>
                      <xs:documentation>
        Specifies that the ZIS should never send packets larger than this value. Query responses from other providers are controlled by the SIF_MaxBufferSize attribute in the SIF_Request message.
      </xs:documentation>
                    </xs:annotation>
                  </xs:element>
                  <xs:element name="SIF_Sleeping">
                    <xs:annotation>
                      <xs:documentation>This element shows whether the SIF node is ready to process messages.</xs:documentation>
                    </xs:annotation>
                    <xs:simpleType>
                      <xs:restriction base="xs:token">
                        <xs:enumeration value="No">
                          <xs:annotation>
                            <xs:documentation>The SIF node is ready to process messages</xs:documentation>
                          </xs:annotation>
                        </xs:enumeration>
                        <xs:enumeration value="Yes">
                          <xs:annotation>
                            <xs:documentation>The SIF node is sleeping and cannot process messages</xs:documentation>
                          </xs:annotation>
                        </xs:enumeration>
                      </xs:restriction>
                    </xs:simpleType>
                  </xs:element>
                </xs:sequence>
                <xs:attribute name="Type" use="required">
                  <xs:annotation>
                    <xs:documentation>
        The type of the node registered with the ZIS.  Note that ZIS is forward-looking and not used currently; all information about this
        Zone/ZIS is contained outside SIF_SIFNodes.
      </xs:documentation>
                  </xs:annotation>
                  <xs:simpleType>
                    <xs:restriction base="xs:token">
                      <xs:enumeration value="Agent" />
                      <xs:enumeration value="ZIS" />
                    </xs:restriction>
                  </xs:simpleType>
                </xs:attribute>
              </xs:complexType>
            </xs:element>
          </xs:sequence>
        </xs:complexType>
      </xs:element>
      <xs:element name="SIF_SupportedAuthentication" minOccurs="0">
        <xs:complexType>
          <xs:sequence>
            <xs:element name="SIF_ProtocolName" maxOccurs="unbounded">
              <xs:annotation>
                <xs:documentation>Describes a particular authentication protocol supported.</xs:documentation>
              </xs:annotation>
              <xs:simpleType>
                <xs:restriction base="xs:token">
                  <xs:enumeration value="X.509" />
                </xs:restriction>
              </xs:simpleType>
            </xs:element>
          </xs:sequence>
        </xs:complexType>
      </xs:element>
      <xs:element name="SIF_SupportedProtocols">
        <xs:complexType>
          <xs:sequence>
            <xs:element ref="sif:SIF_Protocol" maxOccurs="unbounded" />
          </xs:sequence>
        </xs:complexType>
      </xs:element>
      <xs:element name="SIF_SupportedVersions">
        <xs:complexType>
          <xs:sequence>
            <xs:element name="SIF_Version" maxOccurs="unbounded" type="sif:VersionType">
              <xs:annotation>
                <xs:documentation>Lists a specific SIF Implementation Specification version.</xs:documentation>
              </xs:annotation>
            </xs:element>
          </xs:sequence>
        </xs:complexType>
      </xs:element>
      <xs:element name="SIF_AdministrationURL" minOccurs="0" type="xs:anyURI">
        <xs:annotation>
          <xs:documentation>
        Should a ZIS vendor provide an administration interface for the zone via a URL, the ZIS can make the URL available in SIF_ZoneStatus. Agent administrators can use the URL to access zone administration features, should they have permission to do so.
      </xs:documentation>
        </xs:annotation>
      </xs:element>
      <xs:element ref="sif:SIF_Contexts" />
      <xs:element name="SIF_ServiceProviders" minOccurs="0">
        <xs:complexType>
          <xs:sequence>
            <xs:element name="SIF_ServiceProvider" minOccurs="0" maxOccurs="unbounded">
              <xs:complexType>
                <xs:sequence>
                  <xs:element name="SIF_ServiceList">
                    <xs:complexType>
                      <xs:sequence>
                        <xs:element name="SIF_Service" maxOccurs="unbounded">
                          <xs:complexType>
                            <xs:sequence>
                              <xs:element ref="sif:SIF_Contexts" minOccurs="0" />
                            </xs:sequence>
                            <xs:attribute name="ServiceName" use="required" type="xs:token">
                              <xs:annotation>
                                <xs:documentation>The name of the SIF Zone Service as defined by a SIF Zone Service specification</xs:documentation>
                              </xs:annotation>
                            </xs:attribute>
                          </xs:complexType>
                        </xs:element>
                      </xs:sequence>
                    </xs:complexType>
                  </xs:element>
                </xs:sequence>
                <xs:attribute name="SourceId" use="required" type="xs:token">
                  <xs:annotation>
                    <xs:documentation>The identifier of the SIF node that is providing SIF Services. This is the agent or ZIS identifier that would appear in the SIF_SourceId field of any SIF_Header created by the SIF node.</xs:documentation>
                  </xs:annotation>
                </xs:attribute>
              </xs:complexType>
            </xs:element>
          </xs:sequence>
        </xs:complexType>
      </xs:element>
      <xs:element name="SIF_ServiceResponders" minOccurs="0">
        <xs:complexType>
          <xs:sequence>
            <xs:element name="SIF_ServiceResponder" minOccurs="0" maxOccurs="unbounded">
              <xs:complexType>
                <xs:sequence>
                  <xs:element name="SIF_ServiceList">
                    <xs:complexType>
                      <xs:sequence>
                        <xs:element name="SIF_Service" maxOccurs="unbounded">
                          <xs:complexType>
                            <xs:sequence>
                              <xs:element ref="sif:SIF_Contexts" minOccurs="0" />
                            </xs:sequence>
                            <xs:attribute name="ServiceName" use="required" type="xs:token">
                              <xs:annotation>
                                <xs:documentation>The name of the SIF Zone Service as defined by a SIF Zone Service specification</xs:documentation>
                              </xs:annotation>
                            </xs:attribute>
                          </xs:complexType>
                        </xs:element>
                      </xs:sequence>
                    </xs:complexType>
                  </xs:element>
                </xs:sequence>
                <xs:attribute name="SourceId" use="required" type="xs:token">
                  <xs:annotation>
                    <xs:documentation>
		  The identifier of the SIF node that is providing SIF Services. This is the agent or ZIS identifier that would appear in the SIF_SourceId field of any SIF_Header created by the SIF node.

	  </xs:documentation>
                  </xs:annotation>
                </xs:attribute>
              </xs:complexType>
            </xs:element>
          </xs:sequence>
        </xs:complexType>
      </xs:element>
      <xs:element name="SIF_ServiceRequesters" minOccurs="0" maxOccurs="unbounded">
        <xs:complexType>
          <xs:sequence>
            <xs:element name="SIF_ServiceRequester" minOccurs="0" maxOccurs="unbounded">
              <xs:complexType>
                <xs:sequence>
                  <xs:element name="SIF_ServiceList">
                    <xs:complexType>
                      <xs:sequence>
                        <xs:element name="SIF_Service" maxOccurs="unbounded">
                          <xs:complexType>
                            <xs:sequence>
                              <xs:element name="SIF_Operations" minOccurs="0">
                                <xs:complexType>
                                  <xs:sequence>
                                    <xs:element name="SIF_Operation" maxOccurs="unbounded" type="xs:token">
                                      <xs:annotation>
                                        <xs:documentation>
		  A specific operation with a SIF Zone Service that the agent will invoke.
	  </xs:documentation>
                                      </xs:annotation>
                                    </xs:element>
                                  </xs:sequence>
                                </xs:complexType>
                              </xs:element>
                              <xs:element ref="sif:SIF_Contexts" minOccurs="0" />
                            </xs:sequence>
                            <xs:attribute name="ServiceName" use="required" type="xs:token">
                              <xs:annotation>
                                <xs:documentation>The name of the SIF Zone Service as defined by a SIF Zone Service specification</xs:documentation>
                              </xs:annotation>
                            </xs:attribute>
                          </xs:complexType>
                        </xs:element>
                      </xs:sequence>
                    </xs:complexType>
                  </xs:element>
                </xs:sequence>
                <xs:attribute name="SourceId" use="required" type="xs:token">
                  <xs:annotation>
                    <xs:documentation>
		  The identifier of the SIF node that will respond to SIF_ServiceInput messages. This is the agent or ZIS identifier that would appear in the SIF_SourceId field of any SIF_Header created by the SIF node.

	  </xs:documentation>
                  </xs:annotation>
                </xs:attribute>
              </xs:complexType>
            </xs:element>
          </xs:sequence>
        </xs:complexType>
      </xs:element>
      <xs:element name="SIF_ServiceSubscribers" minOccurs="0">
        <xs:complexType>
          <xs:sequence>
            <xs:element name="SIF_ServiceSubscriber" minOccurs="0" maxOccurs="unbounded">
              <xs:complexType>
                <xs:sequence>
                  <xs:element name="SIF_ServiceList">
                    <xs:complexType>
                      <xs:sequence>
                        <xs:element name="SIF_Service" maxOccurs="unbounded">
                          <xs:complexType>
                            <xs:sequence>
                              <xs:element name="SIF_Operations" minOccurs="0">
                                <xs:complexType>
                                  <xs:sequence>
                                    <xs:element name="SIF_Operation" maxOccurs="unbounded" type="xs:token">
                                      <xs:annotation>
                                        <xs:documentation>
		  A specific notification message that the agent is subscribed to
	  </xs:documentation>
                                      </xs:annotation>
                                    </xs:element>
                                  </xs:sequence>
                                </xs:complexType>
                              </xs:element>
                              <xs:element ref="sif:SIF_Contexts" minOccurs="0" />
                            </xs:sequence>
                            <xs:attribute name="ServiceName" use="required" type="xs:token">
                              <xs:annotation>
                                <xs:documentation>The name of the SIF Zone Service as defined by a SIF Zone Service specification</xs:documentation>
                              </xs:annotation>
                            </xs:attribute>
                          </xs:complexType>
                        </xs:element>
                      </xs:sequence>
                    </xs:complexType>
                  </xs:element>
                </xs:sequence>
                <xs:attribute name="SourceId" use="required" type="xs:token">
                  <xs:annotation>
                    <xs:documentation>The identifier of the SIF node that is providing SIF Services. This is the agent or ZIS identifier that would appear in the SIF_SourceId field of any SIF_Header created by the SIF node.</xs:documentation>
                  </xs:annotation>
                </xs:attribute>
              </xs:complexType>
            </xs:element>
          </xs:sequence>
        </xs:complexType>
      </xs:element>
      <xs:element ref="sif:SIF_Metadata" minOccurs="0" />
      <xs:element ref="sif:SIF_ExtendedElements" minOccurs="0" />
    </xs:sequence>
    <xs:attribute name="ZoneId" use="required" type="xs:token">
      <xs:annotation>
        <xs:documentation>
        The identifier for this Zone.
        It is the same as the SIF_SourceId that the ZIS would place in any SIF_Header that it creates.
      </xs:documentation>
      </xs:annotation>
    </xs:attribute>
  </xs:complexType>


  <!--Data Model Common Elements-->


  <!--TimeElement-->

  <xs:complexType name="TimeElementType">
    <xs:annotation>
      <xs:documentation>A common metadata element designed to contain time data, both self-defined and by type.</xs:documentation>
    </xs:annotation>
    <xs:sequence>
      <xs:element name="Type" type="xs:normalizedString">
        <xs:annotation>
          <xs:documentation>
        This element is designed to contain the time period attached to an object.
        Very long periods (school year, quarter, etc.) and very small periods (second, millisecond, etc.) can be defined.
        This element provides a scoping description of the time metadata enclosed.
      </xs:documentation>
        </xs:annotation>
      </xs:element>
      <xs:element name="Code" type="xs:token">
        <xs:annotation>
          <xs:documentation>
      This element provides a place for the application to send structured data (code values, unique identifier, timestamps).
      This code value can, depending upon the use case agreement between agents, be used to qualify the data in the </xs:documentation>
        </xs:annotation>
      </xs:element>
      <xs:element name="Name" type="xs:normalizedString">
        <xs:annotation>
          <xs:documentation>
      Contains a human-readable description of the value in </xs:documentation>
        </xs:annotation>
      </xs:element>
      <xs:element name="Value" type="xs:normalizedString">
        <xs:annotation>
          <xs:documentation>Contains the human-readable value.</xs:documentation>
        </xs:annotation>
      </xs:element>
      <xs:element name="StartDateTime" minOccurs="0" nillable="true" type="xs:dateTime" />
      <xs:element name="EndDateTime" minOccurs="0" nillable="true" type="xs:dateTime" />
      <xs:element name="SpanGaps" minOccurs="0" nillable="true">
        <xs:complexType>
          <xs:sequence>
            <xs:element name="SpanGap" minOccurs="0" maxOccurs="unbounded">
              <xs:complexType>
                <xs:sequence>
                  <xs:element name="Type" type="xs:normalizedString" />
                  <xs:element name="Code" type="xs:token" />
                  <xs:element name="Name" type="xs:normalizedString" />
                  <xs:element name="Value" type="xs:normalizedString" />
                  <xs:element name="StartDateTime" minOccurs="0" nillable="true" type="xs:dateTime" />
                  <xs:element name="EndDateTime" minOccurs="0" nillable="true" type="xs:dateTime" />
                </xs:sequence>
              </xs:complexType>
            </xs:element>
          </xs:sequence>
        </xs:complexType>
      </xs:element>
      <xs:element name="IsCurrent" type="xs:boolean">
        <xs:annotation>
          <xs:documentation>
      This element allows for the system to tag an object as being explicitly current.
      Although the baseline assumption in SIF is that objects are always current (default value is typically </xs:documentation>
        </xs:annotation>
      </xs:element>
    </xs:sequence>
  </xs:complexType>

  <xs:element name="TimeElement" type="sif:TimeElementType" />


  <!--LifeCycle-->

  <xs:complexType name="LifeCycleType">
    <xs:annotation>
      <xs:documentation>
        This common metadata element describes the life cycle of the object it represents, based on the IEEE LOM LifeCycle element [LOM].
      </xs:documentation>
    </xs:annotation>
    <xs:sequence>
      <xs:element name="Created" minOccurs="0" nillable="true">
        <xs:complexType>
          <xs:sequence>
            <xs:element name="DateTime" type="xs:dateTime" />
            <xs:element name="Creators" minOccurs="0" nillable="true">
              <xs:complexType>
                <xs:sequence>
                  <xs:element name="Creator" maxOccurs="unbounded">
                    <xs:complexType>
                      <xs:sequence>
                        <xs:element name="Name" type="xs:normalizedString">
                          <xs:annotation>
                            <xs:documentation>
      Human-readable name of the data's creator. If the object contains system-generated data,
      the name should identify the creating service or application.
    </xs:documentation>
                          </xs:annotation>
                        </xs:element>
                        <xs:element name="ID" type="xs:normalizedString">
                          <xs:annotation>
                            <xs:documentation>Unique identifier of the creator.  An email address or URI could be used here.</xs:documentation>
                          </xs:annotation>
                        </xs:element>
                      </xs:sequence>
                    </xs:complexType>
                  </xs:element>
                </xs:sequence>
              </xs:complexType>
            </xs:element>
          </xs:sequence>
        </xs:complexType>
      </xs:element>
      <xs:element name="ModificationHistory" minOccurs="0" nillable="true">
        <xs:complexType>
          <xs:sequence>
            <xs:element name="Modified" minOccurs="0" maxOccurs="unbounded">
              <xs:complexType>
                <xs:sequence>
                  <xs:element name="By" type="xs:normalizedString">
                    <xs:annotation>
                      <xs:documentation>Identifier of the system or person that modified the data.</xs:documentation>
                    </xs:annotation>
                  </xs:element>
                  <xs:element name="DateTime" type="xs:dateTime">
                    <xs:annotation>
                      <xs:documentation>The date/time the modification occurred.</xs:documentation>
                    </xs:annotation>
                  </xs:element>
                  <xs:element name="Description" minOccurs="0" nillable="true" type="xs:string">
                    <xs:annotation>
                      <xs:documentation>Human readable description of the data modifications.</xs:documentation>
                    </xs:annotation>
                  </xs:element>
                </xs:sequence>
              </xs:complexType>
            </xs:element>
          </xs:sequence>
        </xs:complexType>
      </xs:element>
      <xs:element name="TimeElements" minOccurs="0" nillable="true">
        <xs:complexType>
          <xs:sequence>
            <xs:element ref="sif:TimeElement" minOccurs="0" maxOccurs="unbounded" />
          </xs:sequence>
        </xs:complexType>
      </xs:element>
    </xs:sequence>
  </xs:complexType>

  <xs:element name="LifeCycle" type="sif:LifeCycleType" />


  <!--RightsElement-->

  <xs:complexType name="RightsElementType">
    <xs:annotation>
      <xs:documentation>
				A common metadata element designed to carry any intellectual property or copyright information, based on the IEEE LOM Rights element [LOM].
			</xs:documentation>
    </xs:annotation>
    <xs:sequence>
      <xs:element name="Cost" minOccurs="0" nillable="true" type="xs:boolean" />
      <xs:element name="FeesForUse" minOccurs="0" nillable="true">
        <xs:complexType>
          <xs:sequence>
            <xs:element name="FeeForUse" minOccurs="0" maxOccurs="unbounded">
              <xs:complexType>
                <xs:sequence>
                  <xs:element name="UseType" type="xs:string">
                    <xs:annotation>
                      <xs:documentation>
			A description of the fee structure for this resource.
			Some resources may be licensed differently depending upon their context.
			For example, a content provider might charge one fee structure for resources used in the classroom and a separate fee for those
			resources available to parents from home.
		</xs:documentation>
                    </xs:annotation>
                  </xs:element>
                  <xs:element name="MeteringType" type="xs:token" />
                  <xs:element name="MeteringURL" minOccurs="0" nillable="true" type="xs:anyURI" />
                  <xs:element name="PerUseCharge" minOccurs="0" nillable="true" type="sif:MonetaryAmountType" />
                </xs:sequence>
              </xs:complexType>
            </xs:element>
          </xs:sequence>
        </xs:complexType>
      </xs:element>
      <xs:element name="CopyrightStatement" minOccurs="0" nillable="true" type="xs:string" />
      <xs:element name="TermsOfUse" minOccurs="0" nillable="true" type="xs:string" />
    </xs:sequence>
  </xs:complexType>

  <xs:element name="RightsElement" type="sif:RightsElementType" />


  <!--EducationFilter-->

  <xs:complexType name="EducationFilterType">
    <xs:sequence>
      <xs:element name="MediaTypes" minOccurs="0" nillable="true">
        <xs:complexType>
          <xs:sequence>
            <xs:element name="MediaType" maxOccurs="unbounded" type="xs:token" />
          </xs:sequence>
        </xs:complexType>
      </xs:element>
      <xs:element name="GradeLevels" minOccurs="0" nillable="true" type="sif:GradeLevelsType">
        <xs:annotation>
          <xs:documentation>Applicable grade levels as defined by SIF.</xs:documentation>
        </xs:annotation>
      </xs:element>
      <xs:element name="SubjectAreas" minOccurs="0" nillable="true">
        <xs:complexType>
          <xs:sequence>
            <xs:element name="SubjectArea" maxOccurs="unbounded" type="sif:SubjectAreaType" />
          </xs:sequence>
        </xs:complexType>
      </xs:element>
      <xs:element name="InterestLevels" minOccurs="0" nillable="true">
        <xs:complexType>
          <xs:sequence>
            <xs:element name="InterestLevel" maxOccurs="unbounded" type="sif:GradeLevelType" />
          </xs:sequence>
        </xs:complexType>
      </xs:element>
      <xs:element name="LearningStandardItems" minOccurs="0" nillable="true">
        <xs:complexType>
          <xs:sequence>
            <xs:element name="LearningStandardItemRefId" maxOccurs="unbounded" type="sif:IdRefType" />
          </xs:sequence>
        </xs:complexType>
      </xs:element>
      <xs:element name="BloomsTaxonomyLevels" minOccurs="0" nillable="true">
        <xs:complexType>
          <xs:sequence>
            <xs:element name="BloomsTaxonomyLevel" minOccurs="0" maxOccurs="unbounded">
              <xs:simpleType>
                <xs:restriction base="xs:token">
                  <xs:enumeration value="Knowledge" />
                  <xs:enumeration value="Comprehension" />
                  <xs:enumeration value="Application" />
                  <xs:enumeration value="Analysis" />
                  <xs:enumeration value="Synthesis" />
                  <xs:enumeration value="Evaluation" />
                </xs:restriction>
              </xs:simpleType>
            </xs:element>
          </xs:sequence>
        </xs:complexType>
      </xs:element>
      <xs:element name="MultipleIntelligences" minOccurs="0" nillable="true">
        <xs:complexType>
          <xs:sequence>
            <xs:element name="MultipleIntelligence" minOccurs="0" maxOccurs="unbounded">
              <xs:simpleType>
                <xs:restriction base="xs:token">
                  <xs:enumeration value="Linguistic" />
                  <xs:enumeration value="Logical-Mathematical" />
                  <xs:enumeration value="Spatial" />
                  <xs:enumeration value="Musical" />
                  <xs:enumeration value="Bodily-Kinesthetic" />
                  <xs:enumeration value="Interpersonal" />
                  <xs:enumeration value="Intrapersonal" />
                  <xs:enumeration value="Naturalist" />
                </xs:restriction>
              </xs:simpleType>
            </xs:element>
          </xs:sequence>
        </xs:complexType>
      </xs:element>
      <xs:element name="InstructionalStrategies" minOccurs="0" nillable="true">
        <xs:complexType>
          <xs:sequence>
            <xs:element name="InstructionalStrategy" minOccurs="0" maxOccurs="unbounded">
              <xs:simpleType>
                <xs:restriction base="xs:token">
                  <xs:enumeration value="Lecture" />
                  <xs:enumeration value="Online" />
                  <xs:enumeration value="Discussion" />
                  <xs:enumeration value="Cooperative Group" />
                  <xs:enumeration value="Scenario" />
                  <xs:enumeration value="Demonstration/Lab" />
                  <xs:enumeration value="Self-study" />
                  <xs:enumeration value="Problem-Based Learning" />
                  <xs:enumeration value="Project" />
                  <xs:enumeration value="Other" />
                </xs:restriction>
              </xs:simpleType>
            </xs:element>
          </xs:sequence>
        </xs:complexType>
      </xs:element>
      <xs:element name="Title" minOccurs="0" nillable="true" type="xs:normalizedString">
        <xs:annotation>
          <xs:documentation>The title of the content.</xs:documentation>
        </xs:annotation>
      </xs:element>
      <xs:element name="Summary" minOccurs="0" nillable="true" type="xs:normalizedString">
        <xs:annotation>
          <xs:documentation>A summary of the content.</xs:documentation>
        </xs:annotation>
      </xs:element>
      <xs:element name="LearningObjectives" minOccurs="0" nillable="true">
        <xs:complexType>
          <xs:sequence>
            <xs:element name="LearningObjective" maxOccurs="unbounded" type="xs:normalizedString">
              <xs:annotation>
                <xs:documentation />
              </xs:annotation>
            </xs:element>
          </xs:sequence>
        </xs:complexType>
      </xs:element>
      <xs:element name="ResourceTypes" minOccurs="0" nillable="true">
        <xs:complexType>
          <xs:sequence>
            <xs:element name="ResourceType" maxOccurs="unbounded">
              <xs:annotation>
                <xs:documentation />
              </xs:annotation>
              <xs:simpleType>
                <xs:restriction base="xs:token">
                  <xs:enumeration value="Supplemental Resource" />
                  <xs:enumeration value="Remedial Resource" />
                  <xs:enumeration value="Core Instructional Resource" />
                  <xs:enumeration value="Assessment" />
                  <xs:enumeration value="Other" />
                </xs:restriction>
              </xs:simpleType>
            </xs:element>
          </xs:sequence>
        </xs:complexType>
      </xs:element>
    </xs:sequence>
  </xs:complexType>

  <xs:element name="EducationFilter" type="sif:EducationFilterType" />


  <!--ElectronicIdList-->

  <xs:complexType name="ElectronicIdListType">
    <xs:annotation>
      <xs:documentation>A list of electronic identifiers associated with an entity.</xs:documentation>
    </xs:annotation>
    <xs:sequence>
      <xs:element ref="sif:ElectronicId" maxOccurs="unbounded" />
    </xs:sequence>
  </xs:complexType>

  <xs:element name="ElectronicIdList" type="sif:ElectronicIdListType" />


  <!--ElectronicId-->

  <xs:complexType name="ElectronicIdType">
    <xs:annotation>
      <xs:documentation>
        Common element used to specify entity identifiers that are read by electronic equipment. It is used in objects such
        as LearnerPersonal, StaffPersonal, and LibraryPatronStatus.
      </xs:documentation>
    </xs:annotation>
    <xs:simpleContent>
      <xs:extension base="xs:normalizedString">
        <xs:attribute name="Type" use="required">
          <xs:annotation>
            <xs:documentation>Electronic ID type.</xs:documentation>
          </xs:annotation>
          <xs:simpleType>
            <xs:restriction base="xs:token">
              <xs:enumeration value="Barcode" />
              <xs:enumeration value="Magstripe" />
              <xs:enumeration value="PIN" />
              <xs:enumeration value="RFID" />
            </xs:restriction>
          </xs:simpleType>
        </xs:attribute>
      </xs:extension>
    </xs:simpleContent>
  </xs:complexType>

  <xs:element name="ElectronicId" type="sif:ElectronicIdType" />


  <!--SchoolURL-->

  <xs:simpleType name="SchoolURLType">
    <xs:restriction base="xs:anyURI">
      <xs:annotation>
        <xs:documentation>URL for a school.</xs:documentation>
      </xs:annotation>
    </xs:restriction>
  </xs:simpleType>

  <xs:element name="SchoolURL" type="sif:SchoolURLType" />


  <!--LocalId-->

  <xs:simpleType name="LocalIdType">
    <xs:restriction base="xs:normalizedString">
      <xs:annotation>
        <xs:documentation>
        This is a common element used to define the locally assigned identifier associated with an entity. It is used in
        LearnerPersonal, WorkforcePersonal, SchoolInfo, and other objects.
      </xs:documentation>
      </xs:annotation>
    </xs:restriction>
  </xs:simpleType>

  <xs:element name="LocalId" type="sif:LocalIdType" />


  <!--SchoolYear-->

  <xs:simpleType name="SchoolYearType">
    <xs:restriction base="xs:gYear">
      <xs:annotation>
        <xs:documentation>School year for which this information is applicable, expressed as the four-digit year in which the school year ends (e.g., "2004" for the 2003-04 school year).</xs:documentation>
      </xs:annotation>
    </xs:restriction>
  </xs:simpleType>

  <xs:element name="SchoolYear" type="sif:SchoolYearType" />


  <!--LastName-->

  <xs:simpleType name="LastNameType">
    <xs:restriction base="xs:normalizedString">
      <xs:annotation>
        <xs:documentation>A person's last name.</xs:documentation>
      </xs:annotation>
    </xs:restriction>
  </xs:simpleType>

  <xs:element name="LastName" type="sif:LastNameType" />


  <!--FirstName-->

  <xs:simpleType name="FirstNameType">
    <xs:restriction base="xs:normalizedString">
      <xs:annotation>
        <xs:documentation>A person's first name.</xs:documentation>
      </xs:annotation>
    </xs:restriction>
  </xs:simpleType>

  <xs:element name="FirstName" type="sif:FirstNameType" />


  <!--MiddleName-->

  <xs:simpleType name="MiddleNameType">
    <xs:restriction base="xs:normalizedString">
      <xs:annotation>
        <xs:documentation>A person's middle name or initial.</xs:documentation>
      </xs:annotation>
    </xs:restriction>
  </xs:simpleType>

  <xs:element name="MiddleName" type="sif:MiddleNameType" />


  <!--Address-->

  <xs:complexType name="AddressType">
    <xs:annotation>
      <xs:documentation>
      This element contains address data, some of which is defined by the BS7666
      International Address and Geographic Location Specification. Other
      elements are present for support of international addresses. Applications
      storing address information in the traditional line format must translate this
      information into the appropriate data elements below.
    </xs:documentation>
    </xs:annotation>
    <xs:sequence>
      <xs:element name="LocalId" minOccurs="0" nillable="true" type="xs:normalizedString">
        <xs:annotation>
          <xs:documentation>The locally assigned identifier for this address in the publishing system.</xs:documentation>
        </xs:annotation>
      </xs:element>
      <xs:element name="StartDate" minOccurs="0" nillable="true" type="xs:date">
        <xs:annotation>
          <xs:documentation>Date person began using this address.</xs:documentation>
        </xs:annotation>
      </xs:element>
      <xs:element name="EndDate" minOccurs="0" nillable="true" type="xs:date">
        <xs:annotation>
          <xs:documentation>Date person stopped using this address.</xs:documentation>
        </xs:annotation>
      </xs:element>
      <xs:element name="PAON">
        <xs:complexType>
          <xs:sequence>
            <xs:element name="Description" minOccurs="0" nillable="true" type="xs:normalizedString">
              <xs:annotation>
                <xs:documentation>Dwelling name, or at least a general description of the location in lieu of having any other information. This is required when no other PAON information is provided.</xs:documentation>
              </xs:annotation>
            </xs:element>
            <xs:element name="StartNumber" minOccurs="0" nillable="true" type="xs:normalizedString">
              <xs:annotation>
                <xs:documentation>Start (single) dwelling number.</xs:documentation>
              </xs:annotation>
            </xs:element>
            <xs:element name="StartNumberSuffix" minOccurs="0" nillable="true" type="xs:normalizedString">
              <xs:annotation>
                <xs:documentation>Start (single) dwelling number suffix.</xs:documentation>
              </xs:annotation>
            </xs:element>
            <xs:element name="EndNumber" minOccurs="0" nillable="true" type="xs:normalizedString">
              <xs:annotation>
                <xs:documentation>End dwelling number.</xs:documentation>
              </xs:annotation>
            </xs:element>
            <xs:element name="EndNumberSuffix" minOccurs="0" nillable="true" type="xs:normalizedString">
              <xs:annotation>
                <xs:documentation>End dwelling number suffix.</xs:documentation>
              </xs:annotation>
            </xs:element>
          </xs:sequence>
        </xs:complexType>
      </xs:element>
      <xs:element name="SAON" minOccurs="0" nillable="true">
        <xs:complexType>
          <xs:sequence>
            <xs:element name="Description" minOccurs="0" nillable="true" type="xs:normalizedString">
              <xs:annotation>
                <xs:documentation>Sub-dwelling name, or other descriptive information in lieu of having any other information.  This is required when no other SAON data is provided.</xs:documentation>
              </xs:annotation>
            </xs:element>
            <xs:element name="StartNumber" minOccurs="0" nillable="true" type="xs:normalizedString">
              <xs:annotation>
                <xs:documentation>Start (single) dwelling number.</xs:documentation>
              </xs:annotation>
            </xs:element>
            <xs:element name="StartNumberSuffix" minOccurs="0" nillable="true" type="xs:normalizedString">
              <xs:annotation>
                <xs:documentation>Start (single) dwelling number suffix.</xs:documentation>
              </xs:annotation>
            </xs:element>
            <xs:element name="EndNumber" minOccurs="0" nillable="true" type="xs:normalizedString">
              <xs:annotation>
                <xs:documentation>End dwelling number.</xs:documentation>
              </xs:annotation>
            </xs:element>
            <xs:element name="EndNumberSuffix" minOccurs="0" nillable="true" type="xs:normalizedString">
              <xs:annotation>
                <xs:documentation>End dwelling number suffix.</xs:documentation>
              </xs:annotation>
            </xs:element>
          </xs:sequence>
        </xs:complexType>
      </xs:element>
      <xs:element name="Street" minOccurs="0" nillable="true" type="xs:normalizedString">
        <xs:annotation>
          <xs:documentation>The name of the street.</xs:documentation>
        </xs:annotation>
      </xs:element>
      <xs:element name="Locality" minOccurs="0" nillable="true" type="xs:normalizedString">
        <xs:annotation>
          <xs:documentation>The locality name refers to a neighbourhood, suburb, district, village, estate, settlement, or parish that may form part of a town, or stand in its own right within the context of an administrative area.  Where an industrial estate contains streets it is defined as a locality in its own right.  At least one of Locality, Town, or AdministrativeArea must be specified.</xs:documentation>
        </xs:annotation>
      </xs:element>
      <xs:element name="Town" minOccurs="0" nillable="true" type="xs:normalizedString">
        <xs:annotation>
          <xs:documentation>The city name refers to a city or town that is not an adminstrative area, a suburb of an administrative area that does not form part of another town or a London district. At least one of Locality, Town, or AdministrativeArea must be specified.</xs:documentation>
        </xs:annotation>
      </xs:element>
      <xs:element name="AdministrativeArea" minOccurs="0" nillable="true" type="xs:normalizedString">
        <xs:annotation>
          <xs:documentation>The administrative area is a geographic area that may be the highest level local administrative area, and may be a county or a unitary authority, an island or island group, or London. At least one of Locality, Town, or AdministrativeArea must be specified</xs:documentation>
        </xs:annotation>
      </xs:element>
      <xs:element name="County" minOccurs="0" nillable="true" type="xs:normalizedString">
        <xs:annotation>
          <xs:documentation>Where applicable, the name of the county.</xs:documentation>
        </xs:annotation>
      </xs:element>
      <xs:element name="PostTown" minOccurs="0" nillable="true" type="xs:normalizedString">
        <xs:annotation>
          <xs:documentation>Post Office usually assigns these based on Sorting Office.</xs:documentation>
        </xs:annotation>
      </xs:element>
      <xs:element name="PostCode" minOccurs="0" nillable="true" type="xs:normalizedString">
        <xs:annotation>
          <xs:documentation>
      The code allocated by the Post Office (within GBR) to identify a group of postal delivery points.
      Valid Postcode formats are:</xs:documentation>
        </xs:annotation>
      </xs:element>
      <xs:element name="Country" minOccurs="0" nillable="true" type="sif:CountryType">
        <xs:annotation>
          <xs:documentation>Country where physical address is located, if known.  Usually this is going to be 'GBR' but could be outside the UK.</xs:documentation>
        </xs:annotation>
      </xs:element>
      <xs:element name="UniquePropertyReferenceNumber" minOccurs="0" nillable="true">
        <xs:simpleType>
          <xs:restriction base="xs:integer">
            <xs:annotation>
              <xs:documentation>The unique Property and Land Reference Number (UPRN) for this address. Numeric: 1 to 12 digits.</xs:documentation>
            </xs:annotation>
            <xs:minInclusive value="0" xmlns:xs="http://www.w3.org/2001/XMLSchema" />
            <xs:maxInclusive value="999999999999" xmlns:xs="http://www.w3.org/2001/XMLSchema" />
          </xs:restriction>
        </xs:simpleType>
      </xs:element>
      <xs:element name="UniqueStreetReferenceNumber" minOccurs="0" nillable="true">
        <xs:simpleType>
          <xs:restriction base="xs:integer">
            <xs:annotation>
              <xs:documentation>The unique Property Street Reference Number (USRN) for this address.  Numeric: 1 to 8 digits.</xs:documentation>
            </xs:annotation>
            <xs:minInclusive value="0" xmlns:xs="http://www.w3.org/2001/XMLSchema" />
            <xs:maxInclusive value="99999999" xmlns:xs="http://www.w3.org/2001/XMLSchema" />
          </xs:restriction>
        </xs:simpleType>
      </xs:element>
      <xs:element name="LocationContext" minOccurs="0" nillable="true" type="sif:LocationContextType">
        <xs:annotation>
          <xs:documentation>The physical location of an address in terms of Census District, LA Electoral Ward, Parliamentary Constituency, and other defining location-centric characteristics.</xs:documentation>
        </xs:annotation>
      </xs:element>
      <xs:element name="GridLocation" minOccurs="0" nillable="true" type="sif:GridLocationType">
        <xs:annotation>
          <xs:documentation>The physical property location coordinates.</xs:documentation>
        </xs:annotation>
      </xs:element>
    </xs:sequence>
    <xs:attribute name="Type" use="required">
      <xs:annotation>
        <xs:documentation>Code that defines the address type.</xs:documentation>
      </xs:annotation>
      <xs:simpleType>
        <xs:restriction base="xs:token">
          <xs:enumeration value="Current" />
          <xs:enumeration value="Mailing" />
          <xs:enumeration value="Transportation" />
          <xs:enumeration value="Previous" />
          <xs:enumeration value="Other" />
        </xs:restriction>
      </xs:simpleType>
    </xs:attribute>
  </xs:complexType>

  <xs:element name="Address" type="sif:AddressType" />


  <!--AddressList-->

  <xs:complexType name="AddressListType">
    <xs:annotation>
      <xs:documentation>A list of Address elements.</xs:documentation>
    </xs:annotation>
    <xs:sequence>
      <xs:element name="Address" maxOccurs="unbounded">
        <xs:complexType>
          <xs:complexContent>
            <xs:extension base="sif:AddressType">
              <xs:attribute name="SIF_Action" use="optional">
                <xs:annotation>
                  <xs:documentation>In a Change event, this flag can be used to indicate an element has been deleted from the parent list container. At a minimum the key for the list must also be present.</xs:documentation>
                </xs:annotation>
                <xs:simpleType>
                  <xs:restriction base="xs:token">
                    <xs:enumeration value="Delete" />
                  </xs:restriction>
                </xs:simpleType>
              </xs:attribute>
            </xs:extension>
          </xs:complexContent>
        </xs:complexType>
      </xs:element>
    </xs:sequence>
  </xs:complexType>

  <xs:element name="AddressList" type="sif:AddressListType">
    <xs:key name="AddressListKey1">
      <xs:selector xpath="./sif:Address" />
      <xs:field xpath="@Type" />
    </xs:key>
  </xs:element>


  <!--ContactList-->

  <xs:complexType name="ContactListType">
    <xs:annotation>
      <xs:documentation>A list of contact persons associated with a school or LA.</xs:documentation>
    </xs:annotation>
    <xs:sequence>
      <xs:element name="Contact" maxOccurs="unbounded">
        <xs:complexType>
          <xs:sequence>
            <xs:element name="PositionTitle" minOccurs="0" nillable="true" type="xs:normalizedString">
              <xs:annotation>
                <xs:documentation>The contact person's position title within the school or LA.</xs:documentation>
              </xs:annotation>
            </xs:element>
            <xs:element name="Role" minOccurs="0" nillable="true" type="xs:normalizedString">
              <xs:annotation>
                <xs:documentation>Role played by this contact in the school or LA.  Any descriptive text is allowed here.</xs:documentation>
              </xs:annotation>
            </xs:element>
            <xs:element name="PublishInDirectory" minOccurs="0" nillable="true">
              <xs:annotation>
                <xs:documentation>Indicates whether or not this contact's information should be published in a directory of school or LA information.</xs:documentation>
              </xs:annotation>
              <xs:simpleType>
                <xs:restriction base="xs:token">
                  <xs:enumeration value="Yes" />
                  <xs:enumeration value="No" />
                </xs:restriction>
              </xs:simpleType>
            </xs:element>
          </xs:sequence>
          <xs:attribute name="SIF_RefId" use="required" type="sif:IdRefType">
            <xs:annotation>
              <xs:documentation>The ID (GUID) of the person listed as a contact. Note that this is any person listed as a contact through either a ContactPersonal, WorkforcePersonal, or even a LearnerPersonal record.</xs:documentation>
            </xs:annotation>
          </xs:attribute>
          <xs:attribute name="SIF_RefObject" use="required">
            <xs:annotation>
              <xs:documentation>The object type being referred to. </xs:documentation>
            </xs:annotation>
            <xs:simpleType>
              <xs:restriction base="xs:token">
                <xs:enumeration value="WorkforcePersonal" />
                <xs:enumeration value="ContactPersonal" />
                <xs:enumeration value="LearnerPersonal" />
              </xs:restriction>
            </xs:simpleType>
          </xs:attribute>
        </xs:complexType>
      </xs:element>
    </xs:sequence>
  </xs:complexType>

  <xs:element name="ContactList" type="sif:ContactListType" />


  <!--Country-->

  <xs:simpleType name="CountryType">
    <xs:restriction base="sif:teachernetNationStatesAndCountriesType">
      <xs:annotation>
        <xs:documentation>The 3-character alphabetic country code defined by ISO 3166-1.  Given this code all other code and name information can be obtained directly from the standard.</xs:documentation>
      </xs:annotation>
    </xs:restriction>
  </xs:simpleType>

  <xs:element name="Country" type="sif:CountryType" />


  <!--Demographics-->

  <xs:complexType name="DemographicsType">
    <xs:annotation>
      <xs:documentation>Demographic information about a learner, contact, workforce member, etc. This element occurs within objects such as LearnerPersonal, LearnerContact, etc.</xs:documentation>
    </xs:annotation>
    <xs:sequence>
      <xs:element name="EthnicityList" minOccurs="0" nillable="true" type="sif:EthnicityListType">
        <xs:annotation>
          <xs:documentation>A list of the person's ethnicities by proportion.</xs:documentation>
        </xs:annotation>
      </xs:element>
      <xs:element name="Gender" minOccurs="0" nillable="true">
        <xs:annotation>
          <xs:documentation>Person's gender.</xs:documentation>
        </xs:annotation>
        <xs:simpleType>
          <xs:restriction base="xs:token">
            <xs:enumeration value="M">
              <xs:annotation>
                <xs:documentation>Male</xs:documentation>
              </xs:annotation>
            </xs:enumeration>
            <xs:enumeration value="F">
              <xs:annotation>
                <xs:documentation>Female</xs:documentation>
              </xs:annotation>
            </xs:enumeration>
            <xs:enumeration value="U">
              <xs:annotation>
                <xs:documentation>Unknown</xs:documentation>
              </xs:annotation>
            </xs:enumeration>
            <xs:enumeration value="W">
              <xs:annotation>
                <xs:documentation>Withheld</xs:documentation>
              </xs:annotation>
            </xs:enumeration>
          </xs:restriction>
        </xs:simpleType>
      </xs:element>
      <xs:element name="BirthDate" minOccurs="0" nillable="true" type="xs:date">
        <xs:annotation>
          <xs:documentation>The person's date of birth.  Required for learners.  Optional for others.</xs:documentation>
        </xs:annotation>
      </xs:element>
      <xs:element name="BirthDateVerification" minOccurs="0" nillable="true" type="sif:UKBirthDateVerificationLevelType">
        <xs:annotation>
          <xs:documentation>Means by which the person's birth date was validated.</xs:documentation>
        </xs:annotation>
      </xs:element>
      <xs:element name="PlaceOfBirth" minOccurs="0" nillable="true" type="xs:normalizedString">
        <xs:annotation>
          <xs:documentation>The person's place of birth--like village, town, city etc.</xs:documentation>
        </xs:annotation>
      </xs:element>
      <xs:element name="CountyOfBirth" minOccurs="0" nillable="true" type="xs:normalizedString">
        <xs:annotation>
          <xs:documentation>The county in which the person was born.</xs:documentation>
        </xs:annotation>
      </xs:element>
      <xs:element name="CountryOfBirth" minOccurs="0" nillable="true" type="sif:CountryType">
        <xs:annotation>
          <xs:documentation>The individual's country of birth.</xs:documentation>
        </xs:annotation>
      </xs:element>
      <xs:element name="CountriesOfCitizenship" minOccurs="0" nillable="true">
        <xs:complexType>
          <xs:sequence>
            <xs:element name="CountryOfCitizenship" maxOccurs="unbounded" type="sif:CountryType">
              <xs:annotation>
                <xs:documentation>The country of legal nationality (i.e. the country which issued the individual's passport).</xs:documentation>
              </xs:annotation>
            </xs:element>
          </xs:sequence>
        </xs:complexType>
      </xs:element>
      <xs:element name="CountriesOfResidency" minOccurs="0" nillable="true">
        <xs:complexType>
          <xs:sequence>
            <xs:element name="CountryOfResidency" maxOccurs="unbounded" type="sif:CountryType">
              <xs:annotation>
                <xs:documentation>A person's country of residence.</xs:documentation>
              </xs:annotation>
            </xs:element>
          </xs:sequence>
        </xs:complexType>
      </xs:element>
      <xs:element name="CountryArrivalDate" minOccurs="0" nillable="true" type="xs:date">
        <xs:annotation>
          <xs:documentation>Date the person first arrived in the UK.</xs:documentation>
        </xs:annotation>
      </xs:element>
      <xs:element name="EnglishProficiency" minOccurs="0" nillable="true">
        <xs:complexType>
          <xs:sequence>
            <xs:element name="EALSteps" minOccurs="0" nillable="true">
              <xs:annotation>
                <xs:documentation>Based on QCA Steps. (England)</xs:documentation>
              </xs:annotation>
              <xs:simpleType>
                <xs:restriction base="xs:token">
                  <xs:enumeration value="S1">
                    <xs:annotation>
                      <xs:documentation>Step 1</xs:documentation>
                    </xs:annotation>
                  </xs:enumeration>
                  <xs:enumeration value="S2">
                    <xs:annotation>
                      <xs:documentation>Step 2</xs:documentation>
                    </xs:annotation>
                  </xs:enumeration>
                  <xs:enumeration value="1T">
                    <xs:annotation>
                      <xs:documentation>Level 1 Threshold</xs:documentation>
                    </xs:annotation>
                  </xs:enumeration>
                  <xs:enumeration value="1S">
                    <xs:annotation>
                      <xs:documentation>Level 1 Secure</xs:documentation>
                    </xs:annotation>
                  </xs:enumeration>
                </xs:restriction>
              </xs:simpleType>
            </xs:element>
            <xs:element name="EALAcquisition" minOccurs="0" nillable="true">
              <xs:annotation>
                <xs:documentation>Based on a differing scale from QCA Steps. (Wales)</xs:documentation>
              </xs:annotation>
              <xs:simpleType>
                <xs:restriction base="xs:token">
                  <xs:enumeration value="A">
                    <xs:annotation>
                      <xs:documentation>New to English</xs:documentation>
                    </xs:annotation>
                  </xs:enumeration>
                  <xs:enumeration value="B">
                    <xs:annotation>
                      <xs:documentation>Early Acquisition</xs:documentation>
                    </xs:annotation>
                  </xs:enumeration>
                  <xs:enumeration value="C">
                    <xs:annotation>
                      <xs:documentation>Developing Competence</xs:documentation>
                    </xs:annotation>
                  </xs:enumeration>
                  <xs:enumeration value="D">
                    <xs:annotation>
                      <xs:documentation>Compentent</xs:documentation>
                    </xs:annotation>
                  </xs:enumeration>
                  <xs:enumeration value="E">
                    <xs:annotation>
                      <xs:documentation>Fluent</xs:documentation>
                    </xs:annotation>
                  </xs:enumeration>
                  <xs:enumeration value="0">
                    <xs:annotation>
                      <xs:documentation>Not applicable</xs:documentation>
                    </xs:annotation>
                  </xs:enumeration>
                </xs:restriction>
              </xs:simpleType>
            </xs:element>
          </xs:sequence>
        </xs:complexType>
      </xs:element>
      <xs:element name="LanguageList" minOccurs="0" nillable="true">
        <xs:complexType>
          <xs:sequence>
            <xs:element name="Language" maxOccurs="unbounded">
              <xs:complexType>
                <xs:sequence>
                  <xs:element name="Code" type="sif:teachernetLanguagesType">
                    <xs:annotation>
                      <xs:documentation>This is the code that specifies the person's language.</xs:documentation>
                    </xs:annotation>
                  </xs:element>
                  <xs:element name="Fluent" minOccurs="0" nillable="true">
                    <xs:annotation>
                      <xs:documentation>Indicates that the person is fluent in this language.</xs:documentation>
                    </xs:annotation>
                    <xs:simpleType>
                      <xs:restriction base="xs:token">
                        <xs:enumeration value="Yes" />
                        <xs:enumeration value="No" />
                      </xs:restriction>
                    </xs:simpleType>
                  </xs:element>
                  <xs:element name="TypeList">
                    <xs:complexType>
                      <xs:sequence>
                        <xs:element name="Type" maxOccurs="unbounded">
                          <xs:annotation>
                            <xs:documentation>A typification of the language. i.e. how is this language used?</xs:documentation>
                          </xs:annotation>
                          <xs:simpleType>
                            <xs:restriction base="xs:token">
                              <xs:enumeration value="C">
                                <xs:annotation>
                                  <xs:documentation>Correspondence Language</xs:documentation>
                                </xs:annotation>
                              </xs:enumeration>
                              <xs:enumeration value="F">
                                <xs:annotation>
                                  <xs:documentation>First Language</xs:documentation>
                                </xs:annotation>
                              </xs:enumeration>
                              <xs:enumeration value="M">
                                <xs:annotation>
                                  <xs:documentation>Multiple First Language</xs:documentation>
                                </xs:annotation>
                              </xs:enumeration>
                              <xs:enumeration value="H">
                                <xs:annotation>
                                  <xs:documentation>Home</xs:documentation>
                                </xs:annotation>
                              </xs:enumeration>
                              <xs:enumeration value="T">
                                <xs:annotation>
                                  <xs:documentation>Tuition</xs:documentation>
                                </xs:annotation>
                              </xs:enumeration>
                              <xs:enumeration value="S">
                                <xs:annotation>
                                  <xs:documentation>Second Language</xs:documentation>
                                </xs:annotation>
                              </xs:enumeration>
                            </xs:restriction>
                          </xs:simpleType>
                        </xs:element>
                      </xs:sequence>
                    </xs:complexType>
                  </xs:element>
                  <xs:element name="Source" minOccurs="0" nillable="true" type="sif:UKSourceCodeType">
                    <xs:annotation>
                      <xs:documentation>Source of data on use of the specified language.</xs:documentation>
                    </xs:annotation>
                  </xs:element>
                  <xs:element name="Study" minOccurs="0" nillable="true" type="sif:UKLanguageStudyType">
                    <xs:annotation>
                      <xs:documentation>The level in which the learner is taught this language at school.</xs:documentation>
                    </xs:annotation>
                  </xs:element>
                  <xs:element name="StudyOther" minOccurs="0" nillable="true">
                    <xs:annotation>
                      <xs:documentation>Indicates whether the learner studies subjects in this language at school separate from studying the language itself.</xs:documentation>
                    </xs:annotation>
                    <xs:simpleType>
                      <xs:restriction base="xs:token">
                        <xs:enumeration value="Yes" />
                        <xs:enumeration value="No" />
                      </xs:restriction>
                    </xs:simpleType>
                  </xs:element>
                </xs:sequence>
              </xs:complexType>
            </xs:element>
          </xs:sequence>
        </xs:complexType>
      </xs:element>
      <xs:element name="MaritalStatus" minOccurs="0" nillable="true" type="sif:UKMaritalStatusType">
        <xs:annotation>
          <xs:documentation>The person's marital status.</xs:documentation>
        </xs:annotation>
      </xs:element>
      <xs:element name="NonUKSystemImmigrant" minOccurs="0" nillable="true">
        <xs:annotation>
          <xs:documentation>Indicates the learner has recently arrived from a non-English or other common UK language system. (Wales)</xs:documentation>
        </xs:annotation>
        <xs:simpleType>
          <xs:restriction base="xs:token">
            <xs:enumeration value="Yes" />
            <xs:enumeration value="No" />
          </xs:restriction>
        </xs:simpleType>
      </xs:element>
      <xs:element name="Refugee" minOccurs="0" nillable="true">
        <xs:annotation>
          <xs:documentation>Indicates the person's refugee/asylum seeker status as defined by the United Nations (Article 1 of the 1951 Refugee Convention).</xs:documentation>
        </xs:annotation>
        <xs:simpleType>
          <xs:restriction base="xs:token">
            <xs:enumeration value="Yes" />
            <xs:enumeration value="No" />
          </xs:restriction>
        </xs:simpleType>
      </xs:element>
      <xs:element name="Religion" minOccurs="0" nillable="true">
        <xs:complexType>
          <xs:sequence>
            <xs:element name="AffiliationCode" type="sif:UKReligiousAffiliationType">
              <xs:annotation>
                <xs:documentation>Person's religious faith.</xs:documentation>
              </xs:annotation>
            </xs:element>
            <xs:element name="EducationStatus" minOccurs="0" nillable="true">
              <xs:annotation>
                <xs:documentation>Indicates whether the person is actively attending religious education classes.</xs:documentation>
              </xs:annotation>
              <xs:simpleType>
                <xs:restriction base="xs:token">
                  <xs:enumeration value="A">
                    <xs:annotation>
                      <xs:documentation>Attends</xs:documentation>
                    </xs:annotation>
                  </xs:enumeration>
                  <xs:enumeration value="W">
                    <xs:annotation>
                      <xs:documentation>Withdrawn</xs:documentation>
                    </xs:annotation>
                  </xs:enumeration>
                </xs:restriction>
              </xs:simpleType>
            </xs:element>
            <xs:element name="CollectiveWorshipStatus" minOccurs="0" nillable="true">
              <xs:annotation>
                <xs:documentation>Indicates whether the person is participating in religious collective worship.</xs:documentation>
              </xs:annotation>
              <xs:simpleType>
                <xs:restriction base="xs:token">
                  <xs:enumeration value="A">
                    <xs:annotation>
                      <xs:documentation>Attends</xs:documentation>
                    </xs:annotation>
                  </xs:enumeration>
                  <xs:enumeration value="W">
                    <xs:annotation>
                      <xs:documentation>Withdrawn</xs:documentation>
                    </xs:annotation>
                  </xs:enumeration>
                </xs:restriction>
              </xs:simpleType>
            </xs:element>
            <xs:element name="Source" minOccurs="0" nillable="true" type="sif:UKSourceCodeType">
              <xs:annotation>
                <xs:documentation>Source of person's religious affiliation code.</xs:documentation>
              </xs:annotation>
            </xs:element>
          </xs:sequence>
        </xs:complexType>
      </xs:element>
      <xs:element name="Traveller" minOccurs="0" nillable="true">
        <xs:complexType>
          <xs:sequence>
            <xs:element name="Code" type="sif:UKTravellerGypsyCodeType">
              <xs:annotation>
                <xs:documentation>Code to identify type of traveller/gypsy.</xs:documentation>
              </xs:annotation>
            </xs:element>
            <xs:element name="Source" type="sif:UKSourceCodeType">
              <xs:annotation>
                <xs:documentation>Source of individual's recorded traveller/gypsy code.</xs:documentation>
              </xs:annotation>
            </xs:element>
          </xs:sequence>
        </xs:complexType>
      </xs:element>
    </xs:sequence>
  </xs:complexType>

  <xs:element name="Demographics" type="sif:DemographicsType" />


  <!--Email-->

  <xs:complexType name="EmailType">
    <xs:annotation>
      <xs:documentation>This element represents an e-mail address of one of a number of types.</xs:documentation>
    </xs:annotation>
    <xs:simpleContent>
      <xs:extension base="xs:normalizedString">
        <xs:attribute name="Type" use="required">
          <xs:annotation>
            <xs:documentation>This attribute specifies the type of e-mail address.</xs:documentation>
          </xs:annotation>
          <xs:simpleType>
            <xs:restriction base="xs:token">
              <xs:enumeration value="Business" />
              <xs:enumeration value="Personal" />
              <xs:enumeration value="School" />
              <xs:enumeration value="Alternate1" />
              <xs:enumeration value="Alternate2" />
              <xs:enumeration value="Alternate3" />
              <xs:enumeration value="Alternate4" />
            </xs:restriction>
          </xs:simpleType>
        </xs:attribute>
      </xs:extension>
    </xs:simpleContent>
  </xs:complexType>

  <xs:element name="Email" type="sif:EmailType" />


  <!--EmailList-->

  <xs:complexType name="EmailListType">
    <xs:annotation>
      <xs:documentation>A list of e-mail addresses associated with an individual.</xs:documentation>
    </xs:annotation>
    <xs:sequence>
      <xs:element name="Email" maxOccurs="unbounded">
        <xs:complexType>
          <xs:simpleContent>
            <xs:extension base="sif:EmailType">
              <xs:attribute name="SIF_Action" use="optional">
                <xs:annotation>
                  <xs:documentation>In a Change event, this flag can be used to indicate an element has been deleted from the parent list container. At a minimum the key for the list must also be present.</xs:documentation>
                </xs:annotation>
                <xs:simpleType>
                  <xs:restriction base="xs:token">
                    <xs:enumeration value="Delete" />
                  </xs:restriction>
                </xs:simpleType>
              </xs:attribute>
            </xs:extension>
          </xs:simpleContent>
        </xs:complexType>
      </xs:element>
    </xs:sequence>
  </xs:complexType>

  <xs:element name="EmailList" type="sif:EmailListType">
    <xs:key name="EmailListKey1">
      <xs:selector xpath="./sif:Email" />
      <xs:field xpath="@Type" />
    </xs:key>
  </xs:element>


  <!--EstablishmentId-->

  <xs:simpleType name="EstablishmentIdType">
    <xs:restriction base="xs:token">
      <xs:annotation>
        <xs:documentation>The DfES assigned identifier for a school or other educational establishment.  The list of all known Establishment ID's is extensive and available online.</xs:documentation>
      </xs:annotation>
    </xs:restriction>
  </xs:simpleType>

  <xs:element name="EstablishmentId" type="sif:EstablishmentIdType" />


  <!--EthnicityList-->

  <xs:complexType name="EthnicityListType">
    <xs:sequence>
      <xs:element name="Ethnicity" maxOccurs="unbounded">
        <xs:complexType>
          <xs:sequence>
            <xs:element name="Code" type="sif:teachernetEthnicityCodeType">
              <xs:annotation>
                <xs:documentation>The general ethnic category which reflects the individual's recognition of his or her community or with which the individual most identifies.</xs:documentation>
              </xs:annotation>
            </xs:element>
            <xs:element name="Source" type="sif:UKSourceCodeType">
              <xs:annotation>
                <xs:documentation>Source of inidividual's recorded ethnic code.</xs:documentation>
              </xs:annotation>
            </xs:element>
          </xs:sequence>
        </xs:complexType>
      </xs:element>
    </xs:sequence>
  </xs:complexType>

  <xs:element name="EthnicityList" type="sif:EthnicityListType" />


  <!--GridLocation-->

  <xs:complexType name="GridLocationType">
    <xs:annotation>
      <xs:documentation>This element contains a map location. The GridLocation element is utilised within other objects and elements.</xs:documentation>
    </xs:annotation>
    <xs:sequence>
      <xs:element name="PropertyEasting" type="xs:decimal">
        <xs:annotation>
          <xs:documentation>Easting coordinate format.</xs:documentation>
        </xs:annotation>
      </xs:element>
      <xs:element name="PropertyNorthing" type="xs:decimal">
        <xs:annotation>
          <xs:documentation>
      Northing coordinate for mapping an address. Required when PropertyEasting
      is also specified. This is best represented in a 7.1 format.
    </xs:documentation>
        </xs:annotation>
      </xs:element>
      <xs:element name="Latitude" minOccurs="0" nillable="true" type="xs:decimal">
        <xs:annotation>
          <xs:documentation>Geographical coordinate.</xs:documentation>
        </xs:annotation>
      </xs:element>
      <xs:element name="Longitude" minOccurs="0" nillable="true" type="xs:decimal">
        <xs:annotation>
          <xs:documentation>Geographical coordinate. Required when Latitude is also specified.</xs:documentation>
        </xs:annotation>
      </xs:element>
    </xs:sequence>
  </xs:complexType>

  <xs:element name="GridLocation" type="sif:GridLocationType" />


  <!--LAId-->

  <xs:simpleType name="LAIdType">
    <xs:restriction base="sif:teachernetLAIdType">
      <xs:annotation>
        <xs:documentation>The 3-digit number assigned to the LA by the DfES.</xs:documentation>
      </xs:annotation>
    </xs:restriction>
  </xs:simpleType>

  <xs:element name="LAId" type="sif:LAIdType" />


  <!--LAName-->

  <xs:simpleType name="LANameType">
    <xs:restriction base="sif:teachernetLANameType">
      <xs:annotation>
        <xs:documentation>The official name of the LA.</xs:documentation>
      </xs:annotation>
    </xs:restriction>
  </xs:simpleType>

  <xs:element name="LAName" type="sif:LANameType" />


  <!--LocationContext-->

  <xs:complexType name="LocationContextType">
    <xs:annotation>
      <xs:documentation>The physical location of an address in terms of Census District, LA Electoral Ward, Parliamentary Constituency, and other defining location-centric characteristics.</xs:documentation>
    </xs:annotation>
    <xs:sequence>
      <xs:element name="CensusDistrict" minOccurs="0" nillable="true" type="xs:normalizedString">
        <xs:annotation>
          <xs:documentation>National Population Census Enumeration District.</xs:documentation>
        </xs:annotation>
      </xs:element>
      <xs:element name="WardCode" type="sif:ONSWardCodeType">
        <xs:annotation>
          <xs:documentation>ONS Ward Code</xs:documentation>
        </xs:annotation>
      </xs:element>
      <xs:element name="WardName" type="sif:ONSWardNameType">
        <xs:annotation>
          <xs:documentation>ONS Ward Name</xs:documentation>
        </xs:annotation>
      </xs:element>
      <xs:element name="ConstituencyCode" minOccurs="0" nillable="true" type="sif:ONSParliamentaryConstituencyCodeType">
        <xs:annotation>
          <xs:documentation>ONS Parliamentary Constituency Code</xs:documentation>
        </xs:annotation>
      </xs:element>
      <xs:element name="ConstituencyName" minOccurs="0" nillable="true" type="sif:ONSParliamentaryConstituencyNameType">
        <xs:annotation>
          <xs:documentation>ONS Parliamentary Constituency Name</xs:documentation>
        </xs:annotation>
      </xs:element>
      <xs:element name="Parish" minOccurs="0" nillable="true" type="sif:ONSParishCouncilNameType">
        <xs:annotation>
          <xs:documentation>ONS Parish Council Name</xs:documentation>
        </xs:annotation>
      </xs:element>
      <xs:element name="ChurchOfEnglandDiocese" minOccurs="0" nillable="true" type="sif:teachernetChurchOfEnglandDioceseType">
        <xs:annotation>
          <xs:documentation>Church of England Diocese Code</xs:documentation>
        </xs:annotation>
      </xs:element>
      <xs:element name="ChurchOfEnglandParish" minOccurs="0" nillable="true" type="xs:normalizedString">
        <xs:annotation>
          <xs:documentation>Church of England Parish Code</xs:documentation>
        </xs:annotation>
      </xs:element>
      <xs:element name="RomanCatholicDiocese" minOccurs="0" nillable="true" type="sif:teachernetRomanCatholicDioceseType">
        <xs:annotation>
          <xs:documentation>Roman Catholic Diocese Code</xs:documentation>
        </xs:annotation>
      </xs:element>
      <xs:element name="RomanCatholicParish" minOccurs="0" nillable="true" type="xs:normalizedString">
        <xs:annotation>
          <xs:documentation>Roman Catholic Parish</xs:documentation>
        </xs:annotation>
      </xs:element>
      <xs:element name="LSCouncilCode" minOccurs="0" nillable="true" type="sif:teachernetLearningAndSkillsCouncilAreaCodeType">
        <xs:annotation>
          <xs:documentation>Learning and Skills Council area code</xs:documentation>
        </xs:annotation>
      </xs:element>
      <xs:element name="CatchmentArea" minOccurs="0" nillable="true" type="xs:normalizedString">
        <xs:annotation>
          <xs:documentation>School catchment area description</xs:documentation>
        </xs:annotation>
      </xs:element>
    </xs:sequence>
  </xs:complexType>

  <xs:element name="LocationContext" type="sif:LocationContextType" />


  <!--Name-->

  <xs:complexType name="NameType">
    <xs:annotation>
      <xs:documentation>The Name element defines name information for a person and occurs within the PersonalInformation element.</xs:documentation>
    </xs:annotation>
    <xs:sequence>
      <xs:element name="Title" minOccurs="0" nillable="true" type="xs:normalizedString">
        <xs:annotation>
          <xs:documentation>A title or prefix associated with the name.  If any of: Mr, Mrs, Ms, Miss, Rev, Fr, Dr, Prof, Hon, Sir, Lord, Lady - these must be as shown, otherwise free text.  Note that title is not applicable to learners.</xs:documentation>
        </xs:annotation>
      </xs:element>
      <xs:element name="FamilyName" minOccurs="0" nillable="true" type="xs:normalizedString">
        <xs:annotation>
          <xs:documentation>Full legal family name. That part of the person's name which is used to describe family, clan, tribal group, or marital association.  Note that this element is always required.  However, when associated with a contact it may not be possible to know the family name in which case you should add the available information to the FullName element.</xs:documentation>
        </xs:annotation>
      </xs:element>
      <xs:element name="GivenName" minOccurs="0" nillable="true" type="xs:normalizedString">
        <xs:annotation>
          <xs:documentation>Full given name (forename) of the person.  Note that this element is always required.  However, when associated with a contact it may not be possible to know the given name in which case you should add the available information to the FullName element.</xs:documentation>
        </xs:annotation>
      </xs:element>
      <xs:element name="MiddleNames" minOccurs="0" nillable="true" type="xs:normalizedString">
        <xs:annotation>
          <xs:documentation>All other given or middle names, each separated with a single space character.</xs:documentation>
        </xs:annotation>
      </xs:element>
      <xs:element name="FamilyNameFirst" minOccurs="0" nillable="true">
        <xs:annotation>
          <xs:documentation>An indicator used to identify the naming conventions used by some predominantly non-European, ethnic or language groups and related to the display nature of a name.</xs:documentation>
        </xs:annotation>
        <xs:simpleType>
          <xs:restriction base="xs:token">
            <xs:enumeration value="Yes" />
            <xs:enumeration value="No" />
          </xs:restriction>
        </xs:simpleType>
      </xs:element>
      <xs:element name="PreferredFamilyName" minOccurs="0" nillable="true" type="xs:normalizedString">
        <xs:annotation>
          <xs:documentation>The family name preferred most by the person (as written).</xs:documentation>
        </xs:annotation>
      </xs:element>
      <xs:element name="PreferredFamilyNameFirst" minOccurs="0" nillable="true">
        <xs:annotation>
          <xs:documentation>An indicator used to identify the naming conventions used by some predominantly non-European, ethnic or language groups and related to the display nature of a name.</xs:documentation>
        </xs:annotation>
        <xs:simpleType>
          <xs:restriction base="xs:token">
            <xs:enumeration value="Yes" />
            <xs:enumeration value="No" />
          </xs:restriction>
        </xs:simpleType>
      </xs:element>
      <xs:element name="PreferredGivenName" minOccurs="0" nillable="true" type="xs:normalizedString">
        <xs:annotation>
          <xs:documentation>The given name preferred most by the person (as written).</xs:documentation>
        </xs:annotation>
      </xs:element>
      <xs:element name="Suffix" minOccurs="0" nillable="true" type="xs:normalizedString">
        <xs:annotation>
          <xs:documentation>Textual suffix like PHD, JP, BSc.</xs:documentation>
        </xs:annotation>
      </xs:element>
      <xs:element name="FullName" minOccurs="0" nillable="true" type="xs:normalizedString">
        <xs:annotation>
          <xs:documentation>A free text field for the complete name for display purposes. If this is associated with a ContactPersonal record and the FamilyName and GivenName are not both specified, then this becomes mandatory.</xs:documentation>
        </xs:annotation>
      </xs:element>
    </xs:sequence>
    <xs:attribute name="Type" use="required">
      <xs:annotation>
        <xs:documentation>Code that specifies what type of name this is.</xs:documentation>
      </xs:annotation>
      <xs:simpleType>
        <xs:restriction base="xs:token">
          <xs:enumeration value="B">
            <xs:annotation>
              <xs:documentation>Birth name</xs:documentation>
            </xs:annotation>
          </xs:enumeration>
          <xs:enumeration value="C">
            <xs:annotation>
              <xs:documentation>Current Legal name</xs:documentation>
            </xs:annotation>
          </xs:enumeration>
          <xs:enumeration value="A">
            <xs:annotation>
              <xs:documentation>Alias / Alternative</xs:documentation>
            </xs:annotation>
          </xs:enumeration>
          <xs:enumeration value="R">
            <xs:annotation>
              <xs:documentation>Name of Record</xs:documentation>
            </xs:annotation>
          </xs:enumeration>
          <xs:enumeration value="F">
            <xs:annotation>
              <xs:documentation>Former Name</xs:documentation>
            </xs:annotation>
          </xs:enumeration>
          <xs:enumeration value="M">
            <xs:annotation>
              <xs:documentation>Married Name</xs:documentation>
            </xs:annotation>
          </xs:enumeration>
          <xs:enumeration value="P">
            <xs:annotation>
              <xs:documentation>Professional Name</xs:documentation>
            </xs:annotation>
          </xs:enumeration>
        </xs:restriction>
      </xs:simpleType>
    </xs:attribute>
  </xs:complexType>

  <xs:element name="Name" type="sif:NameType" />


  <!--NCYearGroup-->

  <xs:simpleType name="NCYearGroupType">
    <xs:restriction base="sif:UKNCYearGroupType">
      <xs:annotation>
        <xs:documentation>Code representing a National Curriculum Year Group.</xs:documentation>
      </xs:annotation>
    </xs:restriction>
  </xs:simpleType>

  <xs:element name="NCYearGroup" type="sif:NCYearGroupType" />


  <!--NCYearGroupList-->

  <xs:complexType name="NCYearGroupListType">
    <xs:annotation>
      <xs:documentation>This is a common element used to specify a collection of supported National Curriculum Year Groups. It is used in SchoolInfo and assessment-related objects.</xs:documentation>
    </xs:annotation>
    <xs:sequence>
      <xs:element ref="sif:NCYearGroup" maxOccurs="unbounded" />
    </xs:sequence>
  </xs:complexType>

  <xs:element name="NCYearGroupList" type="sif:NCYearGroupListType" />


  <!--PersonalInformation-->

  <xs:complexType name="PersonalInformationType">
    <xs:annotation>
      <xs:documentation>This element contains basic personal and demographic information related to a person.  This element is part of all "personal" objects, including LearnerPersonal, WorkforcePersonal, and ContactPersonal.</xs:documentation>
    </xs:annotation>
    <xs:sequence>
      <xs:element ref="sif:Name" />
      <xs:element name="OtherNames" minOccurs="0" nillable="true">
        <xs:complexType>
          <xs:sequence>
            <xs:element ref="sif:Name" maxOccurs="unbounded" />
          </xs:sequence>
        </xs:complexType>
      </xs:element>
      <xs:element name="Demographics" minOccurs="0" nillable="true" type="sif:DemographicsType">
        <xs:annotation>
          <xs:documentation>This element contains demographic data.</xs:documentation>
        </xs:annotation>
      </xs:element>
      <xs:element name="Email" minOccurs="0" nillable="true" type="sif:EmailType">
        <xs:annotation>
          <xs:documentation>The person's preferred e-mail address.</xs:documentation>
        </xs:annotation>
      </xs:element>
      <xs:element name="OtherEmailList" minOccurs="0" nillable="true" type="sif:EmailListType">
        <xs:annotation>
          <xs:documentation>The person's other e-mail address(es).</xs:documentation>
        </xs:annotation>
        <xs:key name="EmailListKey2">
          <xs:selector xpath="./sif:Email" />
          <xs:field xpath="@Type" />
        </xs:key>
      </xs:element>
      <xs:element name="Address" minOccurs="0" nillable="true" type="sif:AddressType">
        <xs:annotation>
          <xs:documentation>The person's current physical address.</xs:documentation>
        </xs:annotation>
      </xs:element>
      <xs:element name="OtherAddressList" minOccurs="0" nillable="true" type="sif:AddressListType">
        <xs:annotation>
          <xs:documentation>The person's other address(es).</xs:documentation>
        </xs:annotation>
        <xs:key name="AddressListKey2">
          <xs:selector xpath="./sif:Address" />
          <xs:field xpath="@Type" />
        </xs:key>
      </xs:element>
      <xs:element name="PhoneNumber" minOccurs="0" nillable="true" type="sif:PhoneNumberType">
        <xs:annotation>
          <xs:documentation>The person's preferred phone number.</xs:documentation>
        </xs:annotation>
      </xs:element>
      <xs:element name="OtherPhoneNumberList" minOccurs="0" nillable="true" type="sif:PhoneNumberListType">
        <xs:annotation>
          <xs:documentation>The person's other phone number(s).</xs:documentation>
        </xs:annotation>
        <xs:key name="PhoneNumberListKey1">
          <xs:selector xpath="./sif:PhoneNumber" />
          <xs:field xpath="@Type" />
        </xs:key>
      </xs:element>
      <xs:element name="ElectronicIdList" minOccurs="0" nillable="true" type="sif:ElectronicIdListType">
        <xs:annotation>
          <xs:documentation>Electronic identifier(s) associated with this person.</xs:documentation>
        </xs:annotation>
      </xs:element>
      <xs:element name="OtherIdList" minOccurs="0" nillable="true">
        <xs:complexType>
          <xs:sequence>
            <xs:element name="OtherId" maxOccurs="unbounded">
              <xs:annotation>
                <xs:documentation>An "other" identifier associated with this person.</xs:documentation>
              </xs:annotation>
              <xs:complexType>
                <xs:simpleContent>
                  <xs:extension base="xs:normalizedString">
                    <xs:attribute name="Type" use="required" type="xs:normalizedString">
                      <xs:annotation>
                        <xs:documentation>Text that describes the type of this other ID.</xs:documentation>
                      </xs:annotation>
                    </xs:attribute>
                  </xs:extension>
                </xs:simpleContent>
              </xs:complexType>
            </xs:element>
          </xs:sequence>
        </xs:complexType>
      </xs:element>
    </xs:sequence>
  </xs:complexType>

  <xs:element name="PersonalInformation" type="sif:PersonalInformationType" />


  <!--PhoneNumber-->

  <xs:complexType name="PhoneNumberType">
    <xs:annotation>
      <xs:documentation>This element represents a phone number and occurs within objects such as LearnerPersonal, WorkforcePersonal, etc.</xs:documentation>
    </xs:annotation>
    <xs:sequence>
      <xs:element name="Number">
        <xs:simpleType>
          <xs:restriction base="xs:normalizedString">
            <xs:annotation>
              <xs:documentation>Phone number. Validation:  0-9 and a leading '+' (for international calls).</xs:documentation>
            </xs:annotation>
            <xs:pattern value="[+]?[0-9]+" xmlns:xs="http://www.w3.org/2001/XMLSchema" />
          </xs:restriction>
        </xs:simpleType>
      </xs:element>
      <xs:element name="Extension" minOccurs="0" nillable="true" type="xs:normalizedString">
        <xs:annotation>
          <xs:documentation>Phone number extension.</xs:documentation>
        </xs:annotation>
      </xs:element>
      <xs:element name="ListedStatus" minOccurs="0" nillable="true">
        <xs:annotation>
          <xs:documentation>Indicates whether or not the phone number is available to the public.</xs:documentation>
        </xs:annotation>
        <xs:simpleType>
          <xs:restriction base="xs:token">
            <xs:enumeration value="Listed" />
            <xs:enumeration value="Unlisted" />
            <xs:enumeration value="Unknown" />
          </xs:restriction>
        </xs:simpleType>
      </xs:element>
    </xs:sequence>
    <xs:attribute name="Type" use="required" type="sif:UKPhoneTypeType">
      <xs:annotation>
        <xs:documentation>Code that specifies the phone number type.</xs:documentation>
      </xs:annotation>
    </xs:attribute>
  </xs:complexType>

  <xs:element name="PhoneNumber" type="sif:PhoneNumberType" />


  <!--PhoneNumberList-->

  <xs:complexType name="PhoneNumberListType">
    <xs:annotation>
      <xs:documentation>Lists phone numbers associated with an entity.</xs:documentation>
    </xs:annotation>
    <xs:sequence>
      <xs:element name="PhoneNumber" maxOccurs="unbounded">
        <xs:complexType>
          <xs:complexContent>
            <xs:extension base="sif:PhoneNumberType">
              <xs:attribute name="SIF_Action" use="optional">
                <xs:annotation>
                  <xs:documentation>In a Change event, this flag can be used to indicate an element has been deleted from the parent list container. At a minimum the key for the list must also be present.</xs:documentation>
                </xs:annotation>
                <xs:simpleType>
                  <xs:restriction base="xs:token">
                    <xs:enumeration value="Delete" />
                  </xs:restriction>
                </xs:simpleType>
              </xs:attribute>
            </xs:extension>
          </xs:complexContent>
        </xs:complexType>
      </xs:element>
    </xs:sequence>
  </xs:complexType>

  <xs:element name="PhoneNumberList" type="sif:PhoneNumberListType">
    <xs:key name="PhoneNumberListKey2">
      <xs:selector xpath="./sif:PhoneNumber" />
      <xs:field xpath="@Type" />
    </xs:key>
  </xs:element>


  <!--SchoolURN-->

  <xs:simpleType name="SchoolURNType">
    <xs:restriction base="sif:EstablishmentIdType">
      <xs:annotation>
        <xs:documentation>The alternate DfES assigned identifier for a school or other educational establishment.</xs:documentation>
      </xs:annotation>
    </xs:restriction>
  </xs:simpleType>

  <xs:element name="SchoolURN" type="sif:SchoolURNType" />


  <!--SubjectAreaList-->

  <xs:complexType name="SubjectAreaListType">
    <xs:annotation>
      <xs:documentation>A list of subject areas.</xs:documentation>
    </xs:annotation>
    <xs:sequence>
      <xs:element name="SubjectArea" maxOccurs="unbounded" type="sif:UKGeneralSubjectType">
        <xs:annotation>
          <xs:documentation>Subject matter.</xs:documentation>
        </xs:annotation>
      </xs:element>
    </xs:sequence>
  </xs:complexType>

  <xs:element name="SubjectAreaList" type="sif:SubjectAreaListType" />


  <!--Period-->

  <xs:complexType name="PeriodType">
    <xs:annotation>
      <xs:documentation />
    </xs:annotation>
    <xs:sequence>
      <xs:element name="PeriodIndex" type="xs:integer">
        <xs:annotation>
          <xs:documentation>Ordinal position of period within the day (1,2,3,etc)</xs:documentation>
        </xs:annotation>
      </xs:element>
      <xs:element name="ShortName">
        <xs:simpleType>
          <xs:restriction base="xs:normalizedString">
            <xs:annotation>
              <xs:documentation>A short period label</xs:documentation>
            </xs:annotation>
            <xs:maxLength value="5" xmlns:xs="http://www.w3.org/2001/XMLSchema" />
          </xs:restriction>
        </xs:simpleType>
      </xs:element>
      <xs:element name="LongName">
        <xs:simpleType>
          <xs:restriction base="xs:normalizedString">
            <xs:annotation>
              <xs:documentation>A long period label</xs:documentation>
            </xs:annotation>
            <xs:maxLength value="25" xmlns:xs="http://www.w3.org/2001/XMLSchema" />
          </xs:restriction>
        </xs:simpleType>
      </xs:element>
      <xs:element name="StartTime" minOccurs="0" nillable="true" type="xs:time">
        <xs:annotation>
          <xs:documentation>Time the period starts</xs:documentation>
        </xs:annotation>
      </xs:element>
      <xs:element name="EndTime" minOccurs="0" nillable="true" type="xs:time">
        <xs:annotation>
          <xs:documentation>Time the period ends</xs:documentation>
        </xs:annotation>
      </xs:element>
      <xs:element name="Type">
        <xs:annotation>
          <xs:documentation>What this period represents. Note that currently some programs represent registration, breaks and lunches as a "period" and some don't. This Type could differ from the lesson Type (see section C4) if this teacher is doing something in this period which differs from the majority of the school.</xs:documentation>
        </xs:annotation>
        <xs:simpleType>
          <xs:restriction base="xs:token">
            <xs:enumeration value="T">
              <xs:annotation>
                <xs:documentation>teaching period</xs:documentation>
              </xs:annotation>
            </xs:enumeration>
            <xs:enumeration value="R">
              <xs:annotation>
                <xs:documentation>registration</xs:documentation>
              </xs:annotation>
            </xs:enumeration>
            <xs:enumeration value="B">
              <xs:annotation>
                <xs:documentation>break</xs:documentation>
              </xs:annotation>
            </xs:enumeration>
            <xs:enumeration value="L">
              <xs:annotation>
                <xs:documentation>lunch</xs:documentation>
              </xs:annotation>
            </xs:enumeration>
            <xs:enumeration value="O">
              <xs:annotation>
                <xs:documentation>outside school hours (eg: clubs)</xs:documentation>
              </xs:annotation>
            </xs:enumeration>
            <xs:enumeration value="N">
              <xs:annotation>
                <xs:documentation>other non-teaching</xs:documentation>
              </xs:annotation>
            </xs:enumeration>
            <xs:enumeration value="X">
              <xs:annotation>
                <xs:documentation>'unused' period (on a non-rectangular cycle)</xs:documentation>
              </xs:annotation>
            </xs:enumeration>
          </xs:restriction>
        </xs:simpleType>
      </xs:element>
    </xs:sequence>
  </xs:complexType>

  <xs:element name="Period" type="sif:PeriodType" />


  <!--SIF_Metadata-->

  <xs:complexType name="SIF_MetadataType">
    <xs:annotation>
      <xs:documentation>A commonly defined container for metadata elements defined within SIF.</xs:documentation>
    </xs:annotation>
    <xs:sequence>
      <xs:element name="TimeElements" minOccurs="0" nillable="true">
        <xs:complexType>
          <xs:sequence>
            <xs:element ref="sif:TimeElement" minOccurs="0" maxOccurs="unbounded" />
          </xs:sequence>
        </xs:complexType>
      </xs:element>
      <xs:element name="LifeCycle" minOccurs="0" nillable="true" type="sif:LifeCycleType" />
      <xs:element name="RightsElements" minOccurs="0" nillable="true">
        <xs:complexType>
          <xs:sequence>
            <xs:element ref="sif:RightsElement" minOccurs="0" maxOccurs="unbounded" />
          </xs:sequence>
        </xs:complexType>
      </xs:element>
      <xs:element name="EducationFilter" minOccurs="0" nillable="true" type="sif:EducationFilterType" />
      <xs:element name="ImpactLevelElevation" minOccurs="0" nillable="true" type="sif:ImpactLevelElevationType">
        <xs:annotation>
          <xs:documentation>
        A way of identifying  an object in a message that is more sensitive than that typically sent within a Zone. 
      </xs:documentation>
        </xs:annotation>
        <xs:complexType>
          <xs:sequence>
            <xs:element name="ImpactLevel">
              <xs:annotation>
                <xs:documentation>
        The Impact Level that the sensitivity has been raised to. 
      </xs:documentation>
              </xs:annotation>
              <xs:simpleType>
                <xs:restriction base="xs:token">
                  <xs:enumeration value="IL3" />
                  <xs:enumeration value="IL4" />
                </xs:restriction>
              </xs:simpleType>
            </xs:element>
          </xs:sequence>
        </xs:complexType>
      </xs:element>
    </xs:sequence>
  </xs:complexType>

  <xs:element name="SIF_Metadata" type="sif:SIF_MetadataType" />


  <!--SIF_ExtendedElements-->

  <xs:complexType name="SIF_ExtendedElementsType">
    <xs:annotation>
      <xs:documentation>Allows an agent to include data not yet defined within a SIF data object as name/value pairs.</xs:documentation>
    </xs:annotation>
    <xs:sequence>
      <xs:element name="SIF_ExtendedElement" minOccurs="0" maxOccurs="unbounded">
        <xs:complexType>
          <xs:annotation>
            <xs:documentation>A name/value pair, the name being contained in the Name attribute, the value being the element content.</xs:documentation>
          </xs:annotation>
          <xs:complexContent>
            <xs:extension base="sif:ExtendedContentType">
              <xs:attribute name="Name" use="required" type="xs:normalizedString">
                <xs:annotation>
                  <xs:documentation>The name of the extended element. As it is possible that names for extended elements may collide from agent to agent, it is recommended that the names of extended elements be configurable in an agent, or that agents use URIs for the names of extended elements.</xs:documentation>
                </xs:annotation>
              </xs:attribute>
              <!--<xs:attribute ref="xsi:type" use="optional" />-->
              <xs:attribute name="SIF_Action" use="optional">
                <xs:annotation>
                  <xs:documentation>
        In a Change event, this flag can be used to indicate an element has been deleted from the parent list container.  At a minimum the key for the list must also be present.
      </xs:documentation>
                </xs:annotation>
                <xs:simpleType>
                  <xs:restriction base="xs:token">
                    <xs:enumeration value="Delete" />
                  </xs:restriction>
                </xs:simpleType>
              </xs:attribute>
            </xs:extension>
          </xs:complexContent>
        </xs:complexType>
      </xs:element>
    </xs:sequence>
  </xs:complexType>

  <xs:element name="SIF_ExtendedElements" type="sif:SIF_ExtendedElementsType">
    <xs:key name="SIF_ExtendedElementsKey1">
      <xs:selector xpath="./sif:SIF_ExtendedElement" />
      <xs:field xpath="@Name" />
    </xs:key>
  </xs:element>


  <!--SIFUK-->


  <!--AssessmentResultComponent-->

  <xs:complexType name="AssessmentResultComponentType">
    <xs:annotation>
      <xs:documentation>A psychological construct measured by the assessment. Operationally, an assessment component or subtest is a class of scores within an assessment that might collectively represent a column within a mark book. Some assessments may consist of only one component, aspect or subtest although it is more common for assessments to have several.</xs:documentation>
    </xs:annotation>
    <xs:sequence>
      <xs:element name="Name" type="xs:normalizedString">
        <xs:annotation>
          <xs:documentation>The name used to identify this component or aspect.</xs:documentation>
        </xs:annotation>
      </xs:element>
      <xs:element name="LocalId" minOccurs="0" nillable="true" type="xs:normalizedString">
        <xs:annotation>
          <xs:documentation>The identifier used within the publishing application.</xs:documentation>
        </xs:annotation>
      </xs:element>
      <xs:element name="ShortDescription" type="xs:normalizedString">
        <xs:annotation>
          <xs:documentation>Shorter description used for column headers in marksheets, etc.</xs:documentation>
        </xs:annotation>
      </xs:element>
      <xs:element name="Description" type="xs:normalizedString">
        <xs:annotation>
          <xs:documentation>Longer text describing features of the component.</xs:documentation>
        </xs:annotation>
      </xs:element>
      <xs:element name="YearList" minOccurs="0" nillable="true">
        <xs:complexType>
          <xs:sequence>
            <xs:element name="Year" maxOccurs="unbounded" type="xs:normalizedString">
              <xs:annotation>
                <xs:documentation>A year with which the component grouping is applicable (by convention this is the end year of an academic year eg: 2007/8  resolves to 2008).</xs:documentation>
              </xs:annotation>
            </xs:element>
          </xs:sequence>
        </xs:complexType>
      </xs:element>
      <xs:element name="AssessmentSubjectList" minOccurs="0" nillable="true">
        <xs:complexType>
          <xs:sequence>
            <xs:element name="Subject" maxOccurs="unbounded" type="sif:UKAssessmentSubjectType">
              <xs:annotation>
                <xs:documentation>A subject area associated with this assessment component or aspect.</xs:documentation>
              </xs:annotation>
            </xs:element>
          </xs:sequence>
        </xs:complexType>
      </xs:element>
      <xs:element name="StageList" minOccurs="0" nillable="true">
        <xs:complexType>
          <xs:sequence>
            <xs:element name="Stage" maxOccurs="unbounded" type="sif:UKAssessmentStageType">
              <xs:annotation>
                <xs:documentation>The assessed stage (this may well be a Keystage List, but there is no reason why it couldn’t be used for other concepts such as NcYear applicability, Level  Exam Level GCSE, A-Level etc.).</xs:documentation>
              </xs:annotation>
            </xs:element>
          </xs:sequence>
        </xs:complexType>
      </xs:element>
      <xs:element name="AssessmentResultGradeSetRefId" minOccurs="0" nillable="true" type="sif:IdRefType">
        <xs:annotation>
          <xs:documentation>The gradeset associated with the component or aspect.</xs:documentation>
        </xs:annotation>
      </xs:element>
      <xs:element name="MarkSetList" minOccurs="0" nillable="true">
        <xs:complexType>
          <xs:sequence>
            <xs:element name="MarkSet" maxOccurs="unbounded">
              <xs:complexType>
                <xs:sequence>
                  <xs:element name="StartDate" minOccurs="0" nillable="true" type="xs:date">
                    <xs:annotation>
                      <xs:documentation>Start date of the range validity - ranges should not overlap. If not supplied then assumed to have always been valid in the past.</xs:documentation>
                    </xs:annotation>
                  </xs:element>
                  <xs:element name="EndDate" minOccurs="0" nillable="true" type="xs:date">
                    <xs:annotation>
                      <xs:documentation>End date of the range validity - ranges should not overlap.  If not supplied then assumed to always will be valid in the future.</xs:documentation>
                    </xs:annotation>
                  </xs:element>
                  <xs:element name="MinValue" type="xs:decimal">
                    <xs:annotation>
                      <xs:documentation>The minimum value in the range of marks.</xs:documentation>
                    </xs:annotation>
                  </xs:element>
                  <xs:element name="MaxValue" type="xs:decimal">
                    <xs:annotation>
                      <xs:documentation>The maximum value in the range of marks.</xs:documentation>
                    </xs:annotation>
                  </xs:element>
                </xs:sequence>
              </xs:complexType>
            </xs:element>
          </xs:sequence>
        </xs:complexType>
      </xs:element>
      <xs:element name="ComponentType">
        <xs:annotation>
          <xs:documentation>Defines the associated result format.</xs:documentation>
        </xs:annotation>
        <xs:simpleType>
          <xs:restriction base="xs:token">
            <xs:enumeration value="Comment" />
            <xs:enumeration value="Grade" />
            <xs:enumeration value="Mark" />
          </xs:restriction>
        </xs:simpleType>
      </xs:element>
      <xs:element name="ResultQualifier" type="sif:UKAssessmentResultQualifierType">
        <xs:annotation>
          <xs:documentation>Defines the format or type of result(s) awarded.</xs:documentation>
        </xs:annotation>
      </xs:element>
      <xs:element name="AssessmentMethod" type="sif:UKAssessmentMethodType">
        <xs:annotation>
          <xs:documentation>The method or format of the Assessment.</xs:documentation>
        </xs:annotation>
      </xs:element>
      <xs:element name="SupplierName" minOccurs="0" nillable="true" type="xs:normalizedString">
        <xs:annotation>
          <xs:documentation>The supplier/originator/designer/owner of the aspect.</xs:documentation>
        </xs:annotation>
      </xs:element>
      <xs:element name="SIF_Metadata" minOccurs="0" nillable="true" type="sif:SIF_MetadataType" />
      <xs:element name="SIF_ExtendedElements" minOccurs="0" nillable="true" type="sif:SIF_ExtendedElementsType">
        <xs:key name="SIF_ExtendedElementsKey2">
          <xs:selector xpath="./sif:SIF_ExtendedElement" />
          <xs:field xpath="@Name" />
        </xs:key>
      </xs:element>
    </xs:sequence>
    <xs:attribute name="RefId" use="required" type="sif:RefIdType">
      <xs:annotation>
        <xs:documentation>The ID (GUID) of this aspect or subtest.</xs:documentation>
      </xs:annotation>
    </xs:attribute>
  </xs:complexType>

  <xs:element name="AssessmentResultComponent" type="sif:AssessmentResultComponentType">
    <xs:key name="AssessmentResultComponentKey1">
      <xs:selector xpath="." />
      <xs:field xpath="@RefId" />
    </xs:key>
  </xs:element>


  <!--AssessmentResultComponentGroup-->

  <xs:complexType name="AssessmentResultComponentGroupType">
    <xs:annotation>
      <xs:documentation>High level container describing an assessment or test or common goal.  Each component group contains one or more components, also known as subtests, aspects, or sub-assessments.</xs:documentation>
    </xs:annotation>
    <xs:sequence>
      <xs:element name="Name" type="xs:normalizedString">
        <xs:annotation>
          <xs:documentation>Name of the assessment/test/goal.</xs:documentation>
        </xs:annotation>
      </xs:element>
      <xs:element name="LocalId" minOccurs="0" nillable="true" type="xs:normalizedString">
        <xs:annotation>
          <xs:documentation>The identifier used for this entity within the publishing application.</xs:documentation>
        </xs:annotation>
      </xs:element>
      <xs:element name="SupplierName" minOccurs="0" nillable="true" type="xs:normalizedString">
        <xs:annotation>
          <xs:documentation>The supplier/originator/designer/owner of the described component grouping.</xs:documentation>
        </xs:annotation>
      </xs:element>
      <xs:element name="ComponentList">
        <xs:complexType>
          <xs:sequence>
            <xs:element name="AssessmentResultComponentRefId" maxOccurs="unbounded" type="sif:IdRefType">
              <xs:annotation>
                <xs:documentation>A SIF identifier for an assessment result component.</xs:documentation>
              </xs:annotation>
            </xs:element>
          </xs:sequence>
        </xs:complexType>
      </xs:element>
      <xs:element name="SIF_Metadata" minOccurs="0" nillable="true" type="sif:SIF_MetadataType" />
      <xs:element name="SIF_ExtendedElements" minOccurs="0" nillable="true" type="sif:SIF_ExtendedElementsType">
        <xs:key name="SIF_ExtendedElementsKey3">
          <xs:selector xpath="./sif:SIF_ExtendedElement" />
          <xs:field xpath="@Name" />
        </xs:key>
      </xs:element>
    </xs:sequence>
    <xs:attribute name="RefId" use="required" type="sif:RefIdType">
      <xs:annotation>
        <xs:documentation>The ID (GUID) that uniquely identifies a component group.</xs:documentation>
      </xs:annotation>
    </xs:attribute>
  </xs:complexType>

  <xs:element name="AssessmentResultComponentGroup" type="sif:AssessmentResultComponentGroupType">
    <xs:key name="AssessmentResultComponentGroupKey1">
      <xs:selector xpath="." />
      <xs:field xpath="@RefId" />
    </xs:key>
  </xs:element>


  <!--AssessmentResultGradeSet-->

  <xs:complexType name="AssessmentResultGradeSetType">
    <xs:annotation>
      <xs:documentation>Represents a range of valid grades (over time) for a result.</xs:documentation>
    </xs:annotation>
    <xs:sequence>
      <xs:element name="LocalId" minOccurs="0" nillable="true" type="xs:normalizedString">
        <xs:annotation>
          <xs:documentation>The locally assigned identifier for this grade set.</xs:documentation>
        </xs:annotation>
      </xs:element>
      <xs:element name="Name" type="xs:normalizedString">
        <xs:annotation>
          <xs:documentation>The descriptive identifier for the grade set.</xs:documentation>
        </xs:annotation>
      </xs:element>
      <xs:element name="Notes" minOccurs="0" nillable="true" type="xs:normalizedString">
        <xs:annotation>
          <xs:documentation>Explanatory/usage notes for grade set.</xs:documentation>
        </xs:annotation>
      </xs:element>
      <xs:element name="SupplierName" minOccurs="0" nillable="true" type="xs:normalizedString">
        <xs:annotation>
          <xs:documentation>The supplier/originator/designer/owner of the gradeset.</xs:documentation>
        </xs:annotation>
      </xs:element>
      <xs:element name="GradeSets">
        <xs:complexType>
          <xs:sequence>
            <xs:element name="GradeSet" maxOccurs="unbounded">
              <xs:complexType>
                <xs:sequence>
                  <xs:element name="StartDate" type="xs:date">
                    <xs:annotation>
                      <xs:documentation>The start date from which this version is valid.</xs:documentation>
                    </xs:annotation>
                  </xs:element>
                  <xs:element name="EndDate" minOccurs="0" nillable="true" type="xs:date">
                    <xs:annotation>
                      <xs:documentation>The end date until which this version is valid.</xs:documentation>
                    </xs:annotation>
                  </xs:element>
                  <xs:element name="Grades">
                    <xs:complexType>
                      <xs:sequence>
                        <xs:element name="Grade" maxOccurs="unbounded">
                          <xs:complexType>
                            <xs:sequence>
                              <xs:element name="Title" type="xs:normalizedString">
                                <xs:annotation>
                                  <xs:documentation>The visual representation of the grade.</xs:documentation>
                                </xs:annotation>
                              </xs:element>
                              <xs:element name="Description" type="xs:normalizedString">
                                <xs:annotation>
                                  <xs:documentation>The meaning of the grade.</xs:documentation>
                                </xs:annotation>
                              </xs:element>
                              <xs:element name="RankOrder" type="xs:unsignedInt">
                                <xs:annotation>
                                  <xs:documentation>The rank position of the grade within the set where the highest value is assumed to be the best. While duplicate ranks are allowed they are discouraged.</xs:documentation>
                                </xs:annotation>
                              </xs:element>
                              <xs:element name="NumericValue" type="xs:decimal">
                                <xs:annotation>
                                  <xs:documentation>The numeric equivalent value of the grade.</xs:documentation>
                                </xs:annotation>
                              </xs:element>
                            </xs:sequence>
                          </xs:complexType>
                        </xs:element>
                      </xs:sequence>
                    </xs:complexType>
                  </xs:element>
                </xs:sequence>
              </xs:complexType>
            </xs:element>
          </xs:sequence>
        </xs:complexType>
      </xs:element>
      <xs:element name="SIF_Metadata" minOccurs="0" nillable="true" type="sif:SIF_MetadataType" />
      <xs:element name="SIF_ExtendedElements" minOccurs="0" nillable="true" type="sif:SIF_ExtendedElementsType">
        <xs:key name="SIF_ExtendedElementsKey4">
          <xs:selector xpath="./sif:SIF_ExtendedElement" />
          <xs:field xpath="@Name" />
        </xs:key>
      </xs:element>
    </xs:sequence>
    <xs:attribute name="RefId" use="required" type="sif:RefIdType">
      <xs:annotation>
        <xs:documentation>The ID (GUID) of this grade set.</xs:documentation>
      </xs:annotation>
    </xs:attribute>
  </xs:complexType>

  <xs:element name="AssessmentResultGradeSet" type="sif:AssessmentResultGradeSetType">
    <xs:key name="AssessmentResultGradeSetKey1">
      <xs:selector xpath="." />
      <xs:field xpath="@RefId" />
    </xs:key>
  </xs:element>


  <!--AssessmentLearnerSet-->

  <xs:complexType name="AssessmentLearnerSetType">
    <xs:annotation>
      <xs:documentation>This object describes learners assigned to take an assessment or component grouping (can represent a markbook, exam entry, or an cohort objective).</xs:documentation>
    </xs:annotation>
    <xs:sequence>
      <xs:element name="CreationDateTime" type="xs:dateTime">
        <xs:annotation>
          <xs:documentation>Date/time assignment is created.</xs:documentation>
        </xs:annotation>
      </xs:element>
      <xs:element name="LocalId" minOccurs="0" nillable="true" type="xs:normalizedString">
        <xs:annotation>
          <xs:documentation>Value supplied by publishing vendor/supplier.</xs:documentation>
        </xs:annotation>
      </xs:element>
      <xs:element name="LearnerList" minOccurs="0" nillable="true">
        <xs:complexType>
          <xs:sequence>
            <xs:element name="LearnerPersonalRefId" maxOccurs="unbounded" type="sif:IdRefType">
              <xs:annotation>
                <xs:documentation>The ID (GUID) of a learner assigned to take an assessment.</xs:documentation>
              </xs:annotation>
            </xs:element>
          </xs:sequence>
        </xs:complexType>
      </xs:element>
      <xs:element name="SchoolGroupRefId" minOccurs="0" nillable="true" type="sif:IdRefType">
        <xs:annotation>
          <xs:documentation>Optional reference to the class group(s) to which this will be/are drawn.</xs:documentation>
        </xs:annotation>
      </xs:element>
      <xs:element name="WorkforcePersonalRefId" minOccurs="0" nillable="true" type="sif:IdRefType">
        <xs:annotation>
          <xs:documentation>The ID (GUID) that uniquely identifies the teacher or staff member who created the learner set.</xs:documentation>
        </xs:annotation>
      </xs:element>
      <xs:element name="SIF_Metadata" minOccurs="0" nillable="true" type="sif:SIF_MetadataType" />
      <xs:element name="SIF_ExtendedElements" minOccurs="0" nillable="true" type="sif:SIF_ExtendedElementsType">
        <xs:key name="SIF_ExtendedElementsKey5">
          <xs:selector xpath="./sif:SIF_ExtendedElement" />
          <xs:field xpath="@Name" />
        </xs:key>
      </xs:element>
    </xs:sequence>
    <xs:attribute name="RefId" use="required" type="sif:RefIdType">
      <xs:annotation>
        <xs:documentation>The ID (GUID) that uniquely identifies an instance of this object.</xs:documentation>
      </xs:annotation>
    </xs:attribute>
    <xs:attribute name="AssessmentResultComponentGroupRefId" use="required" type="sif:IdRefType">
      <xs:annotation>
        <xs:documentation>The assessment result component group (test or assessment) associated with the set of listed learners.</xs:documentation>
      </xs:annotation>
    </xs:attribute>
  </xs:complexType>

  <xs:element name="AssessmentLearnerSet" type="sif:AssessmentLearnerSetType">
    <xs:key name="AssessmentLearnerSetKey1">
      <xs:selector xpath="." />
      <xs:field xpath="@RefId" />
    </xs:key>
  </xs:element>


  <!--AssessmentSession-->

  <xs:complexType name="AssessmentSessionType">
    <xs:annotation>
      <xs:documentation>A session is an event where an activity is performed by or on a learner set which contributes to the attainment of the objective. Occurs at a place and time (e.g., a test is taken, assignments are handed in, a test is marked).</xs:documentation>
    </xs:annotation>
    <xs:sequence>
      <xs:element name="SessionDate" minOccurs="0" nillable="true" type="xs:date">
        <xs:annotation>
          <xs:documentation>The date at which the activity takes place.</xs:documentation>
        </xs:annotation>
      </xs:element>
      <xs:element name="SchoolInfoRefId" minOccurs="0" nillable="true" type="sif:IdRefType">
        <xs:annotation>
          <xs:documentation>The ID (GUID) of the school that the event takes place.</xs:documentation>
        </xs:annotation>
      </xs:element>
      <xs:element name="Activity" minOccurs="0" nillable="true">
        <xs:annotation>
          <xs:documentation>The activity which takes place.</xs:documentation>
        </xs:annotation>
        <xs:simpleType>
          <xs:restriction base="xs:token">
            <xs:enumeration value="Test" />
            <xs:enumeration value="Homework" />
            <xs:enumeration value="Exam" />
          </xs:restriction>
        </xs:simpleType>
      </xs:element>
      <xs:element name="Status" minOccurs="0" nillable="true">
        <xs:annotation>
          <xs:documentation>The current status of the session.</xs:documentation>
        </xs:annotation>
        <xs:simpleType>
          <xs:restriction base="xs:token">
            <xs:enumeration value="Planned" />
            <xs:enumeration value="Complete" />
            <xs:enumeration value="Published" />
          </xs:restriction>
        </xs:simpleType>
      </xs:element>
      <xs:element name="StaffList" minOccurs="0" nillable="true">
        <xs:complexType>
          <xs:sequence>
            <xs:element name="WorkforcePersonalRefId" maxOccurs="unbounded" type="sif:IdRefType">
              <xs:annotation>
                <xs:documentation>The GUID that uniquely identifies a teacher or other staff member responsible for administering or assisting the learner with this assessment.</xs:documentation>
              </xs:annotation>
            </xs:element>
          </xs:sequence>
        </xs:complexType>
      </xs:element>
      <xs:element name="SIF_Metadata" minOccurs="0" nillable="true" type="sif:SIF_MetadataType" />
      <xs:element name="SIF_ExtendedElements" minOccurs="0" nillable="true" type="sif:SIF_ExtendedElementsType">
        <xs:key name="SIF_ExtendedElementsKey6">
          <xs:selector xpath="./sif:SIF_ExtendedElement" />
          <xs:field xpath="@Name" />
        </xs:key>
      </xs:element>
    </xs:sequence>
    <xs:attribute name="RefId" use="required" type="sif:RefIdType">
      <xs:annotation>
        <xs:documentation>The ID (GUID) of this session.</xs:documentation>
      </xs:annotation>
    </xs:attribute>
    <xs:attribute name="AssessmentLearnerSetRefId" use="required" type="sif:IdRefType">
      <xs:annotation>
        <xs:documentation>The ID (GUID) of the set of people the session refers to.</xs:documentation>
      </xs:annotation>
    </xs:attribute>
  </xs:complexType>

  <xs:element name="AssessmentSession" type="sif:AssessmentSessionType">
    <xs:key name="AssessmentSessionKey1">
      <xs:selector xpath="." />
      <xs:field xpath="@RefId" />
    </xs:key>
  </xs:element>


  <!--AssessmentResponseComponentGroup-->

  <xs:complexType name="AssessmentResponseComponentGroupType">
    <xs:annotation>
      <xs:documentation>High level container describing components of the actual assessment or test paper/quiz taken by the learner. A response component group contains one or more components.</xs:documentation>
    </xs:annotation>
    <xs:sequence>
      <xs:element name="Name" type="xs:normalizedString">
        <xs:annotation>
          <xs:documentation>Name of the assessment/test/taken.</xs:documentation>
        </xs:annotation>
      </xs:element>
      <xs:element name="LocalId" minOccurs="0" nillable="true" type="xs:normalizedString">
        <xs:annotation>
          <xs:documentation>The identifier used for this entity within the publishing application.</xs:documentation>
        </xs:annotation>
      </xs:element>
      <xs:element name="SupplierName" minOccurs="0" nillable="true" type="xs:normalizedString">
        <xs:annotation>
          <xs:documentation>The supplier/originator/designer/owner of the described component grouping.</xs:documentation>
        </xs:annotation>
      </xs:element>
      <xs:element name="ComponentList">
        <xs:complexType>
          <xs:sequence>
            <xs:element name="AssessmentResponseComponentRefId" maxOccurs="unbounded" type="sif:IdRefType">
              <xs:annotation>
                <xs:documentation>The SIF identifier for an assessment response component.</xs:documentation>
              </xs:annotation>
            </xs:element>
          </xs:sequence>
        </xs:complexType>
      </xs:element>
      <xs:element name="SIF_Metadata" minOccurs="0" nillable="true" type="sif:SIF_MetadataType" />
      <xs:element name="SIF_ExtendedElements" minOccurs="0" nillable="true" type="sif:SIF_ExtendedElementsType">
        <xs:key name="SIF_ExtendedElementsKey7">
          <xs:selector xpath="./sif:SIF_ExtendedElement" />
          <xs:field xpath="@Name" />
        </xs:key>
      </xs:element>
    </xs:sequence>
    <xs:attribute name="RefId" use="required" type="sif:RefIdType">
      <xs:annotation>
        <xs:documentation>The ID (GUID) that uniquely identifies an instance of this object.</xs:documentation>
      </xs:annotation>
    </xs:attribute>
    <xs:attribute name="AssessmentSessionRefId" use="required" type="sif:IdRefType">
      <xs:annotation>
        <xs:documentation>The ID (GUID) of the assessment session in which the responses were collected.</xs:documentation>
      </xs:annotation>
    </xs:attribute>
  </xs:complexType>

  <xs:element name="AssessmentResponseComponentGroup" type="sif:AssessmentResponseComponentGroupType">
    <xs:key name="AssessmentResponseComponentGroupKey1">
      <xs:selector xpath="." />
      <xs:field xpath="@RefId" />
    </xs:key>
  </xs:element>


  <!--LearnerAssessmentResult-->

  <xs:complexType name="LearnerAssessmentResultType">
    <xs:annotation>
      <xs:documentation>A single result for a learner.</xs:documentation>
    </xs:annotation>
    <xs:sequence>
      <xs:element name="SchoolInfoRefId" type="sif:IdRefType">
        <xs:annotation>
          <xs:documentation>The school at which the assessment was taken.</xs:documentation>
        </xs:annotation>
      </xs:element>
      <xs:element name="AchievementDate" type="xs:date">
        <xs:annotation>
          <xs:documentation>The date the results were achieved.</xs:documentation>
        </xs:annotation>
      </xs:element>
      <xs:element name="Result" type="xs:normalizedString">
        <xs:annotation>
          <xs:documentation>A grade title, a comment, or a mark (dependent on ComponentType of associated aspect). Marks and grades should be valid in the grade set or mark set on the date the assessment was achieved.</xs:documentation>
        </xs:annotation>
      </xs:element>
      <xs:element name="ResultStatus" type="sif:UKAssessmentResultStatusType">
        <xs:annotation>
          <xs:documentation>Indicates whether the result is estimated, an interim result, provisional, actual result or a target.</xs:documentation>
        </xs:annotation>
      </xs:element>
      <xs:element name="AssessmentSessionList" minOccurs="0" nillable="true">
        <xs:complexType>
          <xs:sequence>
            <xs:element name="AssessmentSessionRefId" maxOccurs="unbounded" type="sif:IdRefType">
              <xs:annotation>
                <xs:documentation>The ID (GUID) that uniquely identifies the session associated with the result.</xs:documentation>
              </xs:annotation>
            </xs:element>
          </xs:sequence>
        </xs:complexType>
      </xs:element>
      <xs:element name="WorkforcePersonalRefId" minOccurs="0" nillable="true" type="sif:IdRefType">
        <xs:annotation>
          <xs:documentation>The ID (GUID) that uniquely identifies the teacher or staff member who created the result.</xs:documentation>
        </xs:annotation>
      </xs:element>
      <xs:element name="Note" minOccurs="0" nillable="true" type="xs:normalizedString">
        <xs:annotation>
          <xs:documentation>Explanatory/usage notes for result.</xs:documentation>
        </xs:annotation>
      </xs:element>
      <xs:element name="SIF_Metadata" minOccurs="0" nillable="true" type="sif:SIF_MetadataType" />
      <xs:element name="SIF_ExtendedElements" minOccurs="0" nillable="true" type="sif:SIF_ExtendedElementsType">
        <xs:annotation>
          <xs:documentation>Use extended elements to define additional information to be preserved with this result data including any learner demographic data known to be valid at the time of assessment and not otherwise specified.</xs:documentation>
        </xs:annotation>
        <xs:key name="SIF_ExtendedElementsKey8">
          <xs:selector xpath="./sif:SIF_ExtendedElement" />
          <xs:field xpath="@Name" />
        </xs:key>
      </xs:element>
    </xs:sequence>
    <xs:attribute name="RefId" use="required" type="sif:RefIdType">
      <xs:annotation>
        <xs:documentation>The ID (GUID) of this result.</xs:documentation>
      </xs:annotation>
    </xs:attribute>
    <xs:attribute name="AssessmentComponentRefId" use="required" type="sif:IdRefType">
      <xs:annotation>
        <xs:documentation>The assessment component that the result is for.</xs:documentation>
      </xs:annotation>
    </xs:attribute>
    <xs:attribute name="LearnerPersonalRefId" use="required" type="sif:IdRefType">
      <xs:annotation>
        <xs:documentation>The ID (GUID) of the learner achieving the results.</xs:documentation>
      </xs:annotation>
    </xs:attribute>
  </xs:complexType>

  <xs:element name="LearnerAssessmentResult" type="sif:LearnerAssessmentResultType">
    <xs:key name="LearnerAssessmentResultKey1">
      <xs:selector xpath="." />
      <xs:field xpath="@RefId" />
    </xs:key>
  </xs:element>


  <!--LearnerAssessmentResponseSet-->

  <xs:complexType name="LearnerAssessmentResponseSetType">
    <xs:annotation>
      <xs:documentation>The set of all responses provided by a learner while taking an assessment. This information represents the raw input data that is then evaluated to produce one or more scores, marks, or grades for the learner.</xs:documentation>
    </xs:annotation>
    <xs:sequence>
      <xs:element name="Items">
        <xs:complexType>
          <xs:sequence>
            <xs:element name="Item" minOccurs="0" maxOccurs="unbounded">
              <xs:complexType>
                <xs:sequence>
                  <xs:element name="Response" type="xs:string">
                    <xs:annotation>
                      <xs:documentation>Learner selection or response in raw format.</xs:documentation>
                    </xs:annotation>
                  </xs:element>
                  <xs:element name="ResponseStatus" minOccurs="0" nillable="true">
                    <xs:annotation>
                      <xs:documentation>Status of the response.</xs:documentation>
                    </xs:annotation>
                    <xs:simpleType>
                      <xs:restriction base="xs:token">
                        <xs:enumeration value="Correct" />
                        <xs:enumeration value="Incorrect" />
                        <xs:enumeration value="Complete" />
                        <xs:enumeration value="PartiallyComplete" />
                        <xs:enumeration value="Viewed" />
                        <xs:enumeration value="NotViewed" />
                        <xs:enumeration value="NotAnswered" />
                        <xs:enumeration value="Attempted (viewed but no response given)" />
                        <xs:enumeration value="Incomplete" />
                      </xs:restriction>
                    </xs:simpleType>
                  </xs:element>
                  <xs:element name="ResponseTime" minOccurs="0" nillable="true" type="xs:duration">
                    <xs:annotation>
                      <xs:documentation>The length of time the learner took to respond.</xs:documentation>
                    </xs:annotation>
                  </xs:element>
                  <xs:element name="Mark" minOccurs="0" nillable="true" type="xs:normalizedString">
                    <xs:annotation>
                      <xs:documentation>The mark achieved for this item as evaluated by the assessment tool at the time of assessment.</xs:documentation>
                    </xs:annotation>
                  </xs:element>
                  <xs:element name="Group" minOccurs="0" nillable="true" type="xs:normalizedString">
                    <xs:annotation>
                      <xs:documentation>The item group within the assessment.</xs:documentation>
                    </xs:annotation>
                  </xs:element>
                  <xs:element name="ItemName" minOccurs="0" nillable="true" type="xs:token">
                    <xs:annotation>
                      <xs:documentation>Identifies the item on the assessment by name.</xs:documentation>
                    </xs:annotation>
                  </xs:element>
                  <xs:element name="ItemNumber" minOccurs="0" nillable="true" type="xs:token">
                    <xs:annotation>
                      <xs:documentation>Identifies the item by number on the assessment.</xs:documentation>
                    </xs:annotation>
                  </xs:element>
                  <xs:element name="OrderAsked" minOccurs="0" nillable="true" type="xs:decimal">
                    <xs:annotation>
                      <xs:documentation>The order in which the item was asked.</xs:documentation>
                    </xs:annotation>
                  </xs:element>
                  <xs:element name="NumberOfAttempts" minOccurs="0" nillable="true" type="xs:unsignedInt">
                    <xs:annotation>
                      <xs:documentation>The number of times a learner changes their answer or attempts a response.</xs:documentation>
                    </xs:annotation>
                  </xs:element>
                </xs:sequence>
              </xs:complexType>
            </xs:element>
          </xs:sequence>
        </xs:complexType>
      </xs:element>
      <xs:element name="SIF_Metadata" minOccurs="0" nillable="true" type="sif:SIF_MetadataType" />
      <xs:element name="SIF_ExtendedElements" minOccurs="0" nillable="true" type="sif:SIF_ExtendedElementsType">
        <xs:key name="SIF_ExtendedElementsKey9">
          <xs:selector xpath="./sif:SIF_ExtendedElement" />
          <xs:field xpath="@Name" />
        </xs:key>
      </xs:element>
    </xs:sequence>
    <xs:attribute name="RefId" use="required" type="sif:RefIdType">
      <xs:annotation>
        <xs:documentation>The ID (GUID) that uniquely identifies this response set.</xs:documentation>
      </xs:annotation>
    </xs:attribute>
    <xs:attribute name="AssessmentResponseComponentRefId" use="required" type="sif:IdRefType">
      <xs:annotation>
        <xs:documentation>The ID (GUID) of the assessment response component that the responses are associated with</xs:documentation>
      </xs:annotation>
    </xs:attribute>
    <xs:attribute name="LearnerPersonalRefId" use="required" type="sif:IdRefType">
      <xs:annotation>
        <xs:documentation>The ID (GUID) of the Learner for whom these responses are.</xs:documentation>
      </xs:annotation>
    </xs:attribute>
  </xs:complexType>

  <xs:element name="LearnerAssessmentResponseSet" type="sif:LearnerAssessmentResponseSetType">
    <xs:key name="LearnerAssessmentResponseSetKey1">
      <xs:selector xpath="." />
      <xs:field xpath="@RefId" />
    </xs:key>
  </xs:element>


  <!--AssessmentResponseComponent-->

  <xs:complexType name="AssessmentResponseComponentType">
    <xs:annotation>
      <xs:documentation>This object describes a single component of the assessment or test paper/quiz taken by a learner. A response component has one or more responses.</xs:documentation>
    </xs:annotation>
    <xs:sequence>
      <xs:element name="Name" type="xs:normalizedString">
        <xs:annotation>
          <xs:documentation>The identifier used within the publishing application.</xs:documentation>
        </xs:annotation>
      </xs:element>
      <xs:element name="LocalId" minOccurs="0" nillable="true" type="xs:normalizedString">
        <xs:annotation>
          <xs:documentation>Optional reference to the school associated with the administration.</xs:documentation>
        </xs:annotation>
      </xs:element>
      <xs:element name="SupplierName" minOccurs="0" nillable="true" type="xs:normalizedString">
        <xs:annotation>
          <xs:documentation>The supplier/originator/designer/owner of the described component.</xs:documentation>
        </xs:annotation>
      </xs:element>
      <xs:element name="Description" type="xs:normalizedString">
        <xs:annotation>
          <xs:documentation>Longer text describing features of the component.</xs:documentation>
        </xs:annotation>
      </xs:element>
      <xs:element name="YearList" minOccurs="0" nillable="true">
        <xs:complexType>
          <xs:sequence>
            <xs:element name="Year" maxOccurs="unbounded" type="xs:normalizedString">
              <xs:annotation>
                <xs:documentation>A year with which the component grouping is applicable (by convention this is the end year of an academic year eg: 2007/8 resolves to 2008).</xs:documentation>
              </xs:annotation>
            </xs:element>
          </xs:sequence>
        </xs:complexType>
      </xs:element>
      <xs:element name="SIF_Metadata" minOccurs="0" nillable="true" type="sif:SIF_MetadataType" />
      <xs:element name="SIF_ExtendedElements" minOccurs="0" nillable="true" type="sif:SIF_ExtendedElementsType">
        <xs:key name="SIF_ExtendedElementsKey10">
          <xs:selector xpath="./sif:SIF_ExtendedElement" />
          <xs:field xpath="@Name" />
        </xs:key>
      </xs:element>
    </xs:sequence>
    <xs:attribute name="RefId" use="required" type="sif:RefIdType">
      <xs:annotation>
        <xs:documentation>The GUID that uniquely identifies an instance of this object.</xs:documentation>
      </xs:annotation>
    </xs:attribute>
  </xs:complexType>

  <xs:element name="AssessmentResponseComponent" type="sif:AssessmentResponseComponentType">
    <xs:key name="AssessmentResponseComponentKey1">
      <xs:selector xpath="." />
      <xs:field xpath="@RefId" />
    </xs:key>
  </xs:element>


  <!--LearnerAttendance-->

  <xs:complexType name="LearnerAttendanceType">
    <xs:annotation>
      <xs:documentation>This object provides attendance information for a particular learner in a particular school for a particular period of time. The time can be specified as before, during, or after school and may be for any period of time, including lessons.</xs:documentation>
    </xs:annotation>
    <xs:sequence>
      <xs:element name="AttendanceDate" type="xs:date">
        <xs:annotation>
          <xs:documentation>The date of the attendance period.</xs:documentation>
        </xs:annotation>
      </xs:element>
      <xs:element name="TimeIn" minOccurs="0" nillable="true" type="xs:time">
        <xs:annotation>
          <xs:documentation>The time when the learner began the attendance period.</xs:documentation>
        </xs:annotation>
      </xs:element>
      <xs:element name="StartTime" minOccurs="0" nillable="true" type="xs:time">
        <xs:annotation>
          <xs:documentation>The time the attendance period started. StartTime is required when this object represents a lesson</xs:documentation>
        </xs:annotation>
      </xs:element>
      <xs:element name="FinishTime" minOccurs="0" nillable="true" type="xs:time">
        <xs:annotation>
          <xs:documentation>The time the attendance period finished.</xs:documentation>
        </xs:annotation>
      </xs:element>
      <xs:element name="Session" minOccurs="0" nillable="true" type="sif:UKAttendanceSessionType">
        <xs:annotation>
          <xs:documentation>The session within which this attendance mark applies (e.g. AM/PM).  Session is required when StartTime is not specified and the object refers to a session attendance mark (i.e. AttendanceDomain is session).</xs:documentation>
        </xs:annotation>
      </xs:element>
      <xs:element name="SessionLabel" minOccurs="0" nillable="true" type="xs:normalizedString">
        <xs:annotation>
          <xs:documentation>A label associated with the session to further describe the session, when applicable.</xs:documentation>
        </xs:annotation>
      </xs:element>
      <xs:element name="AttendanceDomain" type="sif:UKAttendanceDomainType">
        <xs:annotation>
          <xs:documentation>The attendance type.</xs:documentation>
        </xs:annotation>
      </xs:element>
      <xs:element name="AttendanceCode" type="sif:UKAttendanceCodeType">
        <xs:annotation>
          <xs:documentation>The attendance mark/code.</xs:documentation>
        </xs:annotation>
      </xs:element>
      <xs:element name="AttendanceNote" minOccurs="0" nillable="true" type="xs:normalizedString">
        <xs:annotation>
          <xs:documentation>Additional comments. Required when record is specified as a correction.</xs:documentation>
        </xs:annotation>
      </xs:element>
      <xs:element name="RecordTimestamp" minOccurs="0" nillable="true" type="xs:dateTime">
        <xs:annotation>
          <xs:documentation>The date/time when recorded. When more than one record exists using the same RefId, the record with the latest timestamp is assumed to be the most current. This is possible when a record is republished due to corrections.</xs:documentation>
        </xs:annotation>
      </xs:element>
      <xs:element name="InputSource" type="sif:UKAttendanceSourceType">
        <xs:annotation>
          <xs:documentation>The source of the attendance record data.  Could be Workforce member, biometric device, or other.</xs:documentation>
        </xs:annotation>
      </xs:element>
      <xs:element name="WorkforcePersonalRefId" minOccurs="0" nillable="true" type="sif:IdRefType">
        <xs:annotation>
          <xs:documentation>The ID (GUID) of the staff member responsible for recording this attendance information.</xs:documentation>
        </xs:annotation>
      </xs:element>
      <xs:element name="SchoolGroupRefId" minOccurs="0" nillable="true" type="sif:IdRefType">
        <xs:annotation>
          <xs:documentation>The ID (GUID) of the group that this attendance applies to. Useful when the attendance period corresponds to a lesson time.</xs:documentation>
        </xs:annotation>
      </xs:element>
      <xs:element name="SIF_Metadata" minOccurs="0" nillable="true" type="sif:SIF_MetadataType" />
      <xs:element name="SIF_ExtendedElements" minOccurs="0" nillable="true" type="sif:SIF_ExtendedElementsType">
        <xs:key name="SIF_ExtendedElementsKey11">
          <xs:selector xpath="./sif:SIF_ExtendedElement" />
          <xs:field xpath="@Name" />
        </xs:key>
      </xs:element>
    </xs:sequence>
    <xs:attribute name="RefId" use="required" type="sif:RefIdType">
      <xs:annotation>
        <xs:documentation>The ID (GUID) assigned to uniquely identify this attendance record.</xs:documentation>
      </xs:annotation>
    </xs:attribute>
    <xs:attribute name="LearnerPersonalRefId" use="required" type="sif:IdRefType">
      <xs:annotation>
        <xs:documentation>The ID (GUID) of the learner for which this attendance mark is recorded.</xs:documentation>
      </xs:annotation>
    </xs:attribute>
    <xs:attribute name="SchoolInfoRefId" use="required" type="sif:IdRefType">
      <xs:annotation>
        <xs:documentation>The school where the attendance mark was taken.</xs:documentation>
      </xs:annotation>
    </xs:attribute>
  </xs:complexType>

  <xs:element name="LearnerAttendance" type="sif:LearnerAttendanceType">
    <xs:key name="LearnerAttendanceKey1">
      <xs:selector xpath="." />
      <xs:field xpath="@RefId" />
    </xs:key>
  </xs:element>


  <!--Identity-->

  <xs:complexType name="IdentityType">
    <xs:annotation>
      <xs:documentation>
        This object allows a system that stores network identities and/or passwords to share them with other applications through SIF. The provider of the Identity object may only support providing an identity or a password, or it may support both.
      </xs:documentation>
    </xs:annotation>
    <xs:sequence>
      <xs:element name="SIF_RefId">
        <xs:complexType>
          <xs:annotation>
            <xs:documentation>
        The SIF RefId of a LearnerPersonal, WorkforcePersonal, or ContactPersonal object.
      </xs:documentation>
          </xs:annotation>
          <xs:simpleContent>
            <xs:extension base="sif:IdRefType">
              <xs:attribute name="SIF_RefObject" use="required">
                <xs:annotation>
                  <xs:documentation>
        The type of SIF object that the SIF_RefId attribute identifies.
      </xs:documentation>
                </xs:annotation>
                <xs:simpleType>
                  <xs:restriction base="xs:token">
                    <xs:enumeration value="LearnerPersonal" />
                    <xs:enumeration value="WorkforcePersonal" />
                    <xs:enumeration value="ContactPersonal" />
                  </xs:restriction>
                </xs:simpleType>
              </xs:attribute>
            </xs:extension>
          </xs:simpleContent>
        </xs:complexType>
      </xs:element>
      <xs:element name="MainRole" minOccurs="0" nillable="true">
        <xs:annotation>
          <xs:documentation>
				Indicates whether or not the Person that this object refers to is the main role for this Identity.
			</xs:documentation>
        </xs:annotation>
        <xs:simpleType>
          <xs:restriction base="xs:token">
            <xs:enumeration value="Yes" />
            <xs:enumeration value="No" />
          </xs:restriction>
        </xs:simpleType>
      </xs:element>
      <xs:element name="AuthenticationSource">
        <xs:annotation>
          <xs:documentation>
        The type of source system that produced this Identityobject.
      </xs:documentation>
        </xs:annotation>
        <xs:simpleType>
          <xs:restriction base="xs:token">
            <xs:enumeration value="UKAccessShibboleth" />
            <xs:enumeration value="MSActiveDirectory" />
            <xs:enumeration value="NovellNDS" />
            <xs:enumeration value="OpenDirectory" />
            <xs:enumeration value="Other" />
          </xs:restriction>
        </xs:simpleType>
      </xs:element>
      <xs:element name="IdentityAssertions" minOccurs="0" nillable="true">
        <xs:complexType>
          <xs:sequence>
            <xs:element name="IdentityAssertion" maxOccurs="unbounded">
              <xs:annotation>
                <xs:documentation>The identification string for this user.</xs:documentation>
              </xs:annotation>
              <xs:complexType>
                <xs:simpleContent>
                  <xs:extension base="xs:normalizedString">
                    <xs:attribute name="SchemaName" use="required" type="xs:normalizedString">
                      <xs:annotation>
                        <xs:documentation>The name of the field.</xs:documentation>
                      </xs:annotation>
                    </xs:attribute>
                  </xs:extension>
                </xs:simpleContent>
              </xs:complexType>
            </xs:element>
          </xs:sequence>
        </xs:complexType>
        <xs:key name="IdentityAssertionsKey1">
          <xs:selector xpath="./sif:IdentityAssertion" />
          <xs:field xpath="@SchemaName" />
        </xs:key>
      </xs:element>
      <xs:element name="PasswordList" minOccurs="0" nillable="true">
        <xs:complexType>
          <xs:sequence>
            <xs:element name="Password" maxOccurs="unbounded">
              <xs:annotation>
                <xs:documentation>A representation of the user's password using the given algorithm.</xs:documentation>
              </xs:annotation>
              <xs:complexType>
                <xs:simpleContent>
                  <xs:extension base="xs:base64Binary">
                    <xs:attribute name="Algorithm" use="required">
                      <xs:annotation>
                        <xs:documentation>The method used to encrypt the user's password. See the implementation details below.</xs:documentation>
                      </xs:annotation>
                      <xs:simpleType>
                        <xs:restriction base="xs:token">
                          <xs:enumeration value="MD5" />
                          <xs:enumeration value="SHA1" />
                          <xs:enumeration value="DES" />
                          <xs:enumeration value="TripleDES" />
                          <xs:enumeration value="RC2" />
                          <xs:enumeration value="AES" />
                          <xs:enumeration value="RSA" />
                        </xs:restriction>
                      </xs:simpleType>
                    </xs:attribute>
                    <xs:attribute name="KeyName" use="required" type="xs:normalizedString">
                      <xs:annotation>
                        <xs:documentation>The name of the key to be used for decryption of the password. Left blank for hash algorithms (MD5 and SHA1).</xs:documentation>
                      </xs:annotation>
                    </xs:attribute>
                  </xs:extension>
                </xs:simpleContent>
              </xs:complexType>
            </xs:element>
          </xs:sequence>
        </xs:complexType>
      </xs:element>
      <xs:element name="AuthenticationSourceGlobalUID" minOccurs="0" nillable="true" type="sif:IdRefType">
        <xs:annotation>
          <xs:documentation>The globally unique identifier that links together separate Identity objects which reference the same Person.</xs:documentation>
        </xs:annotation>
      </xs:element>
      <xs:element name="SIF_Metadata" minOccurs="0" nillable="true" type="sif:SIF_MetadataType" />
      <xs:element name="SIF_ExtendedElements" minOccurs="0" nillable="true" type="sif:SIF_ExtendedElementsType">
        <xs:key name="SIF_ExtendedElementsKey12">
          <xs:selector xpath="./sif:SIF_ExtendedElement" />
          <xs:field xpath="@Name" />
        </xs:key>
      </xs:element>
    </xs:sequence>
    <xs:attribute name="RefId" use="required" type="sif:RefIdType">
      <xs:annotation>
        <xs:documentation>The SIF RefId that uniquely identifies this object.</xs:documentation>
      </xs:annotation>
    </xs:attribute>
  </xs:complexType>

  <xs:element name="Identity" type="sif:IdentityType">
    <xs:key name="IdentityKey1">
      <xs:selector xpath="." />
      <xs:field xpath="@RefId" />
    </xs:key>
  </xs:element>


  <!--ContactPersonal-->

  <xs:complexType name="ContactPersonalType">
    <xs:annotation>
      <xs:documentation>This object describes any person created as a contact at a school, LEA, or other institution, or associated with a Learner or other Workforce person.</xs:documentation>
    </xs:annotation>
    <xs:sequence>
      <xs:element ref="sif:PersonalInformation" />
      <xs:element name="SIF_Metadata" minOccurs="0" nillable="true" type="sif:SIF_MetadataType" />
      <xs:element name="SIF_ExtendedElements" minOccurs="0" nillable="true" type="sif:SIF_ExtendedElementsType">
        <xs:key name="SIF_ExtendedElementsKey13">
          <xs:selector xpath="./sif:SIF_ExtendedElement" />
          <xs:field xpath="@Name" />
        </xs:key>
      </xs:element>
    </xs:sequence>
    <xs:attribute name="RefId" use="required" type="sif:RefIdType">
      <xs:annotation>
        <xs:documentation>The ID (GUID) of a person referenced as a contact. Note that this GUID may be the same GUID assigned to a LearnerPersonal and/or WorkforcePersonal object record.</xs:documentation>
      </xs:annotation>
    </xs:attribute>
  </xs:complexType>

  <xs:element name="ContactPersonal" type="sif:ContactPersonalType">
    <xs:key name="ContactPersonalKey1">
      <xs:selector xpath="." />
      <xs:field xpath="@RefId" />
    </xs:key>
  </xs:element>


  <!--LAInfo-->

  <xs:complexType name="LAInfoType">
    <xs:annotation>
      <xs:documentation>
      This object contains information about a Local Authority (LA).  Compare with US/Canada object: </xs:documentation>
    </xs:annotation>
    <xs:sequence>
      <xs:element ref="sif:LAId" />
      <xs:element ref="sif:LAName" />
      <xs:element name="LAFullName" type="xs:normalizedString">
        <xs:annotation>
          <xs:documentation>The LA's full name.</xs:documentation>
        </xs:annotation>
      </xs:element>
      <xs:element name="LAURL" minOccurs="0" nillable="true" type="xs:anyURI">
        <xs:annotation>
          <xs:documentation>URL for the main LA website.</xs:documentation>
        </xs:annotation>
      </xs:element>
      <xs:element name="LAAddress" minOccurs="0" nillable="true" type="sif:AddressType">
        <xs:annotation>
          <xs:documentation>The LA's main address information.</xs:documentation>
        </xs:annotation>
      </xs:element>
      <xs:element name="AddressList" minOccurs="0" nillable="true" type="sif:AddressListType">
        <xs:annotation>
          <xs:documentation>A list of the LA's other addresses, if any.</xs:documentation>
        </xs:annotation>
        <xs:key name="AddressListKey3">
          <xs:selector xpath="./sif:Address" />
          <xs:field xpath="@Type" />
        </xs:key>
      </xs:element>
      <xs:element name="LAPhoneNumber" minOccurs="0" nillable="true" type="sif:PhoneNumberType">
        <xs:annotation>
          <xs:documentation>The LA's primary phone number.</xs:documentation>
        </xs:annotation>
      </xs:element>
      <xs:element name="PhoneNumberList" minOccurs="0" nillable="true" type="sif:PhoneNumberListType">
        <xs:annotation>
          <xs:documentation>A list of the LA's other phone number(s).</xs:documentation>
        </xs:annotation>
        <xs:key name="PhoneNumberListKey3">
          <xs:selector xpath="./sif:PhoneNumber" />
          <xs:field xpath="@Type" />
        </xs:key>
      </xs:element>
      <xs:element name="LAContactList" minOccurs="0" nillable="true" type="sif:ContactListType">
        <xs:annotation>
          <xs:documentation>A list of contacts within the LA.</xs:documentation>
        </xs:annotation>
      </xs:element>
      <xs:element name="SIF_Metadata" minOccurs="0" nillable="true" type="sif:SIF_MetadataType" />
      <xs:element name="SIF_ExtendedElements" minOccurs="0" nillable="true" type="sif:SIF_ExtendedElementsType">
        <xs:key name="SIF_ExtendedElementsKey14">
          <xs:selector xpath="./sif:SIF_ExtendedElement" />
          <xs:field xpath="@Name" />
        </xs:key>
      </xs:element>
    </xs:sequence>
    <xs:attribute name="RefId" use="required" type="sif:RefIdType">
      <xs:annotation>
        <xs:documentation>The GUID of the LA whose information this is.</xs:documentation>
      </xs:annotation>
    </xs:attribute>
  </xs:complexType>

  <xs:element name="LAInfo" type="sif:LAInfoType">
    <xs:key name="LAInfoKey1">
      <xs:selector xpath="." />
      <xs:field xpath="@RefId" />
    </xs:key>
  </xs:element>


  <!--LearnerAttendanceSummary-->

  <xs:complexType name="LearnerAttendanceSummaryType">
    <xs:annotation>
      <xs:documentation>
      This object provides a summary of a learner's daily attendance and membership information for a given school during the time period between the StartDate and EndDate, inclusive. As such, there may be multiple instances of this object for a learner in a school over the course of an academic school year.  Note that sessions are defined by each school and in most cases is two but can be any number in the range 1-10.  Compare with US/Canada object: </xs:documentation>
    </xs:annotation>
    <xs:sequence>
      <xs:element ref="sif:SchoolYear" />
      <xs:element name="StartDate" type="xs:date">
        <xs:annotation>
          <xs:documentation>Starting date of this attendance reporting period.</xs:documentation>
        </xs:annotation>
      </xs:element>
      <xs:element name="EndDate" type="xs:date">
        <xs:annotation>
          <xs:documentation>Ending date of this attendance reporting period.</xs:documentation>
        </xs:annotation>
      </xs:element>
      <xs:element name="ReasonsList">
        <xs:complexType>
          <xs:sequence>
            <xs:element name="Reason" maxOccurs="unbounded">
              <xs:complexType>
                <xs:sequence>
                  <xs:element name="Code" type="sif:UKAttendanceCodeType">
                    <xs:annotation>
                      <xs:documentation>The attendance code.</xs:documentation>
                    </xs:annotation>
                  </xs:element>
                  <xs:element name="Type">
                    <xs:annotation>
                      <xs:documentation>The attendance code type.</xs:documentation>
                    </xs:annotation>
                    <xs:simpleType>
                      <xs:restriction base="xs:token">
                        <xs:enumeration value="Absent" />
                        <xs:enumeration value="EarlyDeparture" />
                        <xs:enumeration value="Late" />
                        <xs:enumeration value="Partial" />
                        <xs:enumeration value="Present" />
                        <xs:enumeration value="Other" />
                        <xs:enumeration value="NA" />
                      </xs:restriction>
                    </xs:simpleType>
                  </xs:element>
                  <xs:element name="Status">
                    <xs:annotation>
                      <xs:documentation>The authorised status of the attendance code.</xs:documentation>
                    </xs:annotation>
                    <xs:simpleType>
                      <xs:restriction base="xs:token">
                        <xs:enumeration value="Authorised" />
                        <xs:enumeration value="Unauthorised" />
                        <xs:enumeration value="Unknown" />
                        <xs:enumeration value="NA" />
                      </xs:restriction>
                    </xs:simpleType>
                  </xs:element>
                  <xs:element name="Total" type="xs:unsignedInt">
                    <xs:annotation>
                      <xs:documentation>The total number of sessions attributed to this reason between StartDate and EndDate for the specified reason.</xs:documentation>
                    </xs:annotation>
                  </xs:element>
                </xs:sequence>
              </xs:complexType>
            </xs:element>
          </xs:sequence>
        </xs:complexType>
      </xs:element>
      <xs:element name="SessionsAttendedTotal" type="xs:unsignedInt">
        <xs:annotation>
          <xs:documentation>The number of sessions the learner attended school when school was in session between the StartDate and EndDate, inclusive.</xs:documentation>
        </xs:annotation>
      </xs:element>
      <xs:element name="SessionsPossible" type="xs:unsignedInt">
        <xs:annotation>
          <xs:documentation>The number of sessions the learner was present plus the number of sessions the learner was absent (authorised and unauthorised) when school was in session during the period between the StartDate and EndDate, inclusive.</xs:documentation>
        </xs:annotation>
      </xs:element>
      <xs:element name="AuthorisedAbsences" minOccurs="0" nillable="true" type="xs:unsignedInt">
        <xs:annotation>
          <xs:documentation>The number of sessions the learner was absent from school with a valid excuse when school was in session between the StartDate and EndDate, inclusive. Note that ts column can be derived from Reason Status.</xs:documentation>
        </xs:annotation>
      </xs:element>
      <xs:element name="UnauthorisedAbsences" minOccurs="0" nillable="true" type="xs:unsignedInt">
        <xs:annotation>
          <xs:documentation>The number of sessions the learner was absent from school without a valid excuse when school was in session between the StartDate and EndDate, inclusive.  Note that this column can be derived from Reason Status.</xs:documentation>
        </xs:annotation>
      </xs:element>
      <xs:element name="AlternativeTuitionHours" minOccurs="0" nillable="true" type="sif:UKTuitionHoursType">
        <xs:annotation>
          <xs:documentation>Number of Alternative Tuition (whole) hours attended between the StartDate and EndDate, inclusive.</xs:documentation>
        </xs:annotation>
      </xs:element>
      <xs:element name="SIF_Metadata" minOccurs="0" nillable="true" type="sif:SIF_MetadataType" />
      <xs:element name="SIF_ExtendedElements" minOccurs="0" nillable="true" type="sif:SIF_ExtendedElementsType">
        <xs:key name="SIF_ExtendedElementsKey15">
          <xs:selector xpath="./sif:SIF_ExtendedElement" />
          <xs:field xpath="@Name" />
        </xs:key>
      </xs:element>
    </xs:sequence>
    <xs:attribute name="LearnerPersonalRefId" use="required" type="sif:IdRefType">
      <xs:annotation>
        <xs:documentation>The ID (GUID) of the learner for whom this attendance information is being reported.</xs:documentation>
      </xs:annotation>
    </xs:attribute>
    <xs:attribute name="SchoolInfoRefId" use="required" type="sif:IdRefType">
      <xs:annotation>
        <xs:documentation>The ID (GUID) of the school for which this attendance information is being reported.</xs:documentation>
      </xs:annotation>
    </xs:attribute>
  </xs:complexType>

  <xs:element name="LearnerAttendanceSummary" type="sif:LearnerAttendanceSummaryType">
    <xs:key name="LearnerAttendanceSummaryKey1">
      <xs:selector xpath="." />
      <xs:field xpath="@LearnerPersonalRefId" />
      <xs:field xpath="@SchoolInfoRefId" />
      <xs:field xpath="./sif:SchoolYear" />
      <xs:field xpath="./sif:StartDate" />
      <xs:field xpath="./sif:EndDate" />
    </xs:key>
  </xs:element>


  <!--LearnerContact-->

  <xs:complexType name="LearnerContactType">
    <xs:annotation>
      <xs:documentation>
      This object contains information related to a contact person for a learner.  Compare with US/Canada object: </xs:documentation>
    </xs:annotation>
    <xs:sequence>
      <xs:element name="Relationship" type="sif:UKRelationshipType">
        <xs:annotation>
          <xs:documentation>Defines the relationship of the contact to the learner.</xs:documentation>
        </xs:annotation>
      </xs:element>
      <xs:element name="LocalId" minOccurs="0" nillable="true" type="sif:LocalIdType">
        <xs:annotation>
          <xs:documentation>The locally-assigned identifier for this contact.</xs:documentation>
        </xs:annotation>
      </xs:element>
      <xs:element name="ContactFlags">
        <xs:complexType>
          <xs:sequence>
            <xs:element name="ParentLegalGuardian" minOccurs="0" nillable="true">
              <xs:annotation>
                <xs:documentation>Does the individual have parental or legal guardianship responsibility for the learner?</xs:documentation>
              </xs:annotation>
              <xs:simpleType>
                <xs:restriction base="xs:token">
                  <xs:enumeration value="Yes" />
                  <xs:enumeration value="No" />
                </xs:restriction>
              </xs:simpleType>
            </xs:element>
            <xs:element name="PickupRights" minOccurs="0" nillable="true">
              <xs:annotation>
                <xs:documentation>Does the contact have pickup rights?</xs:documentation>
              </xs:annotation>
              <xs:simpleType>
                <xs:restriction base="xs:token">
                  <xs:enumeration value="Yes" />
                  <xs:enumeration value="No" />
                </xs:restriction>
              </xs:simpleType>
            </xs:element>
            <xs:element name="LivesWith" minOccurs="0" nillable="true">
              <xs:annotation>
                <xs:documentation>Does the learner live with this contact?</xs:documentation>
              </xs:annotation>
              <xs:simpleType>
                <xs:restriction base="xs:token">
                  <xs:enumeration value="Yes" />
                  <xs:enumeration value="No" />
                </xs:restriction>
              </xs:simpleType>
            </xs:element>
            <xs:element name="AddressDisclosure" minOccurs="0" nillable="true">
              <xs:annotation>
                <xs:documentation>Can address information be disclosed?</xs:documentation>
              </xs:annotation>
              <xs:simpleType>
                <xs:restriction base="xs:token">
                  <xs:enumeration value="Yes" />
                  <xs:enumeration value="No" />
                </xs:restriction>
              </xs:simpleType>
            </xs:element>
            <xs:element name="EmailCommunication" minOccurs="0" nillable="true">
              <xs:annotation>
                <xs:documentation>Does the contact prefer written communcation via email?  Otherwise, postal mail will be used.</xs:documentation>
              </xs:annotation>
              <xs:simpleType>
                <xs:restriction base="xs:token">
                  <xs:enumeration value="Yes" />
                  <xs:enumeration value="No" />
                </xs:restriction>
              </xs:simpleType>
            </xs:element>
            <xs:element name="EmergencyContact" minOccurs="0" nillable="true">
              <xs:annotation>
                <xs:documentation>Should this contact be notified in case of emergency?</xs:documentation>
              </xs:annotation>
              <xs:simpleType>
                <xs:restriction base="xs:token">
                  <xs:enumeration value="Yes" />
                  <xs:enumeration value="No" />
                </xs:restriction>
              </xs:simpleType>
            </xs:element>
            <xs:element name="DisciplinaryContact" minOccurs="0" nillable="true">
              <xs:annotation>
                <xs:documentation>Is this person to be contacted in case of disciplinary action?</xs:documentation>
              </xs:annotation>
              <xs:simpleType>
                <xs:restriction base="xs:token">
                  <xs:enumeration value="Yes" />
                  <xs:enumeration value="No" />
                </xs:restriction>
              </xs:simpleType>
            </xs:element>
            <xs:element name="HomeDuringDay" minOccurs="0" nillable="true">
              <xs:annotation>
                <xs:documentation>Is the contact at home during normal daytime hours?</xs:documentation>
              </xs:annotation>
              <xs:simpleType>
                <xs:restriction base="xs:token">
                  <xs:enumeration value="Yes" />
                  <xs:enumeration value="No" />
                </xs:restriction>
              </xs:simpleType>
            </xs:element>
            <xs:element name="MemberOfArmedForces" minOccurs="0" nillable="true">
              <xs:annotation>
                <xs:documentation>Is this person a member of the armed forces?</xs:documentation>
              </xs:annotation>
              <xs:simpleType>
                <xs:restriction base="xs:token">
                  <xs:enumeration value="Yes" />
                  <xs:enumeration value="No" />
                </xs:restriction>
              </xs:simpleType>
            </xs:element>
            <xs:element name="PrimaryCareProvider" minOccurs="0" nillable="true">
              <xs:annotation>
                <xs:documentation>Does this person provide daily living or personal assistance to the learner?</xs:documentation>
              </xs:annotation>
              <xs:simpleType>
                <xs:restriction base="xs:token">
                  <xs:enumeration value="Yes" />
                  <xs:enumeration value="No" />
                </xs:restriction>
              </xs:simpleType>
            </xs:element>
            <xs:element name="RequiresInterpreter" minOccurs="0" nillable="true">
              <xs:annotation>
                <xs:documentation>Does the contact need a translator or interpreter?</xs:documentation>
              </xs:annotation>
              <xs:simpleType>
                <xs:restriction base="xs:token">
                  <xs:enumeration value="Yes" />
                  <xs:enumeration value="No" />
                </xs:restriction>
              </xs:simpleType>
            </xs:element>
            <xs:element name="TransferAddress" minOccurs="0" nillable="true">
              <xs:annotation>
                <xs:documentation>Should this contact be transferred with the Learner if and when the Learner moves?</xs:documentation>
              </xs:annotation>
              <xs:simpleType>
                <xs:restriction base="xs:token">
                  <xs:enumeration value="Yes" />
                  <xs:enumeration value="No" />
                </xs:restriction>
              </xs:simpleType>
            </xs:element>
          </xs:sequence>
        </xs:complexType>
      </xs:element>
      <xs:element name="ContactSequence" minOccurs="0" nillable="true">
        <xs:simpleType>
          <xs:restriction base="xs:unsignedInt">
            <xs:annotation>
              <xs:documentation>Number (1-10) indicating the order in which the person should be contacted.  Note that 2 or more contacts may have the same value.</xs:documentation>
            </xs:annotation>
            <xs:minInclusive value="1" xmlns:xs="http://www.w3.org/2001/XMLSchema" />
            <xs:maxInclusive value="10" xmlns:xs="http://www.w3.org/2001/XMLSchema" />
          </xs:restriction>
        </xs:simpleType>
      </xs:element>
      <xs:element name="ContactSequenceSource" minOccurs="0" nillable="true" type="sif:UKSourceCodeType">
        <xs:annotation>
          <xs:documentation>Indicates the person who provided the contact sequence order.</xs:documentation>
        </xs:annotation>
      </xs:element>
      <xs:element name="SIF_Metadata" minOccurs="0" nillable="true" type="sif:SIF_MetadataType" />
      <xs:element name="SIF_ExtendedElements" minOccurs="0" nillable="true" type="sif:SIF_ExtendedElementsType">
        <xs:key name="SIF_ExtendedElementsKey16">
          <xs:selector xpath="./sif:SIF_ExtendedElement" />
          <xs:field xpath="@Name" />
        </xs:key>
      </xs:element>
    </xs:sequence>
    <xs:attribute name="LearnerPersonalRefId" use="required" type="sif:IdRefType">
      <xs:annotation>
        <xs:documentation>The ID (GUID) of the learner whose contact this is.</xs:documentation>
      </xs:annotation>
    </xs:attribute>
    <xs:attribute name="ContactPersonalRefId" use="required" type="sif:IdRefType">
      <xs:annotation>
        <xs:documentation>The ID (GUID) of this contact.</xs:documentation>
      </xs:annotation>
    </xs:attribute>
  </xs:complexType>

  <xs:element name="LearnerContact" type="sif:LearnerContactType">
    <xs:key name="LearnerContactKey1">
      <xs:selector xpath="." />
      <xs:field xpath="@LearnerPersonalRefId" />
      <xs:field xpath="@ContactPersonalRefId" />
    </xs:key>
  </xs:element>


  <!--LearnerExclusion-->

  <xs:complexType name="LearnerExclusionType">
    <xs:annotation>
      <xs:documentation>This object contains information related to a learner being excluded from one or more sessions of school.</xs:documentation>
    </xs:annotation>
    <xs:sequence>
      <xs:element name="Category">
        <xs:annotation>
          <xs:documentation>Exclusion category.</xs:documentation>
        </xs:annotation>
        <xs:simpleType>
          <xs:restriction base="xs:token">
            <xs:enumeration value="FIXD">
              <xs:annotation>
                <xs:documentation>Fixed</xs:documentation>
              </xs:annotation>
            </xs:enumeration>
            <xs:enumeration value="PERM">
              <xs:annotation>
                <xs:documentation>Permanent</xs:documentation>
              </xs:annotation>
            </xs:enumeration>
            <xs:enumeration value="LNCH">
              <xs:annotation>
                <xs:documentation>Lunchtime</xs:documentation>
              </xs:annotation>
            </xs:enumeration>
          </xs:restriction>
        </xs:simpleType>
      </xs:element>
      <xs:element name="Reason" type="sif:UKExclusionReasonType">
        <xs:annotation>
          <xs:documentation>Reason for exclusion.</xs:documentation>
        </xs:annotation>
      </xs:element>
      <xs:element name="StartDate" type="xs:date">
        <xs:annotation>
          <xs:documentation>Date exclusion takes effect irrespective of any review or appeal. Normally this will not be the same as Date of Leaving (exitDate) and it should be noted that the learner will remain on the schools's roll for a period after this start date.</xs:documentation>
        </xs:annotation>
      </xs:element>
      <xs:element name="StartSession">
        <xs:simpleType>
          <xs:restriction base="xs:unsignedInt">
            <xs:annotation>
              <xs:documentation>Session to begin exclusion, starting with 1 for the first session of the day. In most cases there are two sessions per day but this is not always the case.  Validation: Number between 1 and 10.</xs:documentation>
            </xs:annotation>
            <xs:minInclusive value="1" xmlns:xs="http://www.w3.org/2001/XMLSchema" />
            <xs:maxInclusive value="10" xmlns:xs="http://www.w3.org/2001/XMLSchema" />
          </xs:restriction>
        </xs:simpleType>
      </xs:element>
      <xs:element name="EndDate" minOccurs="0" nillable="true" type="xs:date">
        <xs:annotation>
          <xs:documentation>Date exclusion concludes.</xs:documentation>
        </xs:annotation>
      </xs:element>
      <xs:element name="ActualSessions" minOccurs="0" nillable="true" type="xs:unsignedInt">
        <xs:annotation>
          <xs:documentation>Total number of sessions for which the exclusion is in effect. For lunchtime exclusions, each lunchtime for which the exclusion applies is one session. For fixed term and permanent exclusions, this is one session during the school day. For exclusions that are followed by reinstatement the actual, not the planned number of sessions should be recorded. (Exclusion sessions are used only to calculate the total allowable in a term or academic year and are not the same as an attendance session.)</xs:documentation>
        </xs:annotation>
      </xs:element>
      <xs:element name="Appeal" minOccurs="0" nillable="true">
        <xs:annotation>
          <xs:documentation>Is there an appeal against permanent exclusion?</xs:documentation>
        </xs:annotation>
        <xs:simpleType>
          <xs:restriction base="xs:token">
            <xs:enumeration value="Yes" />
            <xs:enumeration value="No" />
          </xs:restriction>
        </xs:simpleType>
      </xs:element>
      <xs:element name="AppealDate" minOccurs="0" nillable="true" type="xs:date">
        <xs:annotation>
          <xs:documentation>Date for appeal against permanent exclusion.</xs:documentation>
        </xs:annotation>
      </xs:element>
      <xs:element name="AppealResult" minOccurs="0" nillable="true">
        <xs:annotation>
          <xs:documentation>The result of the appeal against permanent exclusion.</xs:documentation>
        </xs:annotation>
        <xs:simpleType>
          <xs:restriction base="xs:token">
            <xs:enumeration value="R">
              <xs:annotation>
                <xs:documentation>Reinstatement</xs:documentation>
              </xs:annotation>
            </xs:enumeration>
            <xs:enumeration value="E">
              <xs:annotation>
                <xs:documentation>Exclusion stands</xs:documentation>
              </xs:annotation>
            </xs:enumeration>
            <xs:enumeration value="O">
              <xs:annotation>
                <xs:documentation>Reinstatement would be appropriate but not in best interest of learner given other circumstances</xs:documentation>
              </xs:annotation>
            </xs:enumeration>
          </xs:restriction>
        </xs:simpleType>
      </xs:element>
      <xs:element name="ReinstatementDate" minOccurs="0" nillable="true" type="xs:date">
        <xs:annotation>
          <xs:documentation>Date learner was reinstated, if appropriate.</xs:documentation>
        </xs:annotation>
      </xs:element>
      <xs:element name="HeadTeacherNotificationDate" minOccurs="0" nillable="true" type="xs:date">
        <xs:annotation>
          <xs:documentation>Date head teacher notified parents, school LA, and home LA (if different) of exclusion.</xs:documentation>
        </xs:annotation>
      </xs:element>
      <xs:element name="GovernorMeetingDate" minOccurs="0" nillable="true" type="xs:date">
        <xs:annotation>
          <xs:documentation>Date of Governors' meeting with respect to exclusion.</xs:documentation>
        </xs:annotation>
      </xs:element>
      <xs:element name="HearingNoticeOfAppealDate" minOccurs="0" nillable="true" type="xs:date">
        <xs:annotation>
          <xs:documentation>Date of exclusion hearing/expiration of notice of appeal.</xs:documentation>
        </xs:annotation>
      </xs:element>
      <xs:element name="SIF_Metadata" minOccurs="0" nillable="true" type="sif:SIF_MetadataType" />
      <xs:element name="SIF_ExtendedElements" minOccurs="0" nillable="true" type="sif:SIF_ExtendedElementsType">
        <xs:key name="SIF_ExtendedElementsKey17">
          <xs:selector xpath="./sif:SIF_ExtendedElement" />
          <xs:field xpath="@Name" />
        </xs:key>
      </xs:element>
    </xs:sequence>
    <xs:attribute name="RefId" use="required" type="sif:RefIdType">
      <xs:annotation>
        <xs:documentation>The ID (GUID) of this exclusion.</xs:documentation>
      </xs:annotation>
    </xs:attribute>
    <xs:attribute name="LearnerPersonalRefId" use="required" type="sif:IdRefType">
      <xs:annotation>
        <xs:documentation>The ID (GUID) of the excluded learner.</xs:documentation>
      </xs:annotation>
    </xs:attribute>
  </xs:complexType>

  <xs:element name="LearnerExclusion" type="sif:LearnerExclusionType">
    <xs:key name="LearnerExclusionKey1">
      <xs:selector xpath="." />
      <xs:field xpath="@RefId" />
    </xs:key>
  </xs:element>


  <!--LearnerGroupEnrolment-->

  <xs:complexType name="LearnerGroupEnrolmentType">
    <xs:annotation>
      <xs:documentation>
      This object contains information about a learner's enrolment in a course (teaching group) or other (class, homeroom or registration) group.  Compare with US/Canada object: </xs:documentation>
    </xs:annotation>
    <xs:sequence>
      <xs:element ref="sif:SchoolYear" />
      <xs:element name="EntryDate" minOccurs="0" nillable="true" type="xs:date">
        <xs:annotation>
          <xs:documentation>Date from when this enrolment is valid.</xs:documentation>
        </xs:annotation>
      </xs:element>
      <xs:element name="ExitDate" minOccurs="0" nillable="true" type="xs:date">
        <xs:annotation>
          <xs:documentation>Date on which the learner's enrolment ends or has ended.</xs:documentation>
        </xs:annotation>
      </xs:element>
      <xs:element name="SIF_Metadata" minOccurs="0" nillable="true" type="sif:SIF_MetadataType" />
      <xs:element name="SIF_ExtendedElements" minOccurs="0" nillable="true" type="sif:SIF_ExtendedElementsType">
        <xs:key name="SIF_ExtendedElementsKey18">
          <xs:selector xpath="./sif:SIF_ExtendedElement" />
          <xs:field xpath="@Name" />
        </xs:key>
      </xs:element>
    </xs:sequence>
    <xs:attribute name="RefId" use="required" type="sif:RefIdType">
      <xs:annotation>
        <xs:documentation>The ID (GUID) that uniquely identifies this LearnerGroupEnrolment entity.</xs:documentation>
      </xs:annotation>
    </xs:attribute>
    <xs:attribute name="LearnerPersonalRefId" use="required" type="sif:IdRefType">
      <xs:annotation>
        <xs:documentation>The ID (GUID) of the learner to whom the enrolment information applies.</xs:documentation>
      </xs:annotation>
    </xs:attribute>
    <xs:attribute name="SchoolGroupRefId" use="required" type="sif:IdRefType">
      <xs:annotation>
        <xs:documentation>The ID (GUID) of the group in which this learner is enroled.</xs:documentation>
      </xs:annotation>
    </xs:attribute>
  </xs:complexType>

  <xs:element name="LearnerGroupEnrolment" type="sif:LearnerGroupEnrolmentType">
    <xs:key name="LearnerGroupEnrolmentKey1">
      <xs:selector xpath="." />
      <xs:field xpath="@RefId" />
    </xs:key>
  </xs:element>


  <!--LearnerPersonal-->

  <xs:complexType name="LearnerPersonalType">
    <xs:annotation>
      <xs:documentation>
        This object contains personal information related to a learner. As most
        learners are enroled in the school or establishment publishing this object,
        basic enrolment information is also provided to aid in overall SIF
        performance.
      </xs:documentation>
    </xs:annotation>
    <xs:sequence>
      <xs:element name="LocalId" minOccurs="0" nillable="true" type="sif:LocalIdType">
        <xs:annotation>
          <xs:documentation>The locally-assigned identifier for this learner. This can be the internal pupil number or any other number as determined by the publishing agent.</xs:documentation>
        </xs:annotation>
      </xs:element>
      <xs:element name="AlertMsgList" minOccurs="0" nillable="true">
        <xs:complexType>
          <xs:sequence>
            <xs:element name="AlertMsg" maxOccurs="unbounded">
              <xs:annotation>
                <xs:documentation>This is an alert message that is associated with the person.</xs:documentation>
              </xs:annotation>
              <xs:complexType>
                <xs:simpleContent>
                  <xs:extension base="xs:normalizedString">
                    <xs:attribute name="Type" use="required">
                      <xs:annotation>
                        <xs:documentation>This attribute specifies what type of alert message this is.</xs:documentation>
                      </xs:annotation>
                      <xs:simpleType>
                        <xs:restriction base="xs:token">
                          <xs:enumeration value="Legal" />
                          <xs:enumeration value="Discipline" />
                          <xs:enumeration value="Educational" />
                          <xs:enumeration value="Other" />
                        </xs:restriction>
                      </xs:simpleType>
                    </xs:attribute>
                  </xs:extension>
                </xs:simpleContent>
              </xs:complexType>
            </xs:element>
          </xs:sequence>
        </xs:complexType>
      </xs:element>
      <xs:element name="MedicalAlertMsgList" minOccurs="0" nillable="true">
        <xs:complexType>
          <xs:sequence>
            <xs:element name="MedicalAlertMsg" maxOccurs="unbounded">
              <xs:annotation>
                <xs:documentation>Medical alert associated with the person.</xs:documentation>
              </xs:annotation>
              <xs:complexType>
                <xs:simpleContent>
                  <xs:extension base="xs:normalizedString">
                    <xs:attribute name="Severity" use="required">
                      <xs:annotation>
                        <xs:documentation>The level of severity of this medical alert.</xs:documentation>
                      </xs:annotation>
                      <xs:simpleType>
                        <xs:restriction base="xs:token">
                          <xs:enumeration value="Low" />
                          <xs:enumeration value="Moderate" />
                          <xs:enumeration value="High" />
                          <xs:enumeration value="Severe" />
                          <xs:enumeration value="Unknown" />
                        </xs:restriction>
                      </xs:simpleType>
                    </xs:attribute>
                  </xs:extension>
                </xs:simpleContent>
              </xs:complexType>
            </xs:element>
          </xs:sequence>
        </xs:complexType>
      </xs:element>
      <xs:element ref="sif:PersonalInformation" />
      <xs:element name="UIPI" minOccurs="0" nillable="true" type="xs:normalizedString">
        <xs:annotation>
          <xs:documentation>Unique Internal Pupil Number.</xs:documentation>
        </xs:annotation>
      </xs:element>
      <xs:element name="UPN" minOccurs="0" nillable="true" type="xs:normalizedString">
        <xs:annotation>
          <xs:documentation>Unique Pupil Number (UPN) allocated to each learner in maintained schools in England and Wales. It is an identifier for use in the educational context during a child's school career only and subject to Data Protection restrictions.</xs:documentation>
        </xs:annotation>
      </xs:element>
      <xs:element name="UPNAllocationDate" minOccurs="0" nillable="true" type="xs:date">
        <xs:annotation>
          <xs:documentation>Date UPN was allocated by the LA.</xs:documentation>
        </xs:annotation>
      </xs:element>
      <xs:element name="FormerUPNList" minOccurs="0" nillable="true">
        <xs:complexType>
          <xs:sequence>
            <xs:element name="UPN" maxOccurs="unbounded" type="xs:normalizedString">
              <xs:annotation>
                <xs:documentation>A former UPN assigned to the pupil whilst at a school (eg temporary UPN was allocated when the pupil was first admitted to the school but subsequently replaced by the permanent UPN being retrieved from a previous school).</xs:documentation>
              </xs:annotation>
            </xs:element>
          </xs:sequence>
        </xs:complexType>
      </xs:element>
      <xs:element name="ULN" minOccurs="0" nillable="true">
        <xs:simpleType>
          <xs:restriction base="xs:normalizedString">
            <xs:annotation>
              <xs:documentation>Unique Learner Number (ULN), a 10-digit number where zero is not allowed as the leading digit.</xs:documentation>
            </xs:annotation>
            <xs:pattern value="[1-9][0-9]{9}" xmlns:xs="http://www.w3.org/2001/XMLSchema" />
          </xs:restriction>
        </xs:simpleType>
      </xs:element>
      <xs:element name="FamilyStructure" minOccurs="0" nillable="true" type="sif:UKFamilyStructureType">
        <xs:annotation>
          <xs:documentation>Indicates type of family structure learner is living in.</xs:documentation>
        </xs:annotation>
      </xs:element>
      <xs:element name="InCare" minOccurs="0" nillable="true">
        <xs:complexType>
          <xs:sequence>
            <xs:element name="Current">
              <xs:annotation>
                <xs:documentation>Indicates if the learner is "looked after" currently.</xs:documentation>
              </xs:annotation>
              <xs:simpleType>
                <xs:restriction base="xs:token">
                  <xs:enumeration value="Yes" />
                  <xs:enumeration value="No" />
                  <xs:enumeration value="Unknown" />
                </xs:restriction>
              </xs:simpleType>
            </xs:element>
            <xs:element name="Type" minOccurs="0" nillable="true" type="sif:UKInCareTypeType">
              <xs:annotation>
                <xs:documentation>Type of care the learner is in (eg fostering, children's home).</xs:documentation>
              </xs:annotation>
            </xs:element>
            <xs:element ref="sif:LAId" />
            <xs:element name="AtCurrentSchool" minOccurs="0" nillable="true">
              <xs:annotation>
                <xs:documentation>Indicates if the learner has ever been in care while at this school.</xs:documentation>
              </xs:annotation>
              <xs:simpleType>
                <xs:restriction base="xs:token">
                  <xs:enumeration value="Yes" />
                  <xs:enumeration value="No" />
                </xs:restriction>
              </xs:simpleType>
            </xs:element>
            <xs:element name="PersonalEducationPlan" minOccurs="0" nillable="true">
              <xs:annotation>
                <xs:documentation>Indicates if the learner in care has a personal education plan.</xs:documentation>
              </xs:annotation>
              <xs:simpleType>
                <xs:restriction base="xs:token">
                  <xs:enumeration value="Yes" />
                  <xs:enumeration value="No" />
                </xs:restriction>
              </xs:simpleType>
            </xs:element>
          </xs:sequence>
        </xs:complexType>
      </xs:element>
      <xs:element name="ConnexionsAgreement" minOccurs="0" nillable="true" type="sif:UKConnexionsAgreementType">
        <xs:annotation>
          <xs:documentation>Indicates if parents have consented to allow learner data to be shared with Connexions (Middle, Secondary and Special Schools only).</xs:documentation>
        </xs:annotation>
      </xs:element>
      <xs:element name="ChildProtectionRegister" minOccurs="0" nillable="true">
        <xs:complexType>
          <xs:sequence>
            <xs:element name="IsRegistered">
              <xs:annotation>
                <xs:documentation>Indicates if the learner has been registered on the Child Protection Register.</xs:documentation>
              </xs:annotation>
              <xs:simpleType>
                <xs:restriction base="xs:token">
                  <xs:enumeration value="Yes" />
                  <xs:enumeration value="No" />
                  <xs:enumeration value="Unknown" />
                </xs:restriction>
              </xs:simpleType>
            </xs:element>
            <xs:element name="LAId" minOccurs="0" nillable="true" type="sif:LAIdType">
              <xs:annotation>
                <xs:documentation>The LA in which the learner was registered for protection.</xs:documentation>
              </xs:annotation>
            </xs:element>
            <xs:element name="SiblingRegistered" minOccurs="0" nillable="true">
              <xs:annotation>
                <xs:documentation>Indicates if the learner has a sibling that is also on the Child Protection Register.</xs:documentation>
              </xs:annotation>
              <xs:simpleType>
                <xs:restriction base="xs:token">
                  <xs:enumeration value="Yes" />
                  <xs:enumeration value="No" />
                </xs:restriction>
              </xs:simpleType>
            </xs:element>
          </xs:sequence>
        </xs:complexType>
      </xs:element>
      <xs:element name="GiftedTalented" minOccurs="0" nillable="true">
        <xs:annotation>
          <xs:documentation>Learner qualifies for Gifted/Talented status.</xs:documentation>
        </xs:annotation>
        <xs:simpleType>
          <xs:restriction base="xs:token">
            <xs:enumeration value="Yes" />
            <xs:enumeration value="No" />
          </xs:restriction>
        </xs:simpleType>
      </xs:element>
      <xs:element name="HomeLA" minOccurs="0" nillable="true" type="sif:LAIdType">
        <xs:annotation>
          <xs:documentation>The LA in which the learner lives but not necessarily the one in which they attend school.</xs:documentation>
        </xs:annotation>
      </xs:element>
      <xs:element name="LearnerIdentity" minOccurs="0" nillable="true" type="sif:UKLearnerIdentityType">
        <xs:annotation>
          <xs:documentation>Classification of national identity. (Wales)</xs:documentation>
        </xs:annotation>
      </xs:element>
      <xs:element name="ModeOfTravel" minOccurs="0" nillable="true" type="sif:UKUsualModeOfTravelType">
        <xs:annotation>
          <xs:documentation>The usual mode of travel normally used by the learner for the greater part (in distance) of the journey to and from school.</xs:documentation>
        </xs:annotation>
      </xs:element>
      <xs:element name="Pregnant" minOccurs="0" nillable="true">
        <xs:annotation>
          <xs:documentation>Learner is pregnant.</xs:documentation>
        </xs:annotation>
        <xs:simpleType>
          <xs:restriction base="xs:token">
            <xs:enumeration value="Yes" />
            <xs:enumeration value="No" />
          </xs:restriction>
        </xs:simpleType>
      </xs:element>
      <xs:element name="SiblingList" minOccurs="0" nillable="true">
        <xs:complexType>
          <xs:sequence>
            <xs:element name="Sibling" maxOccurs="unbounded">
              <xs:complexType>
                <xs:sequence>
                  <xs:element name="LearnerPersonalRefId" type="sif:IdRefType">
                    <xs:annotation>
                      <xs:documentation>The ID (GUID) of the LearnerPersonal record for this sibling.</xs:documentation>
                    </xs:annotation>
                  </xs:element>
                  <xs:element name="UIPI" type="xs:normalizedString">
                    <xs:annotation>
                      <xs:documentation>The Unique Internal Pupil Number for a sibling of this learner.</xs:documentation>
                    </xs:annotation>
                  </xs:element>
                </xs:sequence>
              </xs:complexType>
            </xs:element>
          </xs:sequence>
        </xs:complexType>
      </xs:element>
      <xs:element name="UniformAllowance" minOccurs="0" nillable="true">
        <xs:annotation>
          <xs:documentation>Learner is paid a uniform allowance.</xs:documentation>
        </xs:annotation>
        <xs:simpleType>
          <xs:restriction base="xs:token">
            <xs:enumeration value="Yes" />
            <xs:enumeration value="No" />
          </xs:restriction>
        </xs:simpleType>
      </xs:element>
      <xs:element name="CurrentSchoolEnrolment" minOccurs="0" nillable="true">
        <xs:complexType>
          <xs:sequence>
            <xs:element ref="sif:LAId" />
            <xs:element ref="sif:EstablishmentId" />
            <xs:element ref="sif:NCYearGroup" />
          </xs:sequence>
          <xs:attribute name="LearnerSchoolEnrolmentRefId" use="required" type="sif:IdRefType">
            <xs:annotation>
              <xs:documentation>The ID (GUID) of the LearnerSchoolEnrolment record associated with this learner that is also designated as the current or current main enrolment.</xs:documentation>
            </xs:annotation>
          </xs:attribute>
          <xs:attribute name="MembershipType" use="optional" type="sif:UKLearnerEnrolmentStatusType">
            <xs:annotation>
              <xs:documentation>The type of this enrolment as it relates to the school identified by SchoolInfoRefId.</xs:documentation>
            </xs:annotation>
          </xs:attribute>
        </xs:complexType>
      </xs:element>
      <xs:element name="PreviousEstablishmentList" minOccurs="0" nillable="true">
        <xs:complexType>
          <xs:sequence>
            <xs:element name="PreviousEstablishment" minOccurs="0" maxOccurs="unbounded">
              <xs:complexType>
                <xs:sequence>
                  <xs:element name="EstablishmentId" minOccurs="0" nillable="true" type="sif:EstablishmentIdType">
                    <xs:annotation>
                      <xs:documentation>Establishment Number for this school</xs:documentation>
                    </xs:annotation>
                  </xs:element>
                  <xs:element name="EstablishmentName" minOccurs="0" nillable="true" type="xs:normalizedString">
                    <xs:annotation>
                      <xs:documentation>School's name as indicated on the Annual Schools Census.</xs:documentation>
                    </xs:annotation>
                  </xs:element>
                  <xs:element name="LAId" minOccurs="0" nillable="true" type="sif:LAIdType">
                    <xs:annotation>
                      <xs:documentation>The 3-digit LA number assigned by DfES.</xs:documentation>
                    </xs:annotation>
                  </xs:element>
                  <xs:element name="EntryDate" minOccurs="0" nillable="true" type="xs:date">
                    <xs:annotation>
                      <xs:documentation>The date the learner entered this school or establishment.</xs:documentation>
                    </xs:annotation>
                  </xs:element>
                  <xs:element name="ExitDate" minOccurs="0" nillable="true" type="xs:date">
                    <xs:annotation>
                      <xs:documentation>The date the learner exited this school or establishment.</xs:documentation>
                    </xs:annotation>
                  </xs:element>
                  <xs:element name="ExitType" minOccurs="0" nillable="true" type="sif:UKLeavingReasonType">
                    <xs:annotation>
                      <xs:documentation>Code indicating the type of exit from this school or establishment.</xs:documentation>
                    </xs:annotation>
                  </xs:element>
                  <xs:element name="LastSchool" minOccurs="0" nillable="true">
                    <xs:annotation>
                      <xs:documentation>An indication of whether the described school or establishment was the last establishment the learner attended. Note that it is possible that more than one establishment can be marked as LastSchool when a learner is enroled in more than one school simultaneously.</xs:documentation>
                    </xs:annotation>
                    <xs:simpleType>
                      <xs:restriction base="xs:token">
                        <xs:enumeration value="Yes" />
                        <xs:enumeration value="No" />
                      </xs:restriction>
                    </xs:simpleType>
                  </xs:element>
                </xs:sequence>
              </xs:complexType>
            </xs:element>
          </xs:sequence>
        </xs:complexType>
      </xs:element>
      <xs:element name="SIF_Metadata" minOccurs="0" nillable="true" type="sif:SIF_MetadataType" />
      <xs:element name="SIF_ExtendedElements" minOccurs="0" nillable="true" type="sif:SIF_ExtendedElementsType">
        <xs:key name="SIF_ExtendedElementsKey19">
          <xs:selector xpath="./sif:SIF_ExtendedElement" />
          <xs:field xpath="@Name" />
        </xs:key>
      </xs:element>
    </xs:sequence>
    <xs:attribute name="RefId" use="required" type="sif:RefIdType">
      <xs:annotation>
        <xs:documentation>The ID (GUID) of the learner. Note that this GUID may be the same one assigned to this person when this person is either a contact (ContactPersonal) or a member of the workforce (WorkforcePersonal).</xs:documentation>
      </xs:annotation>
    </xs:attribute>
  </xs:complexType>

  <xs:element name="LearnerPersonal" type="sif:LearnerPersonalType">
    <xs:key name="LearnerPersonalKey1">
      <xs:selector xpath="." />
      <xs:field xpath="@RefId" />
    </xs:key>
  </xs:element>


  <!--LearnerSchoolEnrolment-->

  <xs:complexType name="LearnerSchoolEnrolmentType">
    <xs:annotation>
      <xs:documentation>
        This object defines information related to a learner's enrolment within a
        particular school or establishment.The current status on an enrolment is
        based on EntryDate and ExitDate. Future enrolments are supported where
        EntryDate is in the future. ExitDate may also be specified as a future
        occurance.
      </xs:documentation>
    </xs:annotation>
    <xs:sequence>
      <xs:element name="EntryDate" type="xs:date">
        <xs:annotation>
          <xs:documentation>The date from when this enrolment is valid.</xs:documentation>
        </xs:annotation>
      </xs:element>
      <xs:element name="NCYearGroupActual" type="sif:NCYearGroupType">
        <xs:annotation>
          <xs:documentation>The year group in which the learner is taught for the majority of their time, regardless of their chronological age.</xs:documentation>
        </xs:annotation>
      </xs:element>
      <xs:element name="ClassType" minOccurs="0" nillable="true" type="sif:UKClassTypeType">
        <xs:annotation>
          <xs:documentation>Indicates if the learner is in a nursery class. Must be set to 'O'  if age on August 31 is &gt;= 6.</xs:documentation>
        </xs:annotation>
      </xs:element>
      <xs:element name="ExitDate" minOccurs="0" nillable="true" type="xs:date">
        <xs:annotation>
          <xs:documentation>The ending date of this enrolment. If the learner has exited before the end of the school year, ExitDate must have a value.</xs:documentation>
        </xs:annotation>
      </xs:element>
      <xs:element name="ExitType" minOccurs="0" nillable="true">
        <xs:complexType>
          <xs:sequence>
            <xs:element name="Code" type="sif:UKLeavingReasonType">
              <xs:annotation>
                <xs:documentation>Code indicating the type of exit for this enrolment.</xs:documentation>
              </xs:annotation>
            </xs:element>
            <xs:element name="Destination" minOccurs="0" nillable="true">
              <xs:complexType>
                <xs:sequence>
                  <xs:element name="Code" type="sif:UKLeavingDestinationType">
                    <xs:annotation>
                      <xs:documentation>Code indicating the destination type.</xs:documentation>
                    </xs:annotation>
                  </xs:element>
                  <xs:element name="LAId" minOccurs="0" nillable="true" type="sif:LAIdType">
                    <xs:annotation>
                      <xs:documentation>The LA number for destination school or college.</xs:documentation>
                    </xs:annotation>
                  </xs:element>
                  <xs:element name="EstablishmentId" minOccurs="0" nillable="true" type="sif:EstablishmentIdType">
                    <xs:annotation>
                      <xs:documentation>The DfES number for destination school or college.</xs:documentation>
                    </xs:annotation>
                  </xs:element>
                  <xs:element name="Name" minOccurs="0" nillable="true" type="xs:normalizedString">
                    <xs:annotation>
                      <xs:documentation>Name of institution/employer of learner's destination.</xs:documentation>
                    </xs:annotation>
                  </xs:element>
                </xs:sequence>
              </xs:complexType>
            </xs:element>
          </xs:sequence>
        </xs:complexType>
      </xs:element>
      <xs:element name="Sessions" minOccurs="0" nillable="true">
        <xs:simpleType>
          <xs:restriction base="xs:unsignedInt">
            <xs:annotation>
              <xs:documentation>Number of learner sessions (half days) per week.  A maximum of 10 is possible per week.</xs:documentation>
            </xs:annotation>
            <xs:maxInclusive value="10" xmlns:xs="http://www.w3.org/2001/XMLSchema" />
          </xs:restriction>
        </xs:simpleType>
      </xs:element>
      <xs:element name="FTPTStatus" minOccurs="0" nillable="true">
        <xs:annotation>
          <xs:documentation>An indication of whether the learner is enroled only part time.</xs:documentation>
        </xs:annotation>
        <xs:simpleType>
          <xs:restriction base="xs:token">
            <xs:enumeration value="Yes" />
            <xs:enumeration value="No" />
          </xs:restriction>
        </xs:simpleType>
      </xs:element>
      <xs:element name="Boarder" minOccurs="0" nillable="true" type="sif:UKBoarderTypeType">
        <xs:annotation>
          <xs:documentation>Indicates whether the learner is a boarder at the school or not.</xs:documentation>
        </xs:annotation>
      </xs:element>
      <xs:element name="AlternativeTuition" minOccurs="0" nillable="true">
        <xs:complexType>
          <xs:sequence>
            <xs:element name="Category" type="sif:UKTuitionCategoryType">
              <xs:annotation>
                <xs:documentation>Reason for alternative tuition.</xs:documentation>
              </xs:annotation>
            </xs:element>
            <xs:element name="StartDate" type="xs:date">
              <xs:annotation>
                <xs:documentation>Beginning date for alternative tuition.</xs:documentation>
              </xs:annotation>
            </xs:element>
            <xs:element name="EndDate" minOccurs="0" nillable="true" type="xs:date">
              <xs:annotation>
                <xs:documentation>End date for alternative tuition.</xs:documentation>
              </xs:annotation>
            </xs:element>
            <xs:element name="TotalHours" minOccurs="0" nillable="true" type="xs:unsignedInt">
              <xs:annotation>
                <xs:documentation>The total number of hours provided for with the tuition.</xs:documentation>
              </xs:annotation>
            </xs:element>
            <xs:element name="ProvisionType" type="sif:UKAlternativeTuitionProvisionTypeType">
              <xs:annotation>
                <xs:documentation>Alternative tuition provision type.</xs:documentation>
              </xs:annotation>
            </xs:element>
          </xs:sequence>
        </xs:complexType>
      </xs:element>
      <xs:element name="SIF_Metadata" minOccurs="0" nillable="true" type="sif:SIF_MetadataType" />
      <xs:element name="SIF_ExtendedElements" minOccurs="0" nillable="true" type="sif:SIF_ExtendedElementsType">
        <xs:key name="SIF_ExtendedElementsKey20">
          <xs:selector xpath="./sif:SIF_ExtendedElement" />
          <xs:field xpath="@Name" />
        </xs:key>
      </xs:element>
    </xs:sequence>
    <xs:attribute name="RefId" use="required" type="sif:RefIdType">
      <xs:annotation>
        <xs:documentation>The ID (GUID) that uniquely identifies a particular enrolment.</xs:documentation>
      </xs:annotation>
    </xs:attribute>
    <xs:attribute name="LearnerPersonalRefId" use="required" type="sif:IdRefType">
      <xs:annotation>
        <xs:documentation>The ID (GUID) of the learner to whom this information is linked.</xs:documentation>
      </xs:annotation>
    </xs:attribute>
    <xs:attribute name="SchoolInfoRefId" use="required" type="sif:IdRefType">
      <xs:annotation>
        <xs:documentation>The ID (GUID) of the school to which this enrolment applies.</xs:documentation>
      </xs:annotation>
    </xs:attribute>
    <xs:attribute name="MembershipType" use="required" type="sif:UKLearnerEnrolmentStatusType">
      <xs:annotation>
        <xs:documentation>The type of this enrolment as it relates to the school identified by SchoolInfoRefId.</xs:documentation>
      </xs:annotation>
    </xs:attribute>
  </xs:complexType>

  <xs:element name="LearnerSchoolEnrolment" type="sif:LearnerSchoolEnrolmentType">
    <xs:key name="LearnerSchoolEnrolmentKey1">
      <xs:selector xpath="." />
      <xs:field xpath="@RefId" />
    </xs:key>
  </xs:element>


  <!--LearnerSpecialNeeds-->

  <xs:complexType name="LearnerSpecialNeedsType">
    <xs:annotation>
      <xs:documentation>
        This object contains information regarding a special education need (SEN)
        for a learner when provisioned within a school or establishment. A new
        object exists for each provision. The current status of any provision can be
        determined by querying StartDate and EndDate. Both dates are allowed to
        be in the future. The publisher of this object must support queries on these
        dates.
      </xs:documentation>
    </xs:annotation>
    <xs:sequence>
      <xs:element name="UnitMember" minOccurs="0" nillable="true">
        <xs:annotation>
          <xs:documentation>Is this learner with special education needs (SEN) in a mainstream school a member of an SEN Unit (sometimes called special class)?</xs:documentation>
        </xs:annotation>
        <xs:simpleType>
          <xs:restriction base="xs:token">
            <xs:enumeration value="Yes" />
            <xs:enumeration value="No" />
          </xs:restriction>
        </xs:simpleType>
      </xs:element>
      <xs:element name="ResourcedProvisionMember" minOccurs="0" nillable="true">
        <xs:annotation>
          <xs:documentation>Is this learner with special education needs (SEN) in a mainstream school a member of a resourced provision?</xs:documentation>
        </xs:annotation>
        <xs:simpleType>
          <xs:restriction base="xs:token">
            <xs:enumeration value="Yes" />
            <xs:enumeration value="No" />
          </xs:restriction>
        </xs:simpleType>
      </xs:element>
      <xs:element name="NextReviewDate" minOccurs="0" nillable="true" type="xs:date">
        <xs:annotation>
          <xs:documentation>Date of learner's next SEN review.</xs:documentation>
        </xs:annotation>
      </xs:element>
      <xs:element name="Provision" type="sif:UKSENProvisionType">
        <xs:annotation>
          <xs:documentation>A provision (stage) accommodated for this learner within this school.</xs:documentation>
        </xs:annotation>
      </xs:element>
      <xs:element name="StartDate" type="xs:date">
        <xs:annotation>
          <xs:documentation>
      Date when learner was placed on the current SEN stage. Date may be in the
      future.
    </xs:documentation>
        </xs:annotation>
      </xs:element>
      <xs:element name="EndDate" minOccurs="0" nillable="true" type="xs:date">
        <xs:annotation>
          <xs:documentation>Date when learner finished this SEN stage.  Assumed to be current unless a date in the past is specified here.</xs:documentation>
        </xs:annotation>
      </xs:element>
      <xs:element name="SENTypeList" minOccurs="0" nillable="true">
        <xs:complexType>
          <xs:sequence>
            <xs:element name="SENType" maxOccurs="unbounded">
              <xs:complexType>
                <xs:annotation>
                  <xs:documentation>The code for a Special Educational Need (type) for this learner. </xs:documentation>
                </xs:annotation>
                <xs:simpleContent>
                  <xs:extension base="sif:UKSENTypeType">
                    <xs:attribute name="Ranking" use="required" type="xs:unsignedInt">
                      <xs:annotation>
                        <xs:documentation>A value (starting at 1) indicating the order of significance of special educational need in relation to other SEN types listed here.</xs:documentation>
                      </xs:annotation>
                    </xs:attribute>
                  </xs:extension>
                </xs:simpleContent>
              </xs:complexType>
            </xs:element>
          </xs:sequence>
        </xs:complexType>
      </xs:element>
      <xs:element name="AdviceAndAssessmentLevel" minOccurs="0" nillable="true" type="sif:UKAdviceAndAssessmentWalesType">
        <xs:annotation>
          <xs:documentation>Level of provision for Advice and Assessment. (Wales)</xs:documentation>
        </xs:annotation>
      </xs:element>
      <xs:element name="GroupingAndSupportLevel" minOccurs="0" nillable="true" type="sif:UKGroupingAndSupportWalesType">
        <xs:annotation>
          <xs:documentation>Level of provision for Grouping and Support. (Wales)</xs:documentation>
        </xs:annotation>
      </xs:element>
      <xs:element name="SpecialisedResourcesLevel" minOccurs="0" nillable="true" type="sif:UKSpecialisedResourcesWalesType">
        <xs:annotation>
          <xs:documentation>Level of provision for Specialised Resources. (Wales)</xs:documentation>
        </xs:annotation>
      </xs:element>
      <xs:element name="TeachingMethodsLevel" minOccurs="0" nillable="true" type="sif:UKCurriculumAndTeachingMethodsWalesType">
        <xs:annotation>
          <xs:documentation>Level of provision for Curriculum and Teaching Methods. (Wales)</xs:documentation>
        </xs:annotation>
      </xs:element>
      <xs:element name="EmbeddedBasicSkillsSupport" minOccurs="0" nillable="true">
        <xs:annotation>
          <xs:documentation>Provision of Embedded Basic Skills support beyond the attainment of formal qualification.</xs:documentation>
        </xs:annotation>
        <xs:simpleType>
          <xs:union>
            <xs:simpleType>
              <xs:restriction base="sif:UKBasicSkillsSupportWalesType" />
            </xs:simpleType>
          </xs:union>
        </xs:simpleType>
      </xs:element>
      <xs:element name="LiteracyLevelStart" minOccurs="0" nillable="true" type="xs:normalizedString">
        <xs:annotation>
          <xs:documentation>Level of literacy at start of this SEN stage. (Wales)</xs:documentation>
        </xs:annotation>
      </xs:element>
      <xs:element name="LiteracyLevelEnd" minOccurs="0" nillable="true" type="xs:normalizedString">
        <xs:annotation>
          <xs:documentation>Level of literacy achieved by the end of this SEN stage. (Wales)</xs:documentation>
        </xs:annotation>
      </xs:element>
      <xs:element name="NumeracyLevelStart" minOccurs="0" nillable="true" type="xs:normalizedString">
        <xs:annotation>
          <xs:documentation>Level of numeracy at start of this SEN stage. (Wales)</xs:documentation>
        </xs:annotation>
      </xs:element>
      <xs:element name="NumeracyLevelEnd" minOccurs="0" nillable="true" type="xs:normalizedString">
        <xs:annotation>
          <xs:documentation>Level of numeracy achieved by the end of this SEN stage. (Wales)</xs:documentation>
        </xs:annotation>
      </xs:element>
      <xs:element name="NationalCurriculumList" minOccurs="0" nillable="true">
        <xs:complexType>
          <xs:sequence>
            <xs:element name="NationalCurriculum" maxOccurs="unbounded">
              <xs:complexType>
                <xs:sequence>
                  <xs:element name="Modification">
                    <xs:annotation>
                      <xs:documentation>How is the National Curriculum used for this learner?</xs:documentation>
                    </xs:annotation>
                    <xs:simpleType>
                      <xs:restriction base="xs:token">
                        <xs:enumeration value="M">
                          <xs:annotation>
                            <xs:documentation>Modified</xs:documentation>
                          </xs:annotation>
                        </xs:enumeration>
                        <xs:enumeration value="N">
                          <xs:annotation>
                            <xs:documentation>Disapplied</xs:documentation>
                          </xs:annotation>
                        </xs:enumeration>
                      </xs:restriction>
                    </xs:simpleType>
                  </xs:element>
                  <xs:element name="Subject" type="sif:UKGeneralSubjectType">
                    <xs:annotation>
                      <xs:documentation>National Curriculum subject(s) for which modification or disapplication applies.</xs:documentation>
                    </xs:annotation>
                  </xs:element>
                </xs:sequence>
              </xs:complexType>
            </xs:element>
          </xs:sequence>
        </xs:complexType>
      </xs:element>
      <xs:element name="MedicalFlag" minOccurs="0" nillable="true">
        <xs:annotation>
          <xs:documentation>Is there medical information on this Learner?</xs:documentation>
        </xs:annotation>
        <xs:simpleType>
          <xs:restriction base="xs:token">
            <xs:enumeration value="Yes" />
            <xs:enumeration value="No" />
          </xs:restriction>
        </xs:simpleType>
      </xs:element>
      <xs:element name="ParamedicalSupport" minOccurs="0" nillable="true">
        <xs:annotation>
          <xs:documentation>Type of therapy needed by Learner.</xs:documentation>
        </xs:annotation>
        <xs:simpleType>
          <xs:restriction base="xs:token">
            <xs:enumeration value="P">
              <xs:annotation>
                <xs:documentation>Physiotherapy</xs:documentation>
              </xs:annotation>
            </xs:enumeration>
            <xs:enumeration value="S">
              <xs:annotation>
                <xs:documentation>Speech Therapy</xs:documentation>
              </xs:annotation>
            </xs:enumeration>
            <xs:enumeration value="O">
              <xs:annotation>
                <xs:documentation>Occupational Therapy</xs:documentation>
              </xs:annotation>
            </xs:enumeration>
          </xs:restriction>
        </xs:simpleType>
      </xs:element>
      <xs:element name="MedicalNotes" minOccurs="0" nillable="true" type="xs:normalizedString">
        <xs:annotation>
          <xs:documentation>Summary of learner's medical condition.</xs:documentation>
        </xs:annotation>
      </xs:element>
      <xs:element name="SIF_Metadata" minOccurs="0" nillable="true" type="sif:SIF_MetadataType" />
      <xs:element name="SIF_ExtendedElements" minOccurs="0" nillable="true" type="sif:SIF_ExtendedElementsType">
        <xs:key name="SIF_ExtendedElementsKey21">
          <xs:selector xpath="./sif:SIF_ExtendedElement" />
          <xs:field xpath="@Name" />
        </xs:key>
      </xs:element>
    </xs:sequence>
    <xs:attribute name="RefId" use="required" type="sif:RefIdType">
      <xs:annotation>
        <xs:documentation>The ID (GUID) that uniquely identifies a learner special need (provision).</xs:documentation>
      </xs:annotation>
    </xs:attribute>
    <xs:attribute name="LearnerPersonalRefId" use="required" type="sif:IdRefType">
      <xs:annotation>
        <xs:documentation>The ID (GUID) of the learner with special educational needs.</xs:documentation>
      </xs:annotation>
    </xs:attribute>
    <xs:attribute name="SchoolInfoRefId" use="required" type="sif:IdRefType">
      <xs:annotation>
        <xs:documentation>The ID (GUID) that uniquely identifies the school provisioned to work with the learner's special needs.</xs:documentation>
      </xs:annotation>
    </xs:attribute>
  </xs:complexType>

  <xs:element name="LearnerSpecialNeeds" type="sif:LearnerSpecialNeedsType" />


  <!--PersonPicture-->

  <xs:complexType name="PersonPictureType">
    <xs:annotation>
      <xs:documentation>
      This object either contains or references a person's picture.  Compare with US/Canada objects: </xs:documentation>
    </xs:annotation>
    <xs:sequence>
      <xs:element name="SIF_RefObjectList" maxOccurs="unbounded">
        <xs:complexType>
          <xs:sequence>
            <xs:element name="SIF_RefObject">
              <xs:annotation>
                <xs:documentation>The name of a "personal" object that can be requested for this person using the specified PersonRefId.</xs:documentation>
              </xs:annotation>
              <xs:simpleType>
                <xs:restriction base="xs:token">
                  <xs:enumeration value="ContactPersonal" />
                  <xs:enumeration value="LearnerPersonal" />
                  <xs:enumeration value="WorkforcePersonal" />
                </xs:restriction>
              </xs:simpleType>
            </xs:element>
          </xs:sequence>
        </xs:complexType>
      </xs:element>
      <xs:element ref="sif:SchoolYear" />
      <xs:element name="PictureSource">
        <xs:complexType>
          <xs:annotation>
            <xs:documentation>This element defines the picture. If the Type attribute is URL, this is the location of the picture in [JPEG] format; if Type is JPEG, this is the [JPEG] image data encoded using the Base64 Content-Transfer-Encoding defined in Section 6.8 of [RFC 2045].</xs:documentation>
          </xs:annotation>
          <xs:simpleContent>
            <xs:extension base="sif:URIOrBinaryType">
              <xs:attribute name="Type" use="required">
                <xs:annotation>
                  <xs:documentation>The way the picture is specified (URL or JPEG).</xs:documentation>
                </xs:annotation>
                <xs:simpleType>
                  <xs:restriction base="xs:token">
                    <xs:enumeration value="URL" />
                    <xs:enumeration value="JPEG" />
                  </xs:restriction>
                </xs:simpleType>
              </xs:attribute>
            </xs:extension>
          </xs:simpleContent>
        </xs:complexType>
      </xs:element>
      <xs:element name="OKToPublish" minOccurs="0" nillable="true">
        <xs:annotation>
          <xs:documentation>Can the picture be published?</xs:documentation>
        </xs:annotation>
        <xs:simpleType>
          <xs:restriction base="xs:token">
            <xs:enumeration value="Yes" />
            <xs:enumeration value="No" />
          </xs:restriction>
        </xs:simpleType>
      </xs:element>
      <xs:element name="SIF_Metadata" minOccurs="0" nillable="true" type="sif:SIF_MetadataType" />
      <xs:element name="SIF_ExtendedElements" minOccurs="0" nillable="true" type="sif:SIF_ExtendedElementsType">
        <xs:key name="SIF_ExtendedElementsKey22">
          <xs:selector xpath="./sif:SIF_ExtendedElement" />
          <xs:field xpath="@Name" />
        </xs:key>
      </xs:element>
    </xs:sequence>
    <xs:attribute name="PersonRefId" use="required" type="sif:IdRefType">
      <xs:annotation>
        <xs:documentation>This is the GUID of the person whose picture this is.  It is important to note that using the same GUID a person may have a LearnerPersonal record, a WorkforcePersonal record, and a ContactPersonal record all at the same time.  This same picture is applicable regardless of the associated object type(s).</xs:documentation>
      </xs:annotation>
    </xs:attribute>
  </xs:complexType>

  <xs:element name="PersonPicture" type="sif:PersonPictureType">
    <xs:key name="PersonPictureKey1">
      <xs:selector xpath="." />
      <xs:field xpath="@PersonRefId" />
    </xs:key>
  </xs:element>


  <!--SchoolGroupType-->

  <xs:complexType name="SchoolGroupTypeType">
    <xs:annotation>
      <xs:documentation>
      This object describes a high-level course or class grouping organised and/or taught within a school or establishment.  Note that not all courses are based upon a subject area.  One such course is "Class Group" which is the same as a homeroom or registration group.  Compare with US/Canada object: </xs:documentation>
    </xs:annotation>
    <xs:sequence>
      <xs:element name="Code" minOccurs="0" nillable="true" type="xs:normalizedString">
        <xs:annotation>
          <xs:documentation>The school defined local code for the group (or course).</xs:documentation>
        </xs:annotation>
      </xs:element>
      <xs:element name="Title" minOccurs="0" nillable="true" type="xs:normalizedString">
        <xs:annotation>
          <xs:documentation>Title associated with this group.</xs:documentation>
        </xs:annotation>
      </xs:element>
      <xs:element name="Description" minOccurs="0" nillable="true" type="xs:normalizedString">
        <xs:annotation>
          <xs:documentation>Textual description for the group.</xs:documentation>
        </xs:annotation>
      </xs:element>
      <xs:element name="SubjectAreaList" minOccurs="0" nillable="true" type="sif:SubjectAreaListType">
        <xs:annotation>
          <xs:documentation>Subject matter areas taught as part of the course, if any.</xs:documentation>
        </xs:annotation>
      </xs:element>
      <xs:element name="SIF_Metadata" minOccurs="0" nillable="true" type="sif:SIF_MetadataType" />
      <xs:element name="SIF_ExtendedElements" minOccurs="0" nillable="true" type="sif:SIF_ExtendedElementsType">
        <xs:key name="SIF_ExtendedElementsKey23">
          <xs:selector xpath="./sif:SIF_ExtendedElement" />
          <xs:field xpath="@Name" />
        </xs:key>
      </xs:element>
    </xs:sequence>
    <xs:attribute name="RefId" use="required" type="sif:RefIdType">
      <xs:annotation>
        <xs:documentation>The GUID that uniquely identifies a school course.</xs:documentation>
      </xs:annotation>
    </xs:attribute>
    <xs:attribute name="SchoolInfoRefId" use="required" type="sif:IdRefType">
      <xs:annotation>
        <xs:documentation>The ID (GUID) that references the school or establishment where the course is offered or the registration group exists.</xs:documentation>
      </xs:annotation>
    </xs:attribute>
    <xs:attribute name="SchoolYear" use="required" type="sif:SchoolYearType">
      <xs:annotation>
        <xs:documentation>School year for which the information is applicable, expressed as the four-digit year in which the school year ends (e.g. 2007 for the 2006/07 school year). Where a group membership is valid across multiple years, the current year at the time of publication will be used.</xs:documentation>
      </xs:annotation>
    </xs:attribute>
    <xs:attribute name="GroupType" use="required">
      <xs:annotation>
        <xs:documentation>The group type.  Teaching groups are used to teach subjects while other groups are organised for various other reasons.</xs:documentation>
      </xs:annotation>
      <xs:simpleType>
        <xs:restriction base="xs:token">
          <xs:enumeration value="G">
            <xs:annotation>
              <xs:documentation>Generic Group</xs:documentation>
            </xs:annotation>
          </xs:enumeration>
          <xs:enumeration value="R">
            <xs:annotation>
              <xs:documentation>Registration/Class Group</xs:documentation>
            </xs:annotation>
          </xs:enumeration>
          <xs:enumeration value="T">
            <xs:annotation>
              <xs:documentation>Teaching (course) Group</xs:documentation>
            </xs:annotation>
          </xs:enumeration>
        </xs:restriction>
      </xs:simpleType>
    </xs:attribute>
  </xs:complexType>

  <xs:element name="SchoolGroupType" type="sif:SchoolGroupTypeType">
    <xs:key name="SchoolGroupTypeKey1">
      <xs:selector xpath="." />
      <xs:field xpath="@RefId" />
    </xs:key>
  </xs:element>


  <!--SchoolGroup-->

  <xs:complexType name="SchoolGroupType">
    <xs:annotation>
      <xs:documentation>
      This object describes a specific group and includes resource and time tabling information.  All groups are based upon a SchoolGroupType record. However, there are courses which are not based upon any subject area and likewise may not have any teachers or other staff assigned.  Compare with US/Canada object:  </xs:documentation>
    </xs:annotation>
    <xs:sequence>
      <xs:element ref="sif:LocalId" />
      <xs:element name="GroupName" type="xs:normalizedString">
        <xs:annotation>
          <xs:documentation>The name associated with this group for display purposes.</xs:documentation>
        </xs:annotation>
      </xs:element>
      <xs:element name="Description" minOccurs="0" nillable="true" type="xs:normalizedString">
        <xs:annotation>
          <xs:documentation>A textual description.</xs:documentation>
        </xs:annotation>
      </xs:element>
      <xs:element name="ParentSchoolGroupRefId" minOccurs="0" nillable="true" type="sif:IdRefType">
        <xs:annotation>
          <xs:documentation>The parent group associated with this group, if any.</xs:documentation>
        </xs:annotation>
      </xs:element>
      <xs:element name="ScheduleInfoList" minOccurs="0" nillable="true">
        <xs:complexType>
          <xs:sequence>
            <xs:element name="ScheduleInfo" maxOccurs="unbounded">
              <xs:complexType>
                <xs:sequence>
                  <xs:element name="TeacherList" minOccurs="0" nillable="true">
                    <xs:complexType>
                      <xs:sequence>
                        <xs:element name="Teacher" maxOccurs="unbounded">
                          <xs:complexType>
                            <xs:sequence>
                              <xs:element name="Role" minOccurs="0" nillable="true" type="sif:UKGroupRoleType">
                                <xs:annotation>
                                  <xs:documentation>The role associated with this person in the context of this group.</xs:documentation>
                                </xs:annotation>
                              </xs:element>
                            </xs:sequence>
                            <xs:attribute name="WorkforcePersonalRefId" use="required" type="sif:IdRefType">
                              <xs:annotation>
                                <xs:documentation>The ID (GUID) of a teacher, staff member, or other employee participating in a non-learner capacity within this group.</xs:documentation>
                              </xs:annotation>
                            </xs:attribute>
                          </xs:complexType>
                        </xs:element>
                      </xs:sequence>
                    </xs:complexType>
                  </xs:element>
                </xs:sequence>
              </xs:complexType>
            </xs:element>
          </xs:sequence>
        </xs:complexType>
      </xs:element>
      <xs:element name="SIF_Metadata" minOccurs="0" nillable="true" type="sif:SIF_MetadataType" />
      <xs:element name="SIF_ExtendedElements" minOccurs="0" nillable="true" type="sif:SIF_ExtendedElementsType">
        <xs:key name="SIF_ExtendedElementsKey24">
          <xs:selector xpath="./sif:SIF_ExtendedElement" />
          <xs:field xpath="@Name" />
        </xs:key>
      </xs:element>
    </xs:sequence>
    <xs:attribute name="RefId" use="required" type="sif:RefIdType">
      <xs:annotation>
        <xs:documentation>The ID (GUID) that uniquely identifies this group entity.</xs:documentation>
      </xs:annotation>
    </xs:attribute>
    <xs:attribute name="SchoolGroupTypeRefId" use="required" type="sif:IdRefType">
      <xs:annotation>
        <xs:documentation>The ID (GUID) that identifies a course upon which this group is centered. Note that this element is mandatory when GroupType is associated with a course (teaching group).</xs:documentation>
      </xs:annotation>
    </xs:attribute>
    <xs:attribute name="SchoolYear" use="required" type="sif:SchoolYearType">
      <xs:annotation>
        <xs:documentation>School year for which the group is applicable, expressed as the four-digit year in which the school year ends (e.g. 2007 for the 2006/07 school year). Where a group membership is valid across multiple years, the current year at the time of publication will be used.</xs:documentation>
      </xs:annotation>
    </xs:attribute>
  </xs:complexType>

  <xs:element name="SchoolGroup" type="sif:SchoolGroupType">
    <xs:key name="SchoolGroupKey1">
      <xs:selector xpath="." />
      <xs:field xpath="@RefId" />
    </xs:key>
  </xs:element>


  <!--SchoolInfo-->

  <xs:complexType name="SchoolInfoType">
    <xs:annotation>
      <xs:documentation>This object contains basic information about a school or other educational establishment.  Compare with US/Canada object with the same name.</xs:documentation>
    </xs:annotation>
    <xs:sequence>
      <xs:element name="LocalId" minOccurs="0" nillable="true" type="xs:normalizedString">
        <xs:annotation>
          <xs:documentation>An ID assigned by the publishing agent for this school or establishment. This may be set to any value.</xs:documentation>
        </xs:annotation>
      </xs:element>
      <xs:element ref="sif:EstablishmentId" />
      <xs:element ref="sif:LAId" />
      <xs:element name="SchoolName" type="xs:normalizedString">
        <xs:annotation>
          <xs:documentation>School's name as indicated on the Annual Schools Census.</xs:documentation>
        </xs:annotation>
      </xs:element>
      <xs:element name="SchoolFullName" minOccurs="0" nillable="true" type="xs:normalizedString">
        <xs:annotation>
          <xs:documentation>School's full name as stated in the Instrument of Government.</xs:documentation>
        </xs:annotation>
      </xs:element>
      <xs:element name="URN" minOccurs="0" nillable="true" type="sif:SchoolURNType">
        <xs:annotation>
          <xs:documentation>School Unique Reference Number.  This number is an alternate to the Establishment Number.</xs:documentation>
        </xs:annotation>
      </xs:element>
      <xs:element name="SchoolURL" minOccurs="0" nillable="true" type="sif:SchoolURLType">
        <xs:annotation>
          <xs:documentation>URL for the school.</xs:documentation>
        </xs:annotation>
      </xs:element>
      <xs:element name="SchoolAddress" minOccurs="0" nillable="true" type="sif:AddressType">
        <xs:annotation>
          <xs:documentation>The school's published address.</xs:documentation>
        </xs:annotation>
      </xs:element>
      <xs:element name="AddressList" minOccurs="0" nillable="true" type="sif:AddressListType">
        <xs:annotation>
          <xs:documentation>Other addresses associated with the school.</xs:documentation>
        </xs:annotation>
        <xs:key name="AddressListKey4">
          <xs:selector xpath="./sif:Address" />
          <xs:field xpath="@Type" />
        </xs:key>
      </xs:element>
      <xs:element name="SchoolPhoneNumber" minOccurs="0" nillable="true" type="sif:PhoneNumberType">
        <xs:annotation>
          <xs:documentation>The main phone number for this school/establishment.</xs:documentation>
        </xs:annotation>
      </xs:element>
      <xs:element name="OtherPhoneNumberList" minOccurs="0" nillable="true" type="sif:PhoneNumberListType">
        <xs:annotation>
          <xs:documentation>A list of the school's phone numbers.</xs:documentation>
        </xs:annotation>
        <xs:key name="PhoneNumberListKey4">
          <xs:selector xpath="./sif:PhoneNumber" />
          <xs:field xpath="@Type" />
        </xs:key>
      </xs:element>
      <xs:element name="SchoolEmail" minOccurs="0" nillable="true" type="sif:EmailType">
        <xs:annotation>
          <xs:documentation>School's email address for general correspondence.</xs:documentation>
        </xs:annotation>
      </xs:element>
      <xs:element name="SchoolContactList" minOccurs="0" nillable="true" type="sif:ContactListType">
        <xs:annotation>
          <xs:documentation>A list of contacts at the school.</xs:documentation>
        </xs:annotation>
      </xs:element>
      <xs:element name="HeadTeacherInfo" minOccurs="0" nillable="true">
        <xs:complexType>
          <xs:sequence>
            <xs:element name="ContactName" type="xs:normalizedString">
              <xs:annotation>
                <xs:documentation>The name of the head Teacher.</xs:documentation>
              </xs:annotation>
            </xs:element>
            <xs:element name="ContactTitle" minOccurs="0" nillable="true" type="xs:normalizedString">
              <xs:annotation>
                <xs:documentation>The official title of the Head Teacher.</xs:documentation>
              </xs:annotation>
            </xs:element>
          </xs:sequence>
        </xs:complexType>
      </xs:element>
      <xs:element name="Phase" minOccurs="0" nillable="true" type="sif:UKPhaseTypeType">
        <xs:annotation>
          <xs:documentation>The high level code indicating the level of the educational institution.</xs:documentation>
        </xs:annotation>
      </xs:element>
      <xs:element name="SchoolType" minOccurs="0" nillable="true" type="sif:UKSchoolTypeType">
        <xs:annotation>
          <xs:documentation>An indication of the level of the educational institution.</xs:documentation>
        </xs:annotation>
      </xs:element>
      <xs:element name="Governance" minOccurs="0" nillable="true" type="sif:UKGovernanceTypeType">
        <xs:annotation>
          <xs:documentation>Governance afforded to this school.</xs:documentation>
        </xs:annotation>
      </xs:element>
      <xs:element name="Intake" minOccurs="0" nillable="true">
        <xs:annotation>
          <xs:documentation>Intake type.</xs:documentation>
        </xs:annotation>
        <xs:simpleType>
          <xs:restriction base="xs:token">
            <xs:enumeration value="COMP">
              <xs:annotation>
                <xs:documentation>Comprehensive</xs:documentation>
              </xs:annotation>
            </xs:enumeration>
            <xs:enumeration value="SEL1">
              <xs:annotation>
                <xs:documentation>Selective (Grammar)</xs:documentation>
              </xs:annotation>
            </xs:enumeration>
            <xs:enumeration value="SEL2">
              <xs:annotation>
                <xs:documentation>Secondary Modern</xs:documentation>
              </xs:annotation>
            </xs:enumeration>
            <xs:enumeration value="SEL3">
              <xs:annotation>
                <xs:documentation>Selective (Technical)</xs:documentation>
              </xs:annotation>
            </xs:enumeration>
            <xs:enumeration value="SEL4">
              <xs:annotation>
                <xs:documentation>Religious School</xs:documentation>
              </xs:annotation>
            </xs:enumeration>
          </xs:restriction>
        </xs:simpleType>
      </xs:element>
      <xs:element name="NCYearGroupList" minOccurs="0" nillable="true" type="sif:NCYearGroupListType">
        <xs:annotation>
          <xs:documentation>Collection of National Curriculum Year Groups offered in this school or establishment.</xs:documentation>
        </xs:annotation>
      </xs:element>
      <xs:element name="GenderOfEntry" minOccurs="0" nillable="true">
        <xs:annotation>
          <xs:documentation>Gender of learners allowed for entry to school.</xs:documentation>
        </xs:annotation>
        <xs:simpleType>
          <xs:restriction base="xs:token">
            <xs:enumeration value="C">
              <xs:annotation>
                <xs:documentation>Coeducational</xs:documentation>
              </xs:annotation>
            </xs:enumeration>
            <xs:enumeration value="F">
              <xs:annotation>
                <xs:documentation>Female only</xs:documentation>
              </xs:annotation>
            </xs:enumeration>
            <xs:enumeration value="M">
              <xs:annotation>
                <xs:documentation>Male only</xs:documentation>
              </xs:annotation>
            </xs:enumeration>
          </xs:restriction>
        </xs:simpleType>
      </xs:element>
      <xs:element name="GenderSixthForm" minOccurs="0" nillable="true">
        <xs:annotation>
          <xs:documentation>Gender of learners allowed for entry to Sixth Form.</xs:documentation>
        </xs:annotation>
        <xs:simpleType>
          <xs:restriction base="xs:token">
            <xs:enumeration value="C">
              <xs:annotation>
                <xs:documentation>Coeducational</xs:documentation>
              </xs:annotation>
            </xs:enumeration>
            <xs:enumeration value="F">
              <xs:annotation>
                <xs:documentation>Female only</xs:documentation>
              </xs:annotation>
            </xs:enumeration>
            <xs:enumeration value="M">
              <xs:annotation>
                <xs:documentation>Male only</xs:documentation>
              </xs:annotation>
            </xs:enumeration>
            <xs:enumeration value="blank = HighestNCYear less than 12" />
          </xs:restriction>
        </xs:simpleType>
      </xs:element>
      <xs:element name="Boarders" minOccurs="0" nillable="true">
        <xs:annotation>
          <xs:documentation>Indicates whether the school supports boarders or not.</xs:documentation>
        </xs:annotation>
        <xs:simpleType>
          <xs:restriction base="xs:token">
            <xs:enumeration value="Yes" />
            <xs:enumeration value="No" />
          </xs:restriction>
        </xs:simpleType>
      </xs:element>
      <xs:element name="SessionsPerDay" type="xs:unsignedInt">
        <xs:annotation>
          <xs:documentation>The number of sessions in the usual school day (usually two).</xs:documentation>
        </xs:annotation>
      </xs:element>
      <xs:element name="Nursery" minOccurs="0" nillable="true">
        <xs:annotation>
          <xs:documentation>Indicates whether the school maintains a nursery class or not. Must be NO if Phase is set to MP, MS or SY. Must be YES if Phase is set to NY or EY.</xs:documentation>
        </xs:annotation>
        <xs:simpleType>
          <xs:restriction base="xs:token">
            <xs:enumeration value="Yes" />
            <xs:enumeration value="No" />
          </xs:restriction>
        </xs:simpleType>
      </xs:element>
      <xs:element name="Special" minOccurs="0" nillable="true">
        <xs:annotation>
          <xs:documentation>Indicates whether the school has a special class/unit or not.  Must be Yes if Phase = SP.  Any details will be stored in the associated SchoolInfoDetail object.</xs:documentation>
        </xs:annotation>
        <xs:simpleType>
          <xs:restriction base="xs:token">
            <xs:enumeration value="Yes" />
            <xs:enumeration value="No" />
          </xs:restriction>
        </xs:simpleType>
      </xs:element>
      <xs:element name="OperationalStatus" minOccurs="0" nillable="true" type="sif:UKOperationalStatusType">
        <xs:annotation>
          <xs:documentation>Operational condition of a school.</xs:documentation>
        </xs:annotation>
      </xs:element>
      <xs:element name="SIF_Metadata" minOccurs="0" nillable="true" type="sif:SIF_MetadataType" />
      <xs:element name="SIF_ExtendedElements" minOccurs="0" nillable="true" type="sif:SIF_ExtendedElementsType">
        <xs:key name="SIF_ExtendedElementsKey25">
          <xs:selector xpath="./sif:SIF_ExtendedElement" />
          <xs:field xpath="@Name" />
        </xs:key>
      </xs:element>
    </xs:sequence>
    <xs:attribute name="RefId" use="required" type="sif:RefIdType">
      <xs:annotation>
        <xs:documentation>The GUID that identifies this school.</xs:documentation>
      </xs:annotation>
    </xs:attribute>
    <xs:attribute name="LAInfoRefId" use="optional" type="sif:IdRefType">
      <xs:annotation>
        <xs:documentation>The ID (GUID) assigned to the LA of which this school is a member.</xs:documentation>
      </xs:annotation>
    </xs:attribute>
  </xs:complexType>

  <xs:element name="SchoolInfo" type="sif:SchoolInfoType">
    <xs:key name="SchoolInfoKey1">
      <xs:selector xpath="." />
      <xs:field xpath="@RefId" />
    </xs:key>
  </xs:element>


  <!--TermInfo-->

  <xs:complexType name="TermInfoType">
    <xs:annotation>
      <xs:documentation>
      This object provides information about a term; i.e., a reportable period of time.  Compare with US/Canada object: </xs:documentation>
    </xs:annotation>
    <xs:sequence>
      <xs:element ref="sif:SchoolYear" />
      <xs:element name="StartDate" type="xs:date">
        <xs:annotation>
          <xs:documentation>Starting date of the term.</xs:documentation>
        </xs:annotation>
      </xs:element>
      <xs:element name="EndDate" type="xs:date">
        <xs:annotation>
          <xs:documentation>Ending date of the term.</xs:documentation>
        </xs:annotation>
      </xs:element>
      <xs:element name="Description" minOccurs="0" nillable="true" type="xs:normalizedString">
        <xs:annotation>
          <xs:documentation>Text-based description of the term.</xs:documentation>
        </xs:annotation>
      </xs:element>
      <xs:element name="TermCode" minOccurs="0" nillable="true" type="xs:normalizedString">
        <xs:annotation>
          <xs:documentation>Locally-defined code. Use 'AUT', 'SPR', or 'SUM' for a 3 term year. Otherwise specify the term number within the year.</xs:documentation>
        </xs:annotation>
      </xs:element>
      <xs:element name="TermsPerYear" minOccurs="0" nillable="true">
        <xs:simpleType>
          <xs:restriction base="xs:unsignedInt">
            <xs:annotation>
              <xs:documentation>The number of terms in a given year (3-6).</xs:documentation>
            </xs:annotation>
            <xs:minInclusive value="3" xmlns:xs="http://www.w3.org/2001/XMLSchema" />
            <xs:maxInclusive value="6" xmlns:xs="http://www.w3.org/2001/XMLSchema" />
          </xs:restriction>
        </xs:simpleType>
      </xs:element>
      <xs:element name="MarkingTerm" minOccurs="0" nillable="true">
        <xs:annotation>
          <xs:documentation>Does this TermInfo represent a marking period?</xs:documentation>
        </xs:annotation>
        <xs:simpleType>
          <xs:restriction base="xs:token">
            <xs:enumeration value="Yes" />
            <xs:enumeration value="No" />
          </xs:restriction>
        </xs:simpleType>
      </xs:element>
      <xs:element name="SchedulingTerm" minOccurs="0" nillable="true">
        <xs:annotation>
          <xs:documentation>Does this TermInfo represent a scheduling term?</xs:documentation>
        </xs:annotation>
        <xs:simpleType>
          <xs:restriction base="xs:token">
            <xs:enumeration value="Yes" />
            <xs:enumeration value="No" />
          </xs:restriction>
        </xs:simpleType>
      </xs:element>
      <xs:element name="AttendanceTerm" minOccurs="0" nillable="true">
        <xs:annotation>
          <xs:documentation>Does this TermInfo represent an attendance term?</xs:documentation>
        </xs:annotation>
        <xs:simpleType>
          <xs:restriction base="xs:token">
            <xs:enumeration value="Yes" />
            <xs:enumeration value="No" />
          </xs:restriction>
        </xs:simpleType>
      </xs:element>
      <xs:element name="SIF_Metadata" minOccurs="0" nillable="true" type="sif:SIF_MetadataType" />
      <xs:element name="SIF_ExtendedElements" minOccurs="0" nillable="true" type="sif:SIF_ExtendedElementsType">
        <xs:key name="SIF_ExtendedElementsKey26">
          <xs:selector xpath="./sif:SIF_ExtendedElement" />
          <xs:field xpath="@Name" />
        </xs:key>
      </xs:element>
    </xs:sequence>
    <xs:attribute name="RefId" use="required" type="sif:RefIdType">
      <xs:annotation>
        <xs:documentation>The ID (GUID) that uniquely identifies this TermInfo entity.</xs:documentation>
      </xs:annotation>
    </xs:attribute>
    <xs:attribute name="SchoolInfoRefId" use="required" type="sif:IdRefType">
      <xs:annotation>
        <xs:documentation>The ID (GUID) that identifies the school where the term is used.</xs:documentation>
      </xs:annotation>
    </xs:attribute>
  </xs:complexType>

  <xs:element name="TermInfo" type="sif:TermInfoType">
    <xs:key name="TermInfoKey1">
      <xs:selector xpath="." />
      <xs:field xpath="@RefId" />
    </xs:key>
  </xs:element>


  <!--WorkforcePersonal-->

  <xs:complexType name="WorkforcePersonalType">
    <xs:annotation>
      <xs:documentation>
      This object contains key personal information relating to a workforce member, who might be a teacher or other employee of the school or LA.  Compare with US/Canada objects: </xs:documentation>
    </xs:annotation>
    <xs:sequence>
      <xs:element ref="sif:LocalId" />
      <xs:element name="AlertMsgList" minOccurs="0" nillable="true">
        <xs:complexType>
          <xs:sequence>
            <xs:element name="AlertMsg" maxOccurs="unbounded">
              <xs:annotation>
                <xs:documentation>This is an alert message that is associated with the person.</xs:documentation>
              </xs:annotation>
              <xs:complexType>
                <xs:simpleContent>
                  <xs:extension base="xs:normalizedString">
                    <xs:attribute name="Type" use="required">
                      <xs:annotation>
                        <xs:documentation>This attribute specifies what type of alert message this is.</xs:documentation>
                      </xs:annotation>
                      <xs:simpleType>
                        <xs:restriction base="xs:token">
                          <xs:enumeration value="Legal" />
                          <xs:enumeration value="Discipline" />
                          <xs:enumeration value="Educational" />
                          <xs:enumeration value="Other" />
                        </xs:restriction>
                      </xs:simpleType>
                    </xs:attribute>
                  </xs:extension>
                </xs:simpleContent>
              </xs:complexType>
            </xs:element>
          </xs:sequence>
        </xs:complexType>
      </xs:element>
      <xs:element name="MedicalAlertMsgList" minOccurs="0" nillable="true">
        <xs:complexType>
          <xs:sequence>
            <xs:element name="MedicalAlertMsg" maxOccurs="unbounded">
              <xs:annotation>
                <xs:documentation>Medical alert associated with the person.</xs:documentation>
              </xs:annotation>
              <xs:complexType>
                <xs:simpleContent>
                  <xs:extension base="xs:normalizedString">
                    <xs:attribute name="Severity" use="required">
                      <xs:annotation>
                        <xs:documentation>The level of severity of this medical alert.</xs:documentation>
                      </xs:annotation>
                      <xs:simpleType>
                        <xs:restriction base="xs:token">
                          <xs:enumeration value="Low" />
                          <xs:enumeration value="Moderate" />
                          <xs:enumeration value="High" />
                          <xs:enumeration value="Severe" />
                          <xs:enumeration value="Unknown" />
                        </xs:restriction>
                      </xs:simpleType>
                    </xs:attribute>
                  </xs:extension>
                </xs:simpleContent>
              </xs:complexType>
            </xs:element>
          </xs:sequence>
        </xs:complexType>
      </xs:element>
      <xs:element ref="sif:PersonalInformation" />
      <xs:element name="TeacherNumber" minOccurs="0" nillable="true" type="xs:normalizedString">
        <xs:annotation>
          <xs:documentation>The DfES Teacher Reference number. For those who have one this is a unique number.</xs:documentation>
        </xs:annotation>
      </xs:element>
      <xs:element name="NINumber" minOccurs="0" nillable="true">
        <xs:simpleType>
          <xs:restriction base="xs:normalizedString">
            <xs:annotation>
              <xs:documentation>National Insurance Number. Do not specify temporary numbers. Format:  AAnnnnnnA</xs:documentation>
            </xs:annotation>
            <xs:pattern value="[A-Z]{2}[0-9]{6}[A-Z]" xmlns:xs="http://www.w3.org/2001/XMLSchema" />
          </xs:restriction>
        </xs:simpleType>
      </xs:element>
      <xs:element name="CurrentAssignmentList" minOccurs="0" nillable="true">
        <xs:complexType>
          <xs:sequence>
            <xs:element name="CurrentAssignment" maxOccurs="unbounded">
              <xs:complexType>
                <xs:sequence>
                  <xs:element name="LAId" minOccurs="0" nillable="true" type="sif:LAIdType">
                    <xs:annotation>
                      <xs:documentation>The DfES assigned number for the LA in which the workforce member is working, if associated.</xs:documentation>
                    </xs:annotation>
                  </xs:element>
                  <xs:element name="EstablishmentId" minOccurs="0" nillable="true" type="sif:EstablishmentIdType">
                    <xs:annotation>
                      <xs:documentation>The DfES assigned number for the school or establishment in which the workforce member is working.  Note that the school may not necessarily be in the same LA listed as the LAId.</xs:documentation>
                    </xs:annotation>
                  </xs:element>
                  <xs:element name="Posts" minOccurs="0" nillable="true">
                    <xs:complexType>
                      <xs:sequence>
                        <xs:element name="Post" maxOccurs="unbounded" type="sif:UKAssignmentPostType">
                          <xs:annotation>
                            <xs:documentation>The post assigned to the workforce member in the context of the school or LA.</xs:documentation>
                          </xs:annotation>
                        </xs:element>
                      </xs:sequence>
                    </xs:complexType>
                  </xs:element>
                </xs:sequence>
              </xs:complexType>
            </xs:element>
          </xs:sequence>
        </xs:complexType>
      </xs:element>
      <xs:element name="SIF_Metadata" minOccurs="0" nillable="true" type="sif:SIF_MetadataType" />
      <xs:element name="SIF_ExtendedElements" minOccurs="0" nillable="true" type="sif:SIF_ExtendedElementsType">
        <xs:key name="SIF_ExtendedElementsKey27">
          <xs:selector xpath="./sif:SIF_ExtendedElement" />
          <xs:field xpath="@Name" />
        </xs:key>
      </xs:element>
    </xs:sequence>
    <xs:attribute name="RefId" use="required" type="sif:RefIdType">
      <xs:annotation>
        <xs:documentation>The ID (GUID) of the workforce member.  Note that the same GUID may be assigned to this person when they are also a learner (via LearnerPersonal) and/or a contact (via ContactPersonal).</xs:documentation>
      </xs:annotation>
    </xs:attribute>
  </xs:complexType>

  <xs:element name="WorkforcePersonal" type="sif:WorkforcePersonalType">
    <xs:key name="WorkforcePersonalKey1">
      <xs:selector xpath="." />
      <xs:field xpath="@RefId" />
    </xs:key>
  </xs:element>


  <!--LearnerBehaviourIncident-->

  <xs:complexType name="LearnerBehaviourIncidentType">
    <xs:annotation>
      <xs:documentation>Object to represent a behaviour incident at an educational establishment</xs:documentation>
    </xs:annotation>
    <xs:sequence>
      <xs:element name="SchoolInfoRefId" type="sif:IdRefType">
        <xs:annotation>
          <xs:documentation>The ID (GUID) of the school that the event takes place.</xs:documentation>
        </xs:annotation>
      </xs:element>
      <xs:element name="BehaviourType">
        <xs:complexType>
          <xs:sequence>
            <xs:element name="Weighting">
              <xs:simpleType>
                <xs:restriction base="xs:integer">
                  <xs:annotation>
                    <xs:documentation>An indicator of the positive / Negative nature and severity of behaviour</xs:documentation>
                  </xs:annotation>
                  <xs:minInclusive value="-10" xmlns:xs="http://www.w3.org/2001/XMLSchema" />
                  <xs:maxInclusive value="10" xmlns:xs="http://www.w3.org/2001/XMLSchema" />
                  <xs:fractionDigits value="0" xmlns:xs="http://www.w3.org/2001/XMLSchema" />
                </xs:restriction>
              </xs:simpleType>
            </xs:element>
            <xs:element name="Classification">
              <xs:annotation>
                <xs:documentation>Agreed Classification for this behaviour type</xs:documentation>
              </xs:annotation>
              <xs:simpleType>
                <xs:union>
                  <xs:simpleType>
                    <xs:restriction base="sif:UKPupilExclusionReasonType" />
                  </xs:simpleType>
                  <xs:simpleType>
                    <xs:restriction base="xs:token">
                      <xs:enumeration value="Physical Abuse" />
                      <xs:enumeration value="Verbal Abuse" />
                      <xs:enumeration value="Substance Abuse" />
                      <xs:enumeration value="Bullying" />
                      <xs:enumeration value="Property Abuse" />
                      <xs:enumeration value="Disruption" />
                      <xs:enumeration value="Compliance" />
                      <xs:enumeration value="Other" />
                    </xs:restriction>
                  </xs:simpleType>
                </xs:union>
              </xs:simpleType>
            </xs:element>
            <xs:element name="SubClassification" minOccurs="0" nillable="true" type="xs:normalizedString">
              <xs:annotation>
                <xs:documentation>Free text string to precisely define the type of behaviour (if classification is Other then sub classification is mandatory else optional)</xs:documentation>
              </xs:annotation>
            </xs:element>
          </xs:sequence>
        </xs:complexType>
      </xs:element>
      <xs:element name="Incident">
        <xs:complexType>
          <xs:sequence>
            <xs:element name="Date" type="xs:dateTime">
              <xs:annotation>
                <xs:documentation>Date and time Incident took place (started to take place)</xs:documentation>
              </xs:annotation>
            </xs:element>
            <xs:element name="Duration" minOccurs="0" nillable="true" type="xs:integer">
              <xs:annotation>
                <xs:documentation>How long incident lasted (minutes)</xs:documentation>
              </xs:annotation>
            </xs:element>
            <xs:element name="Location">
              <xs:annotation>
                <xs:documentation>The Location the Incident (mostly) took place</xs:documentation>
              </xs:annotation>
              <xs:simpleType>
                <xs:restriction base="xs:token">
                  <xs:enumeration value="Offsite Unsupervised" />
                  <xs:enumeration value="Offsite Supervised" />
                  <xs:enumeration value="Class" />
                  <xs:enumeration value="School Indoors Non-Class" />
                  <xs:enumeration value="School Outdoors Non-Class" />
                  <xs:enumeration value="Other" />
                </xs:restriction>
              </xs:simpleType>
            </xs:element>
            <xs:element name="Comments" minOccurs="0" nillable="true" type="xs:normalizedString">
              <xs:annotation>
                <xs:documentation>free text comments about the incident</xs:documentation>
              </xs:annotation>
            </xs:element>
            <xs:element name="PrecursorRefId" minOccurs="0" nillable="true" type="sif:IdRefType">
              <xs:annotation>
                <xs:documentation>A Preceding LearnerBehaviourIncidentRefID to which this behaviour is linked </xs:documentation>
              </xs:annotation>
            </xs:element>
            <xs:element name="Confidentiality">
              <xs:annotation>
                <xs:documentation>May indicate the type of persons that this should be displayed to</xs:documentation>
              </xs:annotation>
              <xs:simpleType>
                <xs:restriction base="xs:token">
                  <xs:enumeration value="Low" />
                  <xs:enumeration value="Medium" />
                  <xs:enumeration value="High" />
                </xs:restriction>
              </xs:simpleType>
            </xs:element>
          </xs:sequence>
        </xs:complexType>
      </xs:element>
      <xs:element name="Participants">
        <xs:complexType>
          <xs:sequence>
            <xs:element name="Employees">
              <xs:complexType>
                <xs:sequence>
                  <xs:element name="Employee" maxOccurs="unbounded">
                    <xs:complexType>
                      <xs:sequence>
                        <xs:element name="ParticipationTypes">
                          <xs:complexType>
                            <xs:sequence>
                              <xs:element name="ParticipationType" maxOccurs="unbounded">
                                <xs:annotation>
                                  <xs:documentation>The capacity of Involvement</xs:documentation>
                                </xs:annotation>
                                <xs:simpleType>
                                  <xs:restriction base="xs:token">
                                    <xs:enumeration value="Recorder" />
                                    <xs:enumeration value="Incharge" />
                                    <xs:enumeration value="Victim/Recipient" />
                                    <xs:enumeration value="Witness/Observer" />
                                  </xs:restriction>
                                </xs:simpleType>
                              </xs:element>
                            </xs:sequence>
                          </xs:complexType>
                        </xs:element>
                        <xs:element name="ParticipationComment" minOccurs="0" nillable="true" type="xs:normalizedString">
                          <xs:annotation>
                            <xs:documentation>free text comments about the individuals Involvement In the incident</xs:documentation>
                          </xs:annotation>
                        </xs:element>
                      </xs:sequence>
                      <xs:attribute name="WorkforcePersonalRefId" use="required" type="sif:IdRefType">
                        <xs:annotation>
                          <xs:documentation>The REFID of the member of Staff </xs:documentation>
                        </xs:annotation>
                      </xs:attribute>
                    </xs:complexType>
                  </xs:element>
                </xs:sequence>
              </xs:complexType>
            </xs:element>
            <xs:element name="Learners">
              <xs:complexType>
                <xs:sequence>
                  <xs:element name="Learner" maxOccurs="unbounded">
                    <xs:complexType>
                      <xs:sequence>
                        <xs:element name="ParticipationTypes">
                          <xs:complexType>
                            <xs:sequence>
                              <xs:element name="ParticipationType" maxOccurs="unbounded">
                                <xs:annotation>
                                  <xs:documentation>The capacity of Involvement</xs:documentation>
                                </xs:annotation>
                                <xs:simpleType>
                                  <xs:restriction base="xs:token">
                                    <xs:enumeration value="Perpetrator" />
                                    <xs:enumeration value="Victim/Recipient" />
                                    <xs:enumeration value="Witness/Observer" />
                                  </xs:restriction>
                                </xs:simpleType>
                              </xs:element>
                            </xs:sequence>
                          </xs:complexType>
                        </xs:element>
                        <xs:element name="ParticipationComment" minOccurs="0" nillable="true" type="xs:normalizedString">
                          <xs:annotation>
                            <xs:documentation>free text comments about the individuals Involvement In the incident</xs:documentation>
                          </xs:annotation>
                        </xs:element>
                        <xs:element name="Motivation" minOccurs="0" nillable="true">
                          <xs:annotation>
                            <xs:documentation>Any recorded Motivation for participation</xs:documentation>
                          </xs:annotation>
                          <xs:simpleType>
                            <xs:restriction base="xs:token">
                              <xs:enumeration value="Racial" />
                              <xs:enumeration value="Sexual" />
                              <xs:enumeration value="Financial" />
                              <xs:enumeration value="Religious" />
                              <xs:enumeration value="Other" />
                            </xs:restriction>
                          </xs:simpleType>
                        </xs:element>
                        <xs:element name="Weighting" minOccurs="0" nillable="true" />
                        <xs:element name="Actions" minOccurs="0" nillable="true">
                          <xs:complexType>
                            <xs:sequence>
                              <xs:element name="Action" maxOccurs="unbounded">
                                <xs:complexType>
                                  <xs:sequence>
                                    <xs:element name="Classification">
                                      <xs:annotation>
                                        <xs:documentation>The classification Of Outcome</xs:documentation>
                                      </xs:annotation>
                                      <xs:simpleType>
                                        <xs:restriction base="xs:token">
                                          <xs:enumeration value="Communication" />
                                          <xs:enumeration value="Activity" />
                                          <xs:enumeration value="Punishment" />
                                          <xs:enumeration value="Exclusion" />
                                        </xs:restriction>
                                      </xs:simpleType>
                                    </xs:element>
                                    <xs:element name="SubClassification" minOccurs="0" nillable="true" type="xs:normalizedString">
                                      <xs:annotation>
                                        <xs:documentation>Free text string to precisely define the action (if classification is Other then sub classification is mandatory else optional)</xs:documentation>
                                      </xs:annotation>
                                    </xs:element>
                                    <xs:element name="Date" type="xs:dateTime">
                                      <xs:annotation>
                                        <xs:documentation>Date and time Action has or Will take place</xs:documentation>
                                      </xs:annotation>
                                    </xs:element>
                                    <xs:element name="Person" minOccurs="0" nillable="true" type="sif:IdRefType">
                                      <xs:annotation>
                                        <xs:documentation>The PersonRefId of the person (student/ Employee/ parent) who will carry out the action</xs:documentation>
                                      </xs:annotation>
                                    </xs:element>
                                    <xs:element name="Comment" minOccurs="0" nillable="true" type="xs:normalizedString">
                                      <xs:annotation>
                                        <xs:documentation>free text comments about the Action</xs:documentation>
                                      </xs:annotation>
                                    </xs:element>
                                  </xs:sequence>
                                </xs:complexType>
                              </xs:element>
                            </xs:sequence>
                          </xs:complexType>
                        </xs:element>
                      </xs:sequence>
                      <xs:attribute name="LearnerPersonalRefId" use="required" type="sif:IdRefType">
                        <xs:annotation>
                          <xs:documentation>The REFID of the learner</xs:documentation>
                        </xs:annotation>
                      </xs:attribute>
                    </xs:complexType>
                  </xs:element>
                </xs:sequence>
              </xs:complexType>
            </xs:element>
          </xs:sequence>
        </xs:complexType>
      </xs:element>
      <xs:element name="SIF_Metadata" minOccurs="0" nillable="true" type="sif:SIF_MetadataType" />
      <xs:element name="SIF_ExtendedElements" minOccurs="0" nillable="true" type="sif:SIF_ExtendedElementsType">
        <xs:key name="SIF_ExtendedElementsKey28">
          <xs:selector xpath="./sif:SIF_ExtendedElement" />
          <xs:field xpath="@Name" />
        </xs:key>
      </xs:element>
    </xs:sequence>
    <xs:attribute name="RefId" use="required" type="sif:RefIdType">
      <xs:annotation>
        <xs:documentation>The ID (GUID) that uniquely identifies a particular incident</xs:documentation>
      </xs:annotation>
    </xs:attribute>
  </xs:complexType>

  <xs:element name="LearnerBehaviourIncident" type="sif:LearnerBehaviourIncidentType">
    <xs:key name="LearnerBehaviourIncidentKey1">
      <xs:selector xpath="." />
      <xs:field xpath="@RefId" />
    </xs:key>
  </xs:element>


  <!--Scope-->

  <xs:complexType name="ScopeType">
    <xs:annotation>
      <xs:documentation>
      Scope of this timetable, ie: a general description of what dates the timetable covers, etc
    </xs:documentation>
    </xs:annotation>
    <xs:sequence>
      <xs:element name="TTScopeName">
        <xs:simpleType>
          <xs:restriction base="xs:normalizedString">
            <xs:annotation>
              <xs:documentation>A short label for reference in screen displays.</xs:documentation>
            </xs:annotation>
            <xs:maxLength value="50" xmlns:xs="http://www.w3.org/2001/XMLSchema" />
          </xs:restriction>
        </xs:simpleType>
      </xs:element>
      <xs:element name="SupplierName">
        <xs:simpleType>
          <xs:restriction base="xs:normalizedString">
            <xs:annotation>
              <xs:documentation>The supplier of the software that created this message</xs:documentation>
            </xs:annotation>
            <xs:maxLength value="50" xmlns:xs="http://www.w3.org/2001/XMLSchema" />
          </xs:restriction>
        </xs:simpleType>
      </xs:element>
      <xs:element name="SupplierURL" minOccurs="0" nillable="true" type="xs:anyURI">
        <xs:annotation>
          <xs:documentation>A URL to a page on the supplier’s website that gives information about the transfer and/or contact details for the supplier.</xs:documentation>
        </xs:annotation>
      </xs:element>
      <xs:element name="Product">
        <xs:simpleType>
          <xs:restriction base="xs:normalizedString">
            <xs:annotation>
              <xs:documentation>The product that created this message</xs:documentation>
            </xs:annotation>
            <xs:maxLength value="40" xmlns:xs="http://www.w3.org/2001/XMLSchema" />
          </xs:restriction>
        </xs:simpleType>
      </xs:element>
      <xs:element name="Version">
        <xs:simpleType>
          <xs:restriction base="xs:normalizedString">
            <xs:annotation>
              <xs:documentation>The version of that Product</xs:documentation>
            </xs:annotation>
            <xs:maxLength value="20" xmlns:xs="http://www.w3.org/2001/XMLSchema" />
          </xs:restriction>
        </xs:simpleType>
      </xs:element>
      <xs:element name="SchoolInfoRefId" type="sif:IdRefType">
        <xs:annotation>
          <xs:documentation>The unique school ID, taken from the existing SchoolInfo object (requested from ZIS)</xs:documentation>
        </xs:annotation>
      </xs:element>
      <xs:element name="SchoolName">
        <xs:simpleType>
          <xs:restriction base="xs:normalizedString">
            <xs:annotation>
              <xs:documentation>The school name in plain text – to help a person to see immediately this is the correct school</xs:documentation>
            </xs:annotation>
            <xs:maxLength value="60" xmlns:xs="http://www.w3.org/2001/XMLSchema" />
          </xs:restriction>
        </xs:simpleType>
      </xs:element>
      <xs:element name="ScheduleCreationDate" minOccurs="0" nillable="true" type="xs:date">
        <xs:annotation>
          <xs:documentation>Date schedule was created or last edited (omitted for "Basic data only" message)</xs:documentation>
        </xs:annotation>
      </xs:element>
      <xs:element name="ScheduleName" minOccurs="0" nillable="true">
        <xs:simpleType>
          <xs:restriction base="xs:normalizedString">
            <xs:annotation>
              <xs:documentation>Name given to schedule by timetabler. The TT-Software may contain more than one schedule, so this tells us which one is being sent.</xs:documentation>
            </xs:annotation>
            <xs:maxLength value="20" xmlns:xs="http://www.w3.org/2001/XMLSchema" />
          </xs:restriction>
        </xs:simpleType>
      </xs:element>
      <xs:element ref="sif:SchoolYear" />
      <xs:element name="StartDate" minOccurs="0" nillable="true" type="xs:date">
        <xs:annotation>
          <xs:documentation>First day of the timetable</xs:documentation>
        </xs:annotation>
      </xs:element>
      <xs:element name="EndDate" minOccurs="0" nillable="true" type="xs:date">
        <xs:annotation>
          <xs:documentation>Last day of the timetable</xs:documentation>
        </xs:annotation>
      </xs:element>
      <xs:element name="Status">
        <xs:annotation>
          <xs:documentation>
        The "Status" of the timetable transfer 'BT' and 'ET' are sent by TTSoftware when sending a timetable. The others are sent by the MIS after receiving a timetable. (See also "Reasons for Status" below).</xs:documentation>
        </xs:annotation>
        <xs:simpleType>
          <xs:restriction base="xs:token">
            <xs:enumeration value="BT">
              <xs:annotation>
                <xs:documentation>Beginning of transfer.</xs:documentation>
              </xs:annotation>
            </xs:enumeration>
            <xs:enumeration value="ET">
              <xs:annotation>
                <xs:documentation>End of transfer.</xs:documentation>
              </xs:annotation>
            </xs:enumeration>
            <xs:enumeration value="RP">
              <xs:annotation>
                <xs:documentation>Received but import pending.</xs:documentation>
              </xs:annotation>
            </xs:enumeration>
            <xs:enumeration value="SI">
              <xs:annotation>
                <xs:documentation>Successful import.</xs:documentation>
              </xs:annotation>
            </xs:enumeration>
            <xs:enumeration value="UI">
              <xs:annotation>
                <xs:documentation>Unsuccessful import.</xs:documentation>
              </xs:annotation>
            </xs:enumeration>
          </xs:restriction>
        </xs:simpleType>
      </xs:element>
      <xs:element name="PhoneNumberList" minOccurs="0" nillable="true" type="sif:PhoneNumberListType">
        <xs:annotation>
          <xs:documentation>The supplier's phone number(s).</xs:documentation>
        </xs:annotation>
        <xs:key name="PhoneNumberListKey5">
          <xs:selector xpath="./sif:PhoneNumber" />
          <xs:field xpath="@Type" />
        </xs:key>
      </xs:element>
      <xs:element name="SIF_Metadata" minOccurs="0" nillable="true" type="sif:SIF_MetadataType" />
      <xs:element name="SIF_ExtendedElements" minOccurs="0" nillable="true" type="sif:SIF_ExtendedElementsType">
        <xs:key name="SIF_ExtendedElementsKey29">
          <xs:selector xpath="./sif:SIF_ExtendedElement" />
          <xs:field xpath="@Name" />
        </xs:key>
      </xs:element>
    </xs:sequence>
    <xs:attribute name="RefId" use="required" type="sif:RefIdType">
      <xs:annotation>
        <xs:documentation>
      Unique GUID for this Timetable transfer
    </xs:documentation>
      </xs:annotation>
    </xs:attribute>
  </xs:complexType>

  <xs:element name="Scope" type="sif:ScopeType">
    <xs:key name="ScopeKey1">
      <xs:selector xpath="." />
      <xs:field xpath="@RefId" />
    </xs:key>
  </xs:element>


  <!--TTTeacher-->

  <xs:complexType name="TTTeacherType">
    <xs:annotation>
      <xs:documentation>A teacher (or teaching post) used on the timetable. This may or may not be a "real" teacher stored in the MIS yet.</xs:documentation>
    </xs:annotation>
    <xs:sequence>
      <xs:element name="Code">
        <xs:simpleType>
          <xs:restriction base="xs:normalizedString">
            <xs:annotation>
              <xs:documentation>Unique Code local to TT-Software (could be Teacher Initials, Staff Code, etc)</xs:documentation>
            </xs:annotation>
            <xs:maxLength value="6" xmlns:xs="http://www.w3.org/2001/XMLSchema" />
          </xs:restriction>
        </xs:simpleType>
      </xs:element>
      <xs:element name="WorkforcePersonalRefId" minOccurs="0" nillable="true" type="sif:IdRefType">
        <xs:annotation>
          <xs:documentation>If this teacher is known to the MIS, this is the "WorkforcePersonalId"</xs:documentation>
        </xs:annotation>
      </xs:element>
      <xs:element name="Description">
        <xs:simpleType>
          <xs:restriction base="xs:normalizedString">
            <xs:annotation>
              <xs:documentation>This is the description of the teacher (or "post", etc). It may be a name "John Smith" or it may just be a description such as "New Maths Teacher". If WorkforcePersonalId is not supplied, this Description is used by the MIS to help theuser manually match to a teacher in the MIS (or decide on some other appropriate action).</xs:documentation>
            </xs:annotation>
            <xs:maxLength value="24" xmlns:xs="http://www.w3.org/2001/XMLSchema" />
          </xs:restriction>
        </xs:simpleType>
      </xs:element>
      <xs:element name="SIF_Metadata" minOccurs="0" nillable="true" type="sif:SIF_MetadataType" />
      <xs:element name="SIF_ExtendedElements" minOccurs="0" nillable="true" type="sif:SIF_ExtendedElementsType">
        <xs:key name="SIF_ExtendedElementsKey30">
          <xs:selector xpath="./sif:SIF_ExtendedElement" />
          <xs:field xpath="@Name" />
        </xs:key>
      </xs:element>
    </xs:sequence>
    <xs:attribute name="RefId" use="required" type="sif:RefIdType">
      <xs:annotation>
        <xs:documentation>Unique GUID for this Timetable Teacher</xs:documentation>
      </xs:annotation>
    </xs:attribute>
  </xs:complexType>

  <xs:element name="TTTeacher" type="sif:TTTeacherType">
    <xs:key name="TTTeacherKey1">
      <xs:selector xpath="." />
      <xs:field xpath="@RefId" />
    </xs:key>
  </xs:element>


  <!--TTSubject-->

  <xs:complexType name="TTSubjectType">
    <xs:annotation>
      <xs:documentation>A subject used on the timetable. This may or may not be a subject stored in the MIS yet.</xs:documentation>
    </xs:annotation>
    <xs:sequence>
      <xs:element name="Code">
        <xs:simpleType>
          <xs:restriction base="xs:normalizedString">
            <xs:annotation>
              <xs:documentation>Unique Code local to TT-Software (could be Teacher Initials, Staff Code, etc)</xs:documentation>
            </xs:annotation>
            <xs:maxLength value="6" xmlns:xs="http://www.w3.org/2001/XMLSchema" />
          </xs:restriction>
        </xs:simpleType>
      </xs:element>
      <xs:element name="Description">
        <xs:simpleType>
          <xs:restriction base="xs:normalizedString">
            <xs:annotation>
              <xs:documentation>This is the description of the subject (long name)</xs:documentation>
            </xs:annotation>
            <xs:maxLength value="15" xmlns:xs="http://www.w3.org/2001/XMLSchema" />
          </xs:restriction>
        </xs:simpleType>
      </xs:element>
      <xs:element name="SIF_Metadata" minOccurs="0" nillable="true" type="sif:SIF_MetadataType" />
      <xs:element name="SIF_ExtendedElements" minOccurs="0" nillable="true" type="sif:SIF_ExtendedElementsType">
        <xs:key name="SIF_ExtendedElementsKey31">
          <xs:selector xpath="./sif:SIF_ExtendedElement" />
          <xs:field xpath="@Name" />
        </xs:key>
      </xs:element>
    </xs:sequence>
    <xs:attribute name="RefId" use="required" type="sif:RefIdType" />
  </xs:complexType>

  <xs:element name="TTSubject" type="sif:TTSubjectType">
    <xs:key name="TTSubjectKey1">
      <xs:selector xpath="." />
      <xs:field xpath="@RefId" />
    </xs:key>
  </xs:element>


  <!--TTRoom-->

  <xs:complexType name="TTRoomType">
    <xs:annotation>
      <xs:documentation>A room (or learning space) used on the timetable. This may or may not be a "real" room stored in the MIS yet.</xs:documentation>
    </xs:annotation>
    <xs:sequence>
      <xs:element name="Code">
        <xs:simpleType>
          <xs:restriction base="xs:normalizedString">
            <xs:annotation>
              <xs:documentation>Unique Code local to TT-Software (short name)</xs:documentation>
            </xs:annotation>
            <xs:maxLength value="5" xmlns:xs="http://www.w3.org/2001/XMLSchema" />
          </xs:restriction>
        </xs:simpleType>
      </xs:element>
      <xs:element name="Description">
        <xs:simpleType>
          <xs:restriction base="xs:normalizedString">
            <xs:annotation>
              <xs:documentation>This is the description of the room (long name) It is used by the MIS to help the user manually match to a room in the MIS (or decide on some other appropriate action).</xs:documentation>
            </xs:annotation>
            <xs:maxLength value="10" xmlns:xs="http://www.w3.org/2001/XMLSchema" />
          </xs:restriction>
        </xs:simpleType>
      </xs:element>
      <xs:element name="SiteRefId" minOccurs="0" nillable="true" type="sif:IdRefType">
        <xs:annotation>
          <xs:documentation>Which "site" this room is on. It may also be used by the MIS.  References the TTSite object.</xs:documentation>
        </xs:annotation>
      </xs:element>
      <xs:element name="SIF_Metadata" minOccurs="0" nillable="true" type="sif:SIF_MetadataType" />
      <xs:element name="SIF_ExtendedElements" minOccurs="0" nillable="true" type="sif:SIF_ExtendedElementsType">
        <xs:key name="SIF_ExtendedElementsKey32">
          <xs:selector xpath="./sif:SIF_ExtendedElement" />
          <xs:field xpath="@Name" />
        </xs:key>
      </xs:element>
    </xs:sequence>
    <xs:attribute name="RefId" use="required" type="sif:RefIdType" />
  </xs:complexType>

  <xs:element name="TTRoom" type="sif:TTRoomType">
    <xs:key name="TTRoomKey1">
      <xs:selector xpath="." />
      <xs:field xpath="@RefId" />
    </xs:key>
  </xs:element>


  <!--TTSite-->

  <xs:complexType name="TTSiteType">
    <xs:annotation>
      <xs:documentation>A site used on the timetable. This may or may not be a “real” site stored in the MIS yet.</xs:documentation>
    </xs:annotation>
    <xs:sequence>
      <xs:element name="Code">
        <xs:simpleType>
          <xs:restriction base="xs:normalizedString">
            <xs:annotation>
              <xs:documentation>Unique Code local to TT-Software</xs:documentation>
            </xs:annotation>
            <xs:maxLength value="5" xmlns:xs="http://www.w3.org/2001/XMLSchema" />
          </xs:restriction>
        </xs:simpleType>
      </xs:element>
      <xs:element name="Description">
        <xs:simpleType>
          <xs:restriction base="xs:normalizedString">
            <xs:annotation>
              <xs:documentation>This is the description of the site. It is used by the MIS to help the user manually match to a site in the MIS (or decide on some other appropriate action).</xs:documentation>
            </xs:annotation>
            <xs:maxLength value="10" xmlns:xs="http://www.w3.org/2001/XMLSchema" />
          </xs:restriction>
        </xs:simpleType>
      </xs:element>
      <xs:element name="Type" minOccurs="0" nillable="true">
        <xs:annotation>
          <xs:documentation>What "type" of site this is. It is used by the MIS to help with any manual matching.</xs:documentation>
        </xs:annotation>
        <xs:simpleType>
          <xs:restriction base="xs:token">
            <xs:enumeration value="S">
              <xs:annotation>
                <xs:documentation>a site on your school</xs:documentation>
              </xs:annotation>
            </xs:enumeration>
            <xs:enumeration value="V">
              <xs:annotation>
                <xs:documentation>virtual (ie: not a physical site)</xs:documentation>
              </xs:annotation>
            </xs:enumeration>
            <xs:enumeration value="E">
              <xs:annotation>
                <xs:documentation>an external site (eg: another school in a federation, or a local business)</xs:documentation>
              </xs:annotation>
            </xs:enumeration>
          </xs:restriction>
        </xs:simpleType>
      </xs:element>
      <xs:element name="SIF_Metadata" minOccurs="0" nillable="true" type="sif:SIF_MetadataType" />
      <xs:element name="SIF_ExtendedElements" minOccurs="0" nillable="true" type="sif:SIF_ExtendedElementsType">
        <xs:key name="SIF_ExtendedElementsKey33">
          <xs:selector xpath="./sif:SIF_ExtendedElement" />
          <xs:field xpath="@Name" />
        </xs:key>
      </xs:element>
    </xs:sequence>
    <xs:attribute name="RefId" use="required" type="sif:RefIdType">
      <xs:annotation>
        <xs:documentation>Unique GUID for this Site</xs:documentation>
      </xs:annotation>
    </xs:attribute>
  </xs:complexType>

  <xs:element name="TTSite" type="sif:TTSiteType">
    <xs:key name="TTSiteKey1">
      <xs:selector xpath="." />
      <xs:field xpath="@RefId" />
    </xs:key>
  </xs:element>


  <!--Cycle-->

  <xs:complexType name="CycleType">
    <xs:annotation>
      <xs:documentation>The timetable cycle</xs:documentation>
    </xs:annotation>
    <xs:sequence>
      <xs:element name="CycleName" minOccurs="0" nillable="true">
        <xs:simpleType>
          <xs:restriction base="xs:normalizedString">
            <xs:annotation>
              <xs:documentation>A label for this cycle</xs:documentation>
            </xs:annotation>
            <xs:maxLength value="40" xmlns:xs="http://www.w3.org/2001/XMLSchema" />
          </xs:restriction>
        </xs:simpleType>
      </xs:element>
      <xs:element name="CycleDays" type="xs:integer">
        <xs:annotation>
          <xs:documentation>Number of days in cycle</xs:documentation>
        </xs:annotation>
      </xs:element>
      <xs:element name="PeriodsPerDay" type="xs:integer">
        <xs:annotation>
          <xs:documentation>(Max) Number of periods per day (see Rectangular Grid Representation above)</xs:documentation>
        </xs:annotation>
      </xs:element>
      <xs:element name="StandardPeriodList">
        <xs:complexType>
          <xs:sequence>
            <xs:element ref="sif:Period" maxOccurs="unbounded" />
          </xs:sequence>
        </xs:complexType>
      </xs:element>
      <xs:element name="TTDayList">
        <xs:complexType>
          <xs:sequence>
            <xs:element name="TTDay" maxOccurs="unbounded">
              <xs:complexType>
                <xs:sequence>
                  <xs:element name="TTDayId">
                    <xs:simpleType>
                      <xs:restriction base="xs:normalizedString">
                        <xs:annotation>
                          <xs:documentation>A unique local ID for this day</xs:documentation>
                        </xs:annotation>
                        <xs:maxLength value="5" xmlns:xs="http://www.w3.org/2001/XMLSchema" />
                      </xs:restriction>
                    </xs:simpleType>
                  </xs:element>
                  <xs:element name="ShortName">
                    <xs:simpleType>
                      <xs:restriction base="xs:normalizedString">
                        <xs:annotation>
                          <xs:documentation>A short day label</xs:documentation>
                        </xs:annotation>
                        <xs:maxLength value="15" xmlns:xs="http://www.w3.org/2001/XMLSchema" />
                      </xs:restriction>
                    </xs:simpleType>
                  </xs:element>
                  <xs:element name="LongName">
                    <xs:simpleType>
                      <xs:restriction base="xs:normalizedString">
                        <xs:annotation>
                          <xs:documentation>A long day label</xs:documentation>
                        </xs:annotation>
                        <xs:maxLength value="25" xmlns:xs="http://www.w3.org/2001/XMLSchema" />
                      </xs:restriction>
                    </xs:simpleType>
                  </xs:element>
                  <xs:element name="DayIndex" type="xs:integer">
                    <xs:annotation>
                      <xs:documentation>The day’s position in the cycle (1,2,3,etc).</xs:documentation>
                    </xs:annotation>
                  </xs:element>
                  <xs:element name="PeriodList" minOccurs="0" nillable="true">
                    <xs:complexType>
                      <xs:sequence>
                        <xs:element ref="sif:Period" maxOccurs="unbounded" />
                      </xs:sequence>
                    </xs:complexType>
                  </xs:element>
                </xs:sequence>
              </xs:complexType>
            </xs:element>
          </xs:sequence>
        </xs:complexType>
      </xs:element>
      <xs:element name="SIF_Metadata" minOccurs="0" nillable="true" type="sif:SIF_MetadataType" />
      <xs:element name="SIF_ExtendedElements" minOccurs="0" nillable="true" type="sif:SIF_ExtendedElementsType">
        <xs:key name="SIF_ExtendedElementsKey34">
          <xs:selector xpath="./sif:SIF_ExtendedElement" />
          <xs:field xpath="@Name" />
        </xs:key>
      </xs:element>
    </xs:sequence>
    <xs:attribute name="RefId" use="required" type="sif:RefIdType">
      <xs:annotation>
        <xs:documentation>Unique GUID for this cycle</xs:documentation>
      </xs:annotation>
    </xs:attribute>
  </xs:complexType>

  <xs:element name="Cycle" type="sif:CycleType">
    <xs:key name="CycleKey1">
      <xs:selector xpath="." />
      <xs:field xpath="@RefId" />
    </xs:key>
  </xs:element>


  <!--TeachingGroup-->

  <xs:complexType name="TeachingGroupType">
    <xs:annotation>
      <xs:documentation>A Teaching Group</xs:documentation>
    </xs:annotation>
    <xs:sequence>
      <xs:element name="GroupDefinition" minOccurs="0" nillable="true">
        <xs:complexType>
          <xs:sequence>
            <xs:element name="ShortName">
              <xs:simpleType>
                <xs:restriction base="xs:normalizedString">
                  <xs:annotation>
                    <xs:documentation>A short free-format label that describes the group. Used for display purposes in the MIS or TT-Software.</xs:documentation>
                  </xs:annotation>
                  <xs:maxLength value="12" xmlns:xs="http://www.w3.org/2001/XMLSchema" />
                </xs:restriction>
              </xs:simpleType>
            </xs:element>
            <xs:element name="LongName">
              <xs:simpleType>
                <xs:restriction base="xs:normalizedString">
                  <xs:annotation>
                    <xs:documentation>A longer label to help office staff understand the meaning of the group</xs:documentation>
                  </xs:annotation>
                  <xs:maxLength value="80" xmlns:xs="http://www.w3.org/2001/XMLSchema" />
                </xs:restriction>
              </xs:simpleType>
            </xs:element>
            <xs:element name="TTSubjectRefId" type="sif:IdRefType">
              <xs:annotation>
                <xs:documentation>Subject being taught - see TTSubject NB: We do not allow a TG to have no subject</xs:documentation>
              </xs:annotation>
            </xs:element>
            <xs:element name="Set" minOccurs="0" nillable="true">
              <xs:simpleType>
                <xs:restriction base="xs:normalizedString">
                  <xs:annotation>
                    <xs:documentation>Set number (typically 1,2,3,etc or A,B,C, etc but could be a longer label). Can be useful when office staff are trying to "recognise" a TG</xs:documentation>
                  </xs:annotation>
                  <xs:maxLength value="5" xmlns:xs="http://www.w3.org/2001/XMLSchema" />
                </xs:restriction>
              </xs:simpleType>
            </xs:element>
            <xs:element name="Block" minOccurs="0" nillable="true">
              <xs:simpleType>
                <xs:restriction base="xs:normalizedString">
                  <xs:annotation>
                    <xs:documentation>Block number or letter (eg: "A") Can be useful when office staff are trying to "recognise" a TG</xs:documentation>
                  </xs:annotation>
                  <xs:maxLength value="5" xmlns:xs="http://www.w3.org/2001/XMLSchema" />
                </xs:restriction>
              </xs:simpleType>
            </xs:element>
            <xs:element name="Level" minOccurs="0" nillable="true" type="sif:UKAssessmentStageType">
              <xs:annotation>
                <xs:documentation>Level / Assessment Stage, eg "KS3" (if known / relevant)</xs:documentation>
              </xs:annotation>
            </xs:element>
          </xs:sequence>
        </xs:complexType>
      </xs:element>
      <xs:element name="MainTeacherRefId" minOccurs="0" maxOccurs="unbounded" type="sif:IdRefType">
        <xs:annotation>
          <xs:documentation>The main teacher / supervisor / etc for this group (for reporting / recognition purposes) (see TTTeacher)</xs:documentation>
        </xs:annotation>
      </xs:element>
      <xs:element name="GroupTeacherList" minOccurs="0" nillable="true">
        <xs:complexType>
          <xs:sequence>
            <xs:element name="GroupTeacher" maxOccurs="unbounded">
              <xs:complexType>
                <xs:sequence>
                  <xs:element name="TTTeacherRefId" type="sif:IdRefType">
                    <xs:annotation>
                      <xs:documentation>The teacher (see TTTeacher)</xs:documentation>
                    </xs:annotation>
                  </xs:element>
                  <xs:element name="Type">
                    <xs:annotation>
                      <xs:documentation>The teacher’s relationship with the TG</xs:documentation>
                    </xs:annotation>
                    <xs:simpleType>
                      <xs:restriction base="xs:token">
                        <xs:enumeration value="A">
                          <xs:annotation>
                            <xs:documentation>Assistant</xs:documentation>
                          </xs:annotation>
                        </xs:enumeration>
                        <xs:enumeration value="H">
                          <xs:annotation>
                            <xs:documentation>Head-of-Dept/Subject-Leader</xs:documentation>
                          </xs:annotation>
                        </xs:enumeration>
                        <xs:enumeration value="Z">
                          <xs:annotation>
                            <xs:documentation>other/unspecified</xs:documentation>
                          </xs:annotation>
                        </xs:enumeration>
                      </xs:restriction>
                    </xs:simpleType>
                  </xs:element>
                </xs:sequence>
              </xs:complexType>
            </xs:element>
          </xs:sequence>
        </xs:complexType>
      </xs:element>
      <xs:element name="SIF_Metadata" minOccurs="0" nillable="true" type="sif:SIF_MetadataType" />
      <xs:element name="SIF_ExtendedElements" minOccurs="0" nillable="true" type="sif:SIF_ExtendedElementsType">
        <xs:key name="SIF_ExtendedElementsKey35">
          <xs:selector xpath="./sif:SIF_ExtendedElement" />
          <xs:field xpath="@Name" />
        </xs:key>
      </xs:element>
    </xs:sequence>
    <xs:attribute name="RefId" use="required" type="sif:RefIdType">
      <xs:annotation>
        <xs:documentation>Unique local ID</xs:documentation>
      </xs:annotation>
    </xs:attribute>
  </xs:complexType>

  <xs:element name="TeachingGroup" type="sif:TeachingGroupType">
    <xs:key name="TeachingGroupKey1">
      <xs:selector xpath="." />
      <xs:field xpath="@RefId" />
    </xs:key>
  </xs:element>


  <!--Junction-->

  <xs:complexType name="JunctionType">
    <xs:annotation>
      <xs:documentation>A representation of the Curriculum Diagram.</xs:documentation>
    </xs:annotation>
    <xs:sequence>
      <xs:element name="Label">
        <xs:simpleType>
          <xs:restriction base="xs:normalizedString">
            <xs:annotation>
              <xs:documentation>A free-format label that describes the junction. Used for display purposes in the MIS and/or TT-Software.</xs:documentation>
            </xs:annotation>
            <xs:maxLength value="40" xmlns:xs="http://www.w3.org/2001/XMLSchema" />
          </xs:restriction>
        </xs:simpleType>
      </xs:element>
      <xs:element name="ShortLabel">
        <xs:simpleType>
          <xs:restriction base="xs:normalizedString">
            <xs:annotation>
              <xs:documentation>A shorter version of Label, for display purposes.</xs:documentation>
            </xs:annotation>
            <xs:maxLength value="20" xmlns:xs="http://www.w3.org/2001/XMLSchema" />
          </xs:restriction>
        </xs:simpleType>
      </xs:element>
      <xs:element name="LocalType" minOccurs="0" nillable="true">
        <xs:simpleType>
          <xs:restriction base="xs:normalizedString">
            <xs:annotation>
              <xs:documentation>An optional way for the TT-Software to provide information about the "type" of junction (eg: "band" or "block")</xs:documentation>
            </xs:annotation>
            <xs:maxLength value="30" xmlns:xs="http://www.w3.org/2001/XMLSchema" />
          </xs:restriction>
        </xs:simpleType>
      </xs:element>
      <xs:element name="InputList">
        <xs:complexType>
          <xs:sequence>
            <xs:element name="Input" maxOccurs="unbounded">
              <xs:complexType>
                <xs:sequence>
                  <xs:element name="Type" minOccurs="0" nillable="true">
                    <xs:annotation>
                      <xs:documentation>Conditional and has only one value: "SC".   "SC" has special meaning – it means this is the top of the "tree" and the input is the whole school.</xs:documentation>
                    </xs:annotation>
                    <xs:simpleType>
                      <xs:restriction base="xs:token">
                        <xs:enumeration value="SC">
                          <xs:annotation>
                            <xs:documentation>School</xs:documentation>
                          </xs:annotation>
                        </xs:enumeration>
                      </xs:restriction>
                    </xs:simpleType>
                  </xs:element>
                  <xs:element name="GroupLocalId" minOccurs="0" nillable="true">
                    <xs:simpleType>
                      <xs:restriction base="xs:normalizedString">
                        <xs:annotation>
                          <xs:documentation>If Type != "SC", this is the LocalId of another junction output</xs:documentation>
                        </xs:annotation>
                        <xs:maxLength value="12" xmlns:xs="http://www.w3.org/2001/XMLSchema" />
                      </xs:restriction>
                    </xs:simpleType>
                  </xs:element>
                </xs:sequence>
              </xs:complexType>
            </xs:element>
          </xs:sequence>
        </xs:complexType>
      </xs:element>
      <xs:element name="OutputList">
        <xs:complexType>
          <xs:sequence>
            <xs:element name="Output" maxOccurs="unbounded">
              <xs:complexType>
                <xs:sequence>
                  <xs:element name="Type">
                    <xs:annotation>
                      <xs:documentation>"TG" has special meaning – it means this is the bottom of the "tree" and the output is a TeachingGroup. "YR" means a year (or "principal division") within the school (7,8,9,etc).</xs:documentation>
                    </xs:annotation>
                    <xs:simpleType>
                      <xs:restriction base="xs:token">
                        <xs:enumeration value="TG">
                          <xs:annotation>
                            <xs:documentation>TeachingGroup</xs:documentation>
                          </xs:annotation>
                        </xs:enumeration>
                        <xs:enumeration value="YR">
                          <xs:annotation>
                            <xs:documentation>Year</xs:documentation>
                          </xs:annotation>
                        </xs:enumeration>
                        <xs:enumeration value="GR">
                          <xs:annotation>
                            <xs:documentation>Other Groups</xs:documentation>
                          </xs:annotation>
                        </xs:enumeration>
                      </xs:restriction>
                    </xs:simpleType>
                  </xs:element>
                  <xs:element name="LocalType" minOccurs="0" nillable="true">
                    <xs:simpleType>
                      <xs:restriction base="xs:normalizedString">
                        <xs:annotation>
                          <xs:documentation>An optional way for the TT-Software to provide information about the "type" of junction (eg: "band" or "block").</xs:documentation>
                        </xs:annotation>
                        <xs:maxLength value="30" xmlns:xs="http://www.w3.org/2001/XMLSchema" />
                      </xs:restriction>
                    </xs:simpleType>
                  </xs:element>
                  <xs:element name="GroupLocalId" minOccurs="0" nillable="true">
                    <xs:simpleType>
                      <xs:restriction base="xs:normalizedString">
                        <xs:annotation>
                          <xs:documentation>Unique LocalID of this junction output</xs:documentation>
                        </xs:annotation>
                        <xs:maxLength value="12" xmlns:xs="http://www.w3.org/2001/XMLSchema" />
                      </xs:restriction>
                    </xs:simpleType>
                  </xs:element>
                  <xs:element name="TeachingGroupRefId" minOccurs="0" nillable="true" type="sif:RefIdType">
                    <xs:annotation>
                      <xs:documentation>If Type = "TG" then include here the TeachingGroupID (see TeachingGroup)</xs:documentation>
                    </xs:annotation>
                  </xs:element>
                  <xs:element name="Desc" minOccurs="0" nillable="true">
                    <xs:simpleType>
                      <xs:restriction base="xs:normalizedString">
                        <xs:annotation>
                          <xs:documentation>Description. Required if Type is not "TG". Optional if Type is “TG” (since a TG has its own ShortName and LongName already)</xs:documentation>
                        </xs:annotation>
                        <xs:maxLength value="40" xmlns:xs="http://www.w3.org/2001/XMLSchema" />
                      </xs:restriction>
                    </xs:simpleType>
                  </xs:element>
                  <xs:element name="ShortDesc" minOccurs="0" nillable="true">
                    <xs:simpleType>
                      <xs:restriction base="xs:normalizedString">
                        <xs:annotation>
                          <xs:documentation>A shorter version of Desc, for display purposes</xs:documentation>
                        </xs:annotation>
                        <xs:maxLength value="12" xmlns:xs="http://www.w3.org/2001/XMLSchema" />
                      </xs:restriction>
                    </xs:simpleType>
                  </xs:element>
                  <xs:element name="NCYearList" minOccurs="0" nillable="true">
                    <xs:complexType>
                      <xs:sequence>
                        <xs:element name="NCYear" maxOccurs="unbounded" type="sif:NCYearGroupType">
                          <xs:annotation>
                            <xs:documentation>NC Year Group</xs:documentation>
                          </xs:annotation>
                        </xs:element>
                      </xs:sequence>
                    </xs:complexType>
                  </xs:element>
                </xs:sequence>
              </xs:complexType>
            </xs:element>
          </xs:sequence>
        </xs:complexType>
      </xs:element>
      <xs:element name="SIF_Metadata" minOccurs="0" nillable="true" type="sif:SIF_MetadataType" />
      <xs:element name="SIF_ExtendedElements" minOccurs="0" nillable="true" type="sif:SIF_ExtendedElementsType">
        <xs:key name="SIF_ExtendedElementsKey36">
          <xs:selector xpath="./sif:SIF_ExtendedElement" />
          <xs:field xpath="@Name" />
        </xs:key>
      </xs:element>
    </xs:sequence>
    <xs:attribute name="RefId" use="required" type="sif:RefIdType">
      <xs:annotation>
        <xs:documentation>A unique local identifier for this junction</xs:documentation>
      </xs:annotation>
    </xs:attribute>
  </xs:complexType>

  <xs:element name="Junction" type="sif:JunctionType">
    <xs:key name="JunctionKey1">
      <xs:selector xpath="." />
      <xs:field xpath="@RefId" />
    </xs:key>
  </xs:element>


  <!--NonTeachingActivity-->

  <xs:complexType name="NonTeachingActivityType">
    <xs:annotation>
      <xs:documentation>
      A "non-teaching activity" is used to represent times when a teacher is not teaching a Teaching Group but is nonetheless "busy". Examples are meetings, part-time teachers who are not in school, PPA time, etc.</xs:documentation>
    </xs:annotation>
    <xs:sequence>
      <xs:element name="NTCode">
        <xs:simpleType>
          <xs:restriction base="xs:normalizedString">
            <xs:annotation>
              <xs:documentation>A unique code for the non-teaching activity</xs:documentation>
            </xs:annotation>
            <xs:maxLength value="12" xmlns:xs="http://www.w3.org/2001/XMLSchema" />
          </xs:restriction>
        </xs:simpleType>
      </xs:element>
      <xs:element name="Description">
        <xs:simpleType>
          <xs:restriction base="xs:normalizedString">
            <xs:annotation>
              <xs:documentation>A description of the non-teaching activity</xs:documentation>
            </xs:annotation>
            <xs:maxLength value="25" xmlns:xs="http://www.w3.org/2001/XMLSchema" />
          </xs:restriction>
        </xs:simpleType>
      </xs:element>
      <xs:element name="Type">
        <xs:annotation>
          <xs:documentation>Lesson/meeting type Note this Type over-rides the period type in the cycle definition (in case, for eg, Period 1 is Registration for some classes but not others)</xs:documentation>
        </xs:annotation>
        <xs:simpleType>
          <xs:restriction base="xs:token">
            <xs:enumeration value="R">
              <xs:annotation>
                <xs:documentation>registration</xs:documentation>
              </xs:annotation>
            </xs:enumeration>
            <xs:enumeration value="B">
              <xs:annotation>
                <xs:documentation>break</xs:documentation>
              </xs:annotation>
            </xs:enumeration>
            <xs:enumeration value="L">
              <xs:annotation>
                <xs:documentation>lunch</xs:documentation>
              </xs:annotation>
            </xs:enumeration>
            <xs:enumeration value="O">
              <xs:annotation>
                <xs:documentation>outside school hours (eg: clubs)</xs:documentation>
              </xs:annotation>
            </xs:enumeration>
            <xs:enumeration value="U">
              <xs:annotation>
                <xs:documentation>teacher unavailable (but in school)</xs:documentation>
              </xs:annotation>
            </xs:enumeration>
            <xs:enumeration value="X">
              <xs:annotation>
                <xs:documentation>teacher unavailable (out of school)</xs:documentation>
              </xs:annotation>
            </xs:enumeration>
            <xs:enumeration value="N">
              <xs:annotation>
                <xs:documentation>other (or unspecified) non-teaching</xs:documentation>
              </xs:annotation>
            </xs:enumeration>
          </xs:restriction>
        </xs:simpleType>
      </xs:element>
      <xs:element name="SIF_Metadata" minOccurs="0" nillable="true" type="sif:SIF_MetadataType" />
      <xs:element name="SIF_ExtendedElements" minOccurs="0" nillable="true" type="sif:SIF_ExtendedElementsType">
        <xs:key name="SIF_ExtendedElementsKey37">
          <xs:selector xpath="./sif:SIF_ExtendedElement" />
          <xs:field xpath="@Name" />
        </xs:key>
      </xs:element>
    </xs:sequence>
    <xs:attribute name="RefId" use="required" type="sif:RefIdType">
      <xs:annotation>
        <xs:documentation>A unique local identifier for this junction</xs:documentation>
      </xs:annotation>
    </xs:attribute>
  </xs:complexType>

  <xs:element name="NonTeachingActivity" type="sif:NonTeachingActivityType">
    <xs:key name="NonTeachingActivityKey1">
      <xs:selector xpath="." />
      <xs:field xpath="@RefId" />
    </xs:key>
  </xs:element>


  <!--Lesson-->

  <xs:complexType name="LessonType">
    <xs:annotation>
      <xs:documentation>A lesson on the timetable</xs:documentation>
    </xs:annotation>
    <xs:sequence>
      <xs:element name="TTDayId">
        <xs:simpleType>
          <xs:restriction base="xs:normalizedString">
            <xs:annotation>
              <xs:documentation>Day this lesson is scheduled</xs:documentation>
            </xs:annotation>
            <xs:maxLength value="5" xmlns:xs="http://www.w3.org/2001/XMLSchema" />
          </xs:restriction>
        </xs:simpleType>
      </xs:element>
      <xs:element name="PeriodIndex" type="xs:integer">
        <xs:annotation>
          <xs:documentation>Index of period this lesson/meeting starts</xs:documentation>
        </xs:annotation>
      </xs:element>
      <xs:element name="Type">
        <xs:annotation>
          <xs:documentation>Lesson/meeting type The value here determines whether a TeachingGroupID or an NTCode is required</xs:documentation>
        </xs:annotation>
        <xs:simpleType>
          <xs:restriction base="xs:token">
            <xs:enumeration value="T">
              <xs:annotation>
                <xs:documentation>teaching</xs:documentation>
              </xs:annotation>
            </xs:enumeration>
            <xs:enumeration value="N">
              <xs:annotation>
                <xs:documentation>non-teaching</xs:documentation>
              </xs:annotation>
            </xs:enumeration>
          </xs:restriction>
        </xs:simpleType>
      </xs:element>
      <xs:element name="Length" minOccurs="0" nillable="true" type="xs:integer">
        <xs:annotation>
          <xs:documentation>Length of lesson in periods (1=single, 2=double, etc). Can omit if just a single.</xs:documentation>
        </xs:annotation>
      </xs:element>
      <xs:element name="TeachingGroupRefId" minOccurs="0" nillable="true" type="sif:IdRefType">
        <xs:annotation>
          <xs:documentation>The Teaching Group being taught (may not be one if Type != "T") (see TeachingGroup)</xs:documentation>
        </xs:annotation>
      </xs:element>
      <xs:element name="NTCodeRef" minOccurs="0" nillable="true" type="sif:IdRefType">
        <xs:annotation>
          <xs:documentation>If there is no TeachingGroupRefID (see NTCode)</xs:documentation>
        </xs:annotation>
      </xs:element>
      <xs:element name="TeacherList" minOccurs="0" nillable="true">
        <xs:complexType>
          <xs:sequence>
            <xs:element name="TTTeacherRefId" minOccurs="0" maxOccurs="unbounded" type="sif:IdRefType">
              <xs:annotation>
                <xs:documentation>The teacher(s) teaching / supervising this lesson (see TTTeacher)</xs:documentation>
              </xs:annotation>
            </xs:element>
          </xs:sequence>
        </xs:complexType>
      </xs:element>
      <xs:element name="TTRoomRefId" minOccurs="0" nillable="true" type="sif:IdRefType">
        <xs:annotation>
          <xs:documentation>The room (or location) where this lesson is taking place (see TTRoom)</xs:documentation>
        </xs:annotation>
      </xs:element>
      <xs:element name="SIF_Metadata" minOccurs="0" nillable="true" type="sif:SIF_MetadataType" />
      <xs:element name="SIF_ExtendedElements" minOccurs="0" nillable="true" type="sif:SIF_ExtendedElementsType">
        <xs:key name="SIF_ExtendedElementsKey38">
          <xs:selector xpath="./sif:SIF_ExtendedElement" />
          <xs:field xpath="@Name" />
        </xs:key>
      </xs:element>
    </xs:sequence>
    <xs:attribute name="RefId" use="required" type="sif:RefIdType" />
  </xs:complexType>

  <xs:element name="Lesson" type="sif:LessonType">
    <xs:key name="LessonKey1">
      <xs:selector xpath="." />
      <xs:field xpath="@RefId" />
    </xs:key>
  </xs:element>


  <!--LearnerEntitlement-->

  <xs:complexType name="LearnerEntitlementType">
    <xs:sequence>
      <xs:element name="LearnerPersonalRefId" type="sif:RefIdType">
        <xs:annotation>
          <xs:documentation>The ID (GUID) of the learner to whom this entitlement is linked.</xs:documentation>
        </xs:annotation>
      </xs:element>
      <xs:element name="SchoolInfoRefId" type="sif:RefIdType">
        <xs:annotation>
          <xs:documentation>The ID (GUID) of the school to which this entitlement applies.</xs:documentation>
        </xs:annotation>
      </xs:element>
      <xs:element name="EntitlementType" type="xs:normalizedString">
        <xs:annotation>
          <xs:documentation>The type of this Entitlement</xs:documentation>
        </xs:annotation>
      </xs:element>
      <xs:element name="EntitlementPeriodList" minOccurs="0" nillable="true">
        <xs:complexType>
          <xs:sequence>
            <xs:element name="EntitlementPeriod" maxOccurs="unbounded">
              <xs:complexType>
                <xs:sequence>
                  <xs:element name="StartDate" type="xs:date">
                    <xs:annotation>
                      <xs:documentation>Date Specific Entitlement starts</xs:documentation>
                    </xs:annotation>
                  </xs:element>
                  <xs:element name="EndDate" minOccurs="0" nillable="true" type="xs:date">
                    <xs:annotation>
                      <xs:documentation>Date Specific Entitlement Ends has to be on or after Start date</xs:documentation>
                    </xs:annotation>
                  </xs:element>
                  <xs:element name="Note" minOccurs="0" nillable="true" type="xs:normalizedString">
                    <xs:annotation>
                      <xs:documentation>A note relating to entitlement period</xs:documentation>
                    </xs:annotation>
                  </xs:element>
                  <xs:element name="Value" minOccurs="0" nillable="true" />
                </xs:sequence>
              </xs:complexType>
            </xs:element>
          </xs:sequence>
        </xs:complexType>
      </xs:element>
      <xs:element name="ProviderId" minOccurs="0" nillable="true">
        <xs:complexType>
          <xs:annotation>
            <xs:documentation>The LA or Provider identifier of awarding  organisation if relevant</xs:documentation>
          </xs:annotation>
          <xs:simpleContent>
            <xs:extension base="sif:IdRefType">
              <xs:attribute name="ProviderType" use="required" />
            </xs:extension>
          </xs:simpleContent>
        </xs:complexType>
      </xs:element>
      <xs:element name="SIF_Metadata" minOccurs="0" nillable="true" type="sif:SIF_MetadataType" />
      <xs:element name="SIF_ExtendedElements" minOccurs="0" nillable="true" type="sif:SIF_ExtendedElementsType">
        <xs:key name="SIF_ExtendedElementsKey39">
          <xs:selector xpath="./sif:SIF_ExtendedElement" />
          <xs:field xpath="@Name" />
        </xs:key>
      </xs:element>
    </xs:sequence>
    <xs:attribute name="RefId" use="required" type="sif:RefIdType">
      <xs:annotation>
        <xs:documentation>The ID (GUID) that uniquely identifies a particular entitlement.</xs:documentation>
      </xs:annotation>
    </xs:attribute>
  </xs:complexType>

  <xs:element name="LearnerEntitlement" type="sif:LearnerEntitlementType">
    <xs:key name="LearnerEntitlementKey1">
      <xs:selector xpath="." />
      <xs:field xpath="@RefId" />
    </xs:key>
  </xs:element>


  <!--PersonDietaryPreference-->

  <xs:complexType name="PersonDietaryPreferenceType">
    <xs:sequence>
      <xs:element name="PersonRefId" type="sif:IdRefType">
        <xs:annotation>
          <xs:documentation>The ID (GUID) of the person to whom the Dietary preference is linked.</xs:documentation>
        </xs:annotation>
      </xs:element>
      <xs:element name="WeeklyMealPatternList" minOccurs="0" nillable="true">
        <xs:complexType>
          <xs:sequence>
            <xs:element name="WeeklyMealPattern" maxOccurs="unbounded">
              <xs:complexType>
                <xs:sequence>
                  <xs:element name="StartDate" type="xs:date">
                    <xs:annotation>
                      <xs:documentation>Date Specific pattern starts</xs:documentation>
                    </xs:annotation>
                  </xs:element>
                  <xs:element name="EndDate" type="xs:date">
                    <xs:annotation>
                      <xs:documentation>Date Specific pattern Ends.</xs:documentation>
                    </xs:annotation>
                  </xs:element>
                  <xs:element name="Note" minOccurs="0" nillable="true" type="xs:normalizedString">
                    <xs:annotation>
                      <xs:documentation>A note relating to pattern</xs:documentation>
                    </xs:annotation>
                  </xs:element>
                  <xs:element name="Meals">
                    <xs:complexType>
                      <xs:sequence>
                        <xs:element name="Meal" maxOccurs="unbounded">
                          <xs:complexType>
                            <xs:sequence>
                              <xs:element name="Day">
                                <xs:annotation>
                                  <xs:documentation>The Day of week that Meal is required</xs:documentation>
                                </xs:annotation>
                                <xs:simpleType>
                                  <xs:restriction base="xs:token">
                                    <xs:enumeration value="Mon" />
                                    <xs:enumeration value="Tue" />
                                    <xs:enumeration value="Wed" />
                                    <xs:enumeration value="Thu" />
                                    <xs:enumeration value="Fri" />
                                    <xs:enumeration value="Sat" />
                                    <xs:enumeration value="Sun" />
                                    <xs:enumeration value="All" />
                                  </xs:restriction>
                                </xs:simpleType>
                              </xs:element>
                              <xs:element name="MealTime">
                                <xs:annotation>
                                  <xs:documentation>Which meal of the day is required</xs:documentation>
                                </xs:annotation>
                                <xs:simpleType>
                                  <xs:restriction base="xs:token">
                                    <xs:enumeration value="Breakfast" />
                                    <xs:enumeration value="Lunch" />
                                    <xs:enumeration value="Dinner" />
                                    <xs:enumeration value="Other" />
                                  </xs:restriction>
                                </xs:simpleType>
                              </xs:element>
                              <xs:element name="MealType">
                                <xs:annotation>
                                  <xs:documentation>What type of meal is required</xs:documentation>
                                </xs:annotation>
                                <xs:simpleType>
                                  <xs:restriction base="xs:token">
                                    <xs:enumeration value="Cooked" />
                                    <xs:enumeration value="Fixed" />
                                    <xs:enumeration value="Choice" />
                                    <xs:enumeration value="Cold" />
                                    <xs:enumeration value="Sandwich" />
                                  </xs:restriction>
                                </xs:simpleType>
                              </xs:element>
                            </xs:sequence>
                          </xs:complexType>
                        </xs:element>
                      </xs:sequence>
                    </xs:complexType>
                  </xs:element>
                </xs:sequence>
              </xs:complexType>
            </xs:element>
          </xs:sequence>
        </xs:complexType>
      </xs:element>
      <xs:element name="DietaryPreferenceList" minOccurs="0" nillable="true">
        <xs:complexType>
          <xs:sequence>
            <xs:element name="DietaryPreference" maxOccurs="unbounded">
              <xs:complexType>
                <xs:sequence>
                  <xs:element name="PreferenceType">
                    <xs:annotation>
                      <xs:documentation>The Type of preference</xs:documentation>
                    </xs:annotation>
                    <xs:simpleType>
                      <xs:restriction base="xs:token">
                        <xs:enumeration value="Medical" />
                        <xs:enumeration value="Allergy" />
                        <xs:enumeration value="Personal" />
                        <xs:enumeration value="Faith" />
                        <xs:enumeration value="Cultural" />
                      </xs:restriction>
                    </xs:simpleType>
                  </xs:element>
                  <xs:element name="MealComponent" type="xs:normalizedString">
                    <xs:annotation>
                      <xs:documentation>The component of meal</xs:documentation>
                    </xs:annotation>
                  </xs:element>
                  <xs:element name="Note" minOccurs="0" nillable="true" type="xs:normalizedString">
                    <xs:annotation>
                      <xs:documentation>A note relating to dietary preference</xs:documentation>
                    </xs:annotation>
                  </xs:element>
                  <xs:element name="MealEffect" minOccurs="0" nillable="true">
                    <xs:annotation>
                      <xs:documentation>Should the Meal component be Included or Excluded from the meal.  Default is Exclude</xs:documentation>
                    </xs:annotation>
                    <xs:simpleType>
                      <xs:restriction base="xs:token">
                        <xs:enumeration value="Include" />
                        <xs:enumeration value="Exclude" />
                      </xs:restriction>
                    </xs:simpleType>
                  </xs:element>
                </xs:sequence>
              </xs:complexType>
            </xs:element>
          </xs:sequence>
        </xs:complexType>
      </xs:element>
      <xs:element name="SIF_Metadata" minOccurs="0" nillable="true" type="sif:SIF_MetadataType" />
      <xs:element name="SIF_ExtendedElements" minOccurs="0" nillable="true" type="sif:SIF_ExtendedElementsType">
        <xs:key name="SIF_ExtendedElementsKey40">
          <xs:selector xpath="./sif:SIF_ExtendedElement" />
          <xs:field xpath="@Name" />
        </xs:key>
      </xs:element>
    </xs:sequence>
    <xs:attribute name="RefId" use="required" type="sif:RefIdType" />
  </xs:complexType>

  <xs:element name="PersonDietaryPreference" type="sif:PersonDietaryPreferenceType">
    <xs:key name="PersonDietaryPreferenceKey1">
      <xs:selector xpath="." />
      <xs:field xpath="@RefId" />
    </xs:key>
  </xs:element>


  <!--SchoolMealStatus-->

  <xs:complexType name="SchoolMealStatusType">
    <xs:annotation>
      <xs:documentation>Object to determine school days, non school days or any "special arrangement" days</xs:documentation>
    </xs:annotation>
    <xs:sequence>
      <xs:element name="SchoolInfoRefId" type="sif:IdRefType">
        <xs:annotation>
          <xs:documentation>The ID (GUID) of the school to which this MealStatus applies.</xs:documentation>
        </xs:annotation>
      </xs:element>
      <xs:element name="SchoolMealStatusDate" type="xs:date">
        <xs:annotation>
          <xs:documentation>The status of the school on a particular date; e.g., Status for staff; Y/N, Status for pupils Y/N</xs:documentation>
        </xs:annotation>
      </xs:element>
      <xs:element name="SchoolMealStatusDateSession">
        <xs:annotation>
          <xs:documentation>AM or PM</xs:documentation>
        </xs:annotation>
        <xs:simpleType>
          <xs:restriction base="xs:token">
            <xs:enumeration value="AM" />
            <xs:enumeration value="PM" />
          </xs:restriction>
        </xs:simpleType>
      </xs:element>
      <xs:element name="SchoolMealStatusTier" />
      <xs:element name="SIF_Metadata" minOccurs="0" nillable="true" type="sif:SIF_MetadataType" />
      <xs:element name="SIF_ExtendedElements" minOccurs="0" nillable="true" type="sif:SIF_ExtendedElementsType">
        <xs:key name="SIF_ExtendedElementsKey41">
          <xs:selector xpath="./sif:SIF_ExtendedElement" />
          <xs:field xpath="@Name" />
        </xs:key>
      </xs:element>
    </xs:sequence>
    <xs:attribute name="RefId" use="required" type="sif:RefIdType">
      <xs:annotation>
        <xs:documentation>The ID (GUID) that uniquely identifies a particular MealStatus reference</xs:documentation>
      </xs:annotation>
    </xs:attribute>
  </xs:complexType>

  <xs:element name="SchoolMealStatus" type="sif:SchoolMealStatusType">
    <xs:key name="SchoolMealStatusKey1">
      <xs:selector xpath="." />
      <xs:field xpath="@RefId" />
    </xs:key>
  </xs:element>


  <!--WorkforceAbsence-->

  <xs:complexType name="WorkforceAbsenceType">
    <xs:annotation>
      <xs:documentation>Details the absence of a Workforce person for a duration and reason.  If the reason is sickness then additional detail can be provided in line with typical HR requirements.  If the absence only relates to a specific assignment, e.g. an individual who is a kitchen assistant and midday supervisor takes the morning off only then this association can be made.</xs:documentation>
    </xs:annotation>
    <xs:sequence>
      <xs:element name="AbsenceStartDate" type="xs:date">
        <xs:annotation>
          <xs:documentation>Date this absence started.</xs:documentation>
        </xs:annotation>
      </xs:element>
      <xs:element name="AbsenceStartTime" minOccurs="0" nillable="true" type="xs:time">
        <xs:annotation>
          <xs:documentation>Time on AbsenceStartDate that this absence started, assumed midnight if not included.</xs:documentation>
        </xs:annotation>
      </xs:element>
      <xs:element name="AbsenceEndDate" minOccurs="0" nillable="true" type="xs:date">
        <xs:annotation>
          <xs:documentation>Date this absence ended, if omitted it is assumed that the absence is ongoing.</xs:documentation>
        </xs:annotation>
      </xs:element>
      <xs:element name="AbsenceEndTime" minOccurs="0" nillable="true" type="xs:time">
        <xs:annotation>
          <xs:documentation>Time on AbsenceEndDate that this absence ended, assumed midnight if not included.</xs:documentation>
        </xs:annotation>
      </xs:element>
      <xs:element name="AbsenceType" type="sif:UKAbsenceReasonType">
        <xs:annotation>
          <xs:documentation>Type of absence.</xs:documentation>
        </xs:annotation>
      </xs:element>
      <xs:element name="AbsenceIllness" minOccurs="0" nillable="true" type="sif:UKIllnessCategoryType">
        <xs:annotation>
          <xs:documentation>Specific illness if AbsenceType is Sickness.</xs:documentation>
        </xs:annotation>
      </xs:element>
      <xs:element name="WorkforceAssignmentRefId" minOccurs="0" nillable="true" type="sif:RefIdType">
        <xs:annotation>
          <xs:documentation>For use if this absence relates to a specific WorkforceAssignment.</xs:documentation>
        </xs:annotation>
      </xs:element>
      <xs:element name="SIF_Metadata" minOccurs="0" nillable="true" type="sif:SIF_MetadataType" />
      <xs:element name="SIF_ExtendedElements" minOccurs="0" nillable="true" type="sif:SIF_ExtendedElementsType">
        <xs:key name="SIF_ExtendedElementsKey42">
          <xs:selector xpath="./sif:SIF_ExtendedElement" />
          <xs:field xpath="@Name" />
        </xs:key>
      </xs:element>
    </xs:sequence>
    <xs:attribute name="RefId" use="required" type="sif:RefIdType">
      <xs:annotation>
        <xs:documentation>The ID (GUID) of the WorkforceAbsence object.</xs:documentation>
      </xs:annotation>
    </xs:attribute>
    <xs:attribute name="WorkforcePersonalRefId" use="required" type="sif:RefIdType">
      <xs:annotation>
        <xs:documentation>RefId of WorkforcePersonal object this applies to.</xs:documentation>
      </xs:annotation>
    </xs:attribute>
  </xs:complexType>

  <xs:element name="WorkforceAbsence" type="sif:WorkforceAbsenceType">
    <xs:key name="WorkforceAbsenceKey1">
      <xs:selector xpath="." />
      <xs:field xpath="@RefId" />
    </xs:key>
  </xs:element>


  <!--WorkforceContract-->

  <xs:complexType name="WorkforceContractType">
    <xs:annotation>
      <xs:documentation> Extends the details specified in a WorkforceAssignment to include details of contracts governing WorkforceAssignments.  This is a stub only at the moment and may be expanded in the future to contain additional contract details such as renumeration.  Based around the US SIF 2.4 EmployeeContract object.</xs:documentation>
    </xs:annotation>
    <xs:sequence>
      <xs:element name="ContractStartDate" type="xs:date">
        <xs:annotation>
          <xs:documentation>Date this contract becomes effective.</xs:documentation>
        </xs:annotation>
      </xs:element>
      <xs:element name="ContractEndDate" minOccurs="0" nillable="true" type="xs:date">
        <xs:annotation>
          <xs:documentation>Date this contract ceases effect.</xs:documentation>
        </xs:annotation>
      </xs:element>
      <xs:element name="ContractAssignmentCode" type="xs:string">
        <xs:annotation>
          <xs:documentation>Reference identifying this contract and assignment.</xs:documentation>
        </xs:annotation>
      </xs:element>
      <xs:element name="ContractHoursPerWeek" minOccurs="0" nillable="true">
        <xs:simpleType>
          <xs:restriction base="xs:decimal">
            <xs:annotation>
              <xs:documentation>Employed hours per week on this contract.</xs:documentation>
            </xs:annotation>
            <xs:minInclusive value="0" xmlns:xs="http://www.w3.org/2001/XMLSchema" />
            <xs:maxInclusive value="168" xmlns:xs="http://www.w3.org/2001/XMLSchema" />
            <xs:fractionDigits value="2" xmlns:xs="http://www.w3.org/2001/XMLSchema" />
          </xs:restriction>
        </xs:simpleType>
      </xs:element>
      <xs:element name="ContractWeeksPerYear" minOccurs="0" nillable="true">
        <xs:simpleType>
          <xs:restriction base="xs:decimal">
            <xs:annotation>
              <xs:documentation>Employed weeks per year on this contract.</xs:documentation>
            </xs:annotation>
            <xs:minInclusive value="0" xmlns:xs="http://www.w3.org/2001/XMLSchema" />
            <xs:maxInclusive value="52.2857" xmlns:xs="http://www.w3.org/2001/XMLSchema" />
            <xs:fractionDigits value="4" xmlns:xs="http://www.w3.org/2001/XMLSchema" />
          </xs:restriction>
        </xs:simpleType>
      </xs:element>
      <xs:element name="ContractFTE" minOccurs="0" nillable="true">
        <xs:simpleType>
          <xs:restriction base="xs:decimal">
            <xs:annotation>
              <xs:documentation>Full-time job equivalent ratio for this assignment. (Format is x.xx; an employee who is full-time and who spends 50% of their time on this assignment would be represented as 0.50).</xs:documentation>
            </xs:annotation>
            <xs:minInclusive value="0" xmlns:xs="http://www.w3.org/2001/XMLSchema" />
            <xs:maxInclusive value="1" xmlns:xs="http://www.w3.org/2001/XMLSchema" />
            <xs:fractionDigits value="2" xmlns:xs="http://www.w3.org/2001/XMLSchema" />
          </xs:restriction>
        </xs:simpleType>
      </xs:element>
      <xs:element name="SIF_Metadata" minOccurs="0" nillable="true" type="sif:SIF_MetadataType" />
      <xs:element name="SIF_ExtendedElements" minOccurs=
