<?xml version="1.0" encoding="UTF-8"?>
<!-- R1 -->
<xs:schema xmlns:xs="http://www.w3.org/2001/XMLSchema"
    xmlns="http://www.cablelabs.com/namespaces/safi/xsd/iaf/2.0"
    xmlns:com="http://www.cablelabs.com/namespaces/safi/xsd/com/2.0"
    targetNamespace="http://www.cablelabs.com/namespaces/safi/xsd/iaf/2.0"
    elementFormDefault="qualified" attributeFormDefault="unqualified" version="1.0">
    
    <xs:annotation>
        <xs:documentation>
            <b>Copyright (C) 2008-2011, Cable Television Laboratories, Inc.</b>
            <b>SaFI iInteractive Application Fulfillment Interface, XML Schema, Release Version 2.0.0</b>
            <b>Controlled by specification: OC-SP-SaFI-IAFv2.0-110131</b>            
        </xs:documentation>
    </xs:annotation>   
    <xs:import namespace="http://www.cablelabs.com/namespaces/safi/xsd/com/2.0"
        schemaLocation="http://www.cablelabs.com/namespaces/safi/xsd/com/v2.0/OC-SaFI-COM-2.0.0.xsd"/>
    
    <xs:element name="AppFulfillment" type="ApplicationFulfillmentType"/>
    <xs:element name="AcknowledgementMessage" type="com:AcknowledgementMessageType"/>

    <xs:complexType name="ApplicationFulfillmentType">
        <xs:sequence>
            <xs:group ref="ApplicationFulfillmentHeaderGroup"/>
            <xs:element name="ReportData" type="com:ReportDataType" minOccurs="0" maxOccurs="unbounded"/>
            <xs:element name="Events" type="EventsType" maxOccurs="unbounded"/>
        </xs:sequence>
    </xs:complexType>
    
    <xs:complexType name="EventsType">
        <xs:sequence>
            <xs:element name="GeoCode" type="com:GeographicCodeType"/>
            <xs:element name="ReportData" type="com:ReportDataType" minOccurs="0" maxOccurs="unbounded"/>
            <xs:element name="Event" type="EventType" maxOccurs="unbounded"/>
        </xs:sequence>
    </xs:complexType>
    <xs:group name="ApplicationFulfillmentHeaderGroup">
        <xs:sequence>
            <xs:element name="Version" type="com:VersionType"/>
            <xs:element name="Timestamp" type="com:TimestampType"/>
            <xs:element name="DerivativeId" type="com:DerivativeIdType" minOccurs="0"/>
        </xs:sequence>
    </xs:group>

    <xs:complexType name="VoteType">
        <xs:complexContent>
            <xs:extension base="EventType">
                <xs:sequence>
                    <xs:element name="Result" type="ResultType" minOccurs="1" maxOccurs="unbounded"
                    />
                </xs:sequence>
            </xs:extension>
        </xs:complexContent>
    </xs:complexType>

    <xs:complexType name="RFIType">
        <xs:complexContent>
            <xs:extension base="EventType">
                <xs:sequence>
                    <xs:element name="SubscriberInfo" type="SubscriberInfoType" minOccurs="1" maxOccurs="unbounded"/>
                    <xs:element name="Parameters" type="com:ParametersType" minOccurs="0"/>
                </xs:sequence>
            </xs:extension>
        </xs:complexContent>
    </xs:complexType>

    <xs:group name="SubscriberContactGroup">
        <xs:sequence>
            <xs:element name="Address" type="AddressType" minOccurs="0"/>
            <xs:element name="PhoneNumber" type="com:PhoneNumberType" minOccurs="0"/>
            <xs:element name="EmailAddress" type="xs:string" minOccurs="0"/>
        </xs:sequence>
    </xs:group>
    
    <xs:complexType name="ResultType">
        <xs:simpleContent>
            <xs:extension base="xs:integer">
                <xs:attribute name="userInput" type="com:UserInputType" use="required"/>
            </xs:extension>
        </xs:simpleContent>
    </xs:complexType>

    <xs:complexType name="AddressType">
        <xs:sequence>
            <xs:element name="Street1" type="xs:string"/>
            <xs:element name="Street2" type="xs:string"/>
            <xs:element name="City" type="xs:string"/>
            <xs:element name="State" type="StateType"/>
            <xs:element name="Zip" type="com:ZipcodeType"/>
        </xs:sequence>
    </xs:complexType>

    <xs:simpleType name="StateType">
        <xs:restriction base="xs:string">
            <xs:pattern value="[A-Z]{2}"/>
        </xs:restriction>
    </xs:simpleType>

    <xs:complexType name="SubscriberInfoType">
        <xs:sequence>
            <xs:element name="FirstName" type="xs:string"/>
            <xs:element name="LastName" type="xs:string"/>
            <xs:group ref="SubscriberContactGroup"/>
            <xs:element name="Parameters" type="com:ParametersType" minOccurs="0"/>
        </xs:sequence>
    </xs:complexType>

    <xs:complexType name="EventType" abstract="true">
        <xs:sequence>
            <xs:group ref="com:PackageIDGroup"/>
            <xs:element name="ReportData" type="com:ReportDataType" minOccurs="0" maxOccurs="unbounded"/>
        </xs:sequence>
    </xs:complexType>

</xs:schema>
