版本 3.0 - 最后修订时间为 2004 年 6 月 24 日
下面的清单标记定义使用了各种命名标记和标识。要消除岐义,使用以下一些生产规则[在下面的文本中将引用这些规则]。通常情况下,所有标识都是区分大小写的。
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)
本节余下的部分将 plugin.xml 文件结构描述为一系列 DTD 段。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+(在下面使用)表示元素的一次或多次出现。例如,根据上述的 <plugin> 定义,这表示只包含一个运行时定义且没有扩展点声明或扩展配置的插件是有效的(例如,其它插件所依赖的公共库)。类似地,仅包含扩展配置且无它自己的运行时或扩展点的插件也是有效的(例如,将在其它插件中交付的类配置到在其它插件中声明的扩展点中)。
清单的 <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> 部分包含组成插件运行时的一个或多个库的定义。所引用的库由平台执行机制(插件类装入器)用来装入并执行插件所必需的正确代码。
<!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> 元素共同定义插件运行时。必须指定至少一个 <library>。每一个 <library> 元素都具有下列属性:
每一个 <library> 元素都可指定应导出库的哪个部分。将导出规则指定为一组导出掩码。缺省情况下(未指定任何导出规则),库被认为是专有的。每个导出掩码都是使用 name 属性指定的,它可以具有下列值:
仅 Eclipse 2.1 插件:每个库都可以指定包前缀。它们用来提高插件和/或段的类装入性能。如果未指定 <packages> 元素,则缺省情况下不使用类装入增强功能。<packages> 元素具有以下属性:
平台的体系结构是基于可配置扩展点的概念的。平台本身预定义一组涉及扩展平台和桌面的任务(例如:添加菜单操作以及添加嵌入的编辑器)的扩展点。除预定义的扩展点之外,每一个所提供的插件还可声明附加的扩展点。通过声明扩展点,插件实质上表明了具有用外部提供的扩展来配置插件功能的能力。例如,“页面构建器”插件可声明一个扩展点以将新的“设计时控件”(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> 属性如下所示: