IBM®
跳转到主要内容
    中国 [选择]    使用条款
 
 
Select a scope: Search for:    
    首页    产品    服务与解决方案     支持与下载    个性化服务    
跳转到主要内容

developerWorks 中国  >  XML  >

Thinking XML: 用 MusicBrainz 管理元数据

数字媒体元数据库使用 RDF

developerWorks
文档选项

未显示需要 JavaScript 的文档选项


级别: 初级

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 关联。

让我们着重讨论 mmcdmp 名称空间,因为这两个已经很完善了。目前正在对 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 格式和协议用于元数据。



参考资料



关于作者

Uche Ogbuji 的照片

Uche Ogbuji 是 Fourthought Inc.的顾问兼共同创始人,该公司是专为企业知识管理提供 XML 解决方案的软件供应商和咨询公司。Fourthought 开发了 4Suite,它是一个用于 XML、RDF 和知识管理应用程序的开放源码平台。Ogbuji 先生是一位出生于尼日利亚的计算机工程师和作家,他现在美国科罗拉多州博耳德(Boulder)生活和工作。可以通过 uche.ogbuji@fourthought.com与 Ogbuji 先生联系。




对本文的评价










回页首


IBM 公司保留在 developerWorks 网站上发表的内容的著作权。未经IBM公司或原始作者的书面明确许可,请勿转载。如果您希望转载,请通过 提交转载请求表单 联系我们的编辑团队。
    关于 IBM 隐私条约 联系 IBM 使用条款