Versione 2.1 - Ultima revisione 17 marzo 2003
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 sono sensibili al maiuscolo/minuscolo.
SimpleToken := sequenza dei 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 plug-in necessarie per questo, dichiarazioni di qualsiasi nuovo punto di estensione introdotto da un plug-in oppure la configurazione di estensioni funzionali (configurate nei punti di estensione definiti da un altro plug-in o introdotti da questo plug-in). Gli attributi <plugin> sono:
La regola di costruzione DTD XMLelement* 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 plug-in, 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 plug-in). Analogamente, è valido anche un plug-in che contenga solo configurazioni di estensione e nessuna definizione di esecuzione o punto di estensione, come avviene, ad esempio, quando classi inviate in altri plug-in vengono configurate in punti di estensione dichiarati in altri plug-in.
La sezione del manifest <requires> riporta tutti gli elementi dipendenti da altri plug-in.
<!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 plug-in. Queste librerie vengono utilizzate dai meccanismi di esecuzione della piattaforma (il caricatore di classe del plug-in) per caricare ed eseguire il codice corretto richiesto dal plug-in.
<!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 plug-in. 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. Gli attributi degli elementi <export> sono:
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 plug-in supportato può dichiarare ulteriori punti di estensione. A questo scopo, il plug-in deve poter configurare la funzione plug-in con le estensioni fornite dall'esterno. Ad esempio, il plug-in 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 plug-in definisce un'architettura per un DTC e implementa il codice che ricerca le estensioni DTC configurate 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 plug-in) 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 plug-in 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 plug-in, 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 plug-in. 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 plug-in specifico. I plug-in associati vengono identificati attraverso <plugin-id>, <plugin-version> e, facoltativamente, <match>. Si noti che se questa specifica corrisponde a più di un plug-in, 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 plug-in corrispondente.Gli attributi di <fragment> sono i seguenti: