<!--
		SIF Infrastructure Implementation Specification 2.5 (May 4, 2011) Infrastructure Version: 2.5-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_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>


  <!--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/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.5.
            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: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 ref="sif:SIF_AgentACL" />
            <xs:element ref="sif:SIF_ZoneStatus" />
          </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:ObjectNameType">
            <xs:annotation>
              <xs:documentation>The name of the SIF 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:ObjectType">
          <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.
            
              While envisioned as the primary mechanism for SIF-based ReportManifests,
            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="xs:token">
        <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:ObjectNameType">
                      <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:ObjectNameType">
                                  <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:ObjectNameType">
                                  <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:ObjectNameType">
            <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:ObjectNameType">
                                        <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:ObjectNameType">
                      <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:ObjectNameType">
                      <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:sequence>
                  <xs:any processContents="lax" minOccurs="0" maxOccurs="unbounded" namespace="##any" xmlns:xs="http://www.w3.org/2001/XMLSchema" />
                </xs:sequence>
                <xs:attribute name="ObjectName" use="required" type="sif:ObjectNameType">
                  <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: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:ObjectNameType">
            <xs:annotation>
              <xs:documentation>The name of the SIF 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: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_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: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_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: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_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: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_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: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_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: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_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: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" 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="sif:ServiceNameType">
                  <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="sif:ServiceNameType">
                  <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="sif:ServiceNameType">
                  <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="sif:ServiceNameType">
                  <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:ObjectType">
          <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:ObjectNameType">
            <xs:annotation>
              <xs:documentation>
            The 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:element ref="sif:SIF_CancelServiceInputs" />
          </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:ObjectNameType">
            <xs:annotation>
              <xs:documentation>The 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:ObjectNameType">
            <xs:annotation>
              <xs:documentation>The name of the SIF 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="sif:ServiceNameType">
        <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="sif:ServiceNameType">
        <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 send an error back to the requester that the SIF_MaxBufferSize isn't supported. 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:choice>
        <xs:element ref="sif:SIF_Error" />
        <xs:element name="SIF_Body">
          <xs:complexType xmlns:xs="http://www.w3.org/2001/XMLSchema">
            <xs:sequence>
              <xs:any processContents="lax" />
            </xs:sequence>
          </xs:complexType>
        </xs:element>
      </xs:choice>
    </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:positiveInteger">
        <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:choice>
        <xs:element ref="sif:SIF_Error" />
        <xs:element name="SIF_Body">
          <xs:complexType xmlns:xs="http://www.w3.org/2001/XMLSchema">
            <xs:sequence>
              <xs:any processContents="lax" />
            </xs:sequence>
          </xs:complexType>
        </xs:element>
      </xs:choice>
    </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="sif:ServiceNameType">
        <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" />
      <xs:element name="SIF_ServiceMsgId" type="sif:GUIDType">
        <xs:annotation>
          <xs:documentation>A GUID 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:positiveInteger">
        <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:choice>
        <xs:element ref="sif:SIF_Error" />
        <xs:element name="SIF_Body">
          <xs:complexType xmlns:xs="http://www.w3.org/2001/XMLSchema">
            <xs:sequence>
              <xs:any processContents="lax" />
            </xs:sequence>
          </xs:complexType>
        </xs:element>
      </xs:choice>
    </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" minOccurs="0">
        <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: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" minOccurs="0">
        <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: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" minOccurs="0">
        <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: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" minOccurs="0">
        <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: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" minOccurs="0">
        <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: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" minOccurs="0">
        <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: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" minOccurs="0">
        <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: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" 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" minOccurs="0" 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" 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" minOccurs="0" 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_Metadata" minOccurs="0">
        <xs:complexType xmlns:xs="http://www.w3.org/2001/XMLSchema">
          <xs:sequence>
            <xs:any minOccurs="0" maxOccurs="unbounded" />
          </xs:sequence>
        </xs:complexType>
      </xs:element>
      <xs:element ref="sif:SIF_ExtendedElements" minOccurs="0" />
    </xs:sequence>
  </xs:complexType>

  <xs:element name="SIF_AgentACL" type="sif:SIF_AgentACLType" />


  <!--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" minOccurs="0">
        <xs:complexType>
          <xs:sequence>
            <xs:element ref="sif:SIF_Header" minOccurs="0" />
          </xs:sequence>
        </xs:complexType>
      </xs:element>
      <xs:element name="SIF_OriginalHeader" minOccurs="0">
        <xs:complexType>
          <xs:sequence>
            <xs:element ref="sif:SIF_Header" minOccurs="0" />
          </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" minOccurs="0">
        <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" minOccurs="0" 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="xs:NCName" />
              </xs:complexType>
            </xs:element>
          </xs:sequence>
        </xs:complexType>
      </xs:element>
      <xs:element name="SIF_Metadata" minOccurs="0">
        <xs:complexType xmlns:xs="http://www.w3.org/2001/XMLSchema">
          <xs:sequence>
            <xs:any minOccurs="0" maxOccurs="unbounded" />
          </xs:sequence>
        </xs:complexType>
      </xs:element>
      <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_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" minOccurs="0" 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" minOccurs="0" 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" minOccurs="0" 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" minOccurs="0" 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" minOccurs="0" maxOccurs="unbounded">
              <xs:complexType>
                <xs:sequence>
                  <xs:element name="SIF_ObjectList" minOccurs="0">
                    <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:element ref="sif:SIF_Contexts" minOccurs="0" />
                            </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" minOccurs="0" maxOccurs="unbounded">
              <xs:complexType>
                <xs:sequence>
                  <xs:element name="SIF_ObjectList" minOccurs="0">
                    <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: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" minOccurs="0" maxOccurs="unbounded">
              <xs:complexType>
                <xs:sequence>
                  <xs:element name="SIF_ObjectList" minOccurs="0">
                    <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: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" minOccurs="0" maxOccurs="unbounded">
              <xs:complexType>
                <xs:sequence>
                  <xs:element name="SIF_ObjectList" minOccurs="0">
                    <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: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" minOccurs="0" maxOccurs="unbounded">
              <xs:complexType>
                <xs:sequence>
                  <xs:element name="SIF_ObjectList" minOccurs="0">
                    <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: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" minOccurs="0" maxOccurs="unbounded">
              <xs:complexType>
                <xs:sequence>
                  <xs:element name="SIF_ObjectList" minOccurs="0">
                    <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:element ref="sif:SIF_Contexts" minOccurs="0" />
                            </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" minOccurs="0" maxOccurs="unbounded">
              <xs:complexType>
                <xs:sequence>
                  <xs:element name="SIF_ObjectList" minOccurs="0">
                    <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:element ref="sif:SIF_Contexts" minOccurs="0" />
                            </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" minOccurs="0" maxOccurs="unbounded">
              <xs:complexType>
                <xs:sequence>
                  <xs:element name="SIF_Name" minOccurs="0" 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" minOccurs="0">
                          <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" minOccurs="0">
                          <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" minOccurs="0">
                          <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" minOccurs="0">
                    <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" minOccurs="0">
                    <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" minOccurs="0">
                    <xs:complexType>
                      <xs:sequence>
                        <xs:element name="SIF_Version" minOccurs="0" 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" minOccurs="0" 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" minOccurs="0">
                    <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" minOccurs="0" 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" minOccurs="0">
        <xs:complexType>
          <xs:sequence>
            <xs:element ref="sif:SIF_Protocol" minOccurs="0" maxOccurs="unbounded" />
          </xs:sequence>
        </xs:complexType>
      </xs:element>
      <xs:element name="SIF_SupportedVersions" minOccurs="0">
        <xs:complexType>
          <xs:sequence>
            <xs:element name="SIF_Version" minOccurs="0" 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" minOccurs="0" />
      <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" 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: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" 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: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">
        <xs:complexType>
          <xs:sequence>
            <xs:element name="SIF_ServiceRequester" minOccurs="0" maxOccurs="unbounded">
              <xs:complexType>
                <xs:sequence>
                  <xs:element name="SIF_ServiceList" minOccurs="0">
                    <xs:complexType>
                      <xs:sequence>
                        <xs:element name="SIF_Service" minOccurs="0" maxOccurs="unbounded">
                          <xs:complexType>
                            <xs:sequence>
                              <xs:element name="SIF_Operations" minOccurs="0">
                                <xs:complexType>
                                  <xs:sequence>
                                    <xs:element name="SIF_Operation" minOccurs="0" 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" minOccurs="0">
                    <xs:complexType>
                      <xs:sequence>
                        <xs:element name="SIF_Service" minOccurs="0" maxOccurs="unbounded">
                          <xs:complexType>
                            <xs:sequence>
                              <xs:element name="SIF_Operations" minOccurs="0">
                                <xs:complexType>
                                  <xs:sequence>
                                    <xs:element name="SIF_Operation" minOccurs="0" 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 name="SIF_Metadata" minOccurs="0">
        <xs:complexType xmlns:xs="http://www.w3.org/2001/XMLSchema">
          <xs:sequence>
            <xs:any minOccurs="0" maxOccurs="unbounded" />
          </xs:sequence>
        </xs:complexType>
      </xs:element>
      <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:unique name="SIF_ZoneStatusKey1">
      <xs:selector xpath="." />
      <xs:field xpath="@ZoneId" />
    </xs:unique>
  </xs:element>


  <!--Data Model Common Elements-->

  <xs:simpleType name="InfrastructureStatusCodeType">
    <xs:restriction base="xs:token">
      <xs:enumeration value="0" />
      <xs:enumeration value="1" />
      <xs:enumeration value="2" />
      <xs:enumeration value="3" />
      <xs:enumeration value="7" />
      <xs:enumeration value="8" />
      <xs:enumeration value="9" />
    </xs:restriction>
  </xs:simpleType>
  <xs:simpleType name="InfrastructureErrorCategoryType">
    <xs:restriction base="xs:token">
      <xs:enumeration value="0">
        <xs:annotation>
          <xs:documentation>Unknown (This should NEVER be used if possible)</xs:documentation>
        </xs:annotation>
      </xs:enumeration>
      <xs:enumeration value="1">
        <xs:annotation>
          <xs:documentation>XML Validation</xs:documentation>
        </xs:annotation>
      </xs:enumeration>
      <xs:enumeration value="2">
        <xs:annotation>
          <xs:documentation>Encryption</xs:documentation>
        </xs:annotation>
      </xs:enumeration>
      <xs:enumeration value="3">
        <xs:annotation>
          <xs:documentation>Authentication</xs:documentation>
        </xs:annotation>
      </xs:enumeration>
      <xs:enumeration value="4">
        <xs:annotation>
          <xs:documentation>Access and Permissions</xs:documentation>
        </xs:annotation>
      </xs:enumeration>
      <xs:enumeration value="5">
        <xs:annotation>
          <xs:documentation>Registration</xs:documentation>
        </xs:annotation>
      </xs:enumeration>
      <xs:enumeration value="6">
        <xs:annotation>
          <xs:documentation>Provision</xs:documentation>
        </xs:annotation>
      </xs:enumeration>
      <xs:enumeration value="7">
        <xs:annotation>
          <xs:documentation>Subscription</xs:documentation>
        </xs:annotation>
      </xs:enumeration>
      <xs:enumeration value="8">
        <xs:annotation>
          <xs:documentation>Request and Response</xs:documentation>
        </xs:annotation>
      </xs:enumeration>
      <xs:enumeration value="9">
        <xs:annotation>
          <xs:documentation>Event Reporting and Processing</xs:documentation>
        </xs:annotation>
      </xs:enumeration>
      <xs:enumeration value="10">
        <xs:annotation>
          <xs:documentation>Transport</xs:documentation>
        </xs:annotation>
      </xs:enumeration>
      <xs:enumeration value="11">
        <xs:annotation>
          <xs:documentation>System (OS, Database, Vendor localized, etc.)</xs:documentation>
        </xs:annotation>
      </xs:enumeration>
      <xs:enumeration value="12">
        <xs:annotation>
          <xs:documentation>Generic Message Handling</xs:documentation>
        </xs:annotation>
      </xs:enumeration>
      <xs:enumeration value="13">
        <xs:annotation>
          <xs:documentation>SMB Handling</xs:documentation>
        </xs:annotation>
      </xs:enumeration>
      <xs:enumeration value="14">
        <xs:annotation>
          <xs:documentation>SIF Zone Service</xs:documentation>
        </xs:annotation>
      </xs:enumeration>
    </xs:restriction>
  </xs:simpleType>
  <xs:simpleType name="InfrastructureXMLValidationErrorType">
    <xs:restriction base="xs:token">
      <xs:enumeration value="1">
        <xs:annotation>
          <xs:documentation>Generic error</xs:documentation>
        </xs:annotation>
      </xs:enumeration>
      <xs:enumeration value="2">
        <xs:annotation>
          <xs:documentation>Message is not well-formed</xs:documentation>
        </xs:annotation>
      </xs:enumeration>
      <xs:enumeration value="3">
        <xs:annotation>
          <xs:documentation>Generic validation error</xs:documentation>
        </xs:annotation>
      </xs:enumeration>
      <xs:enumeration value="4">
        <xs:annotation>
          <xs:documentation>Invalid value for element/attribute</xs:documentation>
        </xs:annotation>
      </xs:enumeration>
      <xs:enumeration value="6">
        <xs:annotation>
          <xs:documentation>Missing mandatory element/attribute</xs:documentation>
        </xs:annotation>
      </xs:enumeration>
    </xs:restriction>
  </xs:simpleType>
  <xs:simpleType name="InfrastructureEncryptionErrorType">
    <xs:restriction base="xs:token">
      <xs:enumeration value="1">
        <xs:annotation>
          <xs:documentation>Generic error</xs:documentation>
        </xs:annotation>
      </xs:enumeration>
    </xs:restriction>
  </xs:simpleType>
  <xs:simpleType name="InfrastructureAuthenticationErrorType">
    <xs:restriction base="xs:token">
      <xs:enumeration value="1">
        <xs:annotation>
          <xs:documentation>Generic error</xs:documentation>
        </xs:annotation>
      </xs:enumeration>
      <xs:enumeration value="2">
        <xs:annotation>
          <xs:documentation>Generic authentication error (with signature)</xs:documentation>
        </xs:annotation>
      </xs:enumeration>
      <xs:enumeration value="3">
        <xs:annotation>
          <xs:documentation>Missing sender's certificate</xs:documentation>
        </xs:annotation>
      </xs:enumeration>
      <xs:enumeration value="4">
        <xs:annotation>
          <xs:documentation>Invalid certificate</xs:documentation>
        </xs:annotation>
      </xs:enumeration>
      <xs:enumeration value="5">
        <xs:annotation>
          <xs:documentation>Sender's certificate is not trusted</xs:documentation>
        </xs:annotation>
      </xs:enumeration>
      <xs:enumeration value="6">
        <xs:annotation>
          <xs:documentation>Expired certificate</xs:documentation>
        </xs:annotation>
      </xs:enumeration>
      <xs:enumeration value="7">
        <xs:annotation>
          <xs:documentation>Invalid signature</xs:documentation>
        </xs:annotation>
      </xs:enumeration>
      <xs:enumeration value="8">
        <xs:annotation>
          <xs:documentation>Invalid encryption algorithm (only accepts MD4)</xs:documentation>
        </xs:annotation>
      </xs:enumeration>
      <xs:enumeration value="9">
        <xs:annotation>
          <xs:documentation>Missing public key of the receiver (when decrypting message)</xs:documentation>
        </xs:annotation>
      </xs:enumeration>
      <xs:enumeration value="10">
        <xs:annotation>
          <xs:documentation>Missing receiver's private key (when decrypting message)</xs:documentation>
        </xs:annotation>
      </xs:enumeration>
    </xs:restriction>
  </xs:simpleType>
  <xs:simpleType name="InfrastructureAccessAndPermissionErrorType">
    <xs:restriction base="xs:token">
      <xs:enumeration value="1">
        <xs:annotation>
          <xs:documentation>Generic error</xs:documentation>
        </xs:annotation>
      </xs:enumeration>
      <xs:enumeration value="2">
        <xs:annotation>
          <xs:documentation>No permission to register</xs:documentation>
        </xs:annotation>
      </xs:enumeration>
      <xs:enumeration value="3">
        <xs:annotation>
          <xs:documentation>No permission to provide this object</xs:documentation>
        </xs:annotation>
      </xs:enumeration>
      <xs:enumeration value="4">
        <xs:annotation>
          <xs:documentation>No permission to subscribe to this SIF_Event</xs:documentation>
        </xs:annotation>
      </xs:enumeration>
      <xs:enumeration value="5">
        <xs:annotation>
          <xs:documentation>No permission to request this object</xs:documentation>
        </xs:annotation>
      </xs:enumeration>
      <xs:enumeration value="6">
        <xs:annotation>
          <xs:documentation>No permission to respond to this object request</xs:documentation>
        </xs:annotation>
      </xs:enumeration>
      <xs:enumeration value="7">
        <xs:annotation>
          <xs:documentation>No permission to publish SIF_Event</xs:documentation>
        </xs:annotation>
      </xs:enumeration>
      <xs:enumeration value="8">
        <xs:annotation>
          <xs:documentation>No permission to administer policies</xs:documentation>
        </xs:annotation>
      </xs:enumeration>
      <xs:enumeration value="9">
        <xs:annotation>
          <xs:documentation>SIF_SourceId is not registered</xs:documentation>
        </xs:annotation>
      </xs:enumeration>
      <xs:enumeration value="10">
        <xs:annotation>
          <xs:documentation>No permission to publish SIF_Event Add</xs:documentation>
        </xs:annotation>
      </xs:enumeration>
      <xs:enumeration value="11">
        <xs:annotation>
          <xs:documentation>No permission to publish SIF_Event Change</xs:documentation>
        </xs:annotation>
      </xs:enumeration>
      <xs:enumeration value="12">
        <xs:annotation>
          <xs:documentation>No permission to publish SIF_Event Delete</xs:documentation>
        </xs:annotation>
      </xs:enumeration>
      <xs:enumeration value="13">
        <xs:annotation>
          <xs:documentation>No permission to publish indicated SIF_Notification</xs:documentation>
        </xs:annotation>
      </xs:enumeration>
      <xs:enumeration value="14">
        <xs:annotation>
          <xs:documentation>No permission to invoke SIF_ServiceInput to this Service</xs:documentation>
        </xs:annotation>
      </xs:enumeration>
      <xs:enumeration value="15">
        <xs:annotation>
          <xs:documentation>No permission to provide this Service</xs:documentation>
        </xs:annotation>
      </xs:enumeration>
    </xs:restriction>
  </xs:simpleType>
  <xs:simpleType name="InfrastructureRegistrationErrorType">
    <xs:restriction base="xs:token">
      <xs:enumeration value="1">
        <xs:annotation>
          <xs:documentation>Generic error</xs:documentation>
        </xs:annotation>
      </xs:enumeration>
      <xs:enumeration value="2">
        <xs:annotation>
          <xs:documentation>The SIF_SourceId is invalid</xs:documentation>
        </xs:annotation>
      </xs:enumeration>
      <xs:enumeration value="3">
        <xs:annotation>
          <xs:documentation>Requested transport protocol is unsupported</xs:documentation>
        </xs:annotation>
      </xs:enumeration>
      <xs:enumeration value="4">
        <xs:annotation>
          <xs:documentation>Requested SIF_Version(s) not supported.</xs:documentation>
        </xs:annotation>
      </xs:enumeration>
      <xs:enumeration value="6">
        <xs:annotation>
          <xs:documentation>Requested SIF_MaxBufferSize is too small</xs:documentation>
        </xs:annotation>
      </xs:enumeration>
      <xs:enumeration value="7">
        <xs:annotation>
          <xs:documentation>ZIS requires a secure transport</xs:documentation>
        </xs:annotation>
      </xs:enumeration>
      <xs:enumeration value="9">
        <xs:annotation>
          <xs:documentation>Agent is registered for push mode (returned when a push-mode agent sends a SIF_GetMessage).</xs:documentation>
        </xs:annotation>
      </xs:enumeration>
      <xs:enumeration value="10">
        <xs:annotation>
          <xs:documentation>ZIS does not support the requested Accept-Encoding value.</xs:documentation>
        </xs:annotation>
      </xs:enumeration>
    </xs:restriction>
  </xs:simpleType>
  <xs:simpleType name="InfrastructureProvisionErrorType">
    <xs:restriction base="xs:token">
      <xs:enumeration value="1">
        <xs:annotation>
          <xs:documentation>Generic error</xs:documentation>
        </xs:annotation>
      </xs:enumeration>
      <xs:enumeration value="3">
        <xs:annotation>
          <xs:documentation>Invalid object</xs:documentation>
        </xs:annotation>
      </xs:enumeration>
      <xs:enumeration value="4">
        <xs:annotation>
          <xs:documentation>Object already has a provider (SIF_Provide message)</xs:documentation>
        </xs:annotation>
      </xs:enumeration>
    </xs:restriction>
  </xs:simpleType>
  <xs:simpleType name="InfrastructureSubscriptionErrorType">
    <xs:restriction base="xs:token">
      <xs:enumeration value="1">
        <xs:annotation>
          <xs:documentation>Generic error</xs:documentation>
        </xs:annotation>
      </xs:enumeration>
      <xs:enumeration value="3">
        <xs:annotation>
          <xs:documentation>Invalid object</xs:documentation>
        </xs:annotation>
      </xs:enumeration>
    </xs:restriction>
  </xs:simpleType>
  <xs:simpleType name="InfrastructureRequestAndResponseErrorType">
    <xs:restriction base="xs:token">
      <xs:enumeration value="1">
        <xs:annotation>
          <xs:documentation>Generic error</xs:documentation>
        </xs:annotation>
      </xs:enumeration>
      <xs:enumeration value="3">
        <xs:annotation>
          <xs:documentation>Invalid object</xs:documentation>
        </xs:annotation>
      </xs:enumeration>
      <xs:enumeration value="4">
        <xs:annotation>
          <xs:documentation>No provider</xs:documentation>
        </xs:annotation>
      </xs:enumeration>
      <xs:enumeration value="7">
        <xs:annotation>
          <xs:documentation>Responder does not support requested SIF_Version</xs:documentation>
        </xs:annotation>
      </xs:enumeration>
      <xs:enumeration value="8">
        <xs:annotation>
          <xs:documentation>Responder does not support requested SIF_MaxBufferSize</xs:documentation>
        </xs:annotation>
      </xs:enumeration>
      <xs:enumeration value="9">
        <xs:annotation>
          <xs:documentation>Unsupported query in request</xs:documentation>
        </xs:annotation>
      </xs:enumeration>
      <xs:enumeration value="10">
        <xs:annotation>
          <xs:documentation>Invalid SIF_RequestMsgId specified in SIF_Response</xs:documentation>
        </xs:annotation>
      </xs:enumeration>
      <xs:enumeration value="11">
        <xs:annotation>
          <xs:documentation>SIF_Response is larger than requested SIF_MaxBufferSize</xs:documentation>
        </xs:annotation>
      </xs:enumeration>
      <xs:enumeration value="12">
        <xs:annotation>
          <xs:documentation>SIF_PacketNumber is invalid in SIF_Response</xs:documentation>
        </xs:annotation>
      </xs:enumeration>
      <xs:enumeration value="13">
        <xs:annotation>
          <xs:documentation>SIF_Response does not match any SIF_Version from SIF_Request</xs:documentation>
        </xs:annotation>
      </xs:enumeration>
      <xs:enumeration value="14">
        <xs:annotation>
          <xs:documentation>SIF_DestinationId does not match SIF_SourceId from SIF_Request</xs:documentation>
        </xs:annotation>
      </xs:enumeration>
      <xs:enumeration value="15">
        <xs:annotation>
          <xs:documentation>No support for SIF_ExtendedQuery</xs:documentation>
        </xs:annotation>
      </xs:enumeration>
      <xs:enumeration value="16">
        <xs:annotation>
          <xs:documentation>SIF_RequestMsgId deleted from cache due to timeout</xs:documentation>
        </xs:annotation>
      </xs:enumeration>
      <xs:enumeration value="17">
        <xs:annotation>
          <xs:documentation>SIF_RequestMsgId deleted from cache by administrator</xs:documentation>
        </xs:annotation>
      </xs:enumeration>
      <xs:enumeration value="18">
        <xs:annotation>
          <xs:documentation>SIF_Request cancelled by requesting agent</xs:documentation>
        </xs:annotation>
      </xs:enumeration>
      <xs:enumeration value="19">
        <xs:annotation>
          <xs:documentation>SIF_Request cancelled due to a SIF XML filter rule</xs:documentation>
        </xs:annotation>
      </xs:enumeration>
    </xs:restriction>
  </xs:simpleType>
  <xs:simpleType name="InfrastructureEventReportingAndProcessingErrorType">
    <xs:restriction base="xs:token">
      <xs:enumeration value="1">
        <xs:annotation>
          <xs:documentation>Generic error</xs:documentation>
        </xs:annotation>
      </xs:enumeration>
      <xs:enumeration value="3">
        <xs:annotation>
          <xs:documentation>Invalid event</xs:documentation>
        </xs:annotation>
      </xs:enumeration>
    </xs:restriction>
  </xs:simpleType>
  <xs:simpleType name="InfrastructureTransportErrorType">
    <xs:restriction base="xs:token">
      <xs:enumeration value="1">
        <xs:annotation>
          <xs:documentation>Generic error</xs:documentation>
        </xs:annotation>
      </xs:enumeration>
      <xs:enumeration value="2">
        <xs:annotation>
          <xs:documentation>Requested protocol is not supported</xs:documentation>
        </xs:annotation>
      </xs:enumeration>
      <xs:enumeration value="3">
        <xs:annotation>
          <xs:documentation>Secure channel requested and no secure path exists</xs:documentation>
        </xs:annotation>
      </xs:enumeration>
      <xs:enumeration value="4">
        <xs:annotation>
          <xs:documentation>Unable to establish connection</xs:documentation>
        </xs:annotation>
      </xs:enumeration>
    </xs:restriction>
  </xs:simpleType>
  <xs:simpleType name="InfrastructureSystemErrorType">
    <xs:restriction base="xs:token">
      <xs:enumeration value="1">
        <xs:annotation>
          <xs:documentation>Generic error</xs:documentation>
        </xs:annotation>
      </xs:enumeration>
    </xs:restriction>
  </xs:simpleType>
  <xs:simpleType name="InfrastructureGenericMessageHandlingErrorType">
    <xs:restriction base="xs:token">
      <xs:enumeration value="1">
        <xs:annotation>
          <xs:documentation>Generic error</xs:documentation>
        </xs:annotation>
      </xs:enumeration>
      <xs:enumeration value="2">
        <xs:annotation>
          <xs:documentation>Message not supported</xs:documentation>
        </xs:annotation>
      </xs:enumeration>
      <xs:enumeration value="3">
        <xs:annotation>
          <xs:documentation>Version not supported</xs:documentation>
        </xs:annotation>
      </xs:enumeration>
      <xs:enumeration value="4">
        <xs:annotation>
          <xs:documentation>Context not supported</xs:documentation>
        </xs:annotation>
      </xs:enumeration>
      <xs:enumeration value="5">
        <xs:annotation>
          <xs:documentation>Protocol error</xs:documentation>
        </xs:annotation>
      </xs:enumeration>
      <xs:enumeration value="6">
        <xs:annotation>
          <xs:documentation>No such message (as identified by SIF_OriginalMsgId)</xs:documentation>
        </xs:annotation>
      </xs:enumeration>
      <xs:enumeration value="7">
        <xs:annotation>
          <xs:documentation>Multiple contexts not supported</xs:documentation>
        </xs:annotation>
      </xs:enumeration>
    </xs:restriction>
  </xs:simpleType>
  <xs:simpleType name="InfrastructureSMBErrorType">
    <xs:restriction base="xs:token">
      <xs:enumeration value="1">
        <xs:annotation>
          <xs:documentation>Generic error</xs:documentation>
        </xs:annotation>
      </xs:enumeration>
      <xs:enumeration value="2">
        <xs:annotation>
          <xs:documentation>SMB can only be invoked during a SIF_Event acknowledgement</xs:documentation>
        </xs:annotation>
      </xs:enumeration>
      <xs:enumeration value="3">
        <xs:annotation>
          <xs:documentation>Final SIF_Ack expected from Push-Mode Agent</xs:documentation>
        </xs:annotation>
      </xs:enumeration>
      <xs:enumeration value="4">
        <xs:annotation>
          <xs:documentation>Incorrect SIF_MsgId in final SIF_Ack</xs:documentation>
        </xs:annotation>
      </xs:enumeration>
    </xs:restriction>
  </xs:simpleType>
  <xs:simpleType name="InfrastructureSIFZoneServiceErrorType">
    <xs:restriction base="xs:token">
      <xs:enumeration value="1">
        <xs:annotation>
          <xs:documentation>Generic error</xs:documentation>
        </xs:annotation>
      </xs:enumeration>
      <xs:enumeration value="2">
        <xs:annotation>
          <xs:documentation>Invalid service</xs:documentation>
        </xs:annotation>
      </xs:enumeration>
      <xs:enumeration value="3">
        <xs:annotation>
          <xs:documentation>No provider for service</xs:documentation>
        </xs:annotation>
      </xs:enumeration>
      <xs:enumeration value="4">
        <xs:annotation>
          <xs:documentation>Responder does not support requested SIF_Version</xs:documentation>
        </xs:annotation>
      </xs:enumeration>
      <xs:enumeration value="5">
        <xs:annotation>
          <xs:documentation>Responder does not support requested SIF_MaxBufferSize</xs:documentation>
        </xs:annotation>
      </xs:enumeration>
      <xs:enumeration value="6">
        <xs:annotation>
          <xs:documentation>Operation not supported</xs:documentation>
        </xs:annotation>
      </xs:enumeration>
      <xs:enumeration value="7">
        <xs:annotation>
          <xs:documentation>Argument not valid</xs:documentation>
        </xs:annotation>
      </xs:enumeration>
      <xs:enumeration value="8">
        <xs:annotation>
          <xs:documentation>Invalid SIF_ServiceMsgId specified in SIF_ServiceOutput</xs:documentation>
        </xs:annotation>
      </xs:enumeration>
      <xs:enumeration value="9">
        <xs:annotation>
          <xs:documentation>SIF_ServiceOutput is larger than requested SIF_MaxBufferSize</xs:documentation>
        </xs:annotation>
      </xs:enumeration>
      <xs:enumeration value="10">
        <xs:annotation>
          <xs:documentation>SIF_PacketNumber is invalid</xs:documentation>
        </xs:annotation>
      </xs:enumeration>
      <xs:enumeration value="11">
        <xs:annotation>
          <xs:documentation>SIF_ServiceOutput does not match any SIF_Version from SIF_ServiceInput</xs:documentation>
        </xs:annotation>
      </xs:enumeration>
      <xs:enumeration value="12">
        <xs:annotation>
          <xs:documentation>SIF_DestinationId does not match SIF_SourceId from SIF_ServiceInput</xs:documentation>
        </xs:annotation>
      </xs:enumeration>
      <xs:enumeration value="13">
        <xs:annotation>
          <xs:documentation>SIF_ServiceMsgId deleted from cache due to timeout</xs:documentation>
        </xs:annotation>
      </xs:enumeration>
      <xs:enumeration value="14">
        <xs:annotation>
          <xs:documentation>SIF_ServiceMsgId deleted from cache by administrator</xs:documentation>
        </xs:annotation>
      </xs:enumeration>
      <xs:enumeration value="15">
        <xs:annotation>
          <xs:documentation>SIF_ServiceInput cancelled by requesting agent</xs:documentation>
        </xs:annotation>
      </xs:enumeration>
      <xs:enumeration value="16">
        <xs:annotation>
          <xs:documentation>ACL permission denied</xs:documentation>
        </xs:annotation>
      </xs:enumeration>
      <xs:enumeration value="17">
        <xs:annotation>
          <xs:documentation>Not a provider for this service</xs:documentation>
        </xs:annotation>
      </xs:enumeration>
      <xs:enumeration value="18">
        <xs:annotation>
          <xs:documentation>Service or Operation failed</xs:documentation>
        </xs:annotation>
      </xs:enumeration>
    </xs:restriction>
  </xs:simpleType>
  <xs:simpleType name="SIF_LogEntrySuccessCategoryType">
    <xs:restriction base="xs:token">
      <xs:enumeration value="1">
        <xs:annotation>
          <xs:documentation>Success</xs:documentation>
        </xs:annotation>
      </xs:enumeration>
    </xs:restriction>
  </xs:simpleType>
  <xs:simpleType name="SIF_LogEntryDataIssuesWithSuccessResultType">
    <xs:restriction base="xs:token">
      <xs:enumeration value="1">
        <xs:annotation>
          <xs:documentation>Data was changed to complete request successfully</xs:documentation>
        </xs:annotation>
      </xs:enumeration>
      <xs:enumeration value="2">
        <xs:annotation>
          <xs:documentation>Data was added to complete request successfully</xs:documentation>
        </xs:annotation>
      </xs:enumeration>
    </xs:restriction>
  </xs:simpleType>
  <xs:simpleType name="SIF_LogEntryDataIssuesWithFailureResultType">
    <xs:restriction base="xs:token">
      <xs:enumeration value="1">
        <xs:annotation>
          <xs:documentation>Insufficient information in message</xs:documentation>
        </xs:annotation>
      </xs:enumeration>
      <xs:enumeration value="2">
        <xs:annotation>
          <xs:documentation>Cannot process change due to business rule</xs:documentation>
        </xs:annotation>
      </xs:enumeration>
      <xs:enumeration value="3">
        <xs:annotation>
          <xs:documentation>Related information unavailable</xs:documentation>
        </xs:annotation>
      </xs:enumeration>
    </xs:restriction>
  </xs:simpleType>
  <xs:simpleType name="SIF_LogEntryAgentErrorConditionType">
    <xs:restriction base="xs:token">
      <xs:enumeration value="1">
        <xs:annotation>
          <xs:documentation>An exception has occurred in the agent (generic error)</xs:documentation>
        </xs:annotation>
      </xs:enumeration>
    </xs:restriction>
  </xs:simpleType>
  <xs:simpleType name="SIF_LogEntryZISErrorConditionType">
    <xs:restriction base="xs:token">
      <xs:enumeration value="1">
        <xs:annotation>
          <xs:documentation>An exception has occurred in the ZIS (generic error)</xs:documentation>
        </xs:annotation>
      </xs:enumeration>
      <xs:enumeration value="2">
        <xs:annotation>
          <xs:documentation>Message could not be delivered due to buffer size limitations</xs:documentation>
        </xs:annotation>
      </xs:enumeration>
      <xs:enumeration value="3">
        <xs:annotation>
          <xs:documentation>Message could not be delivered due to minimum security requirements</xs:documentation>
        </xs:annotation>
      </xs:enumeration>
      <xs:enumeration value="4">
        <xs:annotation>
          <xs:documentation>Message could not be delivered due to destination agent not supporting SIF_Version</xs:documentation>
        </xs:annotation>
      </xs:enumeration>
      <xs:enumeration value="5">
        <xs:annotation>
          <xs:documentation>Message could not be delivered due to SIF_Response validation</xs:documentation>
        </xs:annotation>
      </xs:enumeration>
    </xs:restriction>
  </xs:simpleType>

  <!--ReportPackageType-->

  <xs:complexType name="ReportPackageType">
    <xs:complexContent>
      <xs:extension base="sif:AbstractContentPackageType">
        <xs:annotation>
          <xs:documentation>
      This package has exactly the same structure as </xs:documentation>
        </xs:annotation>
      </xs:extension>
    </xs:complexContent>
  </xs:complexType>


  <!--AbstractContentPackageType-->

  <xs:complexType name="AbstractContentPackageType">
    <xs:annotation>
      <xs:documentation>
        An abstract type for derived content package types, elements and objects.  This structure may be used verbatim, optionally extending
        with additional attributes, or may be redefined to include only a subset of child elements and/or to add validation to XML
        contained in XMLData.  Only one instance of XMLData, TextData, BinaryData or
        Reference can occur in a single instance.
      </xs:documentation>
    </xs:annotation>
    <xs:sequence>
      <xs:choice>
        <xs:element name="XMLData">
          <xs:complexType>
