ファイルフォーマット

ここでは、REST インターフェイスで使用するファイルフォーマットについて 詳細に説明します。

注意 バージョン番号を含むファイル名については、例として 0.1.2 を使うことにします。

一般に、ファイルのサイズはできるだけ小さくすべきです。 そうすれば、ファイルを取得する際に余計な帯域を使わなくてすみます。 ということもあり、すべての xml ファイル (元の package.xml は除く) で使用するタグの名前は 1 文字か 2 文字のものにしています。 pear list-all のようなコマンドを実行すると、 大量のファイルをダウンロードすることになるので、 些細なことですがこれはかなりの帯域の節約になります。

channel.xml

チャネルについての情報

これは、そのチャネルで最も重要なファイルです。 このファイルがなければ何も動作しません。 チャネルを発見するときに、このファイルを取得します。 このファイルでは REST ディレクトリとそのミラーの場所を定義します。

チャネル名 <name> は完全修飾形式のドメイン名で、たとえば channel.xml ファイルを更新する際の URL の一部として使用します。

PEAR では、チャネル名の短縮版となるエイリアスを提供しています。 これは日常の作業で用いられるものです。 <suggestedalias> に、短くて書きやすい単語を指定します。たとえばエイリアスが nice であったとすると、
pear install pear.mynicelittlespaceon.example.org/package
とする代わりに
pear install nice/package
とタイプするだけでよくなります。

<?xml version="1.0" encoding="utf-8"?>
<channel version="1.0"
         xmlns="http://pear.php.net/channel-1.0"
         xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
         xsi:schemaLocation="http://pear.php.net/channel-1.0
                             http://pear.php.net/dtd/channel-1.0.xsd"
>
 <name>pear.example.org</name><!-- URL, used to update channel.xml and such -->
 <suggestedalias>example</suggestedalias>
 <summary>Simple demo channel server</summary>
 <servers>
  <primary>
   <!-- you can ignore xmlrpc, it's deprecated anyway -->
   <xmlrpc>
    <function version="1.0">logintest</function>
    <function version="1.0">package.listLatestReleases</function>
    <function version="1.0">package.listAll</function>
    <function version="1.0">package.info</function>
    <function version="1.0">package.getDownloadURL</function>
    <function version="1.1">package.getDownloadURL</function>
    <function version="1.0">package.getDepDownloadURL</function>
    <function version="1.1">package.getDepDownloadURL</function>
    <function version="1.0">package.search</function>
    <function version="1.0">channel.listAll</function>
   </xmlrpc>
   <rest>
    <baseurl type="REST1.0">http://pear.example.org/rest/</baseurl>
    <baseurl type="REST1.1">http://pear.example.org/rest/</baseurl>
    <baseurl type="REST1.2">http://pear.example.org/rest/</baseurl>
    <baseurl type="REST1.3">http://pear.example.org/rest/</baseurl>
   </rest>
  </primary>

  <mirror host="us.pear.example.org">
   <rest>
    <baseurl type="REST1.0">http://us.pear.example.org/rest/</baseurl>
    <baseurl type="REST1.1">http://us.pear.example.org/rest/</baseurl>
    <baseurl type="REST1.2">http://us.pear.example.org/rest/</baseurl>
    <baseurl type="REST1.3">http://us.pear.example.org/rest/</baseurl>
   </rest>
  </mirror>

  <mirror host="de.pear.example.org" ssl="yes" port="3452">
   <rest>
    <baseurl type="REST1.0">https://de.pear.example.org:3452/rest/</baseurl>
    <baseurl type="REST1.1">https://de.pear.example.org:3452/rest/</baseurl>
    <baseurl type="REST1.2">https://de.pear.example.org:3452/rest/</baseurl>
    <baseurl type="REST1.3">https://de.pear.example.org:3452/rest/</baseurl>
   </rest>
  </mirror>

 </servers>
</channel>

categories.xml

全カテゴリの一覧

