ソース XML ファイル

<MIME>/packages というフォルダの中に格納されている、これらの XML ファイルは update-mime-database によってデータベースにインストールされる MIME 型に関するすべての情報を提供します。この XML ファイルにはいくつか規則があります:

  • 名前空間を http://www.freedesktop.org/standards/shared-mime-info に指定すること
  • ルート要素は mime-info にすること
  • mime-info 要素の子要素として0個以上の mime-type 要素を指定すること。type 属性を、定義される MIME 型を指定するために使用する

デフォルトで、freedesktop.org.xml というファイルが <MIME> が示すいずれかのパス (通常は /usr/share/mime/packages) にある packages というフォルダにインストールされています。

表 5-1 は、ルート要素である mime-type の子要素になることが可能な要素の概要を一覧にまとめたものです。

表 5-1<mime-type> の子要素
要素 (含む属性) 説明
<glob pattern="*.xyz"> この要素はファイル名に対する glob のパターンを表し、もしファイル名がこのパターンにマッチしたら、親の mime-type の MIME 型が割り当てられる (pattern という属性は必須である)
<magic priority="50"> この要素には子要素としていくつかの match 要素が含まれることになるが、priority という属性はオプションであり、マッチングの優先度を 0〜100 の間で指定する (子要素の match には必須の属性が三つあり (typeoffsetvalue)、四つ目の mask はオプションである; これらの属性について詳細は 「XDG Shared MIME Info の仕様」 を参照のこと)
<alias type="media/subtype"> この要素を使って、親の mime-type 要素に対する別名を定義する (別名とは、たまに MIME 型が別の型として扱われることを意味する; 例えば、application/x-pdf という型の別名は application/pdf である)
<sub-class-of type="media/subtype"> この要素では MIME 型のサブクラスとして type を属性とする親の mime-type 要素を定義する (例えば、image/svgtext/xmltext/plain、そして application/octet-stream のサブクラスである)
<comment xml:lang="ロケール名"> この要素は MIME 型に対する可読な説明を提供する (一行ごとに xml:lang という属性に対して重複しない値を指定している限り、0個以上の可読な説明を定義することが可能である)
<root-XML namespaceURI="名前空間" localName=""> ファイルが1個のソース XML ファイルとわかった場合、この要素を使って namespaceURIlocalName という属性 (共に必須) からさらに詳細な MIME 型に分類する (属性の namespaceURI は XML ドキュメントの名前空間であり、localName はそのドキュメントのルート要素である; もし localName を指定したもののその値が空の場合、ルート要素には名前を付けることは可能であるが、名前空間とマッチしていなければならない)

これらのルールを理解する一番簡単な方法は、やはり「サンプルを見る」ということでしょう。「XDG Shared MIME Info の仕様」にある例を拝借し、例 5-2diff.xml という名前のソース XML ファイルの内容を示します。この例には text/x-diff という MIME 型が定義されています。この例には comment という子要素が複数あり、この MIME 型の名前がいろいろな言語で記載されています。この MIME 型には glob パターンによるマッチングファイルの中身の「においをかぐ」Sniffing (magic とも言います) による解析の両方がルールとして定義されています。ファイルの拡張子が .diff または .patch のファイルはすべてこの MIME 型が割り当てられます。さらに、データが match 要素の中で指定した value 属性の文字列で始まるすべてのファイルもこの text/x-diff 型が割り当てられます。

glob のパターンと magic ルールを並べる順番はこのドキュメントのスコープを越えて適用されます。スコープについて詳細は「XDG Shared MIME Info の仕様」を参照ください。

例 5-2ソース XML ファイルの例: diff.xml
<?xml version='1.0'?>
<mime-info xmlns='http://www.freedesktop.org/standards/shared-mime-info'>
  <mime-type type="text/x-diff">
    <comment>Differences between files</comment>
    <comment xml:lang="ja">ファイル間の差分</comment>
    <!-- 以下、他の言語で翻訳したコメント文が続く... -->
    <magic priority="50">
      <match type="string" offset="0" value="diff\t"/>
      <match type="string" offset="0" value="***\t"/>
      <match type="string" offset="0" value="Common subdirectories: "/>
    </magic>
    <glob pattern="*.diff"/>
    <glob pattern="*.patch"/>
  </mime-type>
</mime-info>