<xs:sequence>
  <xs:any processContents="lax" xmlns:xs="http://www.w3.org/2001/XMLSchema"  minOccurs="0" maxOccurs="1"/>
</xs:sequence>
<xs:attribute name="Description" use="optional" type="xs:token"><xs:annotation><xs:documentation>
          Contains an optional description of the content or a processing hint with regard to its structure (e.g. named standard, file layout or XSD).
          Contents may be mandated in instances of this type, or types that follow the AbstractContentPackageType pattern.
        </xs:documentation></xs:annotation></xs:attribute></xs:complexType>
        </xs:element>
        <xs:element name="TextData">
          <xs:annotation>
            <xs:documentation>Contains arbitrary text, encoded in UTF-8.</xs:documentation>
          </xs:annotation>
          <xs:complexType>
            <xs:simpleContent>
              <xs:extension base="xs:string">
                <xs:attribute name="MIMEType" use="optional" type="xs:token">
                  <xs:annotation>
                    <xs:documentation>
          Optional MIME type to specifically indicate the text type.  Otherwise text/plain can be assumed.
        </xs:documentation>
                  </xs:annotation>
                </xs:attribute>
                <xs:attribute name="FileName" use="optional" type="xs:token">
                  <xs:annotation>
                    <xs:documentation>
          Optional file name to indicate the file from which the content originated, or to suggest a name to use when saving the content.
        </xs:documentation>
                  </xs:annotation>
                </xs:attribute>
                <xs:attribute name="Description" use="optional" type="xs:token">
                  <xs:annotation>
                    <xs:documentation>
          Contains an optional description of the content or a processing hint with regard to its structure (e.g. named standard, file layout or XSD).
          Contents may be mandated in instances of this type, or types that follow the AbstractContentPackageType pattern.
        </xs:documentation>
                  </xs:annotation>
                </xs:attribute>
              </xs:extension>
            </xs:simpleContent>
          </xs:complexType>
        </xs:element>
        <xs:element name="BinaryData">
          <xs:annotation>
            <xs:documentation>Contains the base64Binary encoding of binary or text data not encoded in UTF-8.</xs:documentation>
          </xs:annotation>
          <xs:complexType>
            <xs:simpleContent>
              <xs:extension base="sif:XSBase64BinaryOrEmpty">
                <xs:attribute name="MIMEType" use="required" type="xs:token">
                  <xs:annotation>
                    <xs:documentation>
          MIME type to indicate the content type.
        </xs:documentation>
                  </xs:annotation>
                </xs:attribute>
                <xs:attribute name="FileName" use="optional" type="xs:token">
                  <xs:annotation>
                    <xs:documentation>
          Optional file name to indicate the file from which the content originated, or to suggest a name to use when saving the content.
        </xs:documentation>
                  </xs:annotation>
                </xs:attribute>
                <xs:attribute name="Description" use="optional" type="xs:token">
                  <xs:annotation>
                    <xs:documentation>
          Contains an optional description of the content or a processing hint with regard to its structure (e.g. named standard, file layout or XSD).
          Contents may be mandated in instances of this type, or types that follow the AbstractContentPackageType pattern.
        </xs:documentation>
                  </xs:annotation>
                </xs:attribute>
              </xs:extension>
            </xs:simpleContent>
          </xs:complexType>
        </xs:element>
        <xs:element name="Reference">
          <xs:complexType>
            <xs:sequence>
              <xs:element name="URL" minOccurs="0" type="xs:anyURI">
                <xs:annotation>
                  <xs:documentation>Location of external content.</xs:documentation>
                </xs:annotation>
              </xs:element>
            </xs:sequence>
            <xs:attribute name="MIMEType" use="required" type="xs:token">
              <xs:annotation>
                <xs:documentation>
          MIME type to indicate the content type to be expected when retrieving the external content.
        </xs:documentation>
              </xs:annotation>
            </xs:attribute>
            <xs:attribute name="Description" use="optional" type="xs:token">
              <xs:annotation>
                <xs:documentation>
          Contains an optional description of the content or a processing hint with regard to its structure (e.g. named standard, file layout or XSD).
          Contents may be mandated in instances of this type, or types that follow the AbstractContentPackageType pattern.
        </xs:documentation>
              </xs:annotation>
            </xs:attribute>
          </xs:complexType>
        </xs:element>
      </xs:choice>
    </xs:sequence>
    <xs:attribute name="RefId" use="required" type="sif:RefIdType">
      <xs:annotation>
        <xs:documentation>The GUID that uniquely identifies an instance of the package.</xs:documentation>
      </xs:annotation>
    </xs:attribute>
  </xs:complexType>


  <!--AbstractContentElementType-->

  <xs:complexType name="AbstractContentElementType">
    <xs:annotation>
      <xs:documentation>AbstractContentPackageType used as an element rather than an object, omitting RefId, SIF_Metadata and SIF_ExtendedElements.
			  </xs:documentation>
    </xs:annotation>
    <xs:sequence>
      <xs:choice>
        <xs:element name="XMLData">
          <xs:complexType>