サーバ上の全カテゴリの名前とリンクを記述します。 リンクは URL エンコードします。

<?xml version="1.0" encoding="utf-8" ?>
<a xmlns="http://pear.php.net/dtd/rest.allcategories"
   xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
   xmlns:xlink="http://www.w3.org/1999/xlink"
   xsi:schemaLocation="http://pear.php.net/dtd/rest.allcategories
                       http://pear.php.net/dtd/rest.allcategories.xsd"
>
 <ch>pear.example.org</ch>
 <c xlink:href="/rest/c/Tools/info.xml">Tools</c>
 <c xlink:href="/rest/c/Garbage%2Band%2BStuff/info.xml">Garbage and Stuff</c>
</a>

info.xml (カテゴリ)

カテゴリについての情報

ここで、カテゴリの詳細を説明します。このファイルにはカテゴリ名 (<n>)、 チャネルサーバ (<c>)、 エイリアス (<a>) そしてカテゴリについての長い説明 (<d>) を記述します。

<?xml version="1.0" encoding="utf-8" ?>
<c xmlns="http://pear.php.net/dtd/rest.category"
   xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
   xmlns:xlink="http://www.w3.org/1999/xlink"
   xsi:schemaLocation="http://pear.php.net/dtd/rest.category
                       http://pear.php.net/dtd/rest.category.xsd"
>
 <n>Tools</n>
 <c>pear.example.org</c>
 <a>Tools and Utilities</a>
 <d>This category holds all sorts of packages that might help you when
  trying to dominate the world.</d>
</c>

packages.xml (カテゴリ)

カテゴリ内の全パッケージの一覧

このファイルには、そのカテゴリ内の各パッケージの 名前とリンクの一覧が含まれます。

<?xml version="1.0" encoding="utf-8" ?>
<l xmlns="http://pear.php.net/dtd/rest.categorypackages"
   xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
   xmlns:xlink="http://www.w3.org/1999/xlink"
   xsi:schemaLocation="http://pear.php.net/dtd/rest.categorypackages
                       http://pear.php.net/dtd/rest.categorypackages.xsd"
>
 <p xlink:href="/rest/p/earth">Earth</p>
 <p xlink:href="/rest/p/worlddominator">WorldDominator</p>
</l>

packagesinfo.xml

すべてのパッケージについての情報

packagesinfo.xml は、 カテゴリ内のパッケージについての情報を集めたものです。 パッケージの info.xml の内容は allreleases.xml からのリリース情報、そして各バージョンの依存性情報などが含まれます。

すべてのパッケージ情報は、それぞれ <pi> タグで囲みます。

<?xml version="1.0" encoding="utf-8" ?>
<f xmlns="http://pear.php.net/dtd/rest.categorypackageinfo"
   xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
   xmlns:xlink="http://www.w3.org/1999/xlink"
   xsi:schemaLocation="http://pear.php.net/dtd/rest.categorypackageinfo
                       http://pear.php.net/dtd/rest.categorypackageinfo.xsd"
>
<pi>
<?xml version="1.0" encoding="UTF-8" ?>
<p xmlns="http://pear.php.net/dtd/rest.package"
   xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
   xmlns:xlink="http://www.w3.org/1999/xlink"
   xsi:schemaLocation="http://pear.php.net/dtd/rest.package
                       http://pear.php.net/dtd/rest.package.xsd"
>
 <n>WorldDominator</n>
 <c>pear.example.org</c>
 <!-- Full contents of p/${packagename}/info.xml follow -->
</p>
<a>
 <r><v>1.1.2</v><s>stable</s></r>
 <r><v>0.1.2</v><s>beta</s></r>
 <r><v>0.0.1</v><s>devel</s></r>
</a>
<deps>
 <v>0.1.2</v>
 <d><!-- serialized dependency information like deps.0.1.2.txt --></d>
</deps>
<deps>
 <v>0.0.1</v>
 <d><!-- serialized dependency information like deps.0.1.2.txt --></d>
