Eclipse プラットフォームのプラグイン・マニフェスト

Version 2.1 - Last revised March 17, 2003

以下のマニフェスト・マークアップ定義は、さまざまなネーミング・トークンおよび ID を使用します。 次の規則は、あいまいさをなくすための運用規則です (以下のテキストで参照される部分)。 一般に、ID はすべて大文字小文字が区別されます。

SimpleToken := sequence of characters from ('a-z','A-Z','0-9') 
ComposedToken := SimpleToken | (SimpleToken '.' ComposedToken) 
JavaClassName := ComposedToken 
PlugInId := ComposedToken
PlugInPrereq := PlugInId | 'export' PlugInId 
ExtensionId := SimpleToken 
ExtensionPointId := SimpleToken 
ExtensionPointReference := ExtensionPointID | (PlugInId '.' ExtensionPointId)

このセクションではこれ以降、一連の DTD フラグメントとしての plugin.xml ファイル構造を説明します。 ファイル plugin.dtd は、その全体の DTD 定義を表しています。

<?xml encoding="US-ASCII"?> 
<!ELEMENT plugin (requires?, runtime?, extension-point*, extension*)> 
<!ATTLIST plugin 
  name                CDATA #REQUIRED 
  id                  CDATA #REQUIRED 
  version             CDATA #REQUIRED 
  provider-name       CDATA #IMPLIED
  class               CDATA #IMPLIED 
>

<plugin> エレメントはマニフェストの本体を定義します。 この定義にはオプションで、(他のプラグインで定義された拡張ポイント、 またはこのプラグインによって導入された拡張ポイントに構成された) 拡張機能に加えて、プラグイン・ランタイム、 このプラグインが必要とする他のプラグインの定義、プラグインによって導入される新しい拡張ポイントの宣言が含まれます。 <plugin> 属性は以下のとおりです。

XML DTD 構造規則 element* は、エレメントのゼロ以上のオカレンスを意味します。 element? は、 エレメントのゼロ以上のオカレンスを意味します。element+ (下記で使用) は、エレメントの 1 つ以上のオカレンスを意味します。 上記の <plugin> 定義に基づいて、例えばこれは、ただ 1 つのランタイム定義を持ち、拡張ポイント宣言、 または拡張構成を持たないプラグインが有効であることを意味しています (例えば、他のプラグインに依存する共通ライブラリー)。 同様に、拡張構成のみを持ち、独自のランタイムまたは拡張ポイントを持たないプラグインも有効です (例えば、他のプラグインで宣言された拡張ポイントに、他のプラグインに送信されたクラスを構成します)。

マニフェストの <requires> セクションは、他のプラグインのどの依存性でも宣言します。

<!ELEMENT requires (import+)>
<!ELEMENT import EMPTY>
<!ATTLIST import
 plugin               CDATA #REQUIRED
 version              CDATA #IMPLIED
 match                (perfect | equivalent | compatible | greaterOrEqual) "compatible"
 export               (true | false) "false"
 optional             (true | false) "false"
>

それぞれの依存性は、<import> エレメントを使用して指定されます。 これには以下の属性が含まれています。

マニフェストの <runtime> セクションは、プラグイン・ランタイムを構成する 1 つまたは複数のライブラリーの定義を含んでいます。 参照ライブラリーはプラットフォーム実行メカニズム (プラグイン・クラス・ローダー) が使用し、プラグインが必要とする正しいコードをロードして実行します。

<!ELEMENT runtime (library+)> 
<!ELEMENT library (export*, packages?)>
<!ATTLIST library 
  name               CDATA #REQUIRED 
  type               (code | resource) "code"
>
<!ELEMENT export EMPTY> 
<!ATTLIST export
  name               CDATA #REQUIRED 
>
<!ELEMENT packages EMPTY>
<!ATTLIST packages
  prefixes           CDATA #REQUIRED
>

<runtime> エレメントに属性はありません。

<library> エレメントはプラグイン・ランタイムを集合的に定義します。 少なくとも 1 つ <library> が指定されている必要があります。 それぞれの <library> エレメントには以下の属性があります。

