EMBER规格概述
娱乐资源增强型元数据桥 (EMBER) 是亚马逊用于描述娱乐内容元数据的XML模式。该架构提供了一种结构化、可扩展的格式,用于表示流媒体和广播电视中的不同内容类型及其关联元数据。
EMBER目前支持以下内容类型:
- 视频点播节目 - 电影、电视连续剧和纪录片
- 线性广播内容 - 电视频道、广告变现型免费流媒体电视 (FAST) 频道和24小时节目表
- 直播活动节目 - 体育赛事、音乐会和特别表演
该架构用现代流媒体服务的增强功能取代了亚马逊的传统目录数据格式 (CDF),具有改进的本地化支持、全面的关系建模和灵活的策略管理。
| 属性 | 值 |
|---|---|
| XSD文件 | EMBER_1.0.0.xsd |
| 架构版本 | 1.0.0 |
XSD架构结构
每个EMBER文档都包含一个DataCollections根元素,该根元素用作所有目录类型的顶级容器。
<?xml version="1.0" encoding="UTF-8"?>
<DataCollections schemaVersion="1.0.0">
<!-- 一个或多个目录元素 -->
</DataCollections>
可选的schemaVersion属性标识EMBER架构版本。默认值为1.0.0。此属性支持感知版本的处理,这样可支持未来的架构发展。
目录类型
EMBER将元数据组织成六种专门的目录类型,每种类型都涉及内容交付链的特定方面。下表描述了每种目录类型及其关键元素。有关每种目录类型的示例,请参阅EMBER示例。
| 目录 | 包含的元素 | 关键元素 | 描述 |
|---|---|---|---|
ProgramCatalog |
Movie、TVEpisode、TVSeason、TVSeries、SportsEvent、Event、OffAir、Other、ToBeAnnounced、Extra |
Titles、Descriptions、Synopses、Images、Genres、Keywords、Ratings、Studios、Credits、RunLengths、ReleaseDates、Relationships |
定义内容元数据。 例如,存在哪些节目及其描述性属性。 |
ScheduleCatalog |
Schedule |
Airing、AudioLanguages、SubtitleLanguages、GeoRestrictions |
定义广播时间。 例如,当节目在特定电台播出时。 |
OfferCatalog |
ProgramOffers、ProgramAiringOffers、StationOffers、ProgramDiscovery |
Entitlements、AudioLanguages、SubtitleLanguages、VideoResolutions、GeoRestrictions、LaunchTargets、Ranks、Badges |
定义访问和探索。 例如,客户如何与内容互动。 |
StationCatalog |
Station、ExternalStation |
Titles、Images、CallSign、OriginalBroadcastType、AffiliatedNetworks、VideoResolutions、AudioLanguages |
定义广播频道和网络。 例如,线性内容的分发渠道。 |
LineupCatalog |
Lineup |
Channels、StationTransport、GeoRestrictions |
定义频道组织。 例如,如何为提供者打包电台。 |
PolicyCatalog |
RegionPolicy、EntitlementPolicy |
Region、PostalCode、EntitlementId、ShortDisplayNames、LongDisplayNames |
定义可重用规则。 例如,地理限制和权利级别。 |
核心概念
本部分涵盖适用于所有EMBER目录类型的基础概念。
元素顺序依赖项
EMBER架构在每种节目类型和实体中使用xs:sequence。这些级别的子元素必须按照XSD架构中定义的确切顺序出现。不正确的元素顺序会导致XML验证失败,即使所有必需的元素都存在也会如此。例如,Movie和嵌套容器(例如Credits)中的元素必须遵循XSD定义的顺序。
但是,根DataCollections元素和目录容器(ProgramCatalog、ScheduleCatalog、OfferCatalog、StationCatalog、LineupCatalog、PolicyCatalog)使用xs:choice,因此它们的子元素可以按任何顺序出现。例如,在ProgramCatalog中,Movie、TVEpisode和TVSeries等节目类型可以按任意顺序出现。
有效的电影示例 - 正确的顺序
以下示例显示了Movie元素的正确元素顺序。
<Movie id="MOVIE_123" version="1">
<!-- 必须按照XSD准确地以下面顺序出现:-->
<ExternalIds>...</ExternalIds>
<Titles>...</Titles>
<Descriptions>...</Descriptions>
<Synopses>...</Synopses>
<Images>...</Images>
<Genres>...</Genres>
<Keywords>...</Keywords>
<Ratings>...</Ratings>
<Studios>...</Studios>
<Credits>...</Credits>
<Tags>...</Tags>
<RunLengths>...</RunLengths>
<PictureColor>...</PictureColor>
<ReleaseDates>...</ReleaseDates>
<Relationships>...</Relationships>
</Movie>
电影示例无效 - 顺序不正确
以下示例显示了当元素不按顺序出现时会发生什么。Genres元素放置在Images之前,这会导致验证错误。
<Movie id="MOVIE_123" version="1">
<Titles>...</Titles>
<Genres>...</Genres> <!-- 位置错误 -->
<Images>...</Images> <!-- 应该在Genres之前出现 -->
<!-- XSD验证错误: 元素“Genres”不符合预期,
预期应该为“Descriptions”、“Synopses”或“Images”-->
</Movie>
可以省略可选元素,但纳入的任何元素都必须以其正确的顺序位置出现。
跨目录引用
EMBER目录通过结构化引用系统相互引用,该系统可保持引用完整性并实现灵活的组织。引用系统跨各个目录链接实体,无重复数据。有两种类型的引用:实体引用和目录引用。
“实体引用”是通过其ID链接到特定实体的属性。下表描述了这些属性。
| 属性名 | 描述 | 用于 |
|---|---|---|
programRef |
按ID引用节目。指向Movie、TVSeries、TVSeason、TVEpisode、SportsEvent、Event、Extra或Other。 |
ProgramOffers、ProgramAiringOffers、ProgramDiscovery、Airing、Relationships |
stationRef |
按ID引用电视台。指向Station或ExternalStation。 |
StationOffers、Schedule、Channel |
policyRef |
按ID引用策略。指向RegionPolicy或EntitlementPolicy。 |
GeoRestriction、Entitlement |
“目录引用”是指定哪个目录包含所引用实体的属性。如果省略,则每个属性都使用默认值:
programCatalogRef- 指定哪个ProgramCatalog包含该节目。默认值:DEFAULT_PROGRAM_CATALOG。stationCatalogRef- 指定哪个StationCatalog包含电视台。默认值:DEFAULT_STATION_CATALOG。policyCatalogRef- 指定哪个PolicyCatalog包含策略。默认值:DEFAULT_POLICY_CATALOG。scheduleCatalogRef- 指定哪个ScheduleCatalog包含计划。默认值:DEFAULT_SCHEDULE_CATALOG。
以下示例显示了ProgramOffer目录如何引用节目目录中的电影。
<!-- 使用默认目录的简单引用 -->
<ProgramOffers id="OFFER_MOVIE_123" version="1" programRef="MOVIE_123">
<!-- 在DEFAULT_PROGRAM_CATALOG中解析为ID为“MOVIE_123”的电影 -->
</ProgramOffers>
<!-- 明确的目录引用 -->
<ProgramOffers id="OFFER_MOVIE_123" version="1" programRef="MOVIE_123" programCatalogRef="VOD_CATALOG">
<!-- 在目录“VOD_CATALOG”中解析为ID为“MOVIE_123”的电影 -->
</ProgramOffers>
父元素可以设置子元素继承并可以覆盖的默认目录引用。
<Schedule programCatalogRef="LOCAL_PROGRAMS">
<Airing programRef="PROG_1"/> <!-- 使用LOCAL_PROGRAMS -->
<Airing programRef="PROG_2"
programCatalogRef="NETWORK_PROGRAMS"/> <!-- 覆盖 -->
</Schedule>
EMBER使用以下规则保持引用完整性:
- 所有引用都必须解析为现有实体。
- 引用的ID必须存在于指定或默认目录中,并且引用的实体必须是相应的类型,例如,
programRef必须指向节目,而不是电视台。 - 不允许循环依赖项。
标识符
EMBER中的每个实体都有一个唯一的id属性,用作其主要标识符。id属性必须满足以下要求:
- 持久 - 创建实体后不要更改ID。
- 唯一 - ID在您的合作伙伴命名空间和实体类型中必须是唯一的。
- 区分大小写 -
MOVIE_123和movie_123是不同的ID。 - 格式 - 字母数字字符加上
_、-、.和:是有效格式。 - 最小长度 - 一个字符。
下表显示了推荐的命名规范。
| 实体类型 | 模式 | 示例 |
|---|---|---|
| 电影 | MOVIE_TITLE_YEAR | MOVIE_AVENGERS_2024 |
| 电视连续剧 | SERIES_TITLE | SERIES_FRIENDS |
| 电视季 | SERIES_S## | SERIES_FRIENDS_S01 |
| 电视剧集 | SERIES_S##E## | SERIES_FRIENDS_S01E01 |
| 体育赛事 | LEAGUE_SEASON_DETAILS | NFL_2025_W01_SEA_SF |
| 电视台 | CALLSIGN_NETWORK_CITY | KIRO_CBS_SEATTLE |
此示例说明如何将此命名约定应用于Movie元素。
<Movie id="MOVIE_AVENGERS_2024" version="1">
外部ID
外部标识符将EMBER实体链接到外部元数据系统,从而实现内容匹配和跨系统跟踪。
<ExternalIds>
<ExternalId scheme="scheme_name">identifier_value</ExternalId>
</ExternalIds>
下表列出了支持的外部ID方案。
| 方案 | 系统 | 用于 | 示例 |
|---|---|---|---|
imdb |
互联网电影数据库 | 电影、电视、人物 | tt0076759、nm0000123 |
tms |
Tribune媒体服务 | 电影、电视、电视台 | MV123456789012、TMS87654321 |
gvd |
Gracenote视频数据 | 电影、电视、电视台 | GVD_HBO_EAST、GVD_12345 |
isan |
视听数码国际标准 | 电影、电视 | 0000-0000-0000-0000-0-0000-0000-0 |
eidr |
娱乐标识符注册系统 | 电影、电视 | 10.5240/XXXX-XXXX-XXXX-XXXX-XXXX-X |
asin |
亚马逊标准识别码 | 亚马逊内容 | B09ABCD123 |
ean |
欧洲商品编号 | 物理媒体 | 5051890000000 |
upc |
通用产品代码 | 物理媒体 | 012345678905 |
sportsradar |
Sports Radar | 体育赛事、球队、球员 | sr:match:12345678 |
最佳实践是纳入所有可用的外部ID,以提高内容匹配和重复数据删除的准确性。
版本控制
version属性提供最佳化的并发控制,确保更新未按顺序到来时的一致性。版本值是一个整数,可以是连续的,也可以是基于时间戳的,其中数字越大表示优先级越高。系统会忽略较低的版本,即使它们到来时间更晚。如果省略,则默认值为1。
<!-- 初始创建 -->
<Movie id="MOVIE_123" version="1">...</Movie>
<!-- 使用更高版本更新 -->
<Movie id="MOVIE_123" version="2">...</Movie>
<!-- 稍后更新 -->
<Movie id="MOVIE_123" version="5">...</Movie>
<!-- 忽略未按顺序的更新(版本太低)-->
<Movie id="MOVIE_123" version="3">...</Movie> <!-- 忽略,当前为5 -->
常见的版本策略包括:
- 顺序 - 每次更新递增一: 1、2、3,依此类推。
- 时间戳 - 使用Unix纪元秒: 1713622889、1713622890,以此类推。
- 混合 - 合并日期和序列: 20250420001、20250420002,以此类推。
本地化
EMBER通过三个协调属性提供多语言、多区域支持:
language- BCP-47语言代码,例如en、es、es-MX、pt-BR或fr-CA。territories– ISO 3166-1 alpha-2国家/地区代码,以逗号分隔或为GLOBAL。例如,US、US,CA,MX或GLOBAL。default- 标记回退值的布尔标记(true或false)。
EMBER使用回退解析逻辑来显示最合适的本地化内容。当客户请求内容时,系统按以下顺序进行搜索:
- 精确匹配 - 语言和地域都匹配。
- 语言匹配 - 语言匹配,地域被忽略。
- 默认回退 - 使用带有
default="true"的条目。
<Titles>
<Title language="en" default="true">The Avengers</Title>
<Title language="en" territories="GB">Marvel Avengers Assemble</Title>
<Title language="es">Los Vengadores</Title>
</Titles>
在该示例中:
- 英国客户 (en-GB) 通过精确匹配看到“Marvel Avengers Assemble”。
- 美国客户 (en-US) 通过语言与默认值的匹配而看到“The Avengers”。
- 西班牙客户 (es-MX) 通过语言匹配看到“Los Vengadores”。
- 德国客户 (de-DE) 通过默认回退看到“The Avengers”。
本地化规则:
- 每个属性的一个条目的必须具有
default="true"。 - 默认语言应为初始语言或主要语言。
- 除非需要区分方言,否则使用简单的语言代码,例如
en和es。 - 使用
territories="GLOBAL"或省略全球内容的属性。
以下是常用国家/地区代码的列表:
US(美国)CA(加拿大)MX(墨西哥)GB(英国)DE(德国)FR(法国)ES(西班牙)IT(意大利)JP(日本)AU(澳大利亚)BR(巴西)IN(印度)
如需更多国家/地区代码,请访问ISO 3166-1 alpha-2。
Relationships
EMBER通过节目中的结构化Relationship元素对内容层次结构和关联进行建模。
电视内容遵循由Relationship元素连接的三级层次结构。
TVSeries
└─ isSeasonOfSeries (seasonNum) → TVSeason
└─ isEpisodeOfSeason (episodeNum) → TVEpisode
在这个层次结构中:
TVSeries使用seasonNum属性通过isSeasonOfSeries链接到TVSeason。TVSeason使用episodeNum属性通过isEpisodeOfSeason链接到TVEpisode。
下表描述了可用的关系类型。
| 关系 | 从 | 到 | 必需的属性 | 目的 |
|---|---|---|---|---|
isSeasonOfSeries |
TVSeason |
TVSeries |
seasonNum |
将季链接到父级连续剧 |
isEpisodeOfSeason |
TVEpisode |
TVSeason |
episodeNum |
将剧集链接到父级季 |
isEpisodeOfSeries |
TVEpisode |
TVSeries |
episodeNum |
将剧集链接到父级连续剧。迷你剧使用isEpisodeOfSeries而没有isEpisodeOfSeason。 |
isExtraOf |
Extra |
任何节目 | orderNum(可选) |
将奖励内容链接到主要内容 |
isRelatedTo |
任何节目 | 任何节目 | 无 | 一般内容关系 |
必需关系:
TVSeason- 必须包含isSeasonOfSeries。TVEpisode- 对于常规电视连续剧剧集,纳入isEpisodeOfSeason和isEpisodeOfSeries。对于迷你剧剧集,纳入isEpisodeOfSeries。Extra– 应纳入isExtraOf(推荐但并非必需)。
按以下顺序创建实体:
TVSeriesTVSeasonTVEpisode
电视剧集关系示例
此示例显示了使用isEpisodeOfSeason和isEpisodeOfSeries链接到其父级季和父级连续剧的TVEpisode。
<TVEpisode id="FRIENDS_S01E01" version="1">
<Titles>
<Title language="en" default="true">The One Where Monica Gets a Roommate</Title>
</Titles>
<Relationships>
<isEpisodeOfSeason programRef="FRIENDS_S01"
episodeNum="1" premiere="true"/>
<isEpisodeOfSeries programRef="FRIENDS" episodeNum="1"/>
</Relationships>
</TVEpisode>
额外关系示例
额外内容使用isExtraOf链接到主要内容。
<Extra id="AVENGERS_TRAILER" version="1" category="trailer">
<Titles>
<Title language="en" default="true">The Avengers - 官方预告片</Title>
</Titles>
<Relationships>
<isExtraOf programRef="MOVIE_AVENGERS_2024" orderNum="1"/>
</Relationships>
</Extra>
一般关系示例
使用isRelatedTo在内容之间创建非分层连接。
<Movie id="HOBBIT_1" version="1">
<Titles>
<Title language="en" default="true">The Hobbit: An Unexpected Journey</Title>
</Titles>
<Relationships>
<isRelatedTo programRef="LOTR_1"/>
<isRelatedTo programRef="LOTR_2"/>
<isRelatedTo programRef="LOTR_3"/>
</Relationships>
</Movie>
来源属性
来源属性为编辑内容提供来源跟踪,记录元数据的来源。该属性组包括:
sourceName- 元数据提供者的名称,例如“IMDb”、“Gracenote”或 “Rotten Tomatoes”。sourceDate- 检索元数据的日期,采用YYYY-MM-DD格式。sourceId- 数据记录的提供者标识符。
这三个属性都是可选的,可以根据可用信息灵活地进行归因。您可以将来源属性附加到任何编辑元素,包括标题、描述、图像、类型、评分和演职员名单。
<Title language="en"
default="true"
sourceName="IMDb"
sourceDate="2024-03-15"
sourceId="tt0076759">Star Wars</Title>
<CustomerRating score="8.6"
maxScore="10"
numVotes="1500000"
sourceName="IMDb"
sourceDate="2024-03-15"/>
删除和目录操作
Delete元素使用ID和版本匹配将实体从目录中移除。如果指定版本大于或等于当前实体版本,则删除会成功。如果指定版本低于当前实体版本,则系统会忽略删除。这可以防止不按照顺序的消息传送。
<ProgramCatalog id="MY_CATALOG" version="1">
<!-- 移除过期的电影 -->
<Delete id="OLD_MOVIE" version="100"/>
<!-- 移除多个实体 -->
<Delete id="EXPIRED_SERIES" version="50"/>
<Delete id="EXPIRED_SEASON" version="25"/>
</ProgramCatalog>
删除分层内容时,在删除父项之前先删除子项,如以下示例所示。
<!-- 正确的顺序 -->
<Delete id="SERIES_S01E01" version="10"/> <!-- 剧集第一 -->
<Delete id="SERIES_S01" version="5"/> <!-- 季第二 -->
<Delete id="SERIES_1" version="3"/> <!-- 连续剧最后 -->
目录action属性控制目录级别的更新行为。下表描述了可用的值。
| 操作 | 行为 | 用例 |
|---|---|---|
upsert(默认) |
添加新实体、更新现有实体并保留其他实体。 | 增量更新。这是最常见的操作。 |
replace |
移除所有现有实体并添加新实体。 | 完成目录重建。谨慎使用。 |
以下示例使用action="upsert"在不影响目录的其余部分的情况下添加新电影、更新现有电影和删除过期的电影。
<!-- 增量更新 -->
<ProgramCatalog id="MY_CATALOG" version="1" action="upsert">
<Movie id="NEW_MOVIE" version="1"><!-- ... --></Movie> <!-- 已添加 -->
<Movie id="EXISTING" version="2"><!-- ... --></Movie> <!-- 已更新 -->
<Delete id="OLD_MOVIE" version="5"/> <!-- 已删除 -->
<!-- 所有其他现有电影不变 -->
</ProgramCatalog>
此示例使用action="replace"来重建整个目录,这将删除提交中未包含的所有电影。
<!-- 完全更换 -->
<ProgramCatalog id="MY_CATALOG" version="1" action="replace">
<Movie id="MOVIE_1"><!-- ... --></Movie>
<Movie id="MOVIE_2"><!-- ... --></Movie>
<!-- 引入后只有这些电影存在 -->
</ProgramCatalog>
使用action="upsert"进行定期更新。保留action="replace"以进行完整的目录重建和完全刷新。
数据类型引用
EMBER架构使用内置的XML数据类型和特定于Ember的自定义数据类型。下表描述了每种类型。
内置XML数据类型
| 数据类型 | 格式或范围 | 描述 |
|---|---|---|
boolean |
true、false |
布尔值。用于标记,例如default、adultProduct、notRated、closed、homeTeam、premiere和finale。 |
decimal |
任何十进制数 | 带有小数分量的数字,例如5.2、8.99或100.0。用于价格和评分分数。示例:score="4.8" maxScore="5"。 |
int |
-2147483648到2147483647 |
标准整数。用于版权中的计数和年份值。 |
long |
-9223372036854775808到9223372036854775807 |
大整数。用于版本号和时间戳。示例:version="1"、version="1713622889"。 |
nonNegativeInteger |
0、1、2、3… |
零或正整数。用于seasonNum、episodeNum和orderNum。示例:seasonNum="1"、episodeNum="5"。 |
positiveInteger |
1、2、3… |
最小值为1的正整数。在零无效时使用。 |
string |
任何文本 | 一般文本内容。用于名称、描述和URL。支持国际字符的Unicode。 |
unsignedInt |
0至4294967295 |
范围较大的非负整数。用于客户评分中的numVotes。 |
特定于EMBER的数据类型
| 数据类型 | 格式或值 | 描述 |
|---|---|---|
| AspectRatioType | 16:9、4:3、3:4、2:3、1:1、other |
图像宽高比:
|
| CatalogActionType | upsert、replace |
目录更新行为:
|
| DateTimeType | YYYY-MM-DDTHH:MM:SS±HH:MM |
带时区的ISO-8601日期时间。需要时区采用Z或±offset的形式。示例: 2025-04-20T15:30:00Z(协调世界时),2025-04-20T08:30:00-07:00 (PST)。 |
| DateType | YYYY-MM-DD |
ISO-8601日期格式。用于计划日期和发布日期。 示例: 2025-04-20、2025-12-31. |
| DurationType | P[n]Y[n]M[n]DT[n]H[n]M[n]S |
ISO-8601持续时间。
T。示例: PT30M(30分钟)、PT2H(2小时)、PT1H30M(1小时30分钟)。 |
| EditTypeList | ORIGINAL、DIRECTORSCUT、EXTENDED、UNRATED、CENSORED、REGIONALIZED、COLORIZED、SHORTENED |
以逗号分隔的列表,表示节目的编辑版本。有效的编辑类型:
edit="DIRECTORSCUT,UNRATED" |
| EntitlementTypeEnumType | free、subscription |
权利类型:
policyRef。 |
| ExtraCategoryType | trailer、teaser、clip、featurette、behindthescenes、deletedscenes、bloopers、commentary、interview、highlights、preevent、postevent |
表示额外内容类别的枚举。额外内容必须与原始内容相关,例如目录中可用的电影或电视连续剧。有效值:
|
| ID | 字母数字加上字符:_ - . : |
合作伙伴标识符。最小长度为一个字符。区分大小写。 示例: id="MOVIE_AVENGERS_2024"。 |
| ImageCategory | background、cover、poster、episodic、title、logo |
图像类型:
|
| ImageColorType | color、white、light、black、gray、dark |
不同用户界面背景的标志颜色变体。 |
| LanguageType | BCP-47代码 | 语言标签。 示例: en(英语)、es(西班牙语)、es-MX(墨西哥西班牙语)、pt-BR(巴西葡萄牙语)、fr-CA(加拿大法语)、zh-Hans(简体中文)。 |
| LaunchTargetTypeEnum | WEB、FIRETV |
启动URL的启动目标类型:
|
| LocalizedStringType | 带有属性的string | 添加了language、territories和default属性的字符串。 |
| MimeType | image/jpeg、image/png |
图像格式。JPEG用于照片和背景,PNG用于带透明效果的标志。 |
| OriginalBroadcastType | Full Power Broadcast、Low Power Broadcast、Cable Only、Satellite、Over the Top、Network、TV、VOD、Radio、Digital Broadcast Network、Split |
电视台提供的广播类型。例如,Split是白天全功率广播,晚上切换为低功率广播。 |
| PictureColorEnumType | color、bandw、colorized、composite、unknown |
图片颜色特征:
|
| PolicyFilterType | allow_all、allow_only、block_only |
邮政编码的地理筛选器:
|
| ReleaseType | theater、video、streaming |
发行版本的分发机制:
|
| ResolutionType | 8K、4K、FullHD、HD、SD |
视频分辨率级别,按质量降序排列。 |
| SourceDateType | YYYY-MM-DD |
表示sourceName属性中提供者传输数据的日期。仅限于DateType格式。 |
| SourceIdType | string | 与该数据段相关的标识符,该数据段由sourceName属性中的源提供。 |
| SourceNameType | string | 此元素中包含的元数据提供者的名称。 |
| TerritoriesType | ISO 3166-1 alpha-2 | 国家/地区代码,以逗号分隔。 示例: US、US,CA,MX、GLOBAL。
常用代码: US、CA、MX、GB、DE、FR、ES、IT、JP、AU、BR、IN。 |
相关主题
Last updated: 2026年5月28日