</deps>
</pi>
</f>

allmaintainers.xml

全メンテナの一覧

サーバ上のパッケージの全開発者の名前とリンクを記述します。

FIXME: full names or just nicks? FIXME: lowercased nicks?

<?xml version="1.0" encoding="utf-8" ?>
<m xmlns="http://pear.php.net/dtd/rest.allmaintainers"
   xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
   xmlns:xlink="http://www.w3.org/1999/xlink"
   xsi:schemaLocation="http://pear.php.net/dtd/rest.allmaintainers
                       http://pear.php.net/dtd/rest.allmaintainers.xsd"
>
 <h xlink:href="/rest/m/pinky">pinky</h>
 <h xlink:href="/rest/m/thebrain">the brain</h>
</m>

info.xml (メンテナ)

メンテナの情報

メンテナの情報、たとえばハンドル (ニックネーム、<h>)、 フルネーム (<n>) ホームページの URL (<u>) などを記述します。

<?xml version="1.0" encoding="utf-8" ?>
<m xmlns="http://pear.php.net/dtd/rest.maintainer"
   xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
   xmlns:xlink="http://www.w3.org/1999/xlink"
   xsi:schemaLocation="http://pear.php.net/dtd/rest.maintainer
                       http://pear.php.net/dtd/rest.maintainer.xsd"
>
 <h>thebrain</h>
 <n>The Brain</n>
 <u>http://pinkyandthebrain.example.org</u>
</m>

packages.xml (p)

全パッケージの一覧

このパッケージは、チャネル内のすべてのパッケージの一覧と チャネルサーバ名そのものを記述します。

パッケージ名に空白文字を含めることはできません。 空白文字を含めた場合、インストーラの挙動は未定義となります。

<?xml version="1.0" encoding="utf-8" ?>
<a xmlns="http://pear.php.net/dtd/rest.allpackages"
   xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
   xmlns:xlink="http://www.w3.org/1999/xlink"
   xsi:schemaLocation="http://pear.php.net/dtd/rest.allpackages
                       http://pear.php.net/dtd/rest.allpackages.xsd"
>
 <c>pear.example.org</c>
 <p>Earth</p>
 <p>WorldDominator</p>
</a>

info.xml (パッケージ)

パッケージについての情報

このファイルには、そのパッケージの バージョンに依存しない一般的な情報を記述します。 たとえばライセンス、カテゴリ、サマリ、説明、 リリースディレクトリへのリンクなどです。

<?xml version="1.0" encoding="utf-8" ?>
<p xmlns="http://pear.php.net/dtd/rest.package"
   xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
   xmlns:xlink="http://www.w3.org/1999/xlink"
   xsi:schemaLocation="http://pear.php.net/dtd/rest.package
                       http://pear.php.net/dtd/rest.package.xsd"
>
 <n>WorldDomination</n>
 <c>pear.example.org</c>
 <ca xlink:href="/rest/c/Tools">Tools</ca>
 <l>Dictatoric License</l>
 <s>Tool to dominate the world</s>
 <d>
  Helps you dominating the world by fulfilling various tasks:
  - Feed the cats
  - Lock the doors after 23:42
 </d>
 <r xlink:href="/rest/r/worlddomination"/>
</p>

maintainers.xml

パッケージのすべての開発者の一覧

アクティブか否かにかかわらず、 すべての開発者をこのファイルに記述します。

各開発者のハンドル (<h>) および活動状況 (<a>0 が非アクティブで 1 がアクティブ) を記述します。

<?xml version="1.0" encoding="utf-8" ?>
<m xmlns="http://pear.php.net/dtd/rest.packagemaintainers"
   xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
   xmlns:xlink="http://www.w3.org/1999/xlink"
   xsi:schemaLocation="http://pear.php.net/dtd/rest.packagemaintainers
                       http://pear.php.net/dtd/rest.packagemaintainers.xsd"
