<?xml version="1.0" encoding="utf-8" ?>
<xs:schema attributeFormDefault="unqualified" elementFormDefault="qualified" xmlns:xs="http://www.w3.org/2001/XMLSchema">
  <xs:element name="import">
    <xs:complexType>
      <xs:all>
        <xs:element name="album" type="album" />
      </xs:all>
      <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="title" type="xs:string" />
      <xs:element name="artists" type="artists" />
      <xs:element name="label" type="label" />
      <xs:element name="catalogNumber">
        <xs:simpleType>
          <xs:restriction base="xs:string">
            <xs:minLength value="1" />
            <xs:maxLength value="255" />
          </xs:restriction>
        </xs:simpleType>
      </xs:element>
      <xs:element minOccurs="0" name="clientID">
        <xs:simpleType>
          <xs:restriction base="xs:string">
            <xs:minLength value="1" />
            <xs:maxLength value="255" />
          </xs:restriction>
        </xs:simpleType>
      </xs:element>
      <xs:element minOccurs="0" name="custom1">
        <xs:simpleType>
          <xs:restriction base="xs:string">
            <xs:minLength value="1" />
            <xs:maxLength value="255" />
          </xs:restriction>
        </xs:simpleType>
      </xs:element>
      <xs:element minOccurs="0" name="custom2">
        <xs:simpleType>
          <xs:restriction base="xs:string">
            <xs:minLength value="1" />
            <xs:maxLength value="255" />
          </xs:restriction>
        </xs:simpleType>
      </xs:element>
      <xs:element minOccurs="0" name="custom3">
        <xs:simpleType>
          <xs:restriction base="xs:string">
            <xs:minLength value="1" />
            <xs:maxLength value="255" />
          </xs:restriction>
        </xs:simpleType>
      </xs:element>
      <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="cline" minOccurs="0" type="copyline" />
      <xs:element name="pline" minOccurs="0" type="copyline" />
      <xs:element name="products">
        <xs:complexType>
          <xs:sequence maxOccurs="unbounded">
            <xs:element name="product" type="product" />
          </xs:sequence>
        </xs:complexType>
      </xs:element>
      <xs:element minOccurs="0" name="clearedForDistribution" type="xs:boolean" />
      <xs:element minOccurs="0" name="territoryRestrictions">
        <xs:complexType>
          <xs:sequence maxOccurs="unbounded">
            <xs:element name="countryCode" type="countryCode" />
          </xs:sequence>
          <xs:attribute name="type" type="territoryTypeList" use="required" />
        </xs:complexType>
      </xs:element>
      <xs:element name="prices">
        <xs:complexType>
          <xs:sequence maxOccurs="unbounded">
            <xs:element name="price">
              <xs:complexType>
                <xs:complexContent mixed="false">
                  <xs:extension base="price" />
                </xs:complexContent>
              </xs:complexType>
            </xs:element>
          </xs:sequence>
        </xs:complexType>
      </xs:element>
      <xs:element name="tracks">
        <xs:complexType>
          <xs:sequence maxOccurs="unbounded">
            <xs:element name="track">
              <xs:complexType>
                <xs:complexContent mixed="false">
                  <xs:extension base="track" />
                </xs:complexContent>
              </xs:complexType>
            </xs:element>
          </xs:sequence>
        </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 maxOccurs="unbounded">
            <xs:element name="artist" type="secondaryArtist" />
          </xs:sequence>
        </xs:complexType>
      </xs:element>
    </xs:all>
  </xs:complexType>
  <xs:complexType name="writers">
    <xs:all>
      <xs:element name="displayName">
        <xs:simpleType>
          <xs:restriction base="xs:string">
            <xs:minLength value="1" />
            <xs:maxLength value="255" />
          </xs:restriction>
        </xs:simpleType>
      </xs:element>
      <xs:element name="role" type="writeRoleList" />
    </xs:all>
  </xs:complexType>
  <xs:complexType name="product">
    <xs:all>
	  <xs:element name="productID" minOccurs="0" type="xs:string" />
      <xs:element name="type" type="productType" />
      <xs:element name="upc" type="upc" />
      <xs:element name="releaseDate" minOccurs="0" type="xs:date" />
    </xs:all>
  </xs:complexType>
  <xs:complexType name="productPosition">
    <xs:all>
      <xs:element name="type" type="productType" />
      <xs:element name="upc" type="upc" />
      <xs:element name="discNumber" type="positiveInteger" />
      <xs:element name="trackNumber" type="positiveInteger" />
    </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>
      <xs:element name="displayName" type="xs:string" />
    </xs:all>
  </xs:complexType>
  <xs:complexType name="secondaryArtist">
    <xs:all>
      <xs:element name="displayName" type="xs:string" />
      <xs:element name="role" type="roleList" />
    </xs:all>
  </xs:complexType>
  <xs:complexType name="genre">
    <xs:all>
      <xs:element name="genre" type="genreList" />
    </xs:all>
  </xs:complexType>
  <xs:complexType name="track">
    <xs:all>
      <xs:element name="productPositions">
        <xs:complexType>
          <xs:sequence maxOccurs="unbounded">
            <xs:element name="productPosition" type="productPosition" />
          </xs:sequence>
        </xs:complexType>
      </xs:element>
      <xs:element name="title" type="xs:string" />
      <xs:element name="artists" type="artists" />
      <xs:element minOccurs="0" name="writers">
        <xs:complexType>
          <xs:sequence maxOccurs="unbounded">
            <xs:element name="writer" type="writers" />
          </xs:sequence>
        </xs:complexType>
      </xs:element>
      <xs:element name="duration" type="duration" />
      <xs:element minOccurs="0" name="parentalAdvisory" type="parentalAdvisoryList" />
      <xs:element minOccurs="0" name="clientID">
        <xs:simpleType>
          <xs:restriction base="xs:string">
            <xs:minLength value="1" />
            <xs:maxLength value="255" />
          </xs:restriction>
        </xs:simpleType>
      </xs:element>
      <xs:element name="isrc" type="isrc" />
      <xs:element name="mediaType" type="mediaType" />
      <xs:element minOccurs="0" name="albumOnlyPurchase" type="xs:boolean" />
      <xs:element minOccurs="0" name="custom1">
        <xs:simpleType>
          <xs:restriction base="xs:string">
            <xs:minLength value="1" />
            <xs:maxLength value="255" />
          </xs:restriction>
        </xs:simpleType>
      </xs:element>
      <xs:element minOccurs="0" name="custom2">
        <xs:simpleType>
          <xs:restriction base="xs:string">
            <xs:minLength value="1" />
            <xs:maxLength value="255" />
          </xs:restriction>
        </xs:simpleType>
      </xs:element>
      <xs:element minOccurs="0" name="custom3">
        <xs:simpleType>
          <xs:restriction base="xs:string">
            <xs:minLength value="1" />
            <xs:maxLength value="255" />
          </xs:restriction>
        </xs:simpleType>
      </xs:element>
    </xs:all>
  </xs:complexType>
  <xs:complexType name="price">
    <xs:all>
      <xs:element name="wholesaleCode" type="xs:string" />
      <xs:element name="service" type="distServiceList" />
    </xs:all>
  </xs:complexType>
  <xs:simpleType name="action">
    <xs:restriction base="xs:string">
      <xs:enumeration value="insert" />
    </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="productType">
    <xs:restriction base="xs:string">
      <xs:enumeration value="Digital" />
      <xs:enumeration value="Vinyl" />
      <xs:enumeration value="CD" />
      <xs:enumeration value="DVD" />
    </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="writeRoleList">
    <xs:restriction base="xs:string">
      <xs:enumeration value="composer" />
    </xs:restriction>
  </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="N" />
      <xs:enumeration value="C" />
      <xs:enumeration value="E" />
    </xs:restriction>
  </xs:simpleType>
  <xs:simpleType name="mediaType">
    <xs:restriction base="xs:string">
      <xs:enumeration value="audio" />
      <xs:enumeration value="video" />
    </xs:restriction>
  </xs:simpleType>
  <xs:simpleType name="specVersionList">
    <xs:restriction base="xs:string">
      <xs:enumeration value="1.0" />
      <xs:enumeration value="1.4" />
    </xs:restriction>
  </xs:simpleType>
  <xs:simpleType name="copyline">
    <xs:restriction base="xs:string">
      <xs:pattern value="\d{4} .*" />
    </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:simpleType name="distServiceList">
    <xs:restriction base="xs:string">
      <xs:enumeration value="iTunes" />
      <xs:enumeration value="Amazon" />
    </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:schema>
