Manifest dei plugin della piattaforma Eclipse

Versione 3.0 - Ultima revisione: 24 giugno 2004

Le definizioni dei tag manifest di seguito riportate utilizzano diversi token e identificativi dei nomi. Per evitare equivoci, sono state fornite alcune regole relative alla loro impostazione. Di solito, tutti gli identificativi tengono conto della differenza tra maiuscole e minuscole.

SimpleToken := sequenza di caratteri ('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)

Il resto di questa sezione descrive la struttura del file plugin.xml come una serie di frammenti DTD. Il file plugin.dtd presenta l'intera definizione 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 
>

L'elemento <plugin> definisce il corpo del manifest. Esso può contenere definizioni di esecuzione, definizioni di altri plugin necessarie per questo, dichiarazioni di qualsiasi nuovo punto di estensione introdotto da un plugin oppure la configurazione di estensioni funzionali (configurate nei punti di estensione definiti da un altro plugin o introdotti da questo plugin). Gli attributi <plugin> sono:

La regola di costruzione DTD element* indica zero o più occorrenze dell'elemento; element? indica nessuna o una occorrenza dell'elemento; element+ (riportato di seguito) indica una o più occorrenze dell'elemento. Facendo riferimento alla precedente definizione <plugin>, si nota che un plugin, contenente una sola definizione di esecuzione e nessuna dichiarazione di un punto di estensione o configurazione di estensione, è valido (ad esempio, librerie comuni da cui dipendono altri plugin). Analogamente, è valido anche un plugin che contenga solo configurazioni di estensione e nessuna definizione di esecuzione o punto di estensione, come avviene, ad esempio, quando classi inviate in altri plugin vengono configurate in punti di estensione dichiarati in altri plugin.

La sezione del manifest <requires> riporta tutti gli elementi dipendenti da altri plugin.

<!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"
>

Ogni dipendenza viene specificata utilizzando un elemento <import>, che contiene i seguenti attributi:

La sezione <runtime> del manifest contiene una definizione di una o più librerie che compongono il run-time del plugin. Queste librerie vengono utilizzate dai meccanismi di esecuzione della piattaforma (il caricatore di classe del plugin) per caricare ed eseguire il codice corretto richiesto dal plugin.

<!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
>

L'elemento <runtime> non ha attributi.

Gli elementi <library> definiscono insieme l'esecuzione del plugin. Almeno un elemento <library> deve essere specificato. Ogni elemento <library> possiede i seguenti attributi:

Ogni elemento <library> può specificare la parte della libreria da esportare. Le regole di esportazione vengono specificate come un gruppo di maschere di esportazione. Per impostazione predefinita, dal momento che non è specificata nessuna regola di esportazione, la libreria viene considerata riservata. Ogni maschera di esportazione viene specificata utilizzando l'attributo name, che può presentare i seguenti valori:

Solo plugin Eclipse 2.1: ogni libreria può specificare anche i prefissi di pacchetto. Questi sono utilizzati per migliorare le prestazioni di caricamento delle classi per il plugin e/o frammento. Se non è specificato l'elemento <packages>, per impostazione predefinita non viene utilizzato il potenziamento del caricamento classi. L'elemento <packages> presenta il seguente attributo:

L'architettura della piattaforma si basa sui punti di estensione configurabili. La piattaforma definisce un gruppo di punti di estensione che svolgono le attività di estensione della piattaforma e del desktop, come ad esempio l'aggiunta di voci di menu o l'inserimento di editor incorporati. In aggiunta ai punti di estensione predefiniti, ogni plugin supportato può dichiarare ulteriori punti di estensione. A questo scopo, il plugin deve poter configurare la funzione plugin con le estensioni fornite dall'esterno. Ad esempio, il plugin Page Builder può dichiarare un punto di estensione per l'aggiunta di nuovi DTC (Design Time Control) nella propria tavolozza del generatore. In questo modo il plugin definisce un'architettura per ciò che intende come DTC e implementa il codice che ricerca le estensioni DTC, configurato nei punti di estensione.

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

L'elemento <extension-point> presenta i seguenti attributi:

Le estensioni attuali sono configurate nei punti di estensione (predefinite o dichiarate dal plugin) nella sezione <extension>. Le informazioni di configurazione vengono specificate come XML correttamente formattati e contenuti tra i tag <extension> e </extension>. La piattaforma non specifica la forma attuale del tag di configurazione, salvo prevedere la corretta formattazione XML. I tag vengono definiti dalle informazioni ulteriori del plugin che ha dichiarato il punto di estensione. La piattaforma, nel momento in cui la logica del punto di estensione richiede tutte le proprie estensioni configurate, non analizza i tag di configurazione, ma si limita a inviare le informazioni di configurazione al plugin, come parte dell'elaborazione del punto di estensione.

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

Gli attributi dell'elemento <extension> sono:

Importante: il contenuto dell'elemento <extension> viene dichiarato utilizzando la regola ANY. Così, ogni XML formattato correttamente può essere specificato nella sezione di configurazione dell'estensione (tra i tag <extension> e </extension>).

I frammenti vengono utilizzati per ampliare l'ambito di un plugin. Un esempio potrebbe essere incorporare dati come messaggi o etichette in un'altra lingua.

<?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"
>

Ogni frammento deve essere associato a un plugin specifico. I plugin associati vengono identificati attraverso <plugin-id>, <plugin-version> e, facoltativamente, <match>. Si noti che se questa specifica corrisponde a più di un plugin, verrà utilizzato quello con il numero di versione più alto.

I componenti <requires>, <runtime>, <extension-point> e <extension> di un frammento verranno aggiunti in modo logico al plugin corrispondente.

Gli attributi di <fragment> sono i seguenti: