DIV CSS 佈局教程網

 DIV+CSS佈局教程網 >> 網頁腳本 >> XML學習教程 >> XML詳解 >> XML 編程思想:用 MusicBrainz 管理元數據
XML 編程思想:用 MusicBrainz 管理元數據
編輯:XML詳解     

自從二十世紀 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 格式和協議用於元數據。



 



 

 

XML學習教程| jQuery入門知識| AJAX入門| Dreamweaver教程| Fireworks入門知識| SEO技巧| SEO優化集錦|
Copyright © DIV+CSS佈局教程網 All Rights Reserved