>
 <p>WorldDominator</p>
 <c>pear.example.org</c>
 <m>
  <h>pinky</h>
  <a>1</a>
 </m>
 <m>
  <h>thebrain</h>
  <a>1</a>
 </m>
 <m>
  <h>deadcow</h>
  <a>0</a>
 </m>
</m>

maintainers2.xml

パッケージの開発者の一覧

maintainers.xml と同じですが、さらに開発者のロールも含まれています。

ロール名 として使用できるのは leaddevelopercontributor および helper です。

<?xml version="1.0" encoding="utf-8" ?>
<m xmlns="http://pear.php.net/dtd/rest.packagemaintainers"
   xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
   xmlns:xlink="http://www.w3.org/1999/xlink"
   xsi:schemaLocation="http://pear.php.net/dtd/rest.packagemaintainers
                       http://pear.php.net/dtd/rest.packagemaintainers.xsd"
>
 <p>WorldDominator</p>
 <c>pear.example.org</c>
 <m>
  <h>pinky</h>
  <a>1</a>
  <r>developer</r>
 </m>
 <m>
  <h>thebrain</h>
  <a>1</a>
  <r>lead</r>
 </m>
 <m>
  <h>deadcow</h>
  <a>0</a>
  <r>helper</r>
 </m>
</m>

allreleases.xml

全パッケージのバージョンの一覧

このファイルには全パッケージのバージョンと安定性が記述されています。

複数のリリースがある場合、このファイルでは最新のバージョンが先頭にくるようにします。

<?xml version="1.0" encoding="utf-8" ?>
<a xmlns="http://pear.php.net/dtd/rest.allreleases"
   xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
   xmlns:xlink="http://www.w3.org/1999/xlink"
   xsi:schemaLocation="http://pear.php.net/dtd/rest.allreleases
                       http://pear.php.net/dtd/rest.allreleases.xsd"
>
 <p>WorldDominator</p>
 <c>pear.example.org</c>
 <r><v>0.8.1</v><s>beta</s></r>
 <r><v>0.0.2</v><s>alpha</s></r>
</a>

allreleases2.xml

全パッケージのバージョンと PHP のバージョンの一覧

allreleases.xml と同じですが、 さらに、必要となる PHP の最小バージョンについての情報が追加されています。

<?xml version="1.0" encoding="utf-8" ?>
<a xmlns="http://pear.php.net/dtd/rest.allreleases2"
   xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
   xmlns:xlink="http://www.w3.org/1999/xlink"
   xsi:schemaLocation="http://pear.php.net/dtd/rest.allreleases2
                       http://pear.php.net/dtd/rest.allreleases2.xsd"
>
 <p>WorldDominator</p>
 <c>pear.example.org</c>
 <r><v>0.8.1</v><s>beta</s><m>4.4.2</m></r>
 <r><v>0.0.2</v><s>alpha</s><m>5.2.3</m></r>
</a>

latest.txt

最新のパッケージのバージョン

このファイルの唯一の中身は、 最新版のバージョン番号をプレーンテキストで書いたものです。 安定性は関係なしに、もっとも新しいバージョン番号をここに書きます。

stable.txt

最新の安定版のバージョン

このファイルの唯一の中身は、 最新の安定版のバージョン番号をプレーンテキストで書いたものです。

0.1.2

beta.txt

最新のベータ版のバージョン

このファイルの唯一の中身は、 最新のベータ版のバージョン番号をプレーンテキストで書いたものです。

0.1.2

alpha.txt

最新のアルファ版のバージョン

このファイルの唯一の中身は、 最新のアルファ版のバージョン番号をプレーンテキストで書いたものです。

0.1.2

devel.txt

最新の開発版のバージョン

このファイルの唯一の中身は、 最新の開発版のバージョン番号をプレーンテキストで書いたものです。

0.1.2

0.1.2.xml (リリース)

そのリリースに関する短い xml ファイル

