Версия 3.0 - Последнее исправление: 24 июня 2004 г.
В приведенных ниже определениях манифеста применяются различные маркеры и идентификаторы. Для того чтобы избежать неоднозначности, далее рассмотрены правила их обработки [упоминаются в тексте, приведенном ниже]. В общем случае все идентификаторы обрабатываются с учетом регистра символов.
SimpleToken := последовательность символов ('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 в виде отдельных фрагментов определения типа документа. Файл plugin.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>:
Правило создания определения типа документа в формате XMLelement* указывает на произвольное число вхождений элемента; элемент? указывает на одно вхождение элемента или его отсутствие; элемент+ (применяется ниже) указывает на одно или несколько вхождений элемента. Таким образом, учитывая определение элемента <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. Таким образом, между тегами <extension> и </extension> можно указать произвольный текст в формате XML.
Фрагменты позволяют увеличить область действия модуля. В качестве примера можно привести добавление данных, таких как сообщения и метки, на другом языке.
<?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>: