<?xml version="1.0" encoding="utf-8"?>
<!-- This XSD is created by TheOrchard and not provided by vendor -->
<xs:schema xmlns:xs="http://www.w3.org/2001/XMLSchema">

    <!-- Top Level Schema structure -->
    <xs:element name="ADI">
        <xs:complexType>
            <xs:sequence>
                <xs:element ref="Metadata"/>
                <xs:element name="Asset" type="Asset_title"/>
            </xs:sequence>
        </xs:complexType>
    </xs:element>

    <!-- Level 2: Breakdown Top to smaller types. Diff for each asset to handle required fields for each asset seperately. -->
    <xs:complexType name="Asset_title">
        <xs:sequence>
            <xs:element name="Metadata" type="Metadata_Asset_title"/>
            <xs:element name="Asset" type="Asset_thumbnail"/>
            <xs:element name="Asset" type="Asset_movie"/>
            <xs:element name="Asset" type="Asset_preview"  minOccurs="0" maxOccurs="1" />
        </xs:sequence>
    </xs:complexType>
    <xs:complexType name="Asset_movie">
        <xs:sequence>
            <xs:element name="Metadata" type="Metadata_Asset_movie"/>
            <xs:element name="Content" type="Content_Asset"/>
        </xs:sequence>
    </xs:complexType>
    <xs:complexType name="Asset_thumbnail">
        <xs:sequence>
            <xs:element name="Metadata" type="Metadata_Asset_thumbnail"/>
            <xs:element name="Content" type="Content_Asset"/>
        </xs:sequence>
    </xs:complexType>
    <xs:complexType name="Asset_preview">
        <xs:sequence>
            <xs:element name="Metadata" type="Metadata_Asset_preview"/>
            <xs:element name="Content" type="Content_Asset"/>
        </xs:sequence>
    </xs:complexType>


    <!-- Level 3: Basic metadata for Asset_Class="package"  -->
    <xs:element name="Metadata">
        <xs:complexType>
            <xs:sequence>
                <xs:element ref="AMS"/>
                <xs:element name="App_Data" type="App_Data_Metadata_Spec_Version"/>
                <xs:element name="App_Data" type="App_Data_Provider_Content_Tier"  minOccurs="0"/>
            </xs:sequence>
        </xs:complexType>
    </xs:element>
    <!-- Level 3: metadata for Asset_Class="title"  -->
    <xs:complexType name="Metadata_Asset_title">
        <xs:sequence>
            <xs:element ref="AMS"/>
            <xs:element name="App_Data" type="App_Data_Title_Brief"/>
            <xs:element name="App_Data" type="App_Data_Y_N"/> <!-- Closed_Captioning -->
            <xs:element name="App_Data" type="App_Data_String_Any"/> <!-- Title -->
            <xs:element name="App_Data" type="App_Data_Type"/> <!-- Type -->
            <xs:element name="App_Data" type="App_Data_256_Char"/> <!-- Summary_Short -->
            <xs:element name="App_Data" type="App_Data_Rating"/>
            <xs:element name="App_Data" type="App_Data_H_I_S"/> <!-- Run_Time -->
            <xs:element name="App_Data" type="App_Data_Display_Run_Time"/>
            <xs:element name="App_Data" type="App_Data_Year"/>
            <xs:element name="App_Data" type="App_Data_1024_char"/> <!-- Actors_Display -->
            <xs:element name="App_Data" type="App_Data_32_char"/> <!-- Studio -->
            <xs:element name="App_Data" type="App_Data_Genre" />
            <xs:element name="App_Data" type="App_Data_Digit_5"/> <!-- Billing_ID -->
            <xs:element name="App_Data" type="App_Data_Timestamp" /> <!-- Licensing_Window_Start & end -->
            <xs:element name="App_Data" type="App_Data_Timestamp" /> <!-- Licensing_Window_Start & end -->
            <xs:element name="App_Data" type="App_Data_String_Any" /> <!-- Provider_QA_Contact -->
            <xs:element name="App_Data" type="App_Data_Studio_Name"/>
            <xs:element name="App_Data" type="App_Data_Integer" minOccurs="1"/> <!-- Preview_Period -->
            <xs:element name="App_Data" type="App_Data_128_Char"/> <!-- Distributor_Name -->
            <xs:element name="App_Data" type="App_Data_String_Any"  minOccurs="0"/> <!-- Programmer_Call_Letters -->

            <xs:element name="App_Data" type="App_Data_256_Char" minOccurs="0" /> <!-- series name -->
            <xs:element name="App_Data" type="App_Data_256_Char" minOccurs="0" /> <!-- series id-->
            <xs:element name="App_Data" type="App_Data_String_Any" minOccurs="0" /> <!-- Episode_Name -->
            <xs:element name="App_Data" type="App_Data_Category"  minOccurs="1" /> <!--  *Category-->

            <xs:element name="App_Data" type="App_Data_Integer"  minOccurs="0"  maxOccurs="2"/> <!-- Display_As_Last_Chance & Display_As_New -->

        </xs:sequence>
    </xs:complexType>

    <!-- Level 3: metadata for Asset_Class="movie"  -->
    <xs:complexType name="Metadata_Asset_movie">
        <xs:sequence>
            <xs:element ref="AMS"/>
            <xs:element name="App_Data" type="App_Data_movie"/>
            <xs:element name="App_Data" type="App_Data_Lang_code"  /> <!-- Languages-->
            <xs:element name="App_Data" type="App_Data_Audio_Type" />
            <xs:element name="App_Data" type="App_Data_Integer" /> <!-- Content_FileSize -->
            <xs:element name="App_Data" type="App_Data_String_Any" /> <!-- Content_CheckSum -->
            <xs:element name="App_Data" type="App_Data_Y_N" /> <!-- HDContent -->
            <xs:element name="App_Data" type="App_Data_Decimal_Any" /> <!-- Bit_Rate -->
            <xs:element name="App_Data" type="App_Data_String_Any" minOccurs="0" maxOccurs="1" /> <!-- trickModesRestricted -->
        </xs:sequence>
    </xs:complexType>

    <!-- Level 3: metadata for Asset_Class="preview"  -->
    <xs:complexType name="Metadata_Asset_preview">
        <xs:sequence>
            <xs:element ref="AMS"/>
            <xs:element name="App_Data" type="App_Data_preview"/>
            <xs:element name="App_Data" type="App_Data_String_Any" />  <!-- Language -->
            <xs:element name="App_Data" type="App_Data_Audio_Type" />

            <xs:element name="App_Data" type="App_Data_Integer" />  <!-- Content_FileSize -->
            <xs:element name="App_Data" type="App_Data_String_Any"/>  <!-- Content_CheckSum -->

            <xs:element name="App_Data" type="App_Data_Rating"/>
            <xs:element name="App_Data" type="App_Data_H_I_S"/> <!-- Run_Time -->
            <xs:element name="App_Data" type="App_Data_Screen_Format" /> <!-- Screen_Format -->

            <xs:element name="App_Data" type="App_Data_Resolution" minOccurs="1" maxOccurs="1"/>
            <xs:element name="App_Data" type="App_Data_Frame_Rate" minOccurs="1" maxOccurs="1"/>
            <xs:element name="App_Data" type="App_Data_String_Any" minOccurs="0" maxOccurs="1"/>  <!-- trickModesRestricted  -->
        </xs:sequence>
    </xs:complexType>

    <!-- Level 3: metadata for Asset_Class="thumbnail"  -->
    <xs:complexType name="Metadata_Asset_thumbnail">
        <xs:sequence>
            <xs:element ref="AMS"/>
            <xs:element name="App_Data" type="App_Data_poster"/>
            <xs:element name="App_Data" type="App_Data_Integer" /> <!-- Content_FileSize -->
            <xs:element name="App_Data" type="App_Data_String_Any" /> <!-- Content_CheckSum -->
        </xs:sequence>
    </xs:complexType>

    <!-- Level 3: Common content filename for all Asset_Class  -->
    <xs:complexType name="Content_Asset">
        <xs:attribute name="Value" type="xs:string" use="required"/>
    </xs:complexType>

    <!-- AMS -->
    <xs:element name="AMS">
        <xs:complexType>
            <xs:attribute name="Asset_Class" type="AssetClassList"/>
            <xs:attribute name="Asset_ID" type="AssetIDType"/>
            <xs:attribute name="Asset_Name" type="string_50"/>
            <xs:attribute name="Creation_Date" type="xs:date"/>
            <xs:attribute name="Description" type="xs:string"/>
            <xs:attribute name="Product" type="string_20"/>
            <xs:attribute name="Provider" type="xs:string"/>
            <xs:attribute name="Provider_ID" type="string_20"/>
            <xs:attribute name="Version_Major" type="xs:integer"/>
            <xs:attribute name="Version_Minor" type="xs:integer"/>
        </xs:complexType>
    </xs:element>


    <!-- Different App_Data Tag Types seperate to avoid not determinist error and handle enum type values -->
    <xs:complexType name="App_Data_Metadata_Spec_Version">
        <xs:attribute name="App" type="AppList"/>
        <xs:attribute name="Name" fixed="Metadata_Spec_Version"/>
        <xs:attribute name="Value" type="xs:string" use="required"/>
    </xs:complexType>

    <xs:complexType name="App_Data_Provider_Content_Tier">
        <xs:attribute name="App" type="AppList"/>
        <xs:attribute name="Name" fixed="Provider_Content_Tier"/>
        <xs:attribute name="Value" type="xs:string" use="required"/>
    </xs:complexType>

    <xs:complexType name="App_Data_Title_Brief">
        <xs:attribute name="App" type="AppList"/>
        <xs:attribute name="Name" fixed="Title_Brief"/>
        <xs:attribute name="Value" type="string_19" use="required"/>
    </xs:complexType>

    <xs:complexType name="App_Data_movie">
        <xs:attribute name="App" type="AppList"/>
        <xs:attribute name="Name" fixed="Type"/>
        <xs:attribute name="Value" fixed="movie" use="required"/>
    </xs:complexType>

    <xs:complexType name="App_Data_poster">
        <xs:attribute name="App" type="AppList"/>
        <xs:attribute name="Name" fixed="Type"/>
        <xs:attribute name="Value" fixed="box cover" use="required"/>
    </xs:complexType>
    <xs:complexType name="App_Data_preview">
        <xs:attribute name="App" type="AppList"/>
        <xs:attribute name="Name" fixed="Type"/>
        <xs:attribute name="Value" fixed="preview" use="required"/>
    </xs:complexType>

    <!-- Two character language code from 639-1. -->
    <xs:complexType name="App_Data_Lang_code">
        <xs:attribute name="App" type="AppList"/>
        <xs:attribute name="Name" type="xs:string"/>
        <xs:attribute name="Value" type="string_2" use="required"/>
    </xs:complexType>

    <xs:complexType name="App_Data_Audio_Type">
        <xs:attribute name="App" type="AppList"/>
        <xs:attribute name="Name" fixed="Audio_Type"/>
        <xs:attribute name="Value" type="AudioTypeList" use="required"/>
    </xs:complexType>

    <xs:complexType name="App_Data_String_Any">
        <xs:attribute name="App" type="AppList"/>
        <xs:attribute name="Name" type="xs:string"/>
        <xs:attribute name="Value" type="xs:string" use="required"/>
    </xs:complexType>

    <xs:complexType name="App_Data_Y_N">
        <xs:attribute name="App" type="AppList"/>
        <xs:attribute name="Name" type="xs:string"/>
        <xs:attribute name="Value" type="YesNoType" use="required"/>
    </xs:complexType>

    <xs:complexType name="App_Data_Type">
        <xs:attribute name="App" type="AppList"/>
        <xs:attribute name="Name" type="xs:string"/>
        <xs:attribute name="Value" type="AssetClassList" use="required"/>
    </xs:complexType>

    <xs:complexType name="App_Data_256_Char">
        <xs:attribute name="App" type="AppList"/>
        <xs:attribute name="Name" type="xs:string"/>
        <xs:attribute name="Value" type="string_256" use="required"/>
    </xs:complexType>

    <xs:complexType name="App_Data_128_Char">
        <xs:attribute name="App" type="AppList"/>
        <xs:attribute name="Name" type="xs:string"/>
        <xs:attribute name="Value" type="string_128" use="required"/>
    </xs:complexType>

    <xs:complexType name="App_Data_Studio_Name">
        <xs:attribute name="App" type="AppList"/>
        <xs:attribute name="Name" fixed="Studio_Name"/>
        <xs:attribute name="Value" type="string_128" use="required"/>
    </xs:complexType>

    <xs:complexType name="App_Data_Category">
        <xs:attribute name="App" type="AppList"/>
        <xs:attribute name="Name" fixed="Category"/>
        <xs:attribute name="Value" type="string_128" use="required"/>
    </xs:complexType>


    <xs:complexType name="App_Data_Rating">
        <xs:attribute name="App" type="AppList"/>
        <xs:attribute name="Name" fixed="Rating"/>
        <xs:attribute name="Value" type="Rating" use="required"/>
    </xs:complexType>

    <xs:complexType name="App_Data_H_I_S">
        <xs:attribute name="App" type="AppList"/>
        <xs:attribute name="Name" type="xs:string"/>
        <xs:attribute name="Value" type="xs:time" use="required"/>
    </xs:complexType>

    <xs:complexType name="App_Data_Timestamp">
        <xs:attribute name="App" type="AppList"/>
        <xs:attribute name="Name" type="xs:string"/>
        <xs:attribute name="Value" type="xs:dateTime" use="required"/>
    </xs:complexType>

    <xs:complexType name="App_Data_Display_Run_Time">
        <xs:attribute name="App" type="AppList"/>
        <xs:attribute name="Name" fixed="Display_Run_Time"/>
        <xs:attribute name="Value" type="Display_Run_Time" use="required"/>
    </xs:complexType>

    <xs:complexType name="App_Data_Year">
        <xs:attribute name="App" type="AppList"/>
        <xs:attribute name="Name" fixed="Year"/>
        <xs:attribute name="Value" type="Digit_4" use="required"/>
    </xs:complexType>

    <xs:complexType name="App_Data_Decimal_Any">
        <xs:attribute name="App" type="AppList"/>
        <xs:attribute name="Name" type="xs:string"/>
        <xs:attribute name="Value" type="xs:decimal" use="required"/>
    </xs:complexType>

    <xs:complexType name="App_Data_Suggested_Price">
        <xs:attribute name="App" type="AppList"/>
        <xs:attribute name="Name" fixed="Suggested_Price"/>
        <xs:attribute name="Value" type="xs:decimal" use="required"/>
    </xs:complexType>

    <xs:complexType name="App_Data_1024_char">
        <xs:attribute name="App" type="AppList"/>
        <xs:attribute name="Name" type="xs:string"/>
        <xs:attribute name="Value" type="string_1024" use="required"/>
    </xs:complexType>

    <xs:complexType name="App_Data_32_char">
        <xs:attribute name="App" type="AppList"/>
        <xs:attribute name="Name" type="xs:string"/>
        <xs:attribute name="Value" type="string_32" use="required"/>
    </xs:complexType>

    <xs:complexType name="App_Data_Genre">
        <xs:attribute name="App" type="AppList"/>
        <xs:attribute name="Name" fixed="Genre"/>
        <xs:attribute name="Value" type="xs:string" use="required"/> <!-- no mapping provided -->
    </xs:complexType>

    <xs:complexType name="App_Data_Digit_5">
        <xs:attribute name="App" type="AppList"/>
        <xs:attribute name="Name" type="xs:string"/>
        <xs:attribute name="Value" type="Digit_5" use="required"/>
    </xs:complexType>

    <xs:complexType name="App_Data_Integer">
        <xs:attribute name="App" type="AppList"/>
        <xs:attribute name="Name" type="xs:string"/>
        <xs:attribute name="Value" type="xs:integer" use="required"/>
    </xs:complexType>

    <xs:complexType name="App_Data_Resolution">
        <xs:attribute name="App" type="AppList"/>
        <xs:attribute name="Name" fixed="Resolution"/>
        <xs:attribute name="Value" type="ResolutionList" use="required"/>
    </xs:complexType>

    <xs:complexType name="App_Data_Frame_Rate">
        <xs:attribute name="App" type="AppList"/>
        <xs:attribute name="Name" fixed="Frame_Rate"/>
        <xs:attribute name="Value" type="FrameRateList" use="required"/>
    </xs:complexType>

    <xs:complexType name="App_Data_Screen_Format">
        <xs:attribute name="App" type="AppList"/>
        <xs:attribute name="Name" fixed="Screen_Format"/>
        <xs:attribute name="Value" type="ScreenFormatList" use="required"/>
    </xs:complexType>


    <!-- Custom simple types for use above -->

    <xs:simpleType name="AssetClassList">
        <xs:restriction base="xs:string">
            <xs:enumeration value="title"/>
            <xs:enumeration value="movie"/>
            <xs:enumeration value="box cover"/>
            <xs:enumeration value="poster"/>
            <xs:enumeration value="preview"/>
            <xs:enumeration value="trickfile"/>
            <xs:enumeration value="encrypted"/>
            <xs:enumeration value="barker"/>
            <xs:enumeration value="package"/>
        </xs:restriction>
    </xs:simpleType>
    <xs:simpleType name="AudioTypeList">
        <xs:restriction base="xs:string">
            <xs:enumeration value="Dolby ProLogic"/>
            <xs:enumeration value="Dolby Digital"/>
            <xs:enumeration value="Stereo"/>
            <xs:enumeration value="Mono"/>
            <xs:enumeration value="Dolby 5.1"/>
        </xs:restriction>
    </xs:simpleType>
    <xs:simpleType name="FrameRateList">
        <xs:restriction base="xs:integer">
            <xs:enumeration value="12"/>
            <xs:enumeration value="15"/>
            <xs:enumeration value="24"/>
            <xs:enumeration value="25"/>
            <xs:enumeration value="30"/>
            <xs:enumeration value="60"/>
         </xs:restriction>
    </xs:simpleType>
    <xs:simpleType name="AppList">
        <xs:restriction base="xs:string">
            <xs:enumeration value="MOD"/>
            <xs:enumeration value="SVOD"/>
        </xs:restriction>
    </xs:simpleType>
    <xs:simpleType name="ResolutionList">
        <xs:restriction base="xs:string">
            <xs:enumeration value="480i"/>
            <xs:enumeration value="720p"/>
            <xs:enumeration value="1080i"/>
            <xs:enumeration value="1080p"/>
            <xs:enumeration value="SD"/>
            <xs:enumeration value="720HD"/>
            <xs:enumeration value="1080HD"/>
        </xs:restriction>
    </xs:simpleType>
    <xs:simpleType name="ScreenFormatList">
        <xs:restriction base="xs:string">
            <xs:enumeration value="Standard"/>
            <xs:enumeration value="Widescreen"/>
            <xs:enumeration value="Letterbox"/>
            <xs:enumeration value="OAR"/>
        </xs:restriction>
    </xs:simpleType>
    <xs:simpleType name="Rating">
        <xs:restriction base="xs:string">
            <xs:enumeration value="G"/>
            <xs:enumeration value="PG"/>
            <xs:enumeration value="PG-13"/>
            <xs:enumeration value="R"/>
            <xs:enumeration value="NC-17"/>
            <xs:enumeration value="TV-Y"/>
            <xs:enumeration value="TV-Y7"/>
            <xs:enumeration value="TV-G"/>
            <xs:enumeration value="TV-PG"/>
            <xs:enumeration value="TV-14"/>
            <xs:enumeration value="TV-MA"/>
            <xs:enumeration value="D"/>
            <xs:enumeration value="FV"/>
            <xs:enumeration value="L"/>
            <xs:enumeration value="S"/>
            <xs:enumeration value="V"/>
            <xs:enumeration value="Unrated"/>
            <xs:enumeration value="NR"/>
            <xs:enumeration value="X"/>
        </xs:restriction>
    </xs:simpleType>
    <xs:simpleType name="YesNoType">
        <xs:restriction base="xs:string">
            <xs:enumeration value="Y"/>
            <xs:enumeration value="N"/>
        </xs:restriction>
    </xs:simpleType>
    <xs:simpleType name="AssetIDType">
        <xs:restriction base="xs:string">
            <xs:pattern value="([a-z|A-Z]){4}[0-9]{16}"/>
        </xs:restriction>
    </xs:simpleType>
    <xs:simpleType name="string_50">
        <xs:restriction base="xs:normalizedString">
            <xs:maxLength value="50"/>
        </xs:restriction>
    </xs:simpleType>
    <xs:simpleType name="string_19">
        <xs:restriction base="xs:normalizedString">
            <xs:maxLength value="19"/>
        </xs:restriction>
    </xs:simpleType>
    <xs:simpleType name="string_20">
        <xs:restriction base="xs:normalizedString">
            <xs:maxLength value="20"/>
        </xs:restriction>
    </xs:simpleType>
    <xs:simpleType name="string_2">
        <xs:restriction base="xs:normalizedString">
            <xs:maxLength value="2"/>
        </xs:restriction>
    </xs:simpleType>
    <xs:simpleType name="string_128">
        <xs:restriction base="xs:normalizedString">
            <xs:maxLength value="128"/>
        </xs:restriction>
    </xs:simpleType>
    <xs:simpleType name="string_256">
        <xs:restriction base="xs:normalizedString">
            <xs:maxLength value="256"/>
        </xs:restriction>
    </xs:simpleType>
    <xs:simpleType name="string_1024">
        <xs:restriction base="xs:normalizedString">
            <xs:maxLength value="1024"/>
        </xs:restriction>
    </xs:simpleType>
    <xs:simpleType name="string_32">
        <xs:restriction base="xs:normalizedString">
            <xs:maxLength value="32"/>
        </xs:restriction>
    </xs:simpleType>
    <xs:simpleType name="H_I_S">
        <xs:restriction base="xs:string">
            <xs:pattern value="([0-9]{2}:[0-9]{2}:[0-9]{2})"/>
        </xs:restriction>
    </xs:simpleType>
    <xs:simpleType name="Display_Run_Time">
        <xs:restriction base="xs:string">
            <xs:pattern value="([0-9]{2}:[0-9]{2})"/>
        </xs:restriction>
    </xs:simpleType>
    <xs:simpleType name="Digit_4">
        <xs:restriction base="xs:string">
            <xs:pattern value="([0-9]{4})"/>
        </xs:restriction>
    </xs:simpleType>
    <xs:simpleType name="Digit_5">
        <xs:restriction base="xs:string">
            <xs:pattern value="([0-9]{5})"/>
        </xs:restriction>
    </xs:simpleType>


</xs:schema>