このファイルは、完全版の package.xml から必要最小限の情報に絞り込んでサイズを最適化したファイルです。

package.xml と同様タグの順序が重要であり、 入れ替えてはいけません。

<?xml version="1.0" encoding="utf-8" ?>
<r xmlns="http://pear.php.net/dtd/rest.release"
   xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
   xmlns:xlink="http://www.w3.org/1999/xlink"
   xsi:schemaLocation="http://pear.php.net/dtd/rest.release
                       http://pear.php.net/dtd/rest.release.xsd"
>
 <p xlink:href="/rest/p/worlddominator">WorldDominator</p>
 <c>pear.example.org</c>
 <v>0.1.2</v>
 <st>beta</st>
 <l>Dictatoric License</l>
 <m>thebrain</m>
 <s>Tool to dominate the world</s>
 <d>Helps you dominating the world by fulfilling various tasks:
  - Feed the cats
  - Lock the doors after 23:42</d>
 <da>2007-12-24 23:42:00</da>
 <n>* Fix atomic X-mas bug [thebrain]</n>
 <f>19588</f>
 <g>http://pear.example/get/WorldDominator-0.1.2</g>
 <x xlink:href="package.0.1.2.xml"/>
</r>

v2.0.1.2.xml

そのリリースに関する短い xml ファイルのバージョン 2

0.1.2.xml と同じですが、追加の API と最小 PHP バージョンが増えています。

<?xml version="1.0" encoding="utf-8" ?>
<r xmlns="http://pear.php.net/dtd/rest.release2"
   xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
   xmlns:xlink="http://www.w3.org/1999/xlink"
   xsi:schemaLocation="http://pear.php.net/dtd/rest.release2
                       http://pear.php.net/dtd/rest.release2.xsd"
>
 <p xlink:href="/rest/p/worlddominator">WorldDominator</p>
 <c>pear.example.org</c>
 <v>0.1.2</v>
 <a>0.1.2</a>
 <mp>5.2.3</mp>
 <st>beta</st>
 <l>Dictatoric License</l>
 <m>thebrain</m>
 <s>Tool to dominate the world</s>
 <d>Helps you dominating the world by fulfilling various tasks:
  - Feed the cats
  - Lock the doors after 23:42</d>
 <da>2007-12-24 23:42:00</da>
 <n>* Fix atomic X-mas bug [thebrain]</n>
 <f>19588</f>
 <g>http://pear.example/get/WorldDominator-0.1.2</g>
 <x xlink:href="package.0.1.2.xml"/>
</r>

package.0.1.2.xml

完全な package.xml

このリリースの完全な package.xml です。 バージョン 1 あるいはバージョン 2 の package.xml 形式となります。 そのパッケージに両方が含まれている場合はバージョン 2 のほうを使用します。

deps.0.1.2.txt

シリアライズした依存性情報

このファイルには、依存性情報の配列を PHP の serialize() 関数でシリアライズしたものが保存されます。

依存性配列 (シリアライズしていない xml 形式) の例

array(2) {
  ["required"]=>
  array(2) {
    ["php"]=>
    array(1) {
      ["min"]=>
      string(5) "5.2.3"
    }
    ["pearinstaller"]=>
    array(1) {
      ["min"]=>
      string(7) "1.7.1"
    }
  }
  ["optional"]=>
  array(1) {
    ["package"]=>
    array(2) {
      ["name"]=>
      string(4) "Toolbox"
      ["channel"]=>
      string(12) "pear.example.org"
      ["min"] =>
      string(7) "1.3.0"
    }
  }
}
<dependencies>
  <required>
   <php>
    <min>5.2.3</min>
   </php>
   <pearinstaller>
    <min>1.7.1</min>
   </pearinstaller>
  </required>
  <optional>
   <package>
    <name>Toolbox</name>
    <channel>pear.example.org</channel>
    <min>1.3.0</min>
   </package>
  </optional>
 </dependencies>