<library> エレメントはそれぞれ、ライブラリーのどの部分がエクスポートされるかを指定できます。 エクスポート規則は一連のエクスポート・マスクとして指定されます。 デフォルト (指定されたエクスポート規則がない) では、ライブラリーは専用ライブラリーとして扱われます。 <export> エレメントには以下の属性があります。

各ライブラリーでパッケージ接頭部を指定できます。 これは、プラグインまたはフラグメント、あるいはその両方のクラス・ロード・パフォーマンスを向上させるために使用されます。 <packages> エレメントが指定されない場合、デフォルトではクラス・ロード機能拡張は行われません。 <packages> エレメントには以下の属性があります。

パッケージ接頭部に関するより詳細な情報については、ここを参照してください。

プラットフォームのアーキテクチャーは構成可能な拡張ポイントの概念に基づいています。 プラットフォーム自体は、プラットフォームおよびデスクトップを拡張するタスクを行う一連の拡張ポイントを事前定義します (例えば、メニュー・アクションの追加、組み込みエディターの追加)。 事前定義された拡張ポイントに加えて、提供されているそれぞれのプラグインは、追加の拡張ポイントを宣言します。 拡張ポイントを宣言することによってプラグインは、 プラグイン機能を外部的に提供された拡張機能を使って構成する能力を公開しています。 例えば、ページ・ビルダー・プラグインは、新規 Design Time Controls (DTC) をそのビルダー・パレットに追加するための拡張ポイントを宣言できます。 これは、ページ・ビルダーが、DTC にする対象に対するアーキテクチャーを定義し、拡張ポイントの中に構成された DTC 拡張機能を検索するコードをインプリメントしていることを意味しています。

<!ELEMENT extension-point EMPTY>  
<!ATTLIST extension-point 
  name               CDATA #REQUIRED 
  id                 CDATA #REQUIRED    
  schema             CDATA #IMPLIED 
>

<extension-point> エレメントには以下の属性があります。

実際の拡張機能は、<extension> 文節の拡張ポイント (事前定義済み、またはこのプラグインで新規に宣言済み) の中に構成されています。 構成情報は、<extension> および </extension> のタグ間で形式に従った XML として指定されます。 プラットフォームは、(XML を形式に従わせるという要件以外は) 構成マークアップの実際のフォームを指定しません。 マークアップは、拡張ポイントを宣言したプラグインのサプライヤーによって定義されます。 プラットフォームは、実際には構成マークアップを解釈しません。 プラットフォームは単に、(拡張ポイント・ロジックがその構成済み拡張機能のすべてを照会するときに) 構成情報を拡張ポイント処理の一部としてプラグインに渡すだけです。

<!ELEMENT extension ANY> 
<!ATTLIST extension 
  point              CDATA #REQUIRED 
  id                 CDATA #IMPLIED 
  name               CDATA #IMPLIED 
>

<extension> エレメントには以下の属性があります。

重要: <extension> エレメントの内容は、 ANY 規則を使用して宣言されます。 これは、形式に従った XML はすべて、拡張構成セクション (<extension> および </extension> タグ間) に指定可能であるということを意味しています。

フラグメントは、プラグインの有効範囲を増やすために使用されます。  例では、他の言語のメッセージまたはラベルのようなデータを取り込んでいます。

<?xml encoding="US-ASCII"?> 
<!ELEMENT fragment (requires?, runtime?, extension-point*, extension*)>
<!ATTLIST fragment
  name                CDATA #REQUIRED
  id                  CDATA #REQUIRED
  version             CDATA #REQUIRED
  provider-name       CDATA #IMPLIED
  plugin-id           CDATA #REQUIRED
  plugin-version      CDATA #REQUIRED
  match               (perfect | equivalent | compatible | greaterOrEqual) "compatible"
>

フラグメントはそれぞれ、特定のプラグインに関連付けなければなりません。 関連するプラグインは、<plugin-id>、<plugin-version>、および <match> (オプション) で識別されます。 この仕様が複数のプラグインと一致する場合、バージョン番号が最も大きいマッチング・プラグインが使用されます。

フラグメントのコンポーネント <requires>、<runtime>、<extension-point>、および <extension> は、マッチング・プラグインに論理的に追加されます。

<fragment> 属性は以下のとおりです。

Copyright IBM Corporation and others 2000, 2003.