有一种朋友不在生活里,却在生命力;有一种陪伴不在身边,却在心间。图老师即在大家的生活中又在身边。这么贴心的服务你感受到了吗?话不多说下面就和大家分享XML 编程思想:用 MusicBrainz 管理元数据吧。
【 tulaoshi.com - Web开发 】
自从二十世纪 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://www.tulaoshi.com/webkaifa/)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 代理程序访问。
(本文来源于图老师网站,更多请访问http://www.tulaoshi.com/webkaifa/)还赋予曲目一个特性以使其与它们的 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:titlePortishead/dc:title mm:sortNamePortishead/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:titleDummy/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:titleRoseland 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:offsets150-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:titleRubycon/dc:title cdmp:cdmpIdivDFb2Tw6HzN.XdYZFj5zr1Q9EY-/cdmp:cdmpId mm:Artist rdf:Description dc:titleTangerine Dream/dc:title /rdf:Description /mm:Artist mm:trackList rdf:Seq rdf:li mm:Track dc:titleRubycon (Part I)/dc:title mm:trackNum1/mm:trackNum /mm:Track /rdf:li rdf:li mm:Track dc:titleRubycon (Part II)/dc:title mm:trackNum2/mm:trackNum /mm:Track /rdf:li /rdf:Seq /mm:trackList /cdmp:CDMetadata /cdmp:cd/cdmp:ResultCD/rdf:RDF
来源:http://www.tulaoshi.com/n/20160219/1613444.html
看过《XML 编程思想:用 MusicBrainz 管理元数据》的人还看了以下文章 更多>>