Eclipse 平台
外掛程式處理
版本 0.90 - 上次修訂日期:2001 年 3 月 15 日
以下處理標記定義會利用各種命名記號和識別碼。
如果要消除語義不明確的情形,以下是些這方面的生產規則 [下文中會參照它們]。
一般而言,所有識別碼都會區分大小寫。
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
vendor-name CDATA #IMPLIED
class CDATA #IMPLIED
>
<plugin> 元素定義處理的本體。
它選用性地包含外掛程式執行時期的定義、外掛程式所引進的任何新延伸點的宣告,以及功能延伸項目的配置(配置到其他外掛程式所定義或這個外掛程式所引進的延伸點中)。
<plugin> 屬性如下:
-
name - 外掛程式的使用者可顯示(可轉換)名稱
-
id - 外掛程式的唯一識別碼。
-
如果要將命名衝突的可能縮到最小,識別碼應該衍生自提供的供應商之 Internet 網域 ID(反轉網域名稱記號及附加用點 [.] 分開的其他名稱記號)。 例如,供應商 ibm.com 可以定義外掛程式識別碼 com.ibm.db2
-
[生產規則:PlugInId]
-
version - 外掛程式版本號碼。請參閱 org.eclipse.core.runtime.PluginVersionIdentifier,以取得詳細資料。外掛程式版本格式是 major.minor.service。主要元件中的變更會解譯為不相容的版本變更。次要元件中的變更會解譯為相容的版本變更。服務元件中的變更會解譯為套用到次要版本的累計服務。
-
vendor-name - 提供外掛程式之供應商的使用者可顯示名稱。
-
class - 這個外掛程式的 plug-in 類別。類別必須是 org.eclipse.core.runtime.Plugin 的子類別。
XML DTD 建構規則 element* 表示元素出現零或多次;element? 表示元素出現零或一次;element+(以下使用)表示元素出現一或多次。
例如,根據上述 <plugin> 定義,這表示外掛程式只含有一個執行時期定義,且沒有有效的延伸點宣告或延伸項目配置(例如,其他外掛程式所依賴的共用程式庫)。
同樣地,只含有延伸項目配置而沒有本身的執行時期或延伸點的外掛程式也無效(例如,將其他外掛程式所遞送的類別配置到其他外掛程式中所宣告的延伸點)。
處理的 <requires> 區段會宣告對於其他外掛程式的任何相依關係。
<!ELEMENT requires (import+)>
<!ELEMENT import EMPTY>
<!ATTLIST import
plugin CDATA #REQUIRED
version CDATA #IMPLIED
match (exact | compatible) "compatible"
export (true | false) "false"
>
每個相依關係都是利用 <import> 元素來指定的。它含有下列屬性:
-
plugin - 必要的外掛程式的識別碼
-
version - 選用的版本規格
-
match - 版本符合規則。如果沒有指定版本屬性的話,會予以忽略。 判斷相依關係是只滿足於指定版本的外掛程式(可能套用了其他服務)或相依關係可滿足於任何相容的版本(包括外掛程式最近的次要版本)。
-
export - 指定這個外掛程式的使用者能不能見到相依的外掛程式類別(是否匯出或重新匯出)。依預設,不會匯出相依類別(不可見)
處理的 <runtime> 區段含有組成外掛程式執行時期之一或多個程式庫的定義。平台執行機制(外掛程式類別載入器)會利用所參照的程式庫來載入及執行外掛程式所需要的正確程式碼。
<!ELEMENT runtime (library+)>
<!ELEMENT library (export*)>
<!ATTLIST library
name CDATA #REQUIRED
>
<!ELEMENT export EMPTY>
<!ATTLIST export
name CDATA #REQUIRED
>
<runtime> 元素沒有屬性。
<library> 元素共同定義外掛程式執行時期。
至少必須指定一個 <library>。
每個 <library> 元素都有下列屬性:
-
name - 指向程式庫檔案或類別所在目錄的字串參照(相對於外掛程式安裝目錄)。目錄參照必須包含尾端的檔案分隔字元。
每個 <library> 元素都可以指定應該匯出程式庫的哪個部份。匯出規則會指定成一組匯出遮罩。依預設(沒有指定匯出規則),程式庫會視為 private。<export> 元素有下列屬性:
-
name - 指定匯出遮罩。有效值如下:
-
* - 表示匯出程式庫的所有內容 (public)
-
package-name.* - 表示匯出指定套件內的所有類別。
符合的規則如同在 Java import 陳述式中一樣。
-
class-name - 完整的 Java 類別名稱
平台架構是以可配置之延伸點的觀念為基礎。
平台本身會預先定義一組涵蓋了延伸平台和桌面之作業(如新增功能表動作,提供內嵌的編輯器)的延伸點。
除了預先定義的延伸點之外,每個提供的外掛程式都可以宣告其他延伸點。
藉由宣告延伸點,外掛程式基本上會將使用外部提供的延伸項目來配置外掛程式功能的能力突顯出來。
例如,頁面建立器外掛程式可以宣告一個將新的「設計時間控制 (DTC)」新增到其建立器選用區的延伸點。
這表示頁面建立器已定義它要作為其 DTC 的架構,且已實作程式碼來尋找已配置到延伸點中的 DTC 延伸項目。
<!ELEMENT extension-point EMPTY>
<!ATTLIST extension-point
name CDATA #REQUIRED
id CDATA #REQUIRED
schema CDATA #IMPLIED
>
<extension-point> 元素有下列屬性:
-
name - 延伸點的使用者可顯示(可轉換)名稱
-
id - 在這個外掛程式內的唯一簡單 ID 記號。這個記號不能含有點 (.) 或空格。
-
schema - 這個延伸點的綱目規格。確實的詳細資料定義為外掛程式開發環境 (PDE) 的一部份。目前執行時期不使用綱目。 參照是相對於外掛程式安裝位置的檔案名稱。
實際的延伸項目會配置到 <extension> 區段中的延伸點(預先定義或在這個外掛程式新宣告者)。
配置資訊指定為包含在 <extension> 和 </extension> 標示之間形式完整的 XML。
平台不指定配置標記的實際形式(但要求它必須是形式完整的 XML)。
標記由偵測延伸點之外掛程式的供應商定義。
平台不會實際解譯配置標記。
它只會將配置資訊傳遞到外掛程式,以作為延伸點處理程序的一部份(在延伸點邏輯查詢所有配置的延伸項目之時)。
<!ELEMENT extension ANY>
<!ATTLIST extension
point CDATA #REQUIRED
id CDATA #IMPLIED
name CDATA #IMPLIED
>
<extension> 元素有下列屬性:
-
point - 指向所配置延伸點的參照。延伸點可以是定義在這個外掛程式或另一個外掛程式中的延伸點
-
[生產規則:ExtensionPointReference]
-
id - 這個延伸點配置實例的選用識別碼。這是必須唯一識別(而不只是列舉)特定配置延伸項目的延伸點所用的。 這個識別碼指定為在宣告外掛程式的定義內的唯一簡式記號。當在廣域範圍內使用時,延伸識別碼由外掛程式識別碼來加以限定
-
name - 延伸項目的使用者可顯示(可轉換)名稱
重要事項:<extension> 元素的內容是利用 ANY 規則來宣告的。這表示任何形式完整 XML 都可以在延伸項目配置區段內指定(在 <extension> 和 </extension> 標示之間)。