<?xml version="1.0" encoding="utf-8" ?>
<xs:schema attributeFormDefault="unqualified" elementFormDefault="qualified" xmlns:xs="http://www.w3.org/2001/XMLSchema">
  <xs:element name="feed">
    <xs:complexType>
      <xs:all>
        <xs:element name="album" type="album" />
      </xs:all>
      <xs:attribute name="partnerID" type="xs:string" use="required" />
      <xs:attribute name="specVersion" type="specVersionList" use="required" />
    </xs:complexType>
  </xs:element>
  <xs:complexType name="album">
    <xs:all>
      <xs:element name="action" type="action" />
      <xs:element name="catalogNumber" type="xs:string" />
      <xs:element name="upc" type="upc" />
      <xs:element name="title" type="xs:string" />
      <xs:element name="parentalAdvisory" type="parentalAdvisoryList" />
      <xs:element name="releaseDate" type="xs:date" />
      <xs:element name="cline" type="xs:string" />
      <xs:element name="pline" type="xs:string" />
      <xs:element name="label" type="label" />
      <xs:element minOccurs="0" name="prices">
        <xs:complexType>
          <xs:all>
            <xs:element name="price" type="price" />
          </xs:all>
        </xs:complexType>
      </xs:element>
      <xs:element name="artists" type="artists" />
      <xs:element name="genres">
        <xs:complexType>
          <xs:all>
            <xs:element name="primary" type="genre" />
            <xs:element minOccurs="0" maxOccurs="1" name="secondary" type="genre" />
          </xs:all>
        </xs:complexType>
      </xs:element>
      <xs:element name="images">
        <xs:complexType>
          <xs:sequence maxOccurs="unbounded">
            <xs:element name="image" type="image" />
          </xs:sequence>
        </xs:complexType>
      </xs:element>
      <xs:element minOccurs="0" name="territoryRestrictions">
        <xs:complexType>
          <xs:sequence minOccurs="1" maxOccurs="unbounded">
            <xs:element minOccurs="1" maxOccurs="1" name="territory" type="territoryRestrictions" />
          </xs:sequence>
        </xs:complexType>
      </xs:element>
      <xs:element name="rights" type="albumRights" />
      <xs:element minOccurs="1" maxOccurs="1" name="duration" type="duration" />
      <xs:element minOccurs="1" maxOccurs="1" name="volumes">
        <xs:complexType>
          <xs:sequence minOccurs="1" maxOccurs="unbounded">
            <xs:element minOccurs="1" maxOccurs="1" name="volume">
              <xs:complexType>
                <xs:complexContent mixed="false">
                  <xs:extension base="volume" />
                </xs:complexContent>
              </xs:complexType>
            </xs:element>
          </xs:sequence>
          <xs:attribute name="volumeCount" type="positiveInteger" use="required" />
          <xs:attribute name="trackCount" type="positiveInteger" use="required" />
        </xs:complexType>
      </xs:element>
    </xs:all>
  </xs:complexType>
  <xs:complexType name="artists">
    <xs:all>
      <xs:element name="primary">
        <xs:complexType>
          <xs:all>
            <xs:element name="artist" type="primaryArtist" />
          </xs:all>
        </xs:complexType>
      </xs:element>
      <xs:element minOccurs="0" name="contributors">
        <xs:complexType>
          <xs:sequence minOccurs="1" maxOccurs="unbounded">
            <xs:element minOccurs="1" maxOccurs="1" name="artist" type="secondaryArtist" />
          </xs:sequence>
        </xs:complexType>
      </xs:element>
    </xs:all>
  </xs:complexType>
  <xs:complexType name="audio">
    <xs:all>
      <xs:element name="type" type="audioType" />
      <xs:element name="format" type="audioFormat" />
      <xs:element name="file" type="file" />
    </xs:all>
  </xs:complexType>
  <xs:complexType name="file">
    <xs:all minOccurs="1" maxOccurs="1">
      <xs:element minOccurs="1" maxOccurs="1" name="filename" type="xs:string" />
      <xs:element minOccurs="1" maxOccurs="1" name="checksum">
        <xs:complexType>
          <xs:simpleContent>
            <xs:extension base="checksum">
              <xs:attribute name="type" type="checksumType" use="required" />
            </xs:extension>
          </xs:simpleContent>
        </xs:complexType>
      </xs:element>
    </xs:all>
  </xs:complexType>
  <xs:complexType name="territoryRestrictions">
    <xs:all minOccurs="1" maxOccurs="1">
      <xs:element minOccurs="1" maxOccurs="1" name="country" type="countryCode" />
    </xs:all>
    <xs:attribute name="type" type="territoryTypeList" use="required" />
  </xs:complexType>
  <xs:complexType name="price">
    <xs:all>
      <xs:element name="wholesale_code" type="xs:string" />
    </xs:all>
  </xs:complexType>
  <xs:complexType name="image">
    <xs:all>
      <xs:element minOccurs="1" maxOccurs="1" name="type" type="imageType" />
      <xs:element minOccurs="1" maxOccurs="1" name="format" type="imageFormat" />
      <xs:element minOccurs="0" name="height" type="positiveInteger" />
      <xs:element minOccurs="0" name="width" type="positiveInteger" />
      <xs:element minOccurs="0" name="dpi" type="positiveInteger" />
      <xs:element minOccurs="1" maxOccurs="1" name="file" type="file" />
    </xs:all>
  </xs:complexType>
  <xs:complexType name="label">
    <xs:all>
      <xs:element name="displayName" type="xs:string" />
    </xs:all>
  </xs:complexType>
  <xs:complexType name="primaryArtist">
    <xs:all minOccurs="1" maxOccurs="1">
      <xs:element minOccurs="1" maxOccurs="1" name="displayName" type="xs:string" />
    </xs:all>
  </xs:complexType>
  <xs:complexType name="secondaryArtist">
    <xs:all minOccurs="1" maxOccurs="1">
      <xs:element minOccurs="1" maxOccurs="1" name="displayName" type="xs:string" />
      <xs:element minOccurs="1" maxOccurs="1" name="role" type="roleList" />
    </xs:all>
  </xs:complexType>
  <xs:complexType name="genre">
    <xs:all minOccurs="1" maxOccurs="1">
      <xs:element minOccurs="1" maxOccurs="1" name="genre" type="genreList" />
    </xs:all>
  </xs:complexType>
  <xs:complexType name="volume">
    <xs:all>
      <xs:element minOccurs="1" maxOccurs="1" name="volumeNumber" type="positiveInteger" />
      <xs:element minOccurs="1" maxOccurs="1" name="duration" type="duration" />
      <xs:element minOccurs="1" maxOccurs="1" name="tracks">
        <xs:complexType>
          <xs:sequence minOccurs="1" maxOccurs="unbounded">
            <xs:element minOccurs="1" maxOccurs="1" name="track">
              <xs:complexType>
                <xs:complexContent mixed="false">
                  <xs:extension base="track" />
                </xs:complexContent>
              </xs:complexType>
            </xs:element>
          </xs:sequence>
          <xs:attribute name="trackCount" type="xs:positiveInteger" use="required" />
        </xs:complexType>
      </xs:element>
    </xs:all>
  </xs:complexType>
  <xs:complexType name="track">
    <xs:all>
      <xs:element minOccurs="1" maxOccurs="1" name="trackNumber" type="positiveInteger" />
      <xs:element minOccurs="1" maxOccurs="1" name="duration" type="duration" />
      <xs:element minOccurs="1" maxOccurs="1" name="title" type="xs:string" />
      <xs:element minOccurs="1" maxOccurs="1" name="parentalAdvisory" type="parentalAdvisoryList" />
      <xs:element name="artists" type="artists" />
      <xs:element name="genres">
        <xs:complexType>
          <xs:all>
            <xs:element name="primary" type="genre" />
            <xs:element minOccurs="0" name="secondary" type="genre" />
          </xs:all>
        </xs:complexType>
      </xs:element>
      <xs:element name="pline" type="copyline" />
      <xs:element name="cline" type="copyline" />
      <xs:element name="assets">
        <xs:complexType>
          <xs:sequence maxOccurs="unbounded">
            <xs:element name="audio" type="audio" />
          </xs:sequence>
        </xs:complexType>
      </xs:element>
      <xs:element name="isrc" type="isrc" />
      <xs:element name="rights" type="trackRights" />
    </xs:all>
  </xs:complexType>
  <xs:simpleType name="action">
    <xs:restriction base="xs:string">
      <xs:enumeration value="insert" />
      <xs:enumeration value="delete" />
      <xs:enumeration value="update" />
    </xs:restriction>
  </xs:simpleType>
  <xs:simpleType name="audioFormat">
    <xs:restriction base="xs:string">
      <xs:enumeration value="flac" />
      <xs:enumeration value="mp3" />
      <xs:enumeration value="aac" />
      <xs:enumeration value="wma" />
      <xs:enumeration value="wav" />
    </xs:restriction>
  </xs:simpleType>
  <xs:simpleType name="audioType">
    <xs:restriction base="xs:string">
      <xs:enumeration value="full" />
    </xs:restriction>
  </xs:simpleType>
  <xs:simpleType name="checksum">
    <xs:restriction base="xs:string" />
  </xs:simpleType>
  <xs:simpleType name="checksumType">
    <xs:restriction base="xs:string">
      <xs:enumeration value="md5" />
    </xs:restriction>
  </xs:simpleType>
  <xs:simpleType name="countryCode">
    <xs:restriction base="xs:string">
      <xs:pattern value="[a-zA-Z]{1,2}" />
    </xs:restriction>
  </xs:simpleType>
  <xs:simpleType name="duration">
    <xs:restriction base="xs:string">
      <xs:pattern value="\d{1,3}:\d{2}" />
    </xs:restriction>
  </xs:simpleType>
  <xs:simpleType name="imageFormat">
    <xs:restriction base="xs:string">
      <xs:enumeration value="jpeg" />
      <xs:enumeration value="tiff" />
    </xs:restriction>
  </xs:simpleType>
  <xs:simpleType name="imageType">
    <xs:restriction base="xs:string">
      <xs:enumeration value="cover" />
    </xs:restriction>
  </xs:simpleType>
  <xs:simpleType name="positiveInteger">
    <xs:restriction base="xs:integer">
      <xs:minInclusive value="1" />
    </xs:restriction>
  </xs:simpleType>
  <xs:simpleType name="roleList">
    <xs:restriction base="xs:string" />
  </xs:simpleType>
  <xs:simpleType name="upc">
    <xs:restriction base="xs:string">
      <xs:pattern value="\d{12,13}" />
    </xs:restriction>
  </xs:simpleType>
  <xs:simpleType name="isrc">
    <xs:restriction base="xs:string">
      <xs:pattern value="\w{2}[\d\w]{3}\d{2}\d{5}" />
    </xs:restriction>
  </xs:simpleType>
  <xs:simpleType name="genreList">
    <xs:restriction base="xs:string" />
  </xs:simpleType>
  <xs:simpleType name="parentalAdvisoryList">
    <xs:restriction base="xs:string">
      <xs:enumeration value="none" />
      <xs:enumeration value="clean" />
      <xs:enumeration value="explicit" />
    </xs:restriction>
  </xs:simpleType>
  <xs:simpleType name="specVersionList">
    <xs:restriction base="xs:string">
      <xs:enumeration value="2.0" />
    </xs:restriction>
  </xs:simpleType>
  <xs:simpleType name="territoryTypeList">
    <xs:restriction base="xs:string">
      <xs:enumeration value="allow" />
      <xs:enumeration value="deny" />
    </xs:restriction>
  </xs:simpleType>
  <xs:complexType name="albumRights">
    <xs:all>
      <xs:element name="downloadAvailability" type="rightsValue" />
      <xs:element name="streamAvailability" type="rightsValue" />
      <xs:element name="ringtoneAvailability" type="rightsValue" />
    </xs:all>
  </xs:complexType>
  <xs:complexType name="rightsValue">
    <xs:all>
      <xs:element name="value" type="xs:boolean" />
    </xs:all>
  </xs:complexType>
  <xs:complexType name="trackRights">
    <xs:all>
      <xs:element name="downloadAvailability" type="rightsValue" />
      <xs:element name="streamAvailability" type="rightsValue" />
      <xs:element name="ringtoneAvailability" type="rightsValue" />
      <xs:element name="albumPurchaseOnly" type="rightsValue" />
    </xs:all>
  </xs:complexType>
  <xs:simpleType name="copyline">
    <xs:restriction base="xs:string">
      <xs:pattern value="\d{4} .*" />
    </xs:restriction>
  </xs:simpleType>
</xs:schema>
