<?xml version="1.0" encoding="UTF-8"?>
<grammar datatypeLibrary="http://www.w3.org/2001/XMLSchema-datatypes" ns="http://apple.com/itunes/importer" xmlns="http://relaxng.org/ns/structure/1.0" xmlns:ixa="http://apple.com/itunes/importer/alterations">
    <!--
      This is the main schema file from which ALL other itmsp schema files are derived.
    -->
    <start>
        <element name="package">
            <ref name="PackageType"/>
        </element>
    </start>
    <define name="PackageType">
        <attribute name="version">
            <choice>
                <value>music4.0</value>
                <value>music4.1</value>
                <value>music4.2</value>
                <value>music4.3</value>
                <value>music4.4</value>
                <value>music4.5</value>
                <value>music4.6</value>
                <value>music4.7</value>
                <value>music4.8</value>
                <value>music4.9</value>
                <value>music5.0</value>
                <value>music5.1</value>
                <value>musicvideosingle4.0</value>
                <value>musicvideosingle4.1</value>
                <value>musicvideosingle4.2</value>
                <value>musicvideosingle4.3</value>
                <value>musicvideosingle4.4</value>
                <value>musicvideosingle4.5</value>
                <value>musicvideosingle4.6</value>
                <value>musicvideosingle4.7</value>
                <value>musicvideosingle4.8</value>
                <value>musicvideosingle4.9</value>
                <value>musicvideosingle5.0</value>
                <value>musicvideosingle5.1</value>
            </choice>
        </attribute>
        <interleave>
            <optional>
                <element name="metadata_token">
                    <data type="string"/>
                </element>
            </optional>
            <optional>
                <element name="comments">
                    <data type="string"/>
                </element>
            </optional>
            <optional>
                <element name="language">
                    <ref name="LanguageType"/>
                </element>
            </optional>
            <element name="provider">
                <ref name="ProviderType"/>
            </element>
            <choice>
                <element name="album">
                    <ref name="Album"/>
                </element>
                <element name="tracks">
                    <ref name="TrackList"/>
                </element>
                <element name="assets">
                    <ref name="AssetList"/>
                </element>
                <element name="video">
                    <ref name="Video"/>
                </element>
                <element name="artist">
                    <ref name="ArtistType"/>
                </element>
                <element name="itunes_extra">
                    <ref name="ItunesExtra"/>
                </element>
            </choice>
        </interleave>
    </define>
    <define name="AssetList">
        <optional>
            <!-- container_id is required for tv. -->
            <attribute name="container_id">
                <ref name="VendorIdType"/>
            </attribute>
        </optional>
        <optional>
            <attribute name="media_type">
                <choice>
                    <value>video</value>
                    <!-- playlist is for film or tv only. -->
                    <value>playlist</value>
                    <!-- for media archive files -->
                    <value>extra_video_item</value>
                </choice>
            </attribute>
        </optional>
        <optional>
            <!-- vendor_id is required for film but not for tv. -->
            <attribute name="vendor_id">
                <ref name="VendorIdType"/>
            </attribute>
        </optional>
        <oneOrMore>
            <element name="asset">
                <ref name="AssetItem"/>
            </element>
        </oneOrMore>
        <optional>
            <element name="accessibility_info">
                <ref name="AccessibilityInfo"/>
            </element>
        </optional>
    </define>
    <define name="Video">
        <interleave>
            <optional>
                <element name="original_spoken_locale">
                    <ref name="LanguageType"/>
                </element>
            </optional>
            <optional>
                <element name="phonetic_title">
                    <ref name="NonEmptyTokenString"/>
                </element>
            </optional>
            <optional>
                <element name="vendor_offer_code">
                    <ref name="VendorOfferCode"/>
                </element>
            </optional>
            <optional>
                <element name="volume_number">
                    <ref name="FormattedPositiveInteger"/>
                </element>
            </optional>
            <optional>
                <element name="artists">
                    <ref name="ArtistList"/>
                </element>
            </optional>
            <optional>
                <element name="artwork_files">
                    <ref name="ArtworkFilesList"/>
                </element>
            </optional>
            <optional>
                <element name="copyright_cline">
                    <ref name="Copyright"/>
                </element>
            </optional>
            <optional>
                <element name="copyright_pline">
                    <ref name="Copyright"/>
                </element>
            </optional>
            <optional>
                <element name="explicit_content">
                    <ref name="ParentalAdvisoryType"/>
                </element>
            </optional>
            <optional>
                <element name="lyrics">
                    <ref name="LyricsType"/>
                </element>
            </optional>
            <optional>
                <element name="grid">
                    <ref name="Grid"/>
                </element>
            </optional>
            <optional>
                <element name="isrc">
                    <ref name="Isrc"/>
                </element>
            </optional>
            <optional>
                <element name="preorder_type">
                    <ref name="PreOrder"/>
                </element>
            </optional>
            <optional>
                <element name="preview">
                    <ref name="VideoPreviewType"/>
                </element>
            </optional>
            <optional>
                <element name="release_date">
                    <ref name="FormattedDate"/>
                </element>
            </optional>
            <zeroOrMore>
                <element name="title">
                    <ref name="LocalizableText"/>
                </element>
            </zeroOrMore>
            <zeroOrMore>
                <element name="title_version">
                    <ref name="LocalizableText"/>
                </element>
            </zeroOrMore>
            <optional>
                <element name="track_number">
                    <ref name="FormattedPositiveInteger"/>
                </element>
            </optional>
            <optional>
                <element name="upc">
                    <ref name="Upc"/>
                </element>
            </optional>
            <optional>
                <element name="vendor_id">
                    <ref name="VendorIdType"/>
                </element>
            </optional>
            <optional>
                <element name="xid">
                    <ref name="Xid"/>
                </element>
            </optional>
            <optional>
                <element name="assets">
                    <ref name="AssetList"/>
                </element>
            </optional>
            <optional>
                <element name="share_assets">
                    <ref name="ShareAssets"/>
                </element>
            </optional>
            <optional>
                <element name="genres">
                    <ref name="GenreList"/>
                </element>
            </optional>
            <optional>
                <element name="label_name">
                    <ref name="LabelNameType"/>
                </element>
            </optional>
            <optional>
                <element name="products">
                    <ref name="ProductList"/>
                </element>
            </optional>
            <!-- Begin film and tv elements -->
            <optional>
                <element name="cue_sheet">
                    <ref name="CueSheet"/>
                </element>
            </optional>
            <optional>
                <element name="locales">
                    <oneOrMore>
                        <element name="locale">
                            <ref name="VideoLocale"/>
                        </element>
                    </oneOrMore>
                </element>
            </optional>
            <optional>
                <element name="chapters">
                    <ref name="ChapterList"/>
                </element>
            </optional>
            <optional>
                <element name="accessibility_info">
                    <ref name="AccessibilityInfo"/>
                </element>
            </optional>
            <!-- End film and tv elements -->
            <!-- Begin rentals properties -->
            <!-- End rentals properties -->
            <!-- Begin tv-specific properties -->
            <optional>
                <choice>
                    <!-- "description" replaces long_description in the 3.3.2 TV spec -->
                    <element name="long_description">
                        <ref name="String4000"/>
                    </element>
                    <element name="synopsis">
                        <ref name="String4000"/>
                    </element>
                </choice>
            </optional>
            <!-- End tv-specific properties -->
            <!-- Begin film-specific properties -->
            <!-- End film-specific properties -->
            <optional>
                <element name="extra">
                    <ref name="Extra"/>
                </element>
            </optional>
            <optional>
                <element name="display_artist">
                    <text/>
                </element>
            </optional>
        </interleave>
    </define>
    <define name="AccessibilityInfo">
        <oneOrMore>
            <element name="accessibility">
                <ref name="AccessibilityDetail"/>
            </element>
        </oneOrMore>
    </define>
    <define name="AccessibilityDetail">
        <attribute name="role">
            <ref name="AccessibilityRole"/>
        </attribute>
        <attribute name="available">
            <data type="boolean"/>
        </attribute>
        <optional>
            <attribute name="locale">
                <ref name="Locale"/>
            </attribute>
        </optional>
        <optional>
            <attribute name="reason_code">
                <ref name="AccessibilityReasonCode"/>
            </attribute>
        </optional>
    </define>
    <define name="AccessibilityRole">
        <ref name="Role"/>
    </define>
    <define name="AccessibilityReasonCode">
        <data type="string"/>
    </define>
    <!-- Begin film and tv-specific definitions -->
    <define name="ShareAssets">
        <interleave>
            <optional>
                <attribute name="vendor_id">
                    <ref name="VendorIdType"/>
                </attribute>
            </optional>
            <optional>
                <attribute name="apple_id">
                    <ref name="FormattedPositiveInteger"/>
                </attribute>
            </optional>
        </interleave>
    </define>
    <define name="VideoLocale">
        <attribute name="name">
            <ref name="LanguageType"/>
        </attribute>
        <interleave>
            <optional>
                <element name="title">
                    <text/>
                </element>
            </optional>
            <optional>
                <element name="short_description">
                    <ref name="String255"/>
                </element>
            </optional>
            <optional>
                <choice>
                    <element name="long_description">
                        <text/>
                    </element>
                    <element name="synopsis">
                        <ref name="String4000"/>
                    </element>
                </choice>
            </optional>
            <optional>
                <element name="phonetic_title">
                    <text/>
                </element>
            </optional>
        </interleave>
    </define>
    <define name="VideoRegion">
        <interleave>
            <element name="territory">
                <ref name="Territory"/>
            </element>
            <optional>
                <element name="theatrical_release_date">
                    <ref name="FormattedDate"/>
                </element>
            </optional>
            <optional>
                <element name="release_date">
                    <ref name="FormattedDate"/>
                </element>
            </optional>
            <optional>
                <element name="copyright_pline">
                    <ref name="Copyright"/>
                </element>
            </optional>
            <optional>
                <element name="copyright_cline">
                    <ref name="Copyright"/>
                </element>
            </optional>
        </interleave>
    </define>
    <define name="CueSheet">
        <zeroOrMore>
            <element name="cue">
                <ref name="Cue"/>
            </element>
        </zeroOrMore>
    </define>
    <define name="Cue">
        <interleave>
            <element name="sequence_number">
                <ref name="FormattedPositiveInteger"/>
            </element>
            <element name="time">
                <ref name="CueTime"/>
            </element>
            <element name="title">
                <text/>
            </element>
            <element name="artists">
                <ref name="ArtistList"/>
            </element>
            <optional>
                <element name="isrc">
                    <ref name="Isrc"/>
                </element>
            </optional>
            <optional>
                <element name="iswc">
                    <text/>
                </element>
            </optional>
            <optional>
                <element name="copyright_cline">
                    <ref name="Copyright"/>
                </element>
            </optional>
            <optional>
                <element name="copyright_pline">
                    <ref name="Copyright"/>
                </element>
            </optional>
            <optional>
                <element name="usage">
                    <ref name="CueUsage"/>
                </element>
            </optional>
        </interleave>
    </define>
    <define name="CueUsage">
        <choice>
            <value>Background</value>
            <value>Featured</value>
            <value>Signature</value>
        </choice>
    </define>
    <define name="CueTime">
        <interleave>
            <optional>
                <element name="start_timecode">
                    <ref name="FormattedTime"/>
                </element>
            </optional>
            <element name="duration">
                <ref name="FormattedTime"/>
            </element>
        </interleave>
    </define>
    <!-- VideoAdvisory is only supported by TV -->
    <!-- FilmRating is supported by Film and TV -->
    <define name="MovieParticipantLocale">
        <attribute name="name">
            <ref name="Locale"/>
        </attribute>
        <interleave>
            <element name="display_name">
                <ref name="String250"/>
            </element>
            <optional>
                <element name="character_name">
                    <ref name="String250"/>
                </element>
            </optional>
            <optional>
                <element name="phonetic_name">
                    <ref name="String250"/>
                </element>
            </optional>
        </interleave>
    </define>
    <!-- End film and tv-specific definitions -->
    <define name="AssetItem">
        <optional>
            <attribute name="type">
                <choice>
                    <value>full</value>
                    <value>preview</value>
                    <value>artwork</value>
                    <!-- head and tail are only allowed for tv. -->
                    <value>head</value>
                    <value>tail</value>
                    <!-- timeline is for extras2.0 -->
                    <value>timeline</value>
                </choice>
            </attribute>
        </optional>
        <!-- enabled is only for tv. -->
        <optional>
            <attribute name="enabled">
                <ref name="FormattedBoolean"/>
            </attribute>
        </optional>
        <!-- display_target is only for extras2.0 -->
        <optional>
            <attribute name="display_target">
                <ref name="ItunesExtraDisplayTargetEnum"/>
            </attribute>
        </optional>
        <interleave>
            <optional>
                <element name="read_only_info">
                    <ref name="ReadOnlyInfo"/>
                </element>
            </optional>
            <optional>
                <!-- territories is only for tv. -->
                <element name="territories">
                    <zeroOrMore>
                        <element name="territory">
                            <ref name="Territory"/>
                        </element>
                    </zeroOrMore>
                </element>
            </optional>
            <!-- only one data_file element is allowed at this level for tv. -->
            <oneOrMore>
                <element name="data_file">
                    <ref name="AssetFile"/>
                </element>
            </oneOrMore>
            <!-- chapters can be sent under the full asset in an asset-only update -->
            <optional>
                <element name="chapters">
                    <ref name="ChapterList"/>
                </element>
            </optional>
        </interleave>
    </define>
    <define name="Album">
        <interleave>
            <optional>
                <element name="galleries">
                    <ref name="GalleryList"/>
                </element>
            </optional>
            <optional>
                <element name="locales">
                    <ref name="LocalizationList"/>
                </element>
            </optional>
            <optional>
                <element name="album_type">
                    <ref name="AlbumType"/>
                </element>
            </optional>
            <optional>
                <element name="vendor_id">
                    <ref name="VendorIdType"/>
                </element>
            </optional>
            <optional>
                <element name="grid">
                    <ref name="Grid"/>
                </element>
            </optional>
            <optional>
                <element name="preorder_grid">
                    <ref name="Grid"/>
                </element>
            </optional>
            <!-- jgould : zero or more is here because this must generate beans to support 4.x schema -->
            <zeroOrMore>
                <element name="title_version">
                    <text/>
                </element>
            </zeroOrMore>
            <optional>
                <element name="copyright_pline">
                    <ref name="Copyright"/>
                </element>
            </optional>
            <optional>
                <element name="copyright_cline">
                    <ref name="Copyright"/>
                </element>
            </optional>
            <optional>
                <element name="artwork_files">
                    <zeroOrMore>
                        <element name="file">
                            <ref name="File"/>
                        </element>
                    </zeroOrMore>
                </element>
            </optional>
            <optional>
                <element name="description">
                    <ref name="String4000"/>
                </element>
            </optional>
            <optional>
                <!-- nuglov : restoring volume_count because iTP is coded to always send it in -->
                <!-- nuglov : we ignore it, but need accept to allow for schema validation -->
                <element name="volume_count">
                    <ref name="FormattedPositiveInteger"/>
                </element>
            </optional>
            <optional>
                <element name="track_count">
                    <ref name="FormattedPositiveInteger"/>
                </element>
            </optional>
            <optional>
                <element name="products">
                    <ref name="ProductList"/>
                </element>
            </optional>
            <optional>
                <element name="preorder_previews">
                    <ref name="FormattedBoolean"/>
                </element>
            </optional>
            <optional>
                <element name="upc">
                    <ref name="Upc"/>
                </element>
            </optional>
            <optional>
                <element name="preorder_upc">
                    <ref name="Upc"/>
                </element>
            </optional>
            <!-- jgould : zero or more is here because this must generate beans to support 4.x schema -->
            <zeroOrMore>
                <element name="title">
                    <text/>
                </element>
            </zeroOrMore>
            <optional>
                <element name="phonetic_title">
                    <text/>
                </element>
            </optional>
            <optional>
                <element name="original_release_date">
                    <ref name="FormattedDate"/>
                </element>
            </optional>
            <optional>
                <element name="label_name">
                    <ref name="NonEmptyTokenString"/>
                </element>
            </optional>
            <optional>
                <element name="genres">
                    <ref name="GenreList"/>
                </element>
            </optional>
            <optional>
                <element name="artists">
                    <ref name="ArtistList"/>
                </element>
            </optional>
            <optional>
                <element name="tracks">
                    <ref name="TrackList"/>
                </element>
            </optional>
            <optional>
                <element name="vendor_offer_code">
                    <ref name="VendorOfferCode"/>
                </element>
            </optional>
            <optional>
                <element name="index_alias_terms">
                    <text/>
                </element>
            </optional>
            <optional>
                <element name="hero_image">
                    <ref name="HeroImage"/>
                </element>
            </optional>
            <optional>
                <element name="display_artist">
                    <text/>
                </element>
            </optional>
        </interleave>
    </define>
    <define name="AlbumType">
        <choice>
            <value>album</value>
            <value>audiobook</value>
            <value>ringtone</value>
            <value>iosaudiotone</value>
            <value>Album</value>
            <value>Audiobook</value>
            <value>AudioBook</value>
            <value>Ringtone</value>
            <value>iOSAudioTone</value>
        </choice>
    </define>
    <define name="TrackList">
        <interleave>
            <optional>
                <element name="album_upc">
                    <ref name="Upc"/>
                </element>
            </optional>
            <oneOrMore>
                <choice>
                    <element name="track">
                        <ref name="Track"/>
                    </element>
                    <element name="video">
                        <ref name="Video"/>
                    </element>
                    <element name="work">
                        <ref name="WorkType"/>
                    </element>
                    <element name="track_group">
                        <ref name="TrackGroup"/>
                    </element>
                    <element name="booklet">
                        <ref name="Booklet"/>
                    </element>
                    <element name="extra">
                        <ref name="Extra"/>
                    </element>
                </choice>
            </oneOrMore>
            <optional>
                <element name="bonus_material">
                    <ref name="BonusMaterialItem"/>
                </element>
            </optional>
        </interleave>
    </define>
    <define name="BonusMaterialList">
        <zeroOrMore>
            <element name="bonus_material">
                <ref name="BonusMaterialItem"/>
            </element>
        </zeroOrMore>
    </define>
    <define name="BonusMaterialItem">
        <interleave>
            <optional>
                <element name="vendor_identifier">
                    <ref name="VendorIdType"/>
                </element>
            </optional>
            <optional>
                <element name="file">
                    <ref name="File"/>
                </element>
            </optional>
            <optional>
                <element name="track">
                    <ref name="FormattedPositiveInteger"/>
                </element>
            </optional>
            <optional>
                <element name="preorder_type">
                    <ref name="PreOrder"/>
                </element>
            </optional>
            <optional>
                <element name="volume">
                    <ref name="FormattedPositiveInteger"/>
                </element>
            </optional>
            <element name="bonus_material_name">
                <ref name="NonEmptyTokenString"/>
            </element>
            <element name="copyright">
                <ref name="Copyright"/>
            </element>
        </interleave>
    </define>
    <define name="WorkType">
        <attribute name="name">
            <text/>
        </attribute>
        <interleave>
            <optional>
                <element name="products">
                    <ref name="ProductList"/>
                </element>
            </optional>
            <oneOrMore>
                <element name="track">
                    <ref name="Track"/>
                </element>
            </oneOrMore>
        </interleave>
    </define>
    <define name="TrackGroup">
        <interleave>
            <element name="vendor_id">
                <ref name="VendorIdType"/>
            </element>
            <optional>
                <element name="group_name">
                    <ref name="NonEmptyTokenString"/>
                </element>
            </optional>
            <optional>
                <element name="artwork_files">
                    <ref name="ArtworkFilesList"/>
                </element>
            </optional>
            <optional>
                <element name="products">
                    <ref name="ProductList"/>
                </element>
            </optional>
            <zeroOrMore>
                <choice>
                    <element name="track">
                        <ref name="Track"/>
                    </element>
                    <element name="video">
                        <ref name="Video"/>
                    </element>
                    <element name="booklet">
                        <ref name="Booklet"/>
                    </element>
                    <element name="extra">
                        <ref name="Extra"/>
                    </element>
                </choice>
            </zeroOrMore>
        </interleave>
    </define>
    <define name="ArtworkFilesList">
        <oneOrMore>
            <element name="file">
                <ref name="File"/>
            </element>
        </oneOrMore>
    </define>
    <define name="VideoPreviewType">
        <attribute name="starttime">
            <data type="string">
                <param name="pattern">([0-9]+)|([0-9]{2}:[0-9]{2}:[0-9]{2})</param>
            </data>
        </attribute>
        <text/>
    </define>
    <define name="LabelNameType">
        <data type="string">
            <param name="minLength">1</param>
        </data>
    </define>
    <define name="AudioTrackType">
        <choice>
            <value>audiobook</value>
            <value>song</value>
            <value>ringtone</value>
            <value>iOSTone</value>
        </choice>
    </define>
    <define name="Track">
        <interleave>
            <optional>
                <element name="type">
                    <ref name="AudioTrackType"/>
                </element>
            </optional>
            <optional>
                <element name="vendor_id">
                    <ref name="VendorIdType"/>
                </element>
            </optional>
            <optional>
                <element name="source_vendor_id">
                    <ref name="VendorIdType"/>
                </element>
            </optional>
            <optional>
                <element name="xid">
                    <ref name="Xid"/>
                </element>
            </optional>
            <optional>
                <element name="grid">
                    <ref name="Grid"/>
                </element>
            </optional>
            <optional>
                <element name="source_grid">
                    <ref name="Grid"/>
                </element>
            </optional>
            <optional>
                <element name="gapless_play">
                    <ref name="FormattedBoolean"/>
                </element>
            </optional>
            <optional>
                <element name="label_name">
                    <ref name="NonEmptyTokenString"/>
                </element>
            </optional>
            <optional>
                <element name="genres">
                    <oneOrMore>
                        <element name="genre">
                            <ref name="Genre"/>
                        </element>
                    </oneOrMore>
                </element>
            </optional>
            <optional>
                <element name="products">
                    <ref name="ProductList"/>
                </element>
            </optional>
            <optional>
                <element name="copyright_pline">
                    <ref name="Copyright"/>
                </element>
            </optional>
            <optional>
                <element name="explicit_content">
                    <ref name="ParentalAdvisoryType"/>
                </element>
            </optional>
            <optional>
                <element name="lyrics">
                    <ref name="LyricsType"/>
                </element>
            </optional>
            <optional>
                <element name="volume_number">
                    <ref name="FormattedPositiveInteger"/>
                </element>
            </optional>
            <optional>
                <element name="preview_start_index">
                    <ref name="FormattedPositiveInteger"/>
                </element>
            </optional>
            <optional>
                <element name="artists">
                    <ref name="ArtistList"/>
                </element>
            </optional>
            <optional>
                <element name="chapters">
                    <ref name="ChapterList"/>
                </element>
            </optional>
            <!-- code-enforced: track_isrc is required for music albums but not for audio books -->
            <optional>
                <element name="isrc">
                    <ref name="Isrc"/>
                </element>
            </optional>
            <optional>
                <element name="source_isrc">
                    <ref name="Isrc"/>
                </element>
            </optional>
            <optional>
                <element name="audio_file">
                    <ref name="File"/>
                </element>
            </optional>
            <!-- jgould : one or more is here because this must generate beans to support 4.x schema (track) -->
            <!-- nuglov : zero or more because we need to support product-only update -->
            <zeroOrMore>
                <element name="title">
                    <text/>
                </element>
            </zeroOrMore>
            <!-- jgould : zero or more is here because this must generate beans to support 4.x schema -->
            <zeroOrMore>
                <element name="title_version">
                    <text/>
                </element>
            </zeroOrMore>
            <optional>
                <element name="phonetic_title">
                    <text/>
                </element>
            </optional>
            <optional>
                <element name="locales">
                    <ref name="LocalizationList"/>
                </element>
            </optional>
            <optional>
                <element name="track_number">
                    <ref name="FormattedPositiveInteger"/>
                </element>
            </optional>
            <optional>
                <element name="preorder_type">
                    <ref name="PreOrder"/>
                </element>
            </optional>
            <optional>
                <element name="vendor_offer_code">
                    <ref name="VendorOfferCode"/>
                </element>
            </optional>
            <optional>
                <element name="language">
                    <ref name="LanguageType"/>
                </element>
            </optional>
            <optional>
                <element name="audio_language">
                    <ref name="LanguageType"/>
                </element>
            </optional>
            <optional>
                <element name="tone_start_time">
                    <ref name="FormattedPositiveInteger"/>
                </element>
            </optional>
            <optional>
                <element name="tone_duration">
                    <ref name="FormattedPositiveInteger"/>
                </element>
            </optional>
            <optional>
                <element name="display_artist">
                    <text/>
                </element>
            </optional>
        </interleave>
    </define>
    <define name="ParentalAdvisoryType">
        <choice>
            <empty/>
            <value>clean</value>
            <value>explicit</value>
            <value>none</value>
            <value>normal</value>
        </choice>
    </define>
    <define name="LyricsType">
        <optional>
            <attribute name="format">
                <choice>
                    <empty/>
                    <value>plain</value>
                    <value>html</value>
                </choice>
            </attribute>
        </optional>
        <optional>
            <attribute name="remove">
                <ref name="FormattedBoolean"/>
            </attribute>
        </optional>
        <text/>
    </define>
    <define name="ProductList">
        <zeroOrMore>
            <element name="product">
                <ref name="ProductItem"/>
            </element>
        </zeroOrMore>
    </define>
    <define name="ExtraLocale">
        <attribute name="name">
            <ref name="Locale"/>
        </attribute>
        <optional>
            <attribute name="default">
                <ref name="FormattedBoolean"/>
            </attribute>
        </optional>
        <optional>
            <attribute name="remove">
                <ref name="FormattedBoolean"/>
            </attribute>
        </optional>
        <interleave>
            <optional>
                <element name="title">
                    <text/>
                </element>
            </optional>
            <optional>
                <element name="phonetic_title">
                    <text/>
                </element>
            </optional>
            <element name="description">
                <text/>
            </element>
        </interleave>
    </define>
    <define name="ScreenshotList">
        <zeroOrMore>
            <element name="screenshot">
                <ref name="File"/>
            </element>
        </zeroOrMore>
    </define>
    <define name="ItunesExtraScreenshotList">
        <zeroOrMore>
            <element name="screenshot">
                <ref name="ExtraScreenshot"/>
            </element>
        </zeroOrMore>
    </define>
    <define name="ProductItem">
        <interleave>
            <element name="territory">
                <ref name="Territory"/>
            </element>
            <optional>
                <element name="cleared_for_sale">
                    <ref name="FormattedBoolean"/>
                </element>
            </optional>
            <optional>
                <element name="cleared_for_ticketmaster">
                    <ref name="FormattedBoolean"/>
                </element>
            </optional>
            <optional>
                <element name="sales_start_date">
                    <ref name="FormattedDate"/>
                </element>
            </optional>
            <optional>
                <element name="sell_plus_quality">
                    <ref name="FormattedBoolean"/>
                </element>
            </optional>
            <optional>
                <element name="intervals">
                    <ref name="IntervalList"/>
                </element>
            </optional>
            <optional>
                <element name="wholesale_price_tier">
                    <ref name="WholesalePriceTierType"/>
                </element>
            </optional>
            <!-- Film-specific elements -->
            <!-- Playlist-specific elements -->
            <optional>
                <element name="preorder_sales_start_date">
                    <ref name="FormattedDate"/>
                </element>
            </optional>
            <optional>
                <element name="preorder_wholesale_price_tier">
                    <ref name="WholesalePriceTierType"/>
                </element>
            </optional>
            <optional>
                <element name="default_track_wholesale_price_tier">
                    <ref name="WholesalePriceTierType"/>
                </element>
            </optional>
            <!-- Track-specific elements -->
            <optional>
                <element name="cleared_for_user_generated_ringtones">
                    <ref name="FormattedBoolean"/>
                </element>
            </optional>
            <optional>
                <element name="bundle_only">
                    <ref name="FormattedBoolean"/>
                </element>
            </optional>
            <optional>
                <element name="read_only_info">
                    <ref name="ReadOnlyInfo"/>
                </element>
            </optional>
        </interleave>
    </define>
    <!-- Begin: Film-only definitions -->
    <define name="VodType">
        <choice>
            <value>Library</value>
            <value>New Release</value>
            <value>Direct-to-Video</value>
        </choice>
    </define>
    <!-- End: Film-only definitions -->
    <define name="GenreList">
        <oneOrMore>
            <element name="genre">
                <ref name="Genre"/>
            </element>
        </oneOrMore>
    </define>
    <define name="Genre">
        <optional>
            <!-- code-enforced: code is being rolled out and preferred over name -->
            <attribute name="code">
                <ref name="NonEmptyTokenString"/>
            </attribute>
        </optional>
        <data type="token"/>
        <!-- code-enforced: code is being rolled out and preferred over name -->
    </define>
    <define name="ArtistList">
        <oneOrMore>
            <element name="artist">
                <ref name="ArtistType"/>
            </element>
        </oneOrMore>
    </define>
    <define name="ArtistType">
        <interleave>
            <optional>
                <element name="apple_id">
                    <ref name="AppleIdType"/>
                </element>
            </optional>
            <optional>
                <element name="read_only_info">
                    <ref name="ReadOnlyInfo"/>
                </element>
            </optional>
            <optional>
                <element name="primary">
                    <ref name="FormattedBoolean"/>
                </element>
            </optional>
            <optional>
                <element name="language">
                    <ref name="LanguageType"/>
                </element>
            </optional>
            <!-- jgould: one or more to support bean generation for 4.x schemas -->
            <!-- nuglov: scratch that oneOrMore.  Zero or more because as of 5.0 an artist can be identified by apple_id instead of a name -->
            <zeroOrMore>
                <choice>
                    <element name="name">
                        <text/>
                    </element>
                    <element name="artist_name">
                        <text/>
                    </element>
                </choice>
            </zeroOrMore>
            <optional>
                <element name="phonetic_name">
                    <text/>
                </element>
            </optional>
            <optional>
                <element name="locales">
                    <oneOrMore>
                        <element name="locale">
                            <ref name="ArtistLocalizationItem"/>
                        </element>
                    </oneOrMore>
                </element>
            </optional>
            <!-- code-enforced: roles is required for music albums, but not for audio books -->
            <optional>
                <element name="roles">
                    <oneOrMore>
                        <element name="role">
                            <ref name="Role"/>
                        </element>
                    </oneOrMore>
                </element>
            </optional>
            <optional>
                <element name="hero_image">
                    <ref name="HeroImage"/>
                </element>
            </optional>
            <optional>
                <element name="galleries">
                    <ref name="GalleryList"/>
                </element>
            </optional>
        </interleave>
    </define>
    <define name="IntervalList">
        <zeroOrMore>
            <element name="interval">
                <ref name="Interval"/>
            </element>
        </zeroOrMore>
    </define>
    <define name="Interval">
        <!-- Shared between schemas -->
        <interleave>
            <optional>
                <element name="start_date">
                    <ref name="FormattedDate"/>
                </element>
            </optional>
            <optional>
                <element name="end_date">
                    <ref name="FormattedDate"/>
                </element>
            </optional>
            <optional>
                <element name="wholesale_price_tier">
                    <ref name="WholesalePriceTierType"/>
                </element>
            </optional>
            <!-- 
				The hd_wholesale_price_tier is NOT needed for Publication, 
				but we must repeat it because the Interval element is shared between schemas 
			-->
            <optional>
                <element name="price_tier">
                    <ref name="WholesalePriceTierType"/>
                </element>
            </optional>
            <optional>
                <element name="release_type">
                    <ref name="ReleaseType"/>
                </element>
            </optional>
        </interleave>
    </define>
    <define name="Price">
        <optional>
            <attribute name="currency">
                <text/>
            </attribute>
        </optional>
        <data type="string">
            <param name="pattern">([0-9]+[.][0-9]+){0,1}</param>
        </data>
    </define>
    <define name="AssetFile">
        <optional>
            <attribute name="role">
                <choice>
                    <value>source</value>
                    <value>captions</value>
                    <value>chapters</value>
                    <value>audio</value>
                    <value>notes</value>
                    <value>subtitles</value>
                    <value>forced_subtitles</value>
                    <value>video.end.dub_credits</value>
                    <value>subtitles.hearing_impaired</value>
                    <value>audio.visually_impaired</value>
                </choice>
            </attribute>
        </optional>
        <optional>
            <attribute name="remove">
                <ref name="FormattedBoolean"/>
            </attribute>
        </optional>
        <interleave>
            <!-- code-enforced: the size element is enforced by the application. -->
            <optional>
                <element name="size">
                    <ref name="FormattedPositiveInteger"/>
                </element>
            </optional>
            <!-- TODO: Add regex for valid file extensions. -->
            <element name="file_name">
                <ref name="FileName"/>
            </element>
            <element name="checksum">
                <ref name="Checksum"/>
            </element>
            <!-- Begin film and tv-specific properties -->
            <zeroOrMore>
                <element name="attribute">
                    <!-- TODO: Make sure Schema beans supports attribute + data -->
                    <attribute name="name">
                        <choice>
                            <value>crop.left</value>
                            <value>crop.top</value>
                            <value>crop.right</value>
                            <value>crop.bottom</value>
                            <value>image.burned_subtitles.locale</value>
                            <value>image.burned_forced_narrative.locale</value>
                            <value>image.textless_master</value>
                            <value>program.start.timecode</value>
                        </choice>
                    </attribute>
                    <text/>
                </element>
            </zeroOrMore>
            <!-- End film and tv-specific properties -->
        </interleave>
    </define>
    <define name="Checksum">
        <optional>
            <attribute name="type">
                <ref name="ChecksumStrategy"/>
            </attribute>
        </optional>
        <text/>
    </define>
    <define name="ChecksumStrategy">
        <data type="token">
            <param name="pattern">[Mm][Dd][5]</param>
        </data>
    </define>
    <define name="Booklet">
        <interleave>
            <optional>
                <element name="vendor_id">
                    <ref name="VendorIdType"/>
                </element>
            </optional>
            <optional>
                <element name="xid">
                    <ref name="Xid"/>
                </element>
            </optional>
            <element name="title">
                <ref name="NonEmptyTokenString"/>
            </element>
            <!-- title_version is deprecated -->
            <optional>
                <element name="title_version">
                    <ref name="NonEmptyTokenString"/>
                </element>
            </optional>
            <optional>
                <element name="phonetic_title">
                    <text/>
                </element>
            </optional>
            <optional>
                <element name="locales">
                    <ref name="LocalizationList"/>
                </element>
            </optional>
            <optional>
                <element name="copyright">
                    <ref name="Copyright"/>
                </element>
            </optional>
            <optional>
                <choice>
                    <element name="volume">
                        <ref name="FormattedPositiveInteger"/>
                    </element>
                    <element name="volume_number">
                        <ref name="FormattedPositiveInteger"/>
                    </element>
                </choice>
            </optional>
            <optional>
                <element name="vendor_offer_code">
                    <ref name="VendorOfferCode"/>
                </element>
            </optional>
            <optional>
                <element name="track_number">
                    <ref name="FormattedPositiveInteger"/>
                </element>
            </optional>
            <optional>
                <element name="preorder_type">
                    <ref name="PreOrder"/>
                </element>
            </optional>
            <optional>
                <element name="explicit_content">
                    <ref name="ParentalAdvisoryType"/>
                </element>
            </optional>
            <optional>
                <element name="products">
                    <ref name="ProductList"/>
                </element>
            </optional>
            <optional>
                <element name="artists">
                    <ref name="ArtistList"/>
                </element>
            </optional>
            <optional>
                <element name="file">
                    <ref name="File"/>
                </element>
            </optional>
            <optional>
                <element name="display_artist">
                    <text/>
                </element>
            </optional>
        </interleave>
    </define>
    <define name="ChapterList">
        <interleave>
            <optional>
                <element name="timecode_format">
                    <ref name="TimecodeFormat"/>
                </element>
            </optional>
            <zeroOrMore>
                <element name="chapter">
                    <ref name="ChapterItem"/>
                </element>
            </zeroOrMore>
        </interleave>
    </define>
    <define name="ChapterItem">
        <optional>
            <attribute name="starttime">
                <ref name="FormattedTime"/>
            </attribute>
        </optional>
        <interleave>
            <optional>
                <choice>
                    <element name="start_time">
                        <ref name="FormattedTime"/>
                    </element>
                    <element name="chapter_start_time">
                        <ref name="FormattedTime"/>
                    </element>
                </choice>
            </optional>
            <choice>
                <element name="chapter_title">
                    <ref name="NonEmptyLocalizableTextElement"/>
                </element>
                <element name="title">
                    <ref name="NonEmptyLocalizableTextElement"/>
                </element>
                <element name="titles">
                    <oneOrMore>
                        <element name="title">
                            <ref name="NonEmptyLocalizableTextElement"/>
                        </element>
                    </oneOrMore>
                </element>
            </choice>
            <optional>
                <element name="artwork_file">
                    <ref name="File"/>
                </element>
            </optional>
        </interleave>
    </define>
    <define name="Extra">
        <interleave>
            <optional>
                <element name="title">
                    <text/>
                </element>
            </optional>
            <optional>
                <element name="phonetic_title">
                    <text/>
                </element>
            </optional>
            <element name="vendor_id">
                <ref name="VendorIdType"/>
            </element>
            <optional>
                <element name="vendor_offer_code">
                    <ref name="VendorOfferCode"/>
                </element>
            </optional>
            <optional>
                <element name="explicit_content">
                    <ref name="ParentalAdvisoryType"/>
                </element>
            </optional>
            <optional>
                <!-- The volume_number element is only applicable in the context of an album -->
                <element name="volume_number">
                    <ref name="FormattedPositiveInteger"/>
                </element>
            </optional>
            <optional>
                <!-- The track_number element is only applicable in the context of an album -->
                <element name="track_number">
                    <ref name="FormattedPositiveInteger"/>
                </element>
            </optional>
            <optional>
                <!-- The preorder_type element is only applicable in the context of an album -->
                <element name="preorder_type">
                    <ref name="PreOrder"/>
                </element>
            </optional>
            <optional>
                <element name="archive_file">
                    <ref name="File"/>
                </element>
            </optional>
            <optional>
                <element name="video_items">
                    <ref name="ExtraVideoItemList"/>
                </element>
            </optional>
            <optional>
                <element name="products">
                    <ref name="ProductList"/>
                </element>
            </optional>
            <optional>
                <element name="locales">
                    <oneOrMore>
                        <element name="locale">
                            <ref name="ExtraLocale"/>
                        </element>
                    </oneOrMore>
                </element>
            </optional>
            <optional>
                <element name="screenshots">
                    <ref name="ScreenshotList"/>
                </element>
            </optional>
            <optional>
                <element name="display_artist">
                    <text/>
                </element>
            </optional>
        </interleave>
    </define>
    <define name="ExtraVideoItemList">
        <oneOrMore>
            <element name="video_item">
                <ref name="ExtraVideoItem"/>
            </element>
        </oneOrMore>
    </define>
    <define name="ExtraVideoItem">
        <optional>
            <attribute name="remove">
                <ref name="FormattedBoolean"/>
            </attribute>
        </optional>
        <interleave>
            <element name="target_path">
                <text/>
            </element>
            <element name="vendor_id">
                <ref name="VendorIdType"/>
            </element>
            <element name="assets">
                <ref name="AssetList"/>
            </element>
        </interleave>
    </define>
    <define name="TimecodeFormat">
        <text/>
    </define>
    <define name="LocalizableTextElement">
        <optional>
            <attribute name="locale">
                <ref name="Locale"/>
            </attribute>
        </optional>
        <text/>
    </define>
    <define name="NonEmptyLocalizableTextElement">
        <optional>
            <attribute name="locale">
                <ref name="Locale"/>
            </attribute>
        </optional>
        <ref name="NonEmptyString255"/>
    </define>
    <define name="Locale">
        <data type="string">
            <!-- regex does not cover the full RFC5646 spec.  only covers what import supports -->
            <param name="pattern">[a-zA-Z]{2,3}(-[a-zA-Z]{4})?(-([0-9]{3}|[a-zA-Z]{2}))?</param>
        </data>
    </define>
    <define name="Copyright">
        <!-- sgcode rdarproblem 13017843 Incorrect Movies warning on music iTP delivery -->
        <data type="token">
            <param name="maxLength">1000</param>
            <param name="pattern">\d{4}\s+.+</param>
        </data>
    </define>
    <define name="File">
        <interleave>
            <!-- code-enforced: the size element is enforced by the application. -->
            <optional>
                <element name="size">
                    <ref name="FormattedPositiveInteger"/>
                </element>
            </optional>
            <element name="file_name">
                <ref name="FileName"/>
            </element>
            <element name="checksum">
                <ref name="Checksum"/>
            </element>
            <optional>
                <element name="read_only_info">
                    <ref name="ReadOnlyInfo"/>
                </element>
            </optional>
        </interleave>
    </define>
    <define name="FileName">
        <data type="token">
            <param name="pattern">[^/: ]*</param>
        </data>
    </define>
    <define name="FormattedBoolean">
        <data type="string">
            <param name="pattern">\s*([Tt][Rr][Uu][Ee])|([Ff][Aa][Ll][Ss][Ee]){0,1}\s*</param>
        </data>
    </define>
    <define name="FormattedDate">
        <optional>
            <data type="date">
                <param name="pattern">\s*\d{4}-((0[1-9])|(1[0-2]))-(0[1-9]|[12][0-9]|3[01]){0,1}\s*</param>
            </data>
        </optional>
    </define>
    <define name="FormattedPositiveInteger">
        <data type="string">
            <param name="pattern">[0-9]*</param>
        </data>
    </define>
    <define name="FormattedTime">
        <data type="token">
            <param name="pattern">\s*\d{1,2}:\d{2}:\d{2}((.\d{3})|([:;]\d{2}))?\s*</param>
        </data>
    </define>
    <define name="FormattedYear">
        <data type="string">
            <param name="pattern">([0-9]{4}){0,1}</param>
        </data>
    </define>
    <define name="Grid">
        <text/>
    </define>
    <define name="Isrc">
        <data type="string">
            <param name="pattern">[a-zA-Z0-9]{5}[0-9]{7}</param>
        </data>
    </define>
    <define name="LanguageType">
        <data type="token">
            <param name="minLength">1</param>
            <!-- regex does not cover the full RFC5646 spec.  only covers what import supports -->
            <param name="pattern">[a-zA-Z]{2,3}(-[a-zA-Z]{4})?(-([0-9]{3}|[a-zA-Z]{2}))?</param>
        </data>
    </define>
    <define name="LocalizableText">
        <optional>
            <attribute name="translation">
                <choice>
                    <value>native</value>
                    <value>phonetic</value>
                    <value>english</value>
                    <value>japanese</value>
                </choice>
            </attribute>
        </optional>
        <text/>
    </define>
    <define name="NonEmptyTokenString">
        <data type="token">
            <param name="minLength">1</param>
        </data>
    </define>
    <define name="Notes">
        <text/>
    </define>
    <define name="PreOrder">
        <data type="token">
            <param name="pattern">([Ss][Tt][Aa][Nn][Dd][Aa][Rr][Dd])|([Pp][Rr][Ee][Oo][Rr][Dd][Ee][Rr](\s+|-)[Oo][Nn][Ll][Yy])|([Ii][Nn][Ss][Tt][Aa][Nn][Tt](\s+|-)[Gg][Rr][Aa][Tt][Ii][Ff][Ii][Cc][Aa][Tt][Ii][Oo][Nn])</param>
        </data>
    </define>
    <define name="ProviderType">
        <data type="string">
            <param name="minLength">1</param>
        </data>
    </define>
    <define name="Role">
        <data type="token">
            <param name="minLength">1</param>
        </data>
    </define>
    <define name="String1000">
        <data type="string">
            <param name="minLength">1</param>
            <param name="maxLength">1000</param>
        </data>
    </define>
    <define name="String250">
        <data type="string">
            <param name="minLength">1</param>
            <param name="maxLength">250</param>
        </data>
    </define>
    <define name="String255">
        <data type="string">
            <param name="minLength">1</param>
            <param name="maxLength">255</param>
        </data>
    </define>
    <define name="NonEmptyString255">
        <data type="string">
            <param name="minLength">1</param>
            <param name="maxLength">255</param>
            <param name="pattern">.*\S.*</param>
        </data>
    </define>
    <define name="String39">
        <data type="string">
            <param name="minLength">1</param>
            <param name="maxLength">39</param>
        </data>
    </define>
    <define name="String4000">
        <data type="string">
            <param name="minLength">1</param>
            <param name="maxLength">4000</param>
        </data>
    </define>
    <define name="String50">
        <data type="string">
            <param name="minLength">1</param>
            <param name="maxLength">50</param>
        </data>
    </define>
    <define name="Territory">
        <data type="token">
            <param name="pattern">([A-Z]{2})|([Ww][Oo][Rr][Ll][Dd])</param>
        </data>
    </define>
    <define name="Upc">
        <data type="string">
            <param name="pattern">\d{8,14}</param>
        </data>
    </define>
    <define name="VendorIdType">
        <data type="token"/>
    </define>
    <define name="Xid">
        <optional>
            <attribute name="scheme">
                <choice>
                    <value>upc</value>
                    <value>isrc</value>
                    <value>isan</value>
                    <value>grid</value>
                    <value>uuid</value>
                    <value>vendor_id</value>
                </choice>
            </attribute>
        </optional>
        <data type="string">
            <param name="pattern">()|([^:]+:[^:]+:.+)</param>
        </data>
    </define>
    <define name="WholesalePriceTierType">
        <data type="token">
            <param name="pattern">[a-zA-Z\d]+</param>
        </data>
    </define>
    <define name="VendorOfferCode">
        <text/>
    </define>
    <define name="ReleaseType">
        <choice>
            <value>new-release</value>
            <value>digital-only</value>
            <value>other</value>
        </choice>
    </define>
    <define name="LocalizationList">
        <zeroOrMore>
            <element name="locale">
                <ref name="LocalizationItem"/>
            </element>
        </zeroOrMore>
    </define>
    <define name="LocalizationItem">
        <attribute name="name">
            <ref name="Locale"/>
        </attribute>
        <interleave>
            <optional>
                <element name="title">
                    <text/>
                </element>
            </optional>
            <optional>
                <element name="title_version">
                    <text/>
                </element>
            </optional>
            <optional>
                <element name="phonetic_title">
                    <text/>
                </element>
            </optional>
        </interleave>
    </define>
    <define name="ArtistLocalizationItem">
        <attribute name="name">
            <ref name="Locale"/>
        </attribute>
        <interleave>
            <optional>
                <element name="artist_name">
                    <text/>
                </element>
            </optional>
            <optional>
                <element name="phonetic_name">
                    <text/>
                </element>
            </optional>
        </interleave>
    </define>
    <define name="GalleryList">
        <optional>
            <attribute name="force_sequence">
                <ref name="FormattedBoolean"/>
            </attribute>
        </optional>
        <oneOrMore>
            <element name="gallery">
                <ref name="Gallery"/>
            </element>
        </oneOrMore>
    </define>
    <define name="Gallery">
        <optional>
            <attribute name="remove">
                <ref name="FormattedBoolean"/>
            </attribute>
        </optional>
        <interleave>
            <element name="vendor_id">
                <ref name="VendorIdType"/>
            </element>
            <optional>
                <element name="gallery_type">
                    <choice>
                        <value>generic</value>
                        <value>hero</value>
                        <!-- for extras2.0: -->
                        <value>menu_bg</value>
                        <value>selection</value>
                        <value>video</value>
                    </choice>
                </element>
            </optional>
            <element name="display_name">
                <text/>
            </element>
            <optional>
                <element name="locales">
                    <ref name="GalleryLocales"/>
                </element>
            </optional>
            <optional>
                <element name="gallery_items">
                    <oneOrMore>
                        <element name="gallery_item">
                            <ref name="GalleryItem"/>
                        </element>
                    </oneOrMore>
                </element>
            </optional>
        </interleave>
    </define>
    <define name="GalleryLocales">
        <oneOrMore>
            <element name="locale">
                <attribute name="name">
                    <ref name="LanguageType"/>
                </attribute>
                <element name="display_name">
                    <text/>
                </element>
            </element>
        </oneOrMore>
    </define>
    <define name="GalleryItem">
        <attribute name="type">
            <choice>
                <value>image</value>
                <value>temp</value>
                <!-- for extras 2.0: -->
                <value>audio</value>
                <value>video</value>
            </choice>
        </attribute>
        <interleave>
            <element name="assets">
                <ref name="AssetList"/>
            </element>
            <optional>
                <element name="event_date">
                    <ref name="FormattedDate"/>
                </element>
            </optional>
            <optional>
                <element name="caption">
                    <text/>
                </element>
            </optional>
            <optional>
                <element name="location">
                    <text/>
                </element>
            </optional>
            <optional>
                <element name="attribution">
                    <text/>
                </element>
            </optional>
            <optional>
                <element name="locales">
                    <oneOrMore>
                        <element name="locale">
                            <ref name="GalleryItemLocale"/>
                        </element>
                    </oneOrMore>
                </element>
            </optional>
            <optional>
                <element name="vendor_id">
                    <ref name="VendorIdType"/>
                </element>
            </optional>
            <!-- for extras2.0: -->
            <optional>
                <element name="legacy_video_vendor_id">
                    <ref name="VendorIdType"/>
                </element>
            </optional>
            <optional>
                <element name="display_name">
                    <text/>
                </element>
            </optional>
            <optional>
                <element name="gallery_item_tags">
                    <ref name="GalleryItemTagList"/>
                </element>
            </optional>
        </interleave>
    </define>
    <define name="GalleryItemLocale">
        <attribute name="name">
            <ref name="LanguageType"/>
        </attribute>
        <interleave>
            <optional>
                <element name="caption">
                    <text/>
                </element>
            </optional>
            <optional>
                <element name="location">
                    <text/>
                </element>
            </optional>
            <optional>
                <element name="attribution">
                    <text/>
                </element>
            </optional>
            <!-- extras 2.0: -->
            <optional>
                <element name="display_name">
                    <text/>
                </element>
            </optional>
        </interleave>
    </define>
    <define name="HeroImage">
        <interleave>
            <element name="vendor_id">
                <ref name="VendorIdType"/>
            </element>
            <element name="hero_image_file">
                <ref name="AssetFile"/>
            </element>
        </interleave>
    </define>
    <!-- extras 2.0 -->
    <define name="GalleryItemTagList">
        <oneOrMore>
            <element name="gallery_item_tag">
                <attribute name="name">
                    <text/>
                </attribute>
                <zeroOrMore>
                    <element name="value">
                        <text/>
                    </element>
                </zeroOrMore>
            </element>
        </oneOrMore>
    </define>
    <define name="AppleIdType">
        <optional>
            <attribute name="generate">
                <ref name="FormattedBoolean"/>
            </attribute>
        </optional>
        <optional>
            <attribute name="allow_duplicate_name">
                <ref name="FormattedBoolean"/>
            </attribute>
        </optional>
        <ref name="FormattedPositiveInteger"/>
    </define>
    <define name="ReadOnlyInfo">
        <oneOrMore>
            <element name="read_only_value">
                <ref name="ReadOnlyValue"/>
            </element>
        </oneOrMore>
    </define>
    <define name="ReadOnlyValue">
        <attribute name="key">
            <data type="string"/>
        </attribute>
        <text/>
    </define>
    <define name="TerritoryExclusions">
        <zeroOrMore>
            <element name="territory">
                <ref name="Territory"/>
            </element>
        </zeroOrMore>
    </define>
    <define name="ItunesExtra">
        <interleave>
            <element name="vendor_id">
                <ref name="VendorIdType"/>
            </element>
            <element name="name">
                <text/>
            </element>
            <element name="content_item">
                <attribute name="content_type">
                    <choice>
                        <value>video</value>
                    </choice>
                </attribute>
                <element name="vendor_id">
                    <ref name="VendorIdType"/>
                </element>
            </element>
            <element name="description">
                <text/>
            </element>
            <optional>
                <element name="screenshots">
                    <ref name="ItunesExtraScreenshotList"/>
                </element>
            </optional>
            <optional>
                <element name="rootnodes">
                    <ref name="RootnodeList"/>
                </element>
            </optional>
            <!-- couldn't get this to work with schemabeans:
            <optional>
                <element name="scene_groups">
                    <ref name="Anything"/>
                </element>
            </optional>
            -->
            <optional>
                <element name="galleries">
                    <ref name="GalleryList"/>
                </element>
            </optional>
            <optional>
                <element name="assets">
                    <ref name="AssetList"/>
                </element>
            </optional>
            <optional>
                <element name="locales">
                    <oneOrMore>
                        <element name="locale">
                            <ref name="ItunesExtraLocale"/>
                        </element>
                    </oneOrMore>
                </element>
            </optional>
        </interleave>
    </define>
    <define name="ItunesExtraLocale">
        <attribute name="name">
            <ref name="LanguageType"/>
        </attribute>
        <interleave>
            <optional>
                <element name="name">
                    <text/>
                </element>
            </optional>
            <optional>
                <element name="description">
                    <text/>
                </element>
            </optional>
            <optional>
                <element name="screenshots">
                    <ref name="ItunesExtraScreenshotList"/>
                </element>
            </optional>
        </interleave>
    </define>
    <define name="ExtraScreenshot">
        <optional>
            <attribute name="display_target">
                <ref name="ItunesExtraDisplayTargetEnum"/>
            </attribute>
        </optional>
        <ref name="File"/>
    </define>
    <define name="ItunesExtraDisplayTargetEnum">
        <choice>
            <value>iOS-3.5-in</value>
            <value>iOS-4-in</value>
            <value>iOS-iPad</value>
            <value>Mac</value>
            <value>AppleTV</value>
        </choice>
    </define>
    <define name="RootnodeList">
        <oneOrMore>
            <element name="rootnode">
                <ref name="Rootnode"/>
            </element>
        </oneOrMore>
    </define>
    <define name="Rootnode">
        <interleave>
            <element name="vendor_id">
                <ref name="VendorIdType"/>
            </element>
            <element name="name">
                <text/>
            </element>
            <optional>
                <element name="short_name">
                    <text/>
                </element>
            </optional>
            <element name="territories">
                <zeroOrMore>
                    <element name="territory">
                        <ref name="Territory"/>
                    </element>
                </zeroOrMore>
            </element>
            <optional>
                <element name="background_gallery_link">
                    <ref name="GalleryLink"/>
                </element>
            </optional>
            <optional>
                <element name="locales">
                    <oneOrMore>
                        <element name="locale">
                            <ref name="NavnodeLocale"/>
                        </element>
                    </oneOrMore>
                </element>
            </optional>
            <optional>
                <element name="colors">
                    <ref name="ColorsType"/>
                </element>
            </optional>
            <optional>
                <element name="transition">
                    <text/>
                    <!-- TODO enumerate types -->
                </element>
            </optional>
            <optional>
                <element name="navnodes">
                    <ref name="NavnodeList"/>
                </element>
            </optional>
        </interleave>
    </define>
    <define name="GalleryLink">
        <attribute name="vendor_id">
            <text/>
        </attribute>
    </define>
    <define name="ColorsType">
        <attribute name="background">
            <text/>
        </attribute>
        <attribute name="title">
            <text/>
        </attribute>
        <attribute name="primary_text">
            <text/>
        </attribute>
    </define>
    <define name="NavnodeLocale">
        <attribute name="name">
            <ref name="LanguageType"/>
        </attribute>
        <interleave>
            <optional>
                <element name="name">
                    <text/>
                </element>
            </optional>
            <optional>
                <element name="short_name">
                    <text/>
                </element>
            </optional>
            <optional>
                <element name="description">
                    <text/>
                </element>
            </optional>
            <optional>
                <element name="background_gallery_link">
                    <ref name="GalleryLink"/>
                </element>
            </optional>
        </interleave>
    </define>
    <define name="NavnodeList">
        <oneOrMore>
            <element name="navnode">
                <ref name="Navnode"/>
            </element>
        </oneOrMore>
    </define>
    <define name="Navnode">
        <attribute name="type">
            <choice>
                <value>cast</value>
                <value>gallery</value>
                <value>menu</value>
                <value>play</value>
                <value>related</value>
                <value>scenes</value>
            </choice>
        </attribute>
        <optional>
            <attribute name="template">
                <choice>
                    <value>carousel</value>
                    <value>cast</value>
                    <value>expand_in_parent</value>
                    <value>grid</value>
                    <value>list_on_left</value>
                    <value>list_on_left_with_grid</value>
                    <value>list_on_right</value>
                    <value>one_up</value>
                    <value>rows</value>
                </choice>
            </attribute>
        </optional>
        <interleave>
            <element name="vendor_id">
                <ref name="VendorIdType"/>
            </element>
            <optional>
                <element name="name">
                    <text/>
                </element>
            </optional>
            <optional>
                <element name="short_name">
                    <text/>
                </element>
            </optional>
            <optional>
                <element name="description">
                    <text/>
                </element>
            </optional>
            <optional>
                <element name="background_gallery_link">
                    <ref name="GalleryLink"/>
                </element>
            </optional>
            <optional>
                <element name="gallery_link">
                    <ref name="GalleryLink"/>
                </element>
            </optional>
            <optional>
                <element name="selection_gallery_link">
                    <ref name="GalleryLink"/>
                </element>
            </optional>
            <optional>
                <element name="locales">
                    <oneOrMore>
                        <element name="locale">
                            <ref name="NavnodeLocale"/>
                        </element>
                    </oneOrMore>
                </element>
            </optional>
            <optional>
                <element name="colors">
                    <ref name="ColorsType"/>
                </element>
            </optional>
            <optional>
                <element name="transition">
                    <text/>
                    <!-- TODO enumerate types -->
                </element>
            </optional>
            <optional>
                <element name="show_play_all">
                    <ref name="FormattedBoolean"/>
                </element>
            </optional>
            <optional>
                <element name="navnodes">
                    <ref name="NavnodeList"/>
                </element>
            </optional>
        </interleave>
    </define>
</grammar>
