<?xml version="1.0" encoding="utf-8"?>
<xs:schema xmlns:xs="http://www.w3.org/2001/XMLSchema" 
           xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
           xmlns="http://www.nrk.no/external/tv-catalog/v1"
           targetNamespace="http://www.nrk.no/external/tv-catalog/v1" 
           elementFormDefault="qualified">
  <xs:element name="TvCatalog" type="TvCatalog"/>
  <xs:element name="SequentialSeries" type="SequentialSeries"/>
  <xs:element name="SingleProgram" type="Program"/>
  <xs:element name="RepeatingProgram" type="RepeatingProgram"/>
  <xs:simpleType name="Title">
    <xs:restriction base="xs:string">
      <xs:maxLength value="150"/>
    </xs:restriction>
  </xs:simpleType>
  <xs:simpleType name="Subtitle">
    <xs:restriction base="xs:string">
      <xs:maxLength value="150"/>
    </xs:restriction>
  </xs:simpleType>
  <xs:simpleType name="Description">
    <xs:restriction base="xs:string">
      <xs:maxLength value="2000"/>
    </xs:restriction>
  </xs:simpleType>
  <xs:simpleType name="Name">
    <xs:restriction base="xs:string">
      <xs:maxLength value="100"/>
    </xs:restriction>
  </xs:simpleType>
  <xs:simpleType name="Role">
    <xs:restriction base="xs:string">
      <xs:maxLength value="30"/>
    </xs:restriction>
  </xs:simpleType>
  <xs:simpleType name="Id">
    <xs:restriction base="xs:string">
      <xs:maxLength value="100"/>
    </xs:restriction>
  </xs:simpleType>
  <xs:simpleType name="Category">
    <xs:restriction base="xs:string">
      <xs:enumeration value="barn"/>
      <xs:enumeration value="dokumentar"/>
      <xs:enumeration value="drama-serier"/>
      <xs:enumeration value="film"/>
      <xs:enumeration value="humor"/>
      <xs:enumeration value="kultur"/>
      <xs:enumeration value="livsstil"/>
      <xs:enumeration value="natur"/>
      <xs:enumeration value="NRK-arkivet"/>
      <xs:enumeration value="nyheter"/>
      <xs:enumeration value="samisk"/>
      <xs:enumeration value="sport"/>
      <xs:enumeration value="underholdning"/>
      <xs:enumeration value="vitenskap"/>
    </xs:restriction>
  </xs:simpleType>
  <xs:simpleType name="Rating">
    <xs:restriction base="xs:string">
      <xs:enumeration value="A"/>
      <xs:enumeration value="6"/>
      <xs:enumeration value="9"/>
      <xs:enumeration value="12"/>
      <xs:enumeration value="15"/>
      <xs:enumeration value="18"/>
      <xs:enumeration value="Exempt">
        <xs:annotation>
          <xs:documentation>Exempt from rating according to Norwegian law: https://lovdata.no/NL/lov/2015-02-06-7/§4</xs:documentation>
        </xs:annotation>
      </xs:enumeration>
    </xs:restriction>
  </xs:simpleType>
  <xs:complexType name="Assets">
    <xs:sequence>
      <xs:element name="AppOpen" type="xs:anyURI"/>
      <xs:element name="AppPlay" type="xs:anyURI" minOccurs="0"/>
      <xs:element name="WebOpen" type="xs:anyURI"/>
      <xs:element name="WebPlay" type="xs:anyURI" minOccurs="0"/>
    </xs:sequence>
  </xs:complexType>
  <xs:complexType name="Categories">
    <xs:sequence>
      <xs:element name="Category" type="Category" minOccurs="0" maxOccurs="unbounded"/>
    </xs:sequence>
  </xs:complexType>
  <xs:complexType name="Contributor">
    <xs:sequence>
      <xs:element name="Name" type="Name"/>
      <xs:element name="Role" type="Role"/>
    </xs:sequence>
  </xs:complexType>
  <xs:complexType name="Contributors">
    <xs:sequence>
      <xs:element name="Contributor" type="Contributor" minOccurs="0" maxOccurs="unbounded"/>
    </xs:sequence>
  </xs:complexType>
  <xs:complexType name="Image">
    <xs:sequence>
      <xs:element name="Width" type="xs:unsignedShort"/>
      <xs:element name="Height" type="xs:unsignedShort"/>
      <xs:element name="Url" type="xs:anyURI"/>
    </xs:sequence>
  </xs:complexType>
  <xs:complexType name="Images">
    <xs:sequence>
      <xs:element name="Image" type="Image" minOccurs="0" maxOccurs="unbounded"/>
    </xs:sequence>
  </xs:complexType>
  <xs:complexType name="Mentions">
    <xs:sequence>
      <xs:element name="Mentioned" type="Name" minOccurs="0" maxOccurs="unbounded"/>
    </xs:sequence>
  </xs:complexType>
  <xs:complexType name="Program">
    <xs:sequence>
      <xs:element name="ProgramId" type="Id"/>
      <xs:element name="Title" type="Title"/>
      <xs:element name="Subtitle" type="Subtitle"/>
      <xs:element name="Description" type="Description"/>
      <xs:element name="Categories" type="Categories"/>
      <xs:element name="Mentions" type="Mentions"/>
      <xs:element name="Contributors" type="Contributors"/>
      <xs:element name="ProductionYear" type="xs:unsignedShort" nillable="true"/>
      <xs:element name="Rating" type="Rating"/>
      <xs:element name="Duration" type="xs:duration" nillable="true"/>
      <xs:element name="Assets" type="Assets"/>
      <xs:element name="UsageRight" type="UsageRight" minOccurs="0"/>
      <xs:element name="Images" type="Images"/>
    </xs:sequence>
  </xs:complexType>
  <xs:complexType name="Instalment">
    <xs:sequence>
      <xs:element name="Program" type="Program"/>
      <xs:element name="InstalmentDate" type="xs:date"/>
    </xs:sequence>
  </xs:complexType>
  <xs:complexType name="Instalments">
    <xs:sequence>
      <xs:element name="Instalment" type="Instalment" minOccurs="1" maxOccurs="unbounded"/>
    </xs:sequence>
  </xs:complexType>
  <xs:complexType name="RepeatingProgram">
    <xs:sequence>
      <xs:element name="Id" type="Id"/>
      <xs:element name="Title" type="Title"/>
      <xs:element name="Description" type="Description"/>
      <xs:element name="Categories" type="Categories"/>
      <xs:element name="Assets" type="Assets"/>
      <xs:element name="Images" type="Images"/>
      <xs:element name="Instalments" type="Instalments"/>
    </xs:sequence>
  </xs:complexType>
  <xs:complexType name="RepeatingPrograms">
    <xs:sequence>
      <xs:element name="RepeatingProgram" type="RepeatingProgram" minOccurs="0" maxOccurs="unbounded">
        <xs:annotation>
          <xs:documentation>Repeating program are programs that are a part of a series, a series that is not sequential. 
            Normally youd would like to see the latest program, not the first program (episode) in the series.</xs:documentation>
        </xs:annotation>
      </xs:element>
    </xs:sequence>
  </xs:complexType>
  <xs:complexType name="Episode">
    <xs:sequence>
      <xs:element name="Program" type="Program"/>
      <xs:element name="SequenceNumber" type="xs:int"/>
    </xs:sequence>
  </xs:complexType>
  <xs:complexType name="Episodes">
    <xs:sequence>
      <xs:element name="Episode" type="Episode" minOccurs="1" maxOccurs="unbounded"/>
    </xs:sequence>
  </xs:complexType>
  <xs:complexType name="Season">
    <xs:sequence>
      <xs:element name="SeasonName" type="Title"/>
      <xs:element name="SequenceNumber" type="xs:unsignedShort"/>
      <xs:element name="Premiere" type="xs:date"/>
      <xs:element name="Finale" type="xs:date"/>
      <xs:element name="CountEpisodes" type="xs:int"/>
      <xs:element name="Episodes" type="Episodes"/>
    </xs:sequence>
  </xs:complexType>
  <xs:complexType name="Seasons">
    <xs:sequence>
      <xs:element name="Season" type="Season" minOccurs="1" maxOccurs="unbounded"/>
    </xs:sequence>
  </xs:complexType>
  <xs:complexType name="SequentialSeries">
    <xs:sequence>
      <xs:element name="Id" type="Id"/>
      <xs:element name="Title" type="Title"/>
      <xs:element name="Description" type="Description"/>
      <xs:element name="Categories" type="Categories"/>
      <xs:element name="Assets" type="Assets"/>
      <xs:element name="Images" type="Images"/>
      <xs:element name="Seasons" type="Seasons"/>
    </xs:sequence>
  </xs:complexType>
  <xs:complexType name="SequentialSeriesList">
    <xs:sequence>
      <xs:element name="SequentialSeries" type="SequentialSeries" minOccurs="0" maxOccurs="unbounded">
        <xs:annotation>
          <xs:documentation>
            Sequential series are programs that are a part of a series, a series that is sequential.
            Normally youd would like to see the first program in the series, or continue from where you last watched.
          </xs:documentation>
        </xs:annotation>
      </xs:element>
    </xs:sequence>
  </xs:complexType>
  <xs:complexType name="SinglePrograms">
    <xs:sequence>
      <xs:element name="SingleProgram" type="Program" minOccurs="0" maxOccurs="unbounded"/>
    </xs:sequence>
  </xs:complexType>
  <xs:complexType name="TvCatalog">
    <xs:sequence>
      <xs:element name="SinglePrograms" type="SinglePrograms"/>
      <xs:element name="SequentialSeriesList" type="SequentialSeriesList"/>
      <xs:element name="RepeatingPrograms" type="RepeatingPrograms"/>
    </xs:sequence>
  </xs:complexType>
  <xs:complexType name="UsageRight">
    <xs:sequence>
      <xs:element name="IsGeoBlocked" type="xs:boolean"/>
      <xs:element name="AvailableFrom" type="xs:dateTime"/>
      <xs:element name="AvailableTo" type="xs:dateTime"/>
    </xs:sequence>
  </xs:complexType>
</xs:schema>
