XML 编程思想:用 MusicBrainz 管理元数据

2016-02-19 16:53 18 1 收藏

有一种朋友不在生活里,却在生命力;有一种陪伴不在身边,却在心间。图老师即在大家的生活中又在身边。这么贴心的服务你感受到了吗?话不多说下面就和大家分享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(称为名称空间)。

(本文来源于图老师网站,更多请访问https://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 代理程序访问。

  还赋予曲目一个特性以使其与它们的 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 信息

(本文来源于图老师网站,更多请访问https://www.tulaoshi.com/webkaifa/)

  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    

来源:https://www.tulaoshi.com/n/20160219/1613444.html

延伸阅读
标签: Web开发
知名 XML 专家 Elliotte Rusty Harold 的著作 Effective XML为 XML 技术用户提供了最佳实践。该书中关于 XML 设计问题的多数讨论 Uche Ogbuji 也曾经关注过,在本文中,他以该书为线索,进一步探讨了 XML 设计和最佳实践。请在本文的 讨论论坛上与作者和其他读者分享您对本文的看法。 我的同事 Elliotte Rusty Harold 是一位知名的 XML...
标签: Web开发
Topic Map 提供了一种用于组织信息的系统,XML Topic Maps 使这种系统进入了 XML 的世界中。在本文中,Uche Ogbuji 讨论了 XML Topic Maps,并通过评论有关该主题的关键著作,把这种技术介绍给大家。 Semantic Web 技术用于概念的形式化描述与分类。这些技术试图降低由于概念不匹配而给信息系统互联带来的难度。您可以想像得出,在这样...
标签: Web开发
Uche Ogbuji 继续研究 RDF 如何与 XML 相结合以能够进行知识管理。在这一部分中,他深入研究了 RDF 世界中的建模,而且开始考虑开发问题跟踪程序的模式以及它与面向对象和关系建模之间的相似与不同。读者将学习各种技巧、技术和最佳实践,以便从 XML 数据开发有效的知识 管理模型。 目前为止,在对问题跟踪程序应用的研究中,我已经通...
标签: Web开发
专栏作家 Uche Ogbuji 深入思考了 XMLOpen 会议上提出的几种观点,最近在英国剑桥召开的这次会议是关于 XML 处理的一次盛会。值得注意的课题包括 XML 规格、 Semantic Web、XML 管道、Web Proper Names 和数据类型。他还从实用的角度对 XML Hacks 一书作了进一步分析,上一期文章中已经详细地介绍了这部关于技巧和窍门的书籍。 XMLOpen...
标签: Web开发
Uche Ogbuji 通过演示用来自现有 XML 格式的数据构成资源描述框架 (RDF)模型,开始了他的用 XML 进行的知识管理的实际探索。 如三个代码清单中所示,RDF 可用作定制 XML 的搭挡,而不仅仅用作某些数据类型的规范表示。包含代码样本的本专栏演示了如何用 RDF 方便地进行知识管理,甚至是在开发过程中相对比较晚的阶段。 虽然 W3C 将资...

经验教程

536

收藏

79
微博分享 QQ分享 QQ空间 手机页面 收藏网站 回到头部