<xs:sequence>
  <xs:any processContents="lax" xmlns:xs="http://www.w3.org/2001/XMLSchema"  minOccurs="0" maxOccurs="1"/>
</xs:sequence>
<xs:attribute name="Description" use="optional" type="xs:token"><xs:annotation><xs:documentation>
				  Contains an optional description of the content or a processing hint with regard to its structure (e.g. named standard, file layout or XSD).
				  Contents may be mandated in instances of this type, or types that follow the AbstractContentPackageType pattern.
				</xs:documentation></xs:annotation></xs:attribute></xs:complexType>
        </xs:element>
        <xs:element name="TextData">
          <xs:annotation>
            <xs:documentation>Contains arbitrary text, encoded in UTF-8.</xs:documentation>
          </xs:annotation>
          <xs:complexType>
            <xs:simpleContent>
              <xs:extension base="xs:string">
                <xs:attribute name="MIMEType" use="optional" type="xs:token">
                  <xs:annotation>
                    <xs:documentation>
				  Optional MIME type to specifically indicate the text type.  Otherwise text/plain can be assumed.
				</xs:documentation>
                  </xs:annotation>
                </xs:attribute>
                <xs:attribute name="FileName" use="optional" type="xs:token">
                  <xs:annotation>
                    <xs:documentation>
				  Optional file name to indicate the file from which the content originated, or to suggest a name to use when saving the content.
				</xs:documentation>
                  </xs:annotation>
                </xs:attribute>
                <xs:attribute name="Description" use="optional" type="xs:token">
                  <xs:annotation>
                    <xs:documentation>
				  Contains an optional description of the content or a processing hint with regard to its structure (e.g. named standard, file layout or XSD).
				  Contents may be mandated in instances of this type, or types that follow the AbstractContentPackageType pattern.
				</xs:documentation>
                  </xs:annotation>
                </xs:attribute>
              </xs:extension>
            </xs:simpleContent>
          </xs:complexType>
        </xs:element>
        <xs:element name="BinaryData">
          <xs:annotation>
            <xs:documentation>Contains the base64Binary encoding of binary or text data not encoded in UTF-8.</xs:documentation>
          </xs:annotation>
          <xs:complexType>
            <xs:simpleContent>
              <xs:extension base="sif:XSBase64BinaryOrEmpty">
                <xs:attribute name="MIMEType" use="required" type="xs:token">
                  <xs:annotation>
                    <xs:documentation>
				  MIME type to indicate the content type.
				</xs:documentation>
                  </xs:annotation>
                </xs:attribute>
                <xs:attribute name="FileName" use="optional" type="xs:token">
                  <xs:annotation>
                    <xs:documentation>
				  Optional file name to indicate the file from which the content originated, or to suggest a name to use when saving the content.
				</xs:documentation>
                  </xs:annotation>
                </xs:attribute>
                <xs:attribute name="Description" use="optional" type="xs:token">
                  <xs:annotation>
                    <xs:documentation>
				  Contains an optional description of the content or a processing hint with regard to its structure (e.g. named standard, file layout or XSD).
				  Contents may be mandated in instances of this type, or types that follow the AbstractContentPackageType pattern.
				</xs:documentation>
                  </xs:annotation>
                </xs:attribute>
              </xs:extension>
            </xs:simpleContent>
          </xs:complexType>
        </xs:element>
        <xs:element name="Reference">
          <xs:complexType>
            <xs:sequence>
              <xs:element name="URL" minOccurs="0" type="xs:anyURI">
                <xs:annotation>
                  <xs:documentation>Location of external content.</xs:documentation>
                </xs:annotation>
              </xs:element>
            </xs:sequence>
            <xs:attribute name="MIMEType" use="required" type="xs:token">
              <xs:annotation>
                <xs:documentation>
				  MIME type to indicate the content type to be expected when retrieving the external content.
				</xs:documentation>
              </xs:annotation>
            </xs:attribute>
            <xs:attribute name="Description" use="optional" type="xs:token">
              <xs:annotation>
                <xs:documentation>
				  Contains an optional description of the content or a processing hint with regard to its structure (e.g. named standard, file layout or XSD).
				  Contents may be mandated in instances of this type, or types that follow the AbstractContentPackageType pattern.
				</xs:documentation>
              </xs:annotation>
            </xs:attribute>
          </xs:complexType>
        </xs:element>
      </xs:choice>
    </xs:sequence>
  </xs:complexType>


  <!--ObjectNameType-->

  <xs:simpleType name="ObjectNameType">
    <xs:restriction>
      <xs:simpleType>
        <xs:restriction base="xs:NCName">
          <xs:annotation>
            <xs:documentation>An unenumerated SIF object name.</xs:documentation>
          </xs:annotation>
          <xs:maxLength value="64" xmlns:xs="http://www.w3.org/2001/XMLSchema" />
        </xs:restriction>
      </xs:simpleType>
    </xs:restriction>
  </xs:simpleType>


  <!--ServiceNameType-->

  <xs:simpleType name="ServiceNameType">
    <xs:restriction base="xs:NCName">
      <xs:annotation>
        <xs:documentation>An unenumerated SIF object name.</xs:documentation>
      </xs:annotation>
    </xs:restriction>
  </xs:simpleType>


  <!--ObjectType-->

  <xs:complexType name="ObjectType">
    <xs:sequence xmlns:xs="http://www.w3.org/2001/XMLSchema">
      <xs:any processContents="lax" minOccurs="0" maxOccurs="unbounded" namespace="##any" />
    </xs:sequence>
  </xs:complexType>


  <!--ReportDataObjectType-->

  <xs:complexType name="ReportDataObjectType">
    <xs:sequence xmlns:xs="http://www.w3.org/2001/XMLSchema">
      <xs:any processContents="lax" minOccurs="0" maxOccurs="unbounded" />
    </xs:sequence>
  </xs:complexType>


  <!--URIOrBinaryType-->

  <xs:simpleType name="URIOrBinaryType">
    <xs:annotation>
      <xs:documentation>Allows for a URL or a Base-64 encoding.</xs:documentation>
    </xs:annotation>
    <xs:union>
      <xs:simpleType>
        <xs:restriction base="xs:anyURI" />
      </xs:simpleType>
      <xs:simpleType>
        <xs:restriction base="xs:base64Binary" />
      </xs:simpleType>
    </xs:union>
  </xs:simpleType>


  <!--GUIDType-->

  <xs:simpleType name="GUIDType">
    <xs:restriction>
      <xs:simpleType>
        <xs:restriction base="xs:token">
          <xs:annotation>
            <xs:documentation>SIF format for a GUID.</xs:documentation>
          </xs:annotation>
          <xs:pattern value="[0-9A-F]{32}" xmlns:xs="http://www.w3.org/2001/XMLSchema" />
        </xs:restriction>
      </xs:simpleType>
    </xs:restriction>
  </xs:simpleType>


  <!--MsgIdType-->

  <xs:simpleType name="MsgIdType">
    <xs:restriction base="sif:GUIDType">
      <xs:annotation>
        <xs:documentation>A message identifier.</xs:documentation>
      </xs:annotation>
    </xs:restriction>
  </xs:simpleType>


  <!--RefIdType-->

  <xs:simpleType name="RefIdType">
    <xs:restriction base="sif:GUIDType">
      <xs:annotation>
        <xs:documentation>An object or element identifier.</xs:documentation>
      </xs:annotation>
    </xs:restriction>
  </xs:simpleType>


  <!--IdRefType-->

  <xs:simpleType name="IdRefType">
    <xs:restriction base="sif:RefIdType">
      <xs:annotation>
        <xs:documentation>A reference to a RefId.</xs:documentation>
      </xs:annotation>
    </xs:restriction>
  </xs:simpleType>


  <!--VersionType-->

  <xs:simpleType name="VersionType">
    <xs:restriction>
      <xs:simpleType>
        <xs:restriction base="xs:token">
          <xs:annotation>
            <xs:documentation>A SIF version number.</xs:documentation>
          </xs:annotation>
          <xs:maxLength value="12" xmlns:xs="http://www.w3.org/2001/XMLSchema" />
          <xs:pattern value="[0-9]+[.][0-9]+(r[0-9]+)?" xmlns:xs="http://www.w3.org/2001/XMLSchema" />
        </xs:restriction>
      </xs:simpleType>
    </xs:restriction>
  </xs:simpleType>


  <!--VersionWithWildcardsType-->

  <xs:simpleType name="VersionWithWildcardsType">
    <xs:restriction>
      <xs:simpleType>
        <xs:restriction base="xs:token">
          <xs:annotation>
            <xs:documentation>A SIF version number, with wildcards for matching multiple versions.</xs:documentation>
          </xs:annotation>
          <xs:maxLength value="12" xmlns:xs="http://www.w3.org/2001/XMLSchema" />
          <xs:pattern value="\*|([0-9]+[.]\*)|([0-9]+[.][0-9]+r\*)|([0-9]+[.][0-9]+(r[0-9]+)?)" xmlns:xs="http://www.w3.org/2001/XMLSchema" />
        </xs:restriction>
      </xs:simpleType>
    </xs:restriction>
  </xs:simpleType>


  <!--DefinedProtocolsType-->

  <xs:simpleType name="DefinedProtocolsType">
    <xs:restriction base="xs:token">
      <xs:annotation>
        <xs:documentation>The transport protocols defined in SIF.</xs:documentation>
      </xs:annotation>
      <xs:enumeration value="HTTPS" />
      <xs:enumeration value="HTTP" />
    </xs:restriction>
  </xs:simpleType>


  <!--ExtendedContentType-->

  <xs:complexType name="ExtendedContentType">
    <xs:complexContent mixed="true" xmlns:xs="http://www.w3.org/2001/XMLSchema">
      <xs:restriction base="xs:anyType">
        <xs:sequence>
          <xs:any processContents="lax" minOccurs="0" maxOccurs="unbounded" />
        </xs:sequence>
      </xs:restriction>
    </xs:complexContent>
  </xs:complexType>


  <!--SelectedContentType-->

  <xs:complexType name="SelectedContentType">
    <xs:complexContent mixed="true" xmlns:xs="http://www.w3.org/2001/XMLSchema">
      <xs:restriction base="xs:anyType">
        <xs:sequence>
          <xs:any processContents="skip" minOccurs="0" maxOccurs="unbounded" />
        </xs:sequence>
      </xs:restriction>
    </xs:complexContent>
  </xs:complexType>


  <!--SIF_HeaderDataModelType-->

  <xs:complexType name="SIF_HeaderDataModelType">
    <xs:annotation>
      <xs:documentation>Header information associated with a message.</xs:documentation>
    </xs:annotation>
    <xs:sequence>
      <xs:element name="SIF_MsgId" minOccurs="0" 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" minOccurs="0" 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" nillable="true">
        <xs:complexType>
          <xs:sequence>
            <xs:element name="SIF_SecureChannel" minOccurs="0">
              <xs:complexType>
                <xs:sequence>
                  <xs:element ref="sif:SIF_AuthenticationLevel" minOccurs="0" />
                  <xs:element ref="sif:SIF_EncryptionLevel" minOccurs="0" />
                </xs:sequence>
              </xs:complexType>
            </xs:element>
          </xs:sequence>
        </xs:complexType>
      </xs:element>
      <xs:element name="SIF_SourceId" minOccurs="0">
        <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" nillable="true">
        <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 name="SIF_Contexts" minOccurs="0" nillable="true" type="sif:SIF_ContextsType">
        <xs:annotation>
          <xs:documentation>
            Contains each SIF Context that applies to the message.  If omitted, the applicable context is SIF_Default.
            SIF_Context is repeatable for SIF_Events, not repeatable for SIF_Request or SIF_Response.
          </xs:documentation>
        </xs:annotation>
      </xs:element>
    </xs:sequence>
  </xs:complexType>


  <!--SIF_ErrorDataModelType-->

  <xs:complexType name="SIF_ErrorDataModelType">
    <xs:annotation>
      <xs:documentation>This element is used to signal an unsuccessful response.</xs:documentation>
    </xs:annotation>
    <xs:sequence>
      <xs:element name="SIF_Category" minOccurs="0" type="sif:InfrastructureErrorCategoryType" />
      <xs:element name="SIF_Code" minOccurs="0">
        <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" minOccurs="0">
        <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" nillable="true" 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>


  <!--SIF_QueryDataModelType-->

  <xs:complexType name="SIF_QueryDataModelType">
    <xs:annotation>
      <xs:documentation>
				SIF's default query mechanism.
			</xs:documentation>
    </xs:annotation>
    <xs:sequence>
      <xs:element name="SIF_QueryObject" minOccurs="0">
        <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:ObjectNameType">
            <xs:annotation>
              <xs:documentation>The name of the SIF 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" minOccurs="0" nillable="true">
          <xs:complexType>
            <xs:sequence>
              <xs:element name="SIF_Conditions" minOccurs="0" maxOccurs="unbounded">
                <xs:complexType>
                  <xs:sequence>
                    <xs:element name="SIF_Condition" minOccurs="0" maxOccurs="unbounded">
                      <xs:complexType>
                        <xs:sequence>
                          <xs:element name="SIF_Element" minOccurs="0" 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" minOccurs="0">
                            <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" minOccurs="0" 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" minOccurs="0" nillable="true" type="sif:ObjectType">
          <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>


  <!--SIF_ExtendedQueryDataModelType-->

  <xs:complexType name="SIF_ExtendedQueryDataModelType">
    <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.
            
              While envisioned as the primary mechanism for SIF-based ReportManifests,
            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" nillable="true" type="xs:token">
        <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" minOccurs="0">
        <xs:complexType>
          <xs:sequence>
            <xs:element name="SIF_Element" minOccurs="0" 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:ObjectNameType">
                      <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" minOccurs="0">
        <xs:complexType>
          <xs:sequence>
            <xs:element name="SIF_Join" minOccurs="0" maxOccurs="unbounded">
              <xs:complexType>
                <xs:sequence>
                  <xs:element name="SIF_JoinOn" minOccurs="0" maxOccurs="unbounded">
                    <xs:complexType>
                      <xs:sequence>
                        <xs:element name="SIF_LeftElement" minOccurs="0">
                          <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:ObjectNameType">
                                  <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" minOccurs="0">
                          <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:ObjectNameType">
                                  <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:ObjectNameType">
            <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" nillable="true">
        <xs:complexType>
          <xs:sequence>
            <xs:element name="SIF_ConditionGroup" minOccurs="0">
              <xs:complexType>
                <xs:sequence>
                  <xs:element name="SIF_Conditions" minOccurs="0" maxOccurs="unbounded">
                    <xs:complexType>
                      <xs:sequence>
                        <xs:element name="SIF_Condition" minOccurs="0" maxOccurs="unbounded">
                          <xs:complexType>
                            <xs:sequence>
                              <xs:element name="SIF_Element" minOccurs="0">
                                <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:ObjectNameType">
                                        <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" minOccurs="0">
                                <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" minOccurs="0" 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" nillable="true">
        <xs:complexType>
          <xs:sequence>
            <xs:element name="SIF_Element" minOccurs="0" 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:ObjectNameType">
                      <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>


  <!--SIF_ExtendedQueryResultsDataModelType-->

  <xs:complexType name="SIF_ExtendedQueryResultsDataModelType">
    <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" minOccurs="0">
        <xs:complexType>
          <xs:sequence>
            <xs:element name="SIF_Element" minOccurs="0" 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:ObjectNameType">
                      <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" minOccurs="0">
        <xs:complexType>
          <xs:sequence>
            <xs:element name="R" minOccurs="0" maxOccurs="unbounded">
              <xs:complexType>
                <xs:sequence>
                  <xs:element name="C" minOccurs="0" 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>

  <!--XSBase64BinaryOrEmpty-->

<xs:simpleType name="XSBase64BinaryOrEmpty">
  <xs:union>
    <xs:simpleType>
      <xs:restriction base="xs:base64Binary" />
    </xs:simpleType>
    <xs:simpleType>
      <xs:restriction base="xs:string">
        <xs:length value="0" />
      </xs:restriction>
    </xs:simpleType>
  </xs:union>
</xs:simpleType>

</xs:schema>
