<?xml version="1.0" encoding="utf-8"?>
<xs:schema xmlns:xs="http://www.w3.org/2001/XMLSchema">
    
    <!-- content -->
    <xs:element name="content">
        <xs:complexType>
            <xs:sequence>
                <xs:element ref="metadata"  />
                <xs:element ref="files"     />
            </xs:sequence>
        </xs:complexType>
    </xs:element>

    <!-- metadata -->
    <xs:element name="metadata">
        <xs:complexType>
            <xs:sequence>
                <xs:element ref="series"    />
                <xs:element ref="season"    />
                <xs:element ref="video"     />
            </xs:sequence>
        </xs:complexType>
    </xs:element>
    
    <!-- series -->
    <xs:element name="series">
        <xs:complexType>
            <xs:all>
                <xs:element name="title"                type="_seriesTitle" />
                <xs:element name="description"          type="_seriesDescription" />
                <xs:element name="primarycategory"      type="_category" />
                <xs:element ref="additionalcategories"  minOccurs="0" />
                <xs:element name="channel"              type="_channel" />
            </xs:all>
        </xs:complexType>
    </xs:element>
    
    <xs:element name="additionalcategories">
        <xs:complexType>
            <xs:sequence minOccurs="0" maxOccurs="unbounded">
                <xs:element name="category" type="_category" />
            </xs:sequence>
        </xs:complexType>
    </xs:element>
    
    <!-- season -->
    <xs:element name="season">
        <xs:complexType>
            <xs:all>
                <xs:element name="seasonnumber"         type="_seasonNumber"        />
                <xs:element name="seasonsynopsis"       type="_seasonSynopsis"      minOccurs="0" />
                <xs:element name="tuneininformation"    type="xs:string"            minOccurs="0" />
            </xs:all>
        </xs:complexType>
    </xs:element>
    
    <!-- video -->
    <xs:element name="video">
        <xs:complexType>
            <xs:choice minOccurs="0" maxOccurs="unbounded">
                <xs:element name="mediatype"             type="_mediaType" />
                <xs:element name="title"                 type="_title" />
                <xs:element name="episodenumber"         type="_episodeNumber"  minOccurs="0" />
                <xs:element name="rating"                type="_rating"         minOccurs="0" />
                <xs:element name="contentratingreason"   type="_ratingReason"   minOccurs="0" />
                <xs:element ref="availabledate"          minOccurs="0"          maxOccurs="5" />
                <xs:element ref="expirationdate"         minOccurs="0"          maxOccurs="5" />
                <xs:element name="description"           type="_description"    minOccurs="0" />
                <xs:element name="fulldescription"       type="_fullDescription" minOccurs="0" />
                <xs:element name="copyright"             type="_copyright"      minOccurs="0" />
                <xs:element name="keywords"              type="_keywords" />
                <xs:element name="language"              type="xs:string" />
                <xs:element name="programmingtype"       type="_programmingType" />
                <xs:element name="externalid"            type="_externalId"     minOccurs="0" />
                <xs:element name="originalpremieredate"  type="_date" />
                <xs:element name="segments"              type="_segments"       minOccurs="0" />
                <xs:element name="videocategory"         type="xs:string"       minOccurs="0" />
                <xs:element name="allowanyavailabilitydate" type="xs:string"    minOccurs="0" />
                <xs:element name="daypart"               type="xs:string"       minOccurs="0" />
                <xs:element name="leagueseason"          type="xs:string"       minOccurs="0" />
                <xs:element name="gameseason"            type="xs:string"       minOccurs="0" />
                <xs:element name="contentcluster"        type="xs:string"       minOccurs="0" />
                <xs:element name="md5hash"               type="xs:string"       minOccurs="0" />
                <xs:element name="authwindow"            type="xs:string"       minOccurs="0" />
            </xs:choice>
        </xs:complexType>
    </xs:element>
     
    <xs:element name="availabledate">
        <xs:complexType>
            <xs:simpleContent>
                <xs:extension base="_date">
                    <xs:attribute name="package" type="xs:string" />
                </xs:extension>
            </xs:simpleContent>
        </xs:complexType>
    </xs:element>

    <xs:element name="expirationdate">
        <xs:complexType>
            <xs:simpleContent>
                <xs:extension base="_date">
                    <xs:attribute name="package" type="xs:string" />
                </xs:extension>
            </xs:simpleContent>
        </xs:complexType>
    </xs:element>

    <!-- files -->
    <xs:element name="files">
        <xs:complexType>
            <xs:sequence maxOccurs="unbounded">
                <xs:element ref="file" />
            </xs:sequence>
        </xs:complexType>
    </xs:element>
    
    <xs:element name="file">
        <xs:complexType>
            <xs:sequence>
                <xs:element name="filetype" type="_fileType" minOccurs="0"/>
                <xs:element name="filename" type="_fileName" minOccurs="0"/>
            </xs:sequence>
        </xs:complexType>
    </xs:element>
        
    <!-- type declarations -->
    <xs:simpleType name="_category">
        <xs:restriction base="xs:string">
            <xs:enumeration value="" />
            <xs:enumeration value="Action and Adventure" />
            <xs:enumeration value="Advertisement" />
            <xs:enumeration value="Animation" />
            <xs:enumeration value="Celebrity and Gossip" />
            <xs:enumeration value="College Basketball" />
            <xs:enumeration value="College Football" />
            <xs:enumeration value="College Sports" />
            <xs:enumeration value="Comedy" />
            <xs:enumeration value="Crime and Mystery" />
            <xs:enumeration value="Documentary and Biography" />
            <xs:enumeration value="Drama" />
            <xs:enumeration value="Extreme Sports" />
            <xs:enumeration value="Family and Kids" />
            <xs:enumeration value="Gaming" />
            <xs:enumeration value="Horror and Thriller" />
            <xs:enumeration value="House and Home" />
            <xs:enumeration value="International" />
            <xs:enumeration value="Lifestyle and Fashion" />
            <xs:enumeration value="Live Events and Specials" />
            <xs:enumeration value="Mixed Martial Arts/Fighting" />
            <xs:enumeration value="Music" />
            <xs:enumeration value="NBA" />
            <xs:enumeration value="News and Information" />
            <xs:enumeration value="NFL" />
            <xs:enumeration value="NHL" />
            <xs:enumeration value="Other Sports" />
            <xs:enumeration value="Outdoor Sports" />
            <xs:enumeration value="Outtake" />
            <xs:enumeration value="Political" />
            <xs:enumeration value="Reality and Game Show" />
            <xs:enumeration value="Sci Fi and Fantasy" />
            <xs:enumeration value="Soap Opera" />
            <xs:enumeration value="Sports and Fitness" />
            <xs:enumeration value="Talk and Interview" />
            <xs:enumeration value="Technology" />
            <xs:enumeration value="Travel and Nature" />
        </xs:restriction>
    </xs:simpleType>

    <xs:simpleType name="_channel">
        <xs:restriction base="xs:string">
            <xs:maxLength value="150"/>
        </xs:restriction>
    </xs:simpleType>

    <xs:simpleType name="_copyright">
        <xs:restriction base="xs:string">
        </xs:restriction>
    </xs:simpleType>

    <xs:simpleType name="_date">
        <xs:restriction base="xs:string">
            <xs:pattern value="([0-9]{4}[\-/][0-9]{1,2}[\-/][0-9]{1,2}[T\s]?([0-9]{2}:[0-9]{2}:[0-9]{2})?)?" />
        </xs:restriction>
    </xs:simpleType>
    
    <xs:simpleType name="_description">
        <xs:restriction base="xs:string">
        </xs:restriction>
    </xs:simpleType>
    
    <xs:simpleType name="_episodeNumber">
        <xs:restriction base="xs:positiveInteger">
            <xs:minInclusive value="1" />
            <xs:maxInclusive value="500000" />
        </xs:restriction>
    </xs:simpleType>

    <xs:simpleType name="_externalId">
        <xs:restriction base="xs:string">
            <xs:maxLength value="1000" />
        </xs:restriction>
    </xs:simpleType>
    
    <xs:simpleType name="_fileName">
        <xs:restriction base="xs:string">
            <xs:maxLength value="85" />
        </xs:restriction>
    </xs:simpleType>

    <xs:simpleType name="_fileType">
        <xs:restriction base="xs:string">
            <xs:enumeration value="Deliverable video" />
            <xs:enumeration value="Mezzanine video" />
            <xs:enumeration value="Mezzanine thumbnail" />
            <xs:enumeration value="Text" />
        </xs:restriction>
    </xs:simpleType>

    <xs:simpleType name="_fullDescription">
        <xs:restriction base="xs:string">
        </xs:restriction>
    </xs:simpleType>

    <xs:simpleType name="_keywords">
        <xs:restriction base="xs:string">
            <xs:maxLength value="1024" />
        </xs:restriction>
    </xs:simpleType>
    
    <xs:simpleType name="_mediaType">
        <xs:restriction base="xs:string">
            <xs:enumeration value="TV" />
            <xs:enumeration value="Film" />
            <xs:enumeration value="Music Video" />
            <xs:enumeration value="Web Original" />
            <xs:enumeration value="Sports" />
            <xs:enumeration value="Video Game" />
        </xs:restriction>
    </xs:simpleType>

    <xs:simpleType name="_programmingType">
        <xs:restriction base="xs:string">
            <xs:enumeration value="Advertisement" />
            <xs:enumeration value="Behind the Scenes" />
            <xs:enumeration value="Commentary" />
            <xs:enumeration value="Concert" />
            <xs:enumeration value="Condensed Game" />
            <xs:enumeration value="Current Preview" />
            <xs:enumeration value="Event" />
            <xs:enumeration value="Excerpt" />
            <xs:enumeration value="Full Episode" />
            <xs:enumeration value="Full Game" />
            <xs:enumeration value="Full Movie" />
            <xs:enumeration value="Highlights" />
            <xs:enumeration value="Interview" />
            <xs:enumeration value="Launch Trailer" />
            <xs:enumeration value="Miniseries" />
            <xs:enumeration value="Minisode" />
            <xs:enumeration value="Music Video" />
            <xs:enumeration value="Outtake" />
            <xs:enumeration value="Performance" />
            <xs:enumeration value="Recap" />
            <xs:enumeration value="Short Film" />
            <xs:enumeration value="Sneak Peek" />
            <xs:enumeration value="Special" />
            <xs:enumeration value="Teaser Trailer" />
            <xs:enumeration value="Trailer" />
            <xs:enumeration value="TV Spot" />
            <xs:enumeration value="Video Clip" />
            <xs:enumeration value="Web Exclusive" />
        </xs:restriction>
    </xs:simpleType>

    <xs:simpleType name="_rating">
        <xs:restriction base="xs:string">
            <xs:enumeration value="" />
            <xs:enumeration value="AO" />
            <xs:enumeration value="E" />
            <xs:enumeration value="E10+" />
            <xs:enumeration value="EC" />
            <xs:enumeration value="G" />
            <xs:enumeration value="M" />
            <xs:enumeration value="NC-17" />
            <xs:enumeration value="Not Rated" />
            <xs:enumeration value="No Rating" />
            <xs:enumeration value="NR" />
            <xs:enumeration value="NSFW" />
            <xs:enumeration value="PG" />
            <xs:enumeration value="PG-13" />
            <xs:enumeration value="R" />
            <xs:enumeration value="RP" />
            <xs:enumeration value="T" />
            <xs:enumeration value="TV-14" />
            <xs:enumeration value="TV-G" />
            <xs:enumeration value="TV-MA" />
            <xs:enumeration value="TV-PG" />
            <xs:enumeration value="TV-Y" />
            <xs:enumeration value="TV-Y7" />
            <xs:enumeration value="TV-Y7-FV" />
            <xs:enumeration value="Unrated" />
            <xs:enumeration value="X" />
        </xs:restriction>
    </xs:simpleType>
    
    <xs:simpleType name="_ratingReason">
        <xs:restriction base="xs:string">
            <xs:pattern value="(((D|FV|L|S|V|AT|N|BN|SS|SL|V),\s*)*(D|FV|L|S|V|AT|N|BN|SS|SL|V))?"/>
        </xs:restriction>
    </xs:simpleType>

    <xs:simpleType name="_seasonNumber">
        <xs:restriction base="xs:positiveInteger">
            <xs:minInclusive value="1"/>
            <xs:maxInclusive value="3000"/>
        </xs:restriction>
    </xs:simpleType>
    
    <xs:simpleType name="_seasonSynopsis">
        <xs:restriction base="xs:string">
            <xs:maxLength value="2000"/>
        </xs:restriction>
    </xs:simpleType>

    <xs:simpleType name="_segments">
        <xs:restriction base="xs:string">
            <xs:pattern value="((0[0-3]:[0-5][0-9]:[0-5][0-9];[0-9][0-9],)*(0[0-3]:[0-5][0-9]:[0-5][0-9];[0-9][0-9]))?"/>
        </xs:restriction>
    </xs:simpleType>

    <xs:simpleType name="_seriesDescription">
        <xs:restriction base="xs:string">
            <xs:minLength value="0"/>
            <xs:maxLength value="2000"/>
        </xs:restriction>
    </xs:simpleType>
    
    <xs:simpleType name="_seriesTitle">
        <xs:restriction base="xs:string">
            <xs:minLength value="1"/>
            <xs:maxLength value="96"/>
        </xs:restriction>
    </xs:simpleType>
    
    <xs:simpleType name="_title">
        <xs:restriction base="xs:string">
            <xs:minLength value="1"/>
            <xs:maxLength value="150"/>
        </xs:restriction>
    </xs:simpleType>
</xs:schema>
