级别: 初级 Uche Ogbuji (uche.ogbuji@fourthought.com), 首席顾问, Fourthought, Inc.
2002 年 12 月 01 日
自从二十世纪 80 年代中期出现数字音乐以来,已经有许多关于它的争论,甚至连对数字音乐元数据的管理也逃脱不了这种纷争。但有时好的技术解决方案还是会从带有政治色彩的纷争中脱颖而出。在本文中,Uche Ogbuji 将介绍 MusicBrainz,这是一个用于管理数字媒体元数据的项目。MusicBrainz 在其核心数据格式中使用 RDF,这样做的结果是使它比原先的此类项目具有一些重要的技术优势。
数字音乐仍然是信息时代的重要内容之一,它之所以重要是因为它给音乐爱好者带来方便,同时也给高科技公司提供了商机。您可以在数字存储器中存储成百上千的专辑,并且按您喜欢的方式给这些音乐编目。由于这一时代有如此多的音乐是以 CD 形式销售的,所以存在着不计其数的工具用于收集艺术家和曲目信息,
以产生数字格式(mp3 和 Ogg Vorbis 等)维护或
标记这些信息。这些信息是数字音乐常见的元数据。
在 90 年代早期,Internet Compact Disc Database(CDDB)作为将 CD 特征与元数据匹配起来的分布式数据库而诞生了。它在许多非正式用户的努力下发展很快,这些用户无偿提供有关他们 CD 的信息,他们以为 CDDB 的系统和软件是开放和免费的。但在一次颇有争议的举动中,一个现在名为 Gracenote 的商业性团体强行给 CDDB 加上了发放许可证的限制,从而促使了几个真正开放的替代项目的开发。在这些倡议中,freedb.org 和 MusicBrainz 最引人注目。前者仍然将 CDDB 格式用于它的数据库,而 MusicBrainz 则另起炉灶,彻底地重新构造了其数字音乐元数据格式和系统。在这项重构工作中,他们选择了 RDF 在此项目中发挥重要作用。
MusicBrainz 旨在成为数字音频和视频的
元数据库(metadatabase),而不只是 CD 曲目信息。它被称为“开放音乐百科全书”。开放性由一个明确的 OpenContent 许可证来确保,所有 MusicBrainz 信息都被授予了此许可证。MusicBrainz 是分散的,它将多个 Web 位置上的信息汇集在一起。可以很容易地获得这个作为开放源码的服务器软件。目前大约有一百万条曲目的信息。数据基于 RDF 格式,这使得此服务具有一些独一无二的优势。首先,每条曲目(以及所有其它重要概念)都有以 URI 格式表示的唯一标识符。凭借 URI,可以形成
通用播放列表(universal playlist)。可以用压缩形式发布该播放列表,而且该播放列表可以唯一地标识一个特定的歌曲序列。CDDB 没有这样的全局标识符。MusicBrainz 还定义了用于查询这一百科全书的 RDF 词汇表。
命名曲目
MusicBrainz Metadata Initiative 2.0 规范中定义了 MusicBrainz 的 RDF 子系统,该规范定义了用于此百科全书条目和查询的 RDF。MusicBrainz 为它提供的不同(但却相关)RDF 词汇表定义了几种基本的 URI(称为名称空间)。
-
http://musicbrainz.org/mm/mm-2.0#:MusicBrainz 元数据(MusicBrainz Metadata)名称空间,通常与前缀
mm 关联。
-
http://musicbrainz.org/mm/cdmp-1.0#:CD 查寻(Compact Disc Lookup)名称空间,通常与前缀
cdmp 关联。
-
http://musicbrainz.org/mm/mq-1.0#:MusicBrainz 查询(MusicBrainz Query)名称空间,通常与前缀
mq 关联。
-
http://musicbrainz.org/mm/mem-1.0#:MusicBrainz 扩展元数据(MusicBrainz Extended Metadata)名称空间,通常与前缀
mem 关联。
让我们着重讨论
mm 和
cdmp 名称空间,因为这两个已经很完善了。目前正在对
mem 进行扩展和改进,所以它还未投入使用。
mq 有可能成为项目中接下来的工作重心,但目前还没有完全就绪。
MusicBrainz 元数据名称空间涉及核心音乐元数据,它使用了以下类:
-
Artist :包括常用名的特性和用于排序的名称(例如,“The Roots”可以按“Roots, The”来排序),以及艺术家专辑的 RDF 包。
-
Album :包括用于专辑标题的
dc:title 特性,以及与艺术家的关系以及和带曲目清单的 RDF 序列之间的关系。
-
Track :包括曲目标题、创作者以及曲目在专辑中的编号等特性。
MusicBrainz 在任何可行的位置都使用 Dublin Core 元数据元素。正如我在
前一篇文章中讨论的那样,这使 MusicBrainz 元数据在某种程度上甚至能被通用 RDF 代理程序访问。
还赋予曲目一个特性以使其与它们的
TRM 声纹(TRM Acoustic Fingerprint)联系起来。TRM 是 Relatable, LLC 开发的技术,作为用于数字媒体的唯一条形码。每个 TRM ID 都是一个全球唯一标识符(UUID)。例如,The Roots 的“Mellow My Man”的 TRM 是
f13069e3-da60-4782-82dd-a9f375e5c374 。可以选择将该信息用于数字产品版权管理(digital rights management,DRM),尽管 MusicBrainz 在 DRM 问题上是中立的。
清单 1是一个 MusicBrainz 元数据记录的示例。
清单 1. 音乐元数据示例的快照
<rdf:RDF xmlns:rdf = "http://www.w3.org/1999/02/22-rdf-syntax-ns#"
xmlns:dc = "http://purl.org/dc/elements/1.1/"
xmlns:mm = "http://musicbrainz.org/mm/mm-2.0#">
<mm:Artist rdf:about=
"http://musicbrainz.org/artist/8f6bd1e4-fbe1-4f50-aa9b-94c450ec0f11">
<dc:title>Portishead</dc:title>
<mm:sortName>Portishead</mm:sortName>
<mm:albumList>
<rdf:Bag>
<rdf:li rdf:resource=
"http://musicbrainz.org/album/911e3f30-192e-4c3d-aa25-2a89d4202a3e"/>
<rdf:li rdf:resource=
"http://musicbrainz.org/album/3677c7a6-03a6-4709-a7aa-edaea95ce473"/>
</rdf:Bag>
</mm:albumList>
</mm:Artist>
<mm:Album rdf:about=
"http://musicbrainz.org/album/911e3f30-192e-4c3d-aa25-2a89d4202a3e">
<dc:title>Dummy</dc:title>
<dc:creator rdf:resource=
"http://musicbrainz.org/artist/8f6bd1e4-fbe1-4f50-aa9b-94c450ec0f11"/>
<mm:trackList>
<rdf:Seq>
<rdf:li rdf:resource=
"http://musicbrainz.org/track/8facb8ab-0b31-4d06-907f-0a9c9a72383c"/>
<rdf:li rdf:resource=
"http://musicbrainz.org/track/44d90dca-5290-4cb3-af38-518818835f23"/>
<!--
Rest of the tracks snipped for brevity...
-->
</rdf:Seq>
</mm:trackList>
</mm:Album>
<mm:Album rdf:about=
"http://musicbrainz.org/album/3677c7a6-03a6-4709-a7aa-edaea95ce473">
<dc:title>Roseland NYC Live</dc:title>
<dc:creator rdf:resource=
"http://musicbrainz.org/artist/8f6bd1e4-fbe1-4f50-aa9b-94c450ec0f11"/>
<mm:trackList>
<rdf:Seq>
<rdf:li rdf:resource=
"http://musicbrainz.org/track/1cf34447-7731-40a4-a2ba-347866a13c44"/>
<rdf:li rdf:resource=
"http://musicbrainz.org/track/f71a27a7-4845-463c-9c67-ffb96a6b5a8f"/>
<!--
Rest of the tracks snipped for brevity...
-->
</rdf:Seq>
</mm:trackList>
</mm:Album>
</rdf:RDF>
|
因为顺序是不相关的,所以专辑列表是一个包。为了保留曲目的顺序,所以曲目列表是一个序列。这有点多余,因为每条曲目都已经有了带有其曲目编号的特性。
查询 CD 信息
MusicBrainz 还定义了用于 CD 元数据的查询服务:CD 元数据建议书(Compact Disc Metadata Proposal,CDMP)。这个协议非常简单。可以将 RDF 查询文档使用 HTTP POST 放到 MusicBrainz 服务器,然后获得与
清单 1类似的以 MusicBrainz 元数据格式表示的响应,但是带有 CDMP 封装器元素。也可以使用带一些特殊查询参数的 HTTP GET。CDMP 最常见的情形是:用户将 CD 放入到计算机中,CD 播放器应用程序启动。它随即读取 CD 以确定每条曲目的偏移量,在许多情况下可以用这些偏移量来唯一地标识 CD。它将这些偏移量发送到 MusicBrainz 服务器以便获取与偏移量数据匹配的 CD 及其曲目信息。
清单 2是这类查询的示例。
清单 2. CD 及曲目信息的样本查询
<rdf:RDF xmlns:rdf = "http://www.w3.org/1999/02/22-rdf-syntax-ns#"
xmlns:dc = "http://purl.org/dc/elements/1.1/"
xmlns:cdmp = "http://musicbrainz.org/mm/cdmp-1.0#"
xmlns:mm = "http://musicbrainz.org/mm/mm-2.0#">
<cdmp:LookupCD>
<cdmp:offsets>150-17895-34567-51432-68025-87365-106380-123452-140620-157792-175650
</cdmp:offsets>
</cdmp:LookupCD>
</rdf:RDF>
|
实际上,这是由 RDF 对象组成的查询,特性则作为查询参数。这是用 RDF 表示查询的常用方法,尽管当查询变得更复杂时,它会显得比较笨拙。幸运的是,大多数 MusicBrainz 查询都相当简单。
清单 3是对
清单 2中查找的样本响应。
清单 3. CDMP 查询的样本响应
<rdf:RDF xmlns:rdf = "http://www.w3.org/1999/02/22-rdf-syntax-ns#"
xmlns:dc = "http://purl.org/dc/elements/1.1/"
xmlns:cdmp = "http://musicbrainz.org/mm/cdmp-1.0#"
xmlns:mm = "http://musicbrainz.org/mm/mm-2.0#">
<cdmp:ResultCD>
<cdmp:cd>
<cdmp:CDMetadata>
<dc:title>Rubycon</dc:title>
<cdmp:cdmpId>ivDFb2Tw6HzN.XdYZFj5zr1Q9EY-</cdmp:cdmpId>
<mm:Artist>
<rdf:Description>
<dc:title>Tangerine Dream</dc:title>
</rdf:Description>
</mm:Artist>
<mm:trackList>
<rdf:Seq>
<rdf:li>
<mm:Track>
<dc:title>Rubycon (Part I)</dc:title>
<mm:trackNum>1</mm:trackNum>
</mm:Track>
</rdf:li>
<rdf:li>
<mm:Track>
<dc:title>Rubycon (Part II)</dc:title>
<mm:trackNum>2</mm:trackNum>
</mm:Track>
</rdf:li>
</rdf:Seq>
</mm:trackList>
</cdmp:CDMetadata>
</cdmp:cd>
</cdmp:ResultCD>
</rdf:RDF>
|
这个响应完全就是 CDMP 封装器类中的 MusicBrainz Metadata 名称空间格式。超过 CDDB 的一个优势是,可以从这样的查询返回多个 CD 结果,以便处理不同 CD 的曲目偏移量详细信息之间可能的冲突。
也可以通过标题、艺术家或其它数据的精确或部分匹配来生成搜索 CD 的 CDMP 查询。另外 CDMP 用户可以提交新的 CD 信息。通常,如果 CD 播放器进行查找,但未找到匹配的 CD 信息,那么软件的确会允许您手工输入曲目数据。您随后可以将这些数据提交给 MusicBrainz。MusicBrainz 在适当的位置有一个缓冲系统,
它使提交过程中的滥用情况和无心的错误情况降到最低。这很重要,可以由最近的例子证明:CDDB 数据曾被使用污秽语言的恶作剧所破坏。大多数坏数据并没有那么过份,通常是拼写错误、曲目位置颠倒之类的错误。MusicBrainz 允许用户在最初提交之后在缓冲系统的控制下编辑数据项。
CDMP 最初被设计用于与其它一些开放式 CD 查找系统协同工作,但这样的协作没有达到预期效果,所以可能会用 s
mp 名称空间查询取代 CDMP,前者更关注于一般 MusicBrainz 百科全书概念。
结束语
MusicBrainz 在几个层次都很重要。首先,它展示了致力于开放技术的各个社区的能力。它们常常能有效地避免由不择手段的商业利益团体所造成的损害。MusicBrainz 诞生于 CDDB 转向限制性许可证之时,而开发人员们则利用这个机会重新设计了 CD 信息系统,使其更灵活、有更多特性并且支持更广泛的信息类型。广大用户已经无偿提供了大量的数据来支持这项工作,并且这个数据库是一个了不起的公共财产。
RDF 在 MusicBrainz 中的使用意味着它可以方便地集成到其它元数据倡议。RDF 格式还有几个不方便的地方。首先,它沿袭了 RDF 1.0 容器的所有不便,而且这些不便还结合了这样一个事实:除了需要正确同步的其它关系之外,有时还要使用容器关系。例如:
mm:trackList 所指定序列中的次序对于等价的
mm:trackNum 特性是多余的。尽管有这些小的技术缺陷,但数据最终还是非常清楚并且许多工具可以方便地使用它。例如,XML 的基本特征是其优秀的国际化能力,MusicBrainz 正是从 XML 借用了这一能力,这与原来 CDDB 中国际化的暧昧状态形成鲜明对比。即使不熟悉 RDF 的人也可以利用这一点,因为 MusicBrainz 使用开放源码客户机库。如果您要开发任何处理数字媒体的应用程序,请考虑将 MusicBrainz 格式和协议用于元数据。
参考资料
关于作者
对本文的评价
|