XML工房

〔作品2〕Apple iTunes音楽リストのHTML化

~第1章~ iTunes音楽リストのXMLの構造

2006年2月号掲載記事

こんにちは。インフォテリアの野中です。

通勤や通学などの電車の中で、音楽を聴いている方も多いと思います。ポータブルオーディオプレーヤーは、カセットテープからCDやMD、そしてデジタルオーディオプレーヤーへと変わってきています。その中でもApple社製のiPodはブームの火付け役になったと言えるのではないでしょうか。iPodを使っている方は、同社製のiTunesを利用していると思いますが、そのiTunesでもXML(iTunes Music Library.xml)が利用されています。その利用目的は、iTunesの音楽やプレイリストを他のアプリケーションなどでも使えるようにするためにあります。今回のテーマは、『iTunesの音楽リストを元にWeb公開用のデータを作成する』です。

それでは「iTunes Music Library.xml」をメモ帳などのテキストエディタで開いてみましょう。「iTunes Music Library.xml」はデフォルトの設定でC:\Documents and Settings\<ユーザー名>\My Documents\My Music\iTunesにあります。

iTunes Music Library.xml
<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE plist PUBLIC "-//Apple Computer//DTD PLIST 1.0//EN"
   "http://www.apple.com/DTDs/PropertyList-1.0.dtd">
   ・
   ・

「iTunes Music Library.xml」の2行目には、外部サブセットDTDへの参照が記されています。実際に"http://www.apple.com/DTDs/PropertyList-1.0.dtd"を見てみましょう。

http://www.apple.com/DTDs/PropertyList-1.0.dtd

<!ENTITY % plistObject "(array | data | date | dict | real | integer | string | true | false )" >
<!ELEMENT plist %plistObject;>
<!ATTLIST plist version CDATA "1.0" >

<!-- Collections -->
<!ELEMENT array (%plistObject;)*>
<!ELEMENT dict (key, %plistObject;)*>
<!ELEMENT key (#PCDATA)>

<!--- Primitive types -->
<!ELEMENT string (#PCDATA)>
<!ELEMENT data (#PCDATA)> <!-- Contents interpreted as Base-64 encoded -->
<!ELEMENT date (#PCDATA)> <!-- Contents should conform to a subset of ISO 8601 (in particular, YYYY '-' MM '-' DD 'T' HH ':' MM ':' SS 'Z'. Smaller units may be omitted with a loss of precision) -->

<!-- Numerical primitives -->
<!ELEMENT true EMPTY> <!-- Boolean constant true -->
<!ELEMENT false EMPTY> <!-- Boolean constant false -->
<!ELEMENT real (#PCDATA)> <!-- Contents should represent a floating point number matching ("+" | "-")? d+ ("."d*)? ("E" ("+" | "-") d+)? where d is a digit 0-9. -->
<!ELEMENT integer (#PCDATA)> <!-- Contents should represent a (possibly signed) integer number in base 10 -->

このDTDの主な特徴は、

  • plist要素とarray要素は、パラメータ実体で定義されており、array、data、date、dict、real、
    integer、string、true、falseのいずれかの要素を子要素として持つことができる
  • dict要素は、key要素とパラメータ実体で定義された要素を子要素として持つことができる
  • true要素、false要素は空要素として定義されている

などです。

これらを踏まえて、もう一度「iTunes Music Library.xml」を見てみましょう。

   ・
    ・
<plist version="1.0">
<dict>
  <key>Major Version</key><integer>1</integer>
  <key>Minor Version</key><integer>1</integer>
  <key>Application Version</key><string>6.0.1</string>
  <key>Features</key><integer>1</integer>
  <key>Music Folder</key><string>file://localhost/C:/Documents%20and%20Settings/ynonaka/
  My%20Documents/My%20Music/iTunes/iTunes%20Music/</string>
  <key>Library Persistent ID</key><string>E35AE684E32B937B</string>
  <key>Tracks</key>
  <dict>
   <key>37</key>
   <dict>
    <key>Track ID</key><integer>37</integer>
    <key>Name</key><string>Holst: The Planets, Op. 32, H 125 - 1. Mars, The Bringer Of War</string>
    <key>Artist</key><string>Sir Georg Solti; London Philharmonic Orchestra</string>
    ・
    ・
   </dict>
   ・
   ・
  </dict>
  <key>Playlists</key>
  <array>
   <dict>
    <key>Name</key><string>ライブラリ</string>
    <key>Master</key><true/>
    <key>Playlist ID</key><integer>60</integer>
    <key>Playlist Persistent ID</key><string>E35AE684E32B937C</string>
    <key>All Items</key><true/>
    <key>Playlist Items</key>
    <array>
     <dict>
     <key>Track ID</key><integer>37</integer>
      ・
     ・
     </dict>
    </array>
   </dict>
   ・
   ・
  </array>
</dict>
</plist>

「iTunes Music Library.xml」の<key>Major Version</key>から<key>Library Persistent ID</key>までは、インストールされているiTunesの情報が記されています。<key>Tracks</key>からは、iTunesに登録されている音楽データの情報、<key>Playlists</key>からは、iTunesに登録されているプレイリストの情報が記されています。

このデータ構造は、項目の追加や削除に柔軟に対応できる構造に設計されています。しかし、このままのデータを元にHTML文書に変換するには、少しテクニックが必要になると思います。皆さんなら、どのような処理を行ないますか?

出力イメージはこのような感じです。

出力イメージ

続きは次回に・・・

「XML工房」のIndexへ戻る

ページトップへ▲

HOMEへ戻る