<?xml version="1.0" encoding="UTF-8"?>
<xs:schema attributeFormDefault="unqualified"
    elementFormDefault="qualified"
    targetNamespace="http://ws.easylink.com/Report/2011/01"
    xmlns:xoar="http://ws.easylink.com/Report/2011/01" xmlns:xs="http://www.w3.org/2001/XMLSchema">
    <!--includes for standalone validation
	<xs:include schemaLocation="AddressType.xsd"/>
	<xs:include schemaLocation="DateRange.xsd"/>
	<xs:include schemaLocation="DeliveryItem.xsd"/>
	<xs:include schemaLocation="Document.xsd"/>
	<xs:include schemaLocation="EncodableStringType.xsd"/>
	<xs:include schemaLocation="JobIdType.xsd"/>
	<xs:include schemaLocation="OwnershipLevelType.xsd"/>
	<xs:include schemaLocation="ReportTypes.xsd"/>
	<xs:include schemaLocation="SegmentType.xsd"/>
	<xs:include schemaLocation="RecStatusType.xsd"/>
	<xs:include schemaLocation="StatusType.xsd"/>
	================ -->
    <xs:element name="ReportRequest">
        <xs:complexType>
            <xs:sequence>
                <xs:element minOccurs="0" name="SubmitId" type="xs:string"/>
                <xs:choice>
                    <xs:element name="RemovalReport" type="xoar:RemovalReportType"/>
                    <xs:element name="JobReports">
                        <xs:complexType>
                            <xs:sequence>
                                <xs:element maxOccurs="unbounded"
                                    name="Report" type="xoar:JobReportType"/>
                            </xs:sequence>
                        </xs:complexType>
                    </xs:element>
                </xs:choice>
            </xs:sequence>
        </xs:complexType>
    </xs:element>
    <xs:element name="ReportResult">
        <xs:complexType>
            <xs:sequence>
                <xs:element name="Status" type="xoar:StatusType"/>
                <xs:element minOccurs="0" name="SubmitId" type="xs:string"/>
                <xs:element maxOccurs="unbounded" minOccurs="0"
                    name="ReportRecStatus" type="xoar:ReportRecStatusType"/>
            </xs:sequence>
        </xs:complexType>
    </xs:element>
    <xs:simpleType name="ReportLevelType">
        <xs:restriction base="xs:string">
            <xs:enumeration value="user"/>
            <xs:enumeration value="customer"/>
        </xs:restriction>
    </xs:simpleType>
    <xs:complexType name="JobReportType">
        <xs:sequence>
            <xs:element name="ReportJobId" type="xoar:JobIdType"/>
            <xs:element name="ReportType" type="xoar:AllReportTypeEnum"/>
            <xs:element minOccurs="0" name="ReportTemplate" type="xs:string"/>
            <xs:element name="ReportAddress" type="xoar:DeliveryItemListType"/>
            <xs:element minOccurs="0" name="ReportReason">
                <xs:simpleType>
                    <xs:restriction base="xs:string">
                        <xs:minLength value="2"/>
                    </xs:restriction>
                </xs:simpleType>
            </xs:element>
        </xs:sequence>
        <xs:attribute name="reportOption" type="xoar:ReportOptionEnum" use="optional"/>
    </xs:complexType>
    <xs:complexType name="RemovalReportType">
        <xs:sequence>
            <xs:element name="Domain" type="xs:string"/>
            <xs:element minOccurs="0" name="ReportTemplate" type="xs:string"/>
            <xs:element minOccurs="0" name="DateRange" type="xoar:DateRangeType"/>
            <xs:element name="ReportAddress" type="xoar:DeliveryItemListType"/>
            <xs:element maxOccurs="unbounded" minOccurs="0"
                name="AddressTypeList" type="xoar:AddressType"/>
        </xs:sequence>
    </xs:complexType>
    <xs:simpleType name="ReportOptionEnum">
        <xs:restriction base="xs:string">
            <xs:enumeration value="sent-to-friend"/>
        </xs:restriction>
    </xs:simpleType>
    <xs:complexType name="ReportRecStatusType">
        <xs:sequence>
            <xs:element name="RecStatus" type="xoar:RecStatusType"/>
            <xs:element minOccurs="0" name="ReportJobId" type="xoar:JobIdType"/>
            <xs:element minOccurs="0" name="JobId" type="xoar:JobIdType"/>
        </xs:sequence>
    </xs:complexType>
    <!-- address type enum -->
    <xs:simpleType name="AddressType">
        <xs:restriction base="xs:string">
            <xs:enumeration value="fax"/>
            <xs:enumeration value="internet"/>
            <xs:enumeration value="mbox"/>
            <xs:enumeration value="x400"/>
            <xs:enumeration value="telex"/>
            <xs:enumeration value="cablegram"/>
            <xs:enumeration value="mailgram"/>
            <xs:enumeration value="ddd"/>
            <xs:enumeration value="dedLine"/>
            <xs:enumeration value="softswitch"/>
            <xs:enumeration value="voice"/>
            <xs:enumeration value="sms"/>
            <xs:enumeration value="fod"/>
            <xs:enumeration value="list"/>
            <xs:enumeration value="smQuery"/>
            <xs:enumeration value="URL"/>
        </xs:restriction>
    </xs:simpleType>
    <xs:complexType name="DateRangeType">
        <xs:sequence>
            <xs:element name="StartDate" type="xs:dateTime"/>
            <xs:element name="EndDate" type="xs:dateTime"/>
        </xs:sequence>
    </xs:complexType>
    <!-- ===============================
	<xs:include schemaLocation="AddressType.xsd"/>
	<xs:include schemaLocation="Document.xsd"/>
	<xs:include schemaLocation="EncodableStringType.xsd"/>
	<xs:include schemaLocation="OwnershipLevelType.xsd"/>
	<xs:include schemaLocation="SegmentType.xsd"/>
	<xs:include schemaLocation="StatusType.xsd"/>
	=============================== -->
    <xs:simpleType name="EformatType">
        <xs:restriction base="xs:string">
            <xs:enumeration value="text"/>
            <xs:enumeration value="html"/>
            <xs:enumeration value="htmllite"/>
            <xs:enumeration value="default"/>
        </xs:restriction>
    </xs:simpleType>
    <xs:simpleType name="EmailType">
        <xs:restriction base="xs:string">
            <xs:minLength value="2"/>
        </xs:restriction>
    </xs:simpleType>
    <xs:complexType name="InsertListType">
        <xs:sequence>
            <xs:element maxOccurs="unbounded" name="Insert">
                <xs:complexType>
                    <xs:simpleContent>
                        <xs:extension base="xs:string">
                            <xs:attribute name="number" type="xs:integer"/>
                            <xs:attribute name="b64charset"
                                type="xs:string" use="optional"/>
                        </xs:extension>
                    </xs:simpleContent>
                </xs:complexType>
            </xs:element>
        </xs:sequence>
    </xs:complexType>
    <xs:complexType name="ExtensionType">
        <xs:choice maxOccurs="unbounded">
            <xs:element name="Segment" type="xoar:SegmentType"/>
        </xs:choice>
    </xs:complexType>
    <xs:complexType name="FieldMappingType">
        <xs:sequence>
            <xs:element maxOccurs="unbounded" name="Map">
                <xs:complexType>
                    <xs:sequence>
                        <xs:element name="FieldName" type="xs:string"/>
                        <xs:element minOccurs="0" name="SegmentName" type="xs:string"/>
                        <xs:element name="PropertyName" type="xs:string"/>
                        <xs:element minOccurs="0" name="IsBase64Encoded" type="xs:boolean"/>
                    </xs:sequence>
                </xs:complexType>
            </xs:element>
        </xs:sequence>
    </xs:complexType>
    <xs:complexType abstract="true" name="DeliveryItemType">
        <xs:attribute name="ref" type="xs:string" use="optional"/>
        <xs:attribute name="refb64" type="xs:string" use="optional"/>
    </xs:complexType>
    <xs:complexType name="DeliveryItemGenericType">
        <xs:sequence>
            <xs:element minOccurs="0" name="Alternate" type="xoar:AlternateType"/>
            <xs:element minOccurs="0" name="InsertList" type="xoar:InsertListType"/>
            <xs:element minOccurs="0" name="Extension" type="xoar:ExtensionType"/>
            <xs:element name="Address" type="xs:string"/>
        </xs:sequence>
        <xs:attribute name="ref" type="xs:string" use="optional"/>
        <xs:attribute name="refb64" type="xs:string" use="optional"/>
        <xs:attribute name="type" type="xoar:AddressType" use="required"/>
    </xs:complexType>
    <xs:complexType name="MboxType">
        <xs:sequence>
            <xs:element minOccurs="0" name="Alternate" type="xoar:AlternateType"/>
            <xs:element name="UserId" type="xs:string"/>
        </xs:sequence>
        <xs:attribute name="ref" type="xs:string" use="optional"/>
        <xs:attribute name="refb64" type="xs:string" use="optional"/>
    </xs:complexType>
    <xs:complexType name="TelexType">
        <xs:sequence>
            <xs:element minOccurs="0" name="Alternate" type="xoar:AlternateType"/>
            <xs:element name="Number" type="xs:string"/>
        </xs:sequence>
        <xs:attribute name="ref" type="xs:string" use="optional"/>
        <xs:attribute name="refb64" type="xs:string" use="optional"/>
    </xs:complexType>
    <xs:complexType name="FodType">
        <xs:sequence>
            <xs:element minOccurs="0" name="Alternate" type="xoar:AlternateType"/>
            <xs:element name="Address" type="xs:string"/>
        </xs:sequence>
        <xs:attribute name="ref" type="xs:string" use="optional"/>
        <xs:attribute name="refb64" type="xs:string" use="optional"/>
    </xs:complexType>
    <xs:complexType name="SmsType">
        <xs:sequence>
            <xs:element minOccurs="0" name="Alternate" type="xoar:AlternateType"/>
            <xs:element name="Phone" type="xs:string"/>
        </xs:sequence>
        <xs:attribute name="ref" type="xs:string" use="optional"/>
        <xs:attribute name="refb64" type="xs:string" use="optional"/>
    </xs:complexType>
    <xs:complexType name="FaxType">
        <xs:sequence>
            <xs:element minOccurs="0" name="Alternate" type="xoar:AlternateType"/>
            <xs:element minOccurs="0" name="InsertList" type="xoar:InsertListType"/>
            <xs:element minOccurs="0" name="Extension" type="xoar:ExtensionType"/>
            <xs:element name="Phone" type="xs:string"/>
            <xs:element minOccurs="0" name="Att" type="xoar:EncodableStringType"/>
            <xs:element minOccurs="0" name="From" type="xoar:EncodableStringType"/>
            <xs:element minOccurs="0" name="To" type="xoar:EncodableStringType"/>
            <xs:element minOccurs="0" name="Salutation" type="xs:string"/>
        </xs:sequence>
        <xs:attribute name="ref" type="xs:string" use="optional"/>
        <xs:attribute name="refb64" type="xs:string" use="optional"/>
    </xs:complexType>
    <xs:complexType name="VoiceType">
        <xs:sequence>
            <xs:element minOccurs="0" name="Alternate" type="xoar:AlternateType"/>
            <xs:element minOccurs="0" name="InsertList" type="xoar:InsertListType"/>
            <xs:element minOccurs="0" name="Extension" type="xoar:ExtensionType"/>
            <xs:element name="Phone" type="xs:string"/>
        </xs:sequence>
        <xs:attribute name="ref" type="xs:string" use="optional"/>
        <xs:attribute name="refb64" type="xs:string" use="optional"/>
    </xs:complexType>
    <xs:complexType name="InternetType">
        <xs:sequence>
            <xs:element minOccurs="0" name="Alternate" type="xoar:AlternateType"/>
            <xs:element minOccurs="0" name="InsertList" type="xoar:InsertListType"/>
            <xs:element minOccurs="0" name="Extension" type="xoar:ExtensionType"/>
            <xs:element name="Email" type="xoar:EmailType"/>
            <xs:element minOccurs="0" name="Subject" type="xoar:EncodableStringType"/>
            <xs:element minOccurs="0" name="From" type="xoar:EncodableStringType"/>
            <xs:element minOccurs="0" name="Eformat" type="xoar:EformatType"/>
            <xs:element minOccurs="0" name="Password" type="xs:string">
                <xs:annotation>
                    <xs:documentation>
			Only used in messageREACH. The password used
			by this recipient to retrieve pull
			attachments.
		     </xs:documentation>
                </xs:annotation>
            </xs:element>
        </xs:sequence>
        <xs:attribute name="ref" type="xs:string" use="optional"/>
        <xs:attribute name="refb64" type="xs:string" use="optional"/>
    </xs:complexType>
    <xs:complexType name="ListType">
        <xs:sequence>
            <xs:element name="Name" type="xs:string"/>
        </xs:sequence>
        <xs:attribute name="ref" type="xs:string" use="optional"/>
        <xs:attribute name="refb64" type="xs:string" use="optional"/>
        <xs:attribute name="ownershipLevel" type="xoar:OwnershipLevelType"/>
    </xs:complexType>
    <xs:complexType name="SmQueryType">
        <xs:sequence>
            <xs:element name="Name" type="xs:string"/>
        </xs:sequence>
        <xs:attribute name="ref" type="xs:string" use="optional"/>
        <xs:attribute name="refb64" type="xs:string" use="optional"/>
        <xs:attribute name="ownershipLevel" type="xoar:OwnershipLevelType"/>
    </xs:complexType>
    <xs:complexType name="TableType">
        <xs:sequence>
            <xs:element minOccurs="0" name="FieldMapping" type="xoar:FieldMappingType"/>
            <xs:choice>
                <xs:element name="DocRef" type="xs:string"/>
                <xs:element name="Document" type="xoar:DocumentType"/>
            </xs:choice>
        </xs:sequence>
        <xs:attribute name="ref" type="xs:string" use="optional"/>
        <xs:attribute name="refb64" type="xs:string" use="optional"/>
    </xs:complexType>
    <xs:complexType name="DeliveryItemListType">
        <xs:choice maxOccurs="unbounded">
            <xs:element name="List" type="xoar:ListType"/>
            <xs:element name="SmQuery" type="xoar:SmQueryType"/>
            <xs:element name="Table" type="xoar:TableType"/>
            <xs:element name="DeliveryItemGeneric" type="xoar:DeliveryItemGenericType"/>
            <xs:element name="Fax" type="xoar:FaxType"/>
            <xs:element name="Internet" type="xoar:InternetType"/>
            <xs:element name="Voice" type="xoar:VoiceType"/>
            <xs:element name="Fod" type="xoar:FodType"/>
            <xs:element name="Mbox" type="xoar:MboxType"/>
            <xs:element name="Sms" type="xoar:SmsType"/>
            <xs:element name="Telex" type="xoar:TelexType"/>
        </xs:choice>
    </xs:complexType>
    <xs:complexType name="AlternateType">
        <xs:choice>
            <xs:element name="Fax" type="xoar:FaxType"/>
            <xs:element name="Internet" type="xoar:InternetType"/>
            <xs:element name="Voice" type="xoar:VoiceType"/>
            <xs:element name="Fod" type="xoar:FodType"/>
            <xs:element name="Mbox" type="xoar:MboxType"/>
            <xs:element name="Sms" type="xoar:SmsType"/>
            <xs:element name="Telex" type="xoar:TelexType"/>
            <xs:element name="DeliveryItemGeneric" type="xoar:DeliveryItemGenericType"/>
        </xs:choice>
    </xs:complexType>
    <!-- ===============================
	<xs:include schemaLocation="OwnershipLevelType.xsd"/>
	=============================== -->
    <xs:element name="CharacterSet" type="xs:string">
        <xs:annotation>
            <xs:documentation>use ISO names</xs:documentation>
        </xs:annotation>
    </xs:element>
    <xs:simpleType name="DocEncodingFormat">
        <xs:restriction base="xs:string">
            <xs:enumeration value="text"/>
            <xs:enumeration value="base64"/>
        </xs:restriction>
    </xs:simpleType>
    <xs:complexType name="DocDataType">
        <xs:simpleContent>
            <xs:extension base="xs:string">
                <xs:attribute name="format"
                    type="xoar:DocEncodingFormat" use="required"/>
            </xs:extension>
        </xs:simpleContent>
    </xs:complexType>
    <xs:complexType name="SosObjectIdType">
        <xs:simpleContent>
            <xs:extension base="xs:string">
                <xs:attribute name="sosType" type="xs:string" use="required"/>
                <xs:attribute name="ownershipLevel" type="xoar:OwnershipLevelType"/>
            </xs:extension>
        </xs:simpleContent>
    </xs:complexType>
    <xs:complexType name="DocumentType">
        <xs:sequence>
            <xs:element name="DocType" type="xs:string">
                <xs:annotation>
                    <xs:documentation>Value restricted by application to recognized values</xs:documentation>
                </xs:annotation>
            </xs:element>
            <xs:element minOccurs="0" name="Filename" type="xs:string"/>
            <xs:choice>
                <xs:element name="DocData" type="xoar:DocDataType"/>
                <xs:element name="DocCfs" type="xs:string"/>
                <xs:element name="DocUrl" type="xs:anyURI"/>
                <xs:element name="SosObject" type="xoar:SosObjectIdType"/>
            </xs:choice>
            <xs:element minOccurs="0" ref="xoar:CharacterSet"/>
        </xs:sequence>
        <xs:attribute name="ref" type="xs:string" use="optional"/>
    </xs:complexType>
    <xs:complexType name="DocumentSetType">
        <xs:sequence>
            <xs:element maxOccurs="unbounded" minOccurs="0"
                name="Document" type="xoar:DocumentType"/>
        </xs:sequence>
    </xs:complexType>
    <xs:complexType name="EncodableStringType">
        <xs:simpleContent>
            <xs:extension base="xs:string">
                <xs:attribute name="b64charset" type="xs:string" use="optional"/>
            </xs:extension>
        </xs:simpleContent>
    </xs:complexType>
    <xs:complexType name="JobIdType">
        <xs:sequence>
            <xs:element name="XDN" type="xs:string"/>
            <xs:element name="MRN" type="xs:integer"/>
        </xs:sequence>
    </xs:complexType>
    <xs:simpleType name="OwnershipLevelType">
        <xs:restriction base="xs:string">
            <xs:enumeration value="user"/>
            <xs:enumeration value="customer"/>
            <xs:enumeration value="group"/>
            <xs:enumeration value="system"/>
        </xs:restriction>
    </xs:simpleType>
    <!-- ===============================
	=============================== -->
    <!-- Progress report types -->
    <xs:simpleType name="AllReportTypeEnum">
        <xs:restriction base="xs:string">
            <xs:enumeration value="none"/>
            <xs:enumeration value="summary"/>
            <xs:enumeration value="detail"/>
            <xs:enumeration value="exception"/>
            <xs:enumeration value="conditional"/>
            <xs:enumeration value="pull"/>
            <xs:enumeration value="badaddress"/>
            <xs:enumeration value="enhanced"/>
        </xs:restriction>
    </xs:simpleType>
    <!-- ===============================
	=============================== -->
    <xs:complexType name="SegmentType">
        <xs:sequence>
            <xs:element maxOccurs="unbounded" name="Property">
                <xs:complexType>
                    <xs:simpleContent>
                        <xs:extension base="xs:string">
                            <xs:attribute name="name" type="xs:string" use="required"/>
                            <xs:attribute name="b64charset"
                                type="xs:string" use="optional"/>
                        </xs:extension>
                    </xs:simpleContent>
                </xs:complexType>
            </xs:element>
        </xs:sequence>
        <xs:attribute name="name" type="xs:string"/>
    </xs:complexType>
    <xs:complexType name="RecStatusType">
        <xs:simpleContent>
            <xs:extension base="xs:string">
                <xs:attribute name="code" type="xs:int" use="required"/>
            </xs:extension>
        </xs:simpleContent>
    </xs:complexType>
    <xs:complexType name="StatusType">
        <xs:sequence>
            <xs:element name="StatusCode" type="xs:integer">
                <xs:annotation>
                    <xs:documentation>0 = success, non-zero = error state TBD</xs:documentation>
                </xs:annotation>
            </xs:element>
            <xs:element minOccurs="0" name="StatusMessage" type="xs:string">
                <xs:annotation>
                    <xs:documentation>text description of StatusCode</xs:documentation>
                </xs:annotation>
            </xs:element>
            <xs:element minOccurs="0" name="ErrorList">
                <xs:annotation>
                    <xs:documentation>Container for Errors</xs:documentation>
                </xs:annotation>
                <xs:complexType>
                    <xs:sequence>
                        <xs:element maxOccurs="unbounded" name="Error">
                            <xs:annotation>
                                <xs:documentation>An Error</xs:documentation>
                            </xs:annotation>
                            <xs:complexType>
                                <xs:sequence>
                                    <xs:element name="ErrorCode" type="xs:integer">
                                    <xs:annotation>
                                    <xs:documentation>non-zero code</xs:documentation>
                                    </xs:annotation>
                                    </xs:element>
                                    <xs:element name="ErrorMessage" type="xs:string"/>
                                </xs:sequence>
                            </xs:complexType>
                        </xs:element>
                    </xs:sequence>
                </xs:complexType>
            </xs:element>
            <xs:element name="SubmissionTime" type="xs:dateTime">
                <xs:annotation>
                    <xs:documentation>The time the Request was received by the system</xs:documentation>
                </xs:annotation>
            </xs:element>
            <xs:element name="CompletionTime" type="xs:dateTime">
                <xs:annotation>
                    <xs:documentation>the time the Request was completed processing</xs:documentation>
                </xs:annotation>
            </xs:element>
        </xs:sequence>
    </xs:complexType>
</xs:schema>
