拡張ポイントのスキーマ・エディターを開くには、 新規の拡張ポイントを作成したときにそれに付随して開く、 または既存の拡張ポイント・スキーマを開く、の 2 つの方法を使用することができます。 新規のスキーマは、規約では、.xsd ファイル拡張子が付いた、拡張ポイント ID と同じ名前を持ちます。 新規のスキーマは、プラグインのディレクトリー・ツリーの schema ディレクトリーに配置されます。
新規の拡張ポイントが PDE で作成される際に初期スキーマ・ファイルも作成され、 スキーマ・エディターが開いて編集が可能になります。 すぐにスキーマを定義することも、閉じた後で定義することもできます。 完全な拡張ポイント・スキーマを作成することにより、PDE では、拡張ポイントのユーザーに自動支援を提供することができます。
PDE のスキーマ・エディターは、プラグインのマニフェスト・エディターと同じ概念に基づいています。 PDE のスキーマ・エディターには、2 つのフォーム・ページと 1 つのソース・ページがあります。 XML スキーマは冗長であり、そのソース形式では読みにくいことがあるため、 編集には、ほとんどの場合、フォーム・ページを使用してください。 ソース・ページは、作成されたソース・コードの読み取りに役立ちます。
先に "Sample Parsers" 拡張ポイントと初期スキーマを作成しました。 プロジェクトの schema フォルダーの parsers.xsd ファイルをダブルクリックすると、 スキーマを開くことができます。 これにより、スキーマ・エディターが開きます。
以下を行います。
すべての拡張ポイントのスキーマは、"extension" エレメントの宣言で開始します。 "parser" という新規の XML エレメントを追加します。
これまでに、スキーマ・エディターは次のようになっています。
次に、離散的な値の選択リストから値を得る追加属性を追加します。 つまり、基本の string 型から enumeration 制限を作成する必要があります。 さらに、その属性にデフォルト値を設定します。
"parser" エレメントを選択したまま、 「新規属性 (New Attribute)」ボタンを押します。 プロパティー・シートでその名前を "mode" に変更します。
"restriction" プロパティーの値セル内をクリックし、制限ダイアログを開きます。
制限のタイプを "none" から "enumeration" に変更します。
"never"、"always"、および" manual" という 3 つの選択項目を追加します。 (これらは、parser 拡張の 3 つの仮想モードです。)
制限ダイアログは次のようになっています。
"use" 属性を "default" に変更し、 "value" 属性を "always" に変更して、このダイアログを閉じます。 これにより、デフォルト値が確定します。 値の入力中に、 状況表示行にエラー・メッセージが表示されることに注意してください。 これは、有効な値は、3 つの enumeration の選択項目に制限されているからです。 "always" は有効な値なので、入力し終わるとエラー・メッセージは消えます。
すべてのエレメントと属性を定義したので、次に文法を定義する必要があります。 ここでの目標は、任意の数の "parser" エレメントを、 "extension" エレメントの子として持つことができるようにすることです。
"extension" エレメントを選択します。初期コンテンツ・モデルには、 空の sequence コンポジターが表示されます。
sequence コンポジターを選択し、 ポップアップ・メニューから「新規作成 (New)」->「参照 (Reference)」->「parser」と選択します。 これにより、sequence コンポジターに parser 参照が追加されます。
デフォルトの参照基数は、[1,1] です。 これは、ただ 1 つの "parser" エレメントのみが存在することを意味します。 しかし、ここで必要としているものは異なります。"parser" 参照を選択し、 プロパティー・シートで minOccurs プロパティーを 0 に変更し、 maxOccurs を "unbounded" に変更します。
文法の定義が終了した後、文法セクションの下の「DTD 近似値 (DTD approximation)」に、 選択されているエレメントの文法が DTD ではどのようになるかが表示されます。 XML スキーマよりも DTD の方を使い慣れている開発者の役に立つように、この情報が提供されています。
有効なエレメント、属性、および文法を定義したので、次に拡張ポイントに関する情報を提供する必要があります。 スキーマ・ドキュメンテーションの断片には、以下の 2 種類があります。
エレメントと属性に関するドキュメンテーション
拡張ポイントの使用方法、API などに関するドキュメンテーション
最初の断片のタイプは、スキーマのマニフェストの「定義 (Definition)」ページで提供されます。 エレメントと属性を選択し、「説明 (Description)」セクションにそれらに関する簡単なテキストを追加することができます。 期待されるフォーマットは、(Javadoc の場合と同様) HTML そのものであり、テキストはそのまま最終の参照文書にコピーされます。
"parser" エレメントの "id" を選択し、
「説明 (Description)」エディターで以下を入力します。
このパーサーを参照するために使用される固有の名前
"name" 属性を選択し、以下のテキストを入力します。
このパーサーを UI で表示するために使用される変換可能な名前
"class" 属性を選択し、以下のテキストを追加します (HTML のタグに注意)。
<samp>com.example.xyz.IParser</samp> インターフェースをインプリメントする Java クラスの完全修飾名
"mode" 属性を選択し、以下を入力します。
このパーサーのインスタンスをどれだけの頻度で実行するかを示すオプションのフラグ
(デフォルトは <samp>always</samp>)。
次に、拡張ポイント自体のテキストによる簡単な説明を提供する必要があります。 それを行うために、「ドキュメンテーション (Documentation)」ページに切り替えます。
テキスト・エディター上のコンボ・ボックスから「概要 (Overview)」を選択し、以下のテキストを追加します。
この拡張ポイントは、追加のパーサーをプラグインとして組み込む場合に使用されます。
このパーサーは実際には機能しません。拡張ポイントのスキーマ例としてのみ使用します。
「適用 (Apply)」を押します。
コンボ・ボックスから「例 (Examples)」を選択し、以下のテキストを追加します。
The following is an example of the extension point usage:
<p>
<pre>
<extension point="com.example.xyz.parsers">
<parser
id="com.example.xyz.parser1"
name="Sample Parser
1"
class="com.example.xyz.SampleParser1">
</parser>
</extension>
</pre>
</p>
「適用 (Apply)」を押します。
注: サンプルを提供する場合は、特別な考慮が必要です。 通常、PDE は提供されているテキストを HTML そのものとして処理し、 複数の改行および空白文字は考慮しません (つまり、これらの文字は無視することができる空白です)。 標準テキストに関する場合には、これが想定されますが、 見栄えをよくするために、タブおよび垂直配置が重要になるサンプルを提供する場合には、これはきわめて煩わしくなります。 PDE は、HTML のタグ <pre> を検出すると、その終了タグ </pre> との間の内容を そのまま (すべての文字を変更せずに) 受け取ることにより、この状態の妥協点を見出します。 したがって、最終の参照文書としての見栄えの良い、上記のようなサンプルを提供することができます。
ドキュメンテーションを入力していると、エディターの「概要 (Outline)」ビューのエレメントの上に 「ペン」のイメージが次々と重ねられていくことに気付くことでしょう。 この小さな標識は、当該のエレメントに何らかのテキストが関連付けられていることを示しており、 ドキュメンテーションが文書内のどこかで欠落しているかどうかを迅速に確認することができます。
ドキュメンテーションが終了した後、"doc" フォルダー内の参照ドキュメンテーション parsers.html を 見ることができます。 このドキュメンテーションは、拡張ポイントのスキーマ・ファイルの変更に応答するように登録されている PDE によって作成されます。 この例で作成された文書は、